Advertisement

Quick Links

XR Series, C API
Programmer Reference Guide

Advertisement

Table of Contents
loading

Summary of Contents for Symbol XR Series

  • Page 1 XR Series, C API Programmer Reference Guide...
  • Page 3 XR Series RFID Readers C API Programmer Reference Guide 72E-73028-02 Revision A July 2006...
  • Page 4 The software is provided strictly on an “as is” basis. All software, including firmware, furnished to the user is on a licensed basis. Symbol grants to the user a non-transferable and non-exclusive license to use each software or firmware program delivered hereunder (licensed program). Except as noted below, such license may not be assigned, sublicensed, or otherwise transferred by the user without prior written consent of Symbol.
  • Page 5: Revision History

    Revision History Changes to the original manual are listed below: Change Date Description -01 Rev A June 2005 Initial Release -02 Rev A July 2006 Added Gen 2 update...
  • Page 7: Table Of Contents

    Contents Revision History ................iii About This Guide Introduction .
  • Page 8 XR400 Reader C API Programmer Reference Guide Chapter 4. Device Capabilities Discovery Introduction................4-3 RFID_GetCapList.
  • Page 9 Contents vii RFID_READCAP_READMODE ............. A-21 RFID_WRITECAP_RF_ATTENUATION .
  • Page 10 viii XR400 Reader C API Programmer Reference Guide...
  • Page 11: About This Guide

    About This Guide Introduction ................xi Chapter Descriptions .
  • Page 12 XR400 Reader C API Programmer Reference Guide...
  • Page 13: Introduction

    Introduction This guide provides information on using C API to develop applications to read and write tags on an XR Series RFID reader. The C API provides an interface with the XR Series readers using the parameters defined in the XR Series Interface Control Guide, p/n 72E-71803-xx.
  • Page 14: Related Documents And Software

    For the latest version of this guide and all guides, go to: http://www.symbol.com/manuals. Service Information For service information, warranty information or technical assistance contact or call the Symbol Support Center. Contact information is provided on the Symbol contact web site go to: http://www.symbol.com/contactsupport...
  • Page 15: Chapter 1. Getting Started

    Getting Started Introduction ................1-3...
  • Page 16 XR400 Reader C API Programmer Reference Guide...
  • Page 17: Introduction

    Getting Started 1-3 Introduction The C API enables programmers to write applications which run either directly on an XR Series RFID reader or on a Windows XP SP2 PC host. This API provides access to the reader features, by utilizing the byte stream protocol as defined in the XR Series Interface Control Guide, p/n 72E-71803-xx.
  • Page 18 XR400 Reader C API Programmer Reference Guide...
  • Page 19: Chapter 2. Structures And Definitions

    Structures and Definitions Introduction ................2-3 Definitions .
  • Page 20 XR400 Reader C API Programmer Reference Guide...
  • Page 21: Definitions

    Structures and Definitions 2-3 Introduction This section describes the code structures and definitions. Definitions Capability Data Type // Definitions for capability data types #define TWTY_INT8 0x0000 /* Means Item is a TW_INT8 */ #define TWTY_INT16 0x0001 /* Means Item is a TW_INT16 */ #define TWTY_INT32 0x0002 /* Means Item is a TW_INT32 */ #define TWTY_UINT8...
  • Page 22 XR400 Reader C API Programmer Reference Guide Tag Type Definition enum RFID_TAG_TYPE_INDEX { RFID_TAG_TYPE_OTHER = 0, RFID_TAG_TYPE_EPC_CLASS0 = 1, RFID_TAG_TYPE_EPC_CLASS0PLUS = 2, RFID_TAG_TYPE_EPC_CLASS1 = 3, RFID_TAG_TYPE_EPC_CLASSG2 = 4, RFID_TAG_TYPE_EPC_CLASS0ZUMA = 5, RFID_TAG_TYPE_MAXINDEX = 5, // Max used RFID_TAG_TYPE_ERROR = 0xFFFFFFFF, // Unassigned type Maximum Tag Type ID Length #define RFID_MAX_TAG_ID_LENGTH_EX64 // max tag id length...
  • Page 23 Structures and Definitions 2-5 CAPINFO Structure // Capability information structure typedef struct tagCAPINFO { STRUCT_INFO StructInfo; // Information about this structure DWORD dwCapId; // The capability ID BOOLEAN bSupported; // non zero: supported DWORD dwDataTypeId; // data type for this capability DWORD dwDataSize;...
  • Page 24 XR400 Reader C API Programmer Reference Guide TYPE_TAG_EX structure typedef struct nInit; // This will be initialized by macro nTypeTagStructureFormat; nTypeTagStructureSize; } TYPE_TAG_STRUCTURE_HEADER; typedef struct TYPE_TAG_STRUCTURE_HEADER Header; unsigned char status; //Status of entry - discovered, ... unsigned char antennaNum; //Last antenna this tag has been read DWORD dataLength;...
  • Page 25 Structures and Definitions 2-7 TYPE_MASK Structure typedef struct unsigned char cBitLen; unsigned char cBitStartOffset; unsigned char cTagMask[RFID_MAX_TAG_ID_LENGTH]; DWORD dwReserved[20]; // Reserve 20 DWORDS for future }TAG_MASK; TYPE_MASK_EX structure typedef struct nInit; // This will be initialized by macro nTagMaskStructureFormat; nTagMaskStructureSize; } TAG_MASK_STRUCTURE_HEADER;...
  • Page 26 XR400 Reader C API Programmer Reference Guide RFID_CAPS structure typedef struct TCHAR szAPIVersionString[RFID_API_VERSION_STRING_LENGTH]; TCHAR szFirmwareVersion[RFID_FIRMWARE_VERSION_STRING_LENGTH]; TCHAR szMfgDateCode[RFID_FIRMWARE_MFGDATECODE_LENGTH]; TCHAR szSerialInfo[RFID_FIRMWARE_SERIALINFO_LENGTH]; unsigned char ReaderNumber; unsigned char Antenna; unsigned char AntennaSequence[RFID_ANTENNA_SEQUENCE_LENGTH]; BOOL bPowerState; BOOL bPortOpen; DWORD dwReaderType; DWORD dwCurrentPort; DWORD dwCurrentBaud; DWORD dwRFIDDeviceTable[10]; DWORD dwRFIDDeviceCount;...
  • Page 27 Structures and Definitions 2-9 TAG_LIST structure typedef struct DWORD dwTotalTags; // 1 DWORD dwTotalReads; // 2 DWORD dwNewTags; // 3 DWORD dwReadTimeMS; // 4 DWORD dwSeqNum; // 5 DWORD dwMaxTags; // Max tags supported. 0 means 200 DWORD dwErrorTags; // total of error tag packets appended to end of valid tags. DWORD dwReserved[25-7];...
  • Page 28 2-10 XR400 Reader C API Programmer Reference Guide RFID_STATS structure typedef struct DWORD dwVersion; // 1 DWORD dwTotalTX; // 2 DWORD dwTotalRX; // 3 DWORD dwPacketsTX; // 4 DWORD dwPacketsRX; // 5 DWORD dwIncompleteTX; // 6 DWORD dwPacketsFragmented; // 7 DWORD dwPacketsCRCError;...
  • Page 29 Structures and Definitions 2-11 Macro Used to Initialize TYPE_TAG_EX Structure A TYPE_TAG_EX variable must be initialized by this macro before it is used. The macro syntax is: TYPE_TAG_EX1_INIT(TypeTag) Parameter TypeTag is a TYPE_TAG_EX variable. Macro used to initialize TYPE_MASK_EX structure A TYPE_MASK_EX variable must be initialized by this macro before it is used.
  • Page 30 2-12 XR400 Reader C API Programmer Reference Guide...
  • Page 31: Chapter 3. Initialization

    Initialization Introduction ................3-3 RFID_Open .
  • Page 32 XR400 Reader C API Programmer Reference Guide...
  • Page 33 Initialization 3-3 Introduction Clients must initialize the RFID C API and obtain a reader handle before interacting with the devices. All subsequent interactions with the RFID device are based on this handle. For the PC host version of this C-API the client can manage multiple readers by opening a different handle for each reader.
  • Page 34 XR400 Reader C API Programmer Reference Guide The following code segment demonstrates this procedure: /// Opens and establishs connection to a reader /// @param[in] tszNewIPAddressThe IP address of the teader /// @param[in] wPortThe TCP port of the reader HANDLE OpenReader(TCHAR tszNewIPAddress[32], WORD wPort) HANDLE hReader = 0;...
  • Page 35 Initialization 3-5 RFID_Open Description Call this function first to initialize the RFID API and obtain the reader handle. It returns RFID_SUCCESS on successful opening. This function opens the RFID communications port. To open an RFID device over a TCP socket, first configure the capabilities RFID_DEVCAP_IP_PORT and RFID_DEVCAP_IP_NAME. See RFID_DEVCAP_IP_PORT on page A-6 and RFID_DEVCAP_IP_NAME on page A-5.
  • Page 36 XR400 Reader C API Programmer Reference Guide Example 2 ConfigureTCPIP (HANDLE hReader, TCHAR *pszIPAddress, DWORD dwPort) BOOL FindAndOpenReader(void) DWORD dwItems; DWORD dwStatus; dwItems = 1; dwIStatus = RFID_SetCapCurrValue (hReader, RFID_DEVCAP_IP_PORT, &dwITems, sizeof (dwPort), &dwPort); if(dwStatus == RFID_SUCCESS) bSuccess = TRUE; else printf (“RFID_DEVCAP_IP_NAME Set Cap Error %S\n”, RFID_GetCommandStatusText (hReader, dwStatus));...
  • Page 37 Initialization 3-7 BOOL FindAndOpenReader(void) BOOL bSuccess = FALSE; // Open, and Initialize API if(RFID_Open(&hReader)== RFID_SUCCESS) // Now try to find the first RFID reader. // It will look for a device on the local com ports... if(ConfigureTCPIP (hReader,TEXTC ”192.168.0.101”), 3000)) {// A reader was found, now try and open using the port number returned.
  • Page 38: Rfid_Close

    XR400 Reader C API Programmer Reference Guide RFID_Close Description The RFID_Close function releases handle. It returns RFID_SUCCESS on successful closing. This function closes the communication port. Function Prototype DWORD RFID_Close(HANDLE *phReader); DWORD WINAPI RFID_CloseReader(HANDLE hReader); Parameters *phReader Pointer to the handle that receives the RFID device handle on RFID_SUCCESS. hReader Handle for the open RFID device.
  • Page 39 Initialization 3-9...
  • Page 40 3-10 XR400 Reader C API Programmer Reference Guide...
  • Page 41 Device Capabilities Discovery Introduction ................4-3 RFID_GetCapList .
  • Page 42 XR400 Reader C API Programmer Reference Guide...
  • Page 43: Chapter 4. Device Capabilities Discovery

    Device Capabilities Discovery 4-3 Introduction This chapter describes how to discover and change the API capabilities. These capabilities allow configuring the API and retrieving the current API settings. The API supports a limited set of capabilities, including attenuation settings, supported tag types, and reading modes. To get the set a current or default values, query the API for a list of supported capabilities.
  • Page 44 XR400 Reader C API Programmer Reference Guide RFID_GetCapList Description This function returns a list of capability IDs. Each ID represents a unique capability provided by the API. Function Prototype DWORD RFID_GetCapList(HANDLE hReader, DWORD *pdwCapId, DWORD *pNumCaps); Parameters pdwCapId Pointer to an array of DWORDs for placing the CapIDs. pNumCaps Pointer to DWORD that contains the number of CapIDs in the list.
  • Page 45 Device Capabilities Discovery 4-5 RFID_GetCapInfo Description This function returns information regarding the capability with ID dwCapId. Information includes unique name, data type, and contained type. Function Prototype DWORD RFID_GetCapInfo(HANDLEhReader, DWORD dwCapId, LPCAPINFO lpCapInfo); Parameters dwCapId Cap Id on which to return information. lpCapInfo Pointer to CapInfo structure to be filled with information.
  • Page 46 XR400 Reader C API Programmer Reference Guide Example Get the List of Capabilities and Display the Human Readable Names of Each void DisplayCapabilities(void) DWORD *pCaps; DWORD dwNumCaps; CAPINFO CapInfo; // ask for the number of capabilities supported if(RFID_GetCapList(hReader, 0, &dwNumCaps) == RFID_SUCCESS) // allocate a buffer for them pCaps = malloc(dwNumCaps * sizeof(DWORD));...
  • Page 47: Rfid_Getcapcurrvalue

    Device Capabilities Discovery 4-7 RFID_GetCapCurrValue Description This function returns the current value of the desired capability. Function Prototype DWORD RFID_GetCapCurrValue(HANDLE hReader, DWORD dwCapId, DWORD *pdwNumItems, DWORD dwValueBufSize, LPVOID pvValueBuf); Parameters dwCapId ID of capability to get. pdwNumItems Pointer to DWORD indicating the maximum number of items to get. dwValueBufSize Size in bytes pointed to by pvValueBuf.
  • Page 48 XR400 Reader C API Programmer Reference Guide Example Get the List of Supported Tag Types, Enable One, and Disable the Rest This example uses RFID_GetCapCurrValue() and RFID_SetCapCurrValue(). BOOL ConfigureTagTypes(void) BOOL bSuccess = FALSE; BYTE bSupportedTypes[5]; BYTE bEnabledTypes[5]; DWORD dwNumItems; DWORD dwSize; // init enabled type list to 0's.
  • Page 49 Device Capabilities Discovery 4-9 bEnabledTypes[RFID_TAG_TYPE_EPC_CLASS0] = 1;// Enable Class 0 // If class 1 is supported if(bSupportedTypes[RFID_TAG_TYPE_EPC_CLASS1]) bEnabledTypes[RFID_TAG_TYPE_EPC_CLASS1] = 0;// Disable Class 1 // If class 1 Gen 2 is supported if(bSupportedTypes[RFID_TAG_TYPE_EPC_CLASSG2]) bEnabledTypes[RFID_TAG_TYPE_EPC_CLASSG2] = 0;// Disable Class 1 Gen 2 // dwNumItems has been updated by GetCapCurrValue to be equal to the number of tag // type entries.
  • Page 50: Rfid_Getcapdfltvalue

    4-10 XR400 Reader C API Programmer Reference Guide RFID_GetCapDfltValue Description This function returns the default value for the specified capability ID. Function Prototypes DWORD RFID_GetCapDfltValue(HANDLE hReader, DWORD dwCapId, DWORD *pdwNumItems, DWORD dwValueBufSize, LPVOID pvValueBuf); Notes This function is similar to RFID_GetCapCurrValue except it applies to the default values. See RFID_GetCapCurrValue on page 4-7 for a function description.
  • Page 51: Rfid_Setcapcurrvalue

    Device Capabilities Discovery 4-11 RFID_SetCapCurrValue Description This function sets the current value of the specified capability ID. Function Prototypes DWORD RFID_SetCapCurrValue(HANDLE hReader, DWORD dwCapId, DWORD *pdwNumItems, DWORD dwValueBufSize, LPVOID pvValueBuf); Notes This function is similar to RFID_SetCapCurrValue except it sets caps. See RFID_GetCapCurrValue on page 4-7 for a function description.
  • Page 52: Rfid_Setcapdflts

    4-12 XR400 Reader C API Programmer Reference Guide RFID_SetCapDflts Description This function sets the capabilities values to their default values. The default values for some capabilities differ based on device type. Function Prototypes DWORD RFID_SetCapDflts(HANDLE hReader); Return Values If successful: RFID_SUCCESS...
  • Page 53: Rfid_Setcapdfltvalue

    Device Capabilities Discovery 4-13 RFID_SetCapDfltValue Description This function sets the current capability value to the default values. The default values for some capabilities differ based on device type. Function Prototypes DWORD RFID_SetCapDfltValue(HANDLE hReader, DWORD dwCapId); Parameters dwCapId ID of capability to get. Return Values If successful: RFID_SUCCESS...
  • Page 54 4-14 XR400 Reader C API Programmer Reference Guide...
  • Page 55 Reading and Writing Tags Introduction ................5-3 RFID_GetTagID.
  • Page 56 XR400 Reader C API Programmer Reference Guide...
  • Page 57: Chapter 5. Reading And Writing Tags

    Reading and Writing Tags 5-3 Introduction This chapter describes tag reading and writing functions.
  • Page 58 XR400 Reader C API Programmer Reference Guide RFID_GetTagID Description This function attempts to read a single RFID tag into pTag. Function Prototype DWORD RFID_GetTagID(HANDLE hReader, TYPE_TAG *pTag); Parameters HReader Open RFID device handle. *pTag Pointer to a TYPE_TAG structure which is filled with the tag if the function returns RFID_SUCCESS. Return Values If successful: RFID_SUCCESS (GetTagID returned a TAG)
  • Page 59: Rfid_Gettagmask

    Reading and Writing Tags 5-5 RFID_GetTagMask Description This function gets the current TagMask used during RFID tag reading functions. The mask limits the list of tags to read based on the current mask. The tag mask is limited to 64 bits; future releases will support 96-bit and higher masks. The TagMask is reset whenever the RFID module is reset or powered off.
  • Page 60: Rfid_Settagmask

    XR400 Reader C API Programmer Reference Guide RFID_SetTagMask Description The RFID_SetTagMask SetTagMask function sets the current TagMask used during RFID tag reading functions. The mask limits the list of tags to read based on the current mask. Function Prototype DWORD RFID_SetTagMask(HANDLE hReader, TAG_MASK *pTagMask); Parameters hReader Handle to open RFID device.
  • Page 61: Rfid_Killtag

    Reading and Writing Tags 5-7 RFID_KillTag Description This function kills a tag, making it programmable again. Use this command to reset a locked tag, similar to unlocking and erasing a tag. Function Prototype DWORD RFID_KillTag(HANDLE hReader, unsigned char *pTagID, unsigned char cTagLength, unsigned char cTagVerifyCount, unsigned char cKillAttempts, unsigned char cTagKillCode);...
  • Page 62 XR400 Reader C API Programmer Reference Guide Example HANDLE hRFIDReader; DWORD dwStatus; unsigned char cTagLength; unsigned char cTagVerifyCount; unsigned char cLockAttempts; unsigned char cTagKillCode; unsigned char *pTagID; pTagID = "\x01\x02\x03\x04\x05\x06\x07\x08"; cTagLength = 8; cTagVerifyCount = 3; cKillAttempts = 3; cTagKillCode = 255; dwStatus = RFID_KillTag(hReader, pTagID, cTagLength, cTagVerifyCount, cKillAttempts, cTagKillCode);...
  • Page 63: Rfid_Locktag

    Reading and Writing Tags 5-9 RFID_LockTag Description This function locks a tag to prevent changes. Function Prototype DWORD RFID_LockTag(HANDLE hReader, unsigned char cTagLength, unsigned char cTagVerifyCount, unsigned char cLockAttempts, unsigned char cTagKillCode); Parameters HReader Handle to open the RFID reader. CTagLength Number of bytes in the Tag ID to lock.
  • Page 64 5-10 XR400 Reader C API Programmer Reference Guide Example HANDLE hRFIDReader; DWORD dwStatus; unsigned char cTagLength; unsigned char cTagVerifyCount; unsigned char cLockAttempts; unsigned char cTagKillCode; cTagLength = 8; cTagVerifyCount = 3; cLockAttempts = 3; cTagKillCode = 417; dwStatus = RFID_LockTag(hReader, cTagLength, cTagVerifyCount, cLockAttempts, cTagKillCode); if(dwStatus == RFID_SUCCESS) // Tag Locked...
  • Page 65: Rfid_Programtags

    Reading and Writing Tags 5-11 RFID_ProgramTags Description This function programs a tag with a new TagID provided the tag is not locked. Function Prototype DWORD RFID_ProgramTags(HANDLE hReader, unsigned char *pTagID, unsigned char cTagLength, unsigned char cTagVerifyCount, unsigned char cEraseAttempts,unsigned char cProgramAttempts); Parameters Hreader Handle to open the RFID reader.
  • Page 66 5-12 XR400 Reader C API Programmer Reference Guide Example HANDLE hRFIDReader; DWORD dwStatus; unsigned char *pTagID; unsigned char cTagLength; unsigned char cTagVerifyCount; unsigned char cEraseAttempts; unsigned char cProgramAttempts; pTagID = "\x01\x02\x03\x04\x05\x06\x07\x08"; cTagLength = 8; cTagVerifyCount = 3; cEraseAttempts = 3; cProgramAttempts = 3;...
  • Page 67: Rfid_Erasetag

    Reading and Writing Tags 5-13 RFID_EraseTag Description This function erases a programmed tag, making it unreadable, provided the tag is not locked. Function Prototype DWORD RFID_EraseTag(unsigned char cTagVerifyCount, unsigned char cEraseAttempts) Parameters cTagVerifyCount Number of times to verify a successful. cEraseAttempts Number of times to attempt erasing the tag.
  • Page 68: Rfid_Readtaginventory

    5-14 XR400 Reader C API Programmer Reference Guide RFID_ReadTagInventory Description This function supports reading multiple tags. This commands attempts to read a tag for a period of time based on programmer- provided parameters. This command also maintains a list of all tags read, the number of times each was read, the last time each was read, and its Tag ID.
  • Page 69: Gpio Support

    // print tag id TagList.Tags[dwI].tagID GPIO Support The following functions provide support for GPIO on the XR Series readers. DWORD WINAPI RFID_GetGPIValue(HANDLE hReader, BYTE *pbValue); This function gets the current value for the input pins. There are 6 TTL input pins on the XR reader, which will fill in the low 6 bits of the *pbValue variable.
  • Page 70: Extended Version Of Data Structures And Functions

    Extended Version of Data Structures and Functions This version of the XR Series C-API also provides a set of enhanced version of the API function and data structures to provide richer information and functionalities. It is recommended that new applications should use this new extended version of structures and functions.
  • Page 71 Reading and Writing Tags 5-17 Functions Following shows the pairs of the original functions and their extended counter parts. The only difference is that all extended version of functions use the extended version of data structures. Other than that, their usage is the same. DWORD WINAPI RFID_GetTagID(HANDLE hReader, TYPE_TAG *pTag);...
  • Page 72: Error In Tag Reading

    5-18 XR400 Reader C API Programmer Reference Guide Error in Tag Reading When it is reading with the functions of RFID_GetTagIDEX ()/RFID_GetTagIDEX(), RFID_ReadTagInventory()/ RFID_ReadTagInventoryEX(), the returned TAG_TYPE or TAG_TYPE_EX structure may contain errors that have occurred in the background reading. If the value of the status field of the structure is RFID_SUCCESS, then this structure holds valid tag information in the respective fields.
  • Page 73 Reading and Writing Tags 5-19 default: break; break; case RFID_CMD_HWERR: switch (pTag->wStatusDetail) case 0xF3: // Antenna fault // This antenna (Tag.antennaNum) may need to be removed from the // antenna sequence, otherwise it may keep generating the same // error break;...
  • Page 74 5-20 XR400 Reader C API Programmer Reference Guide default: // enter error handling, may need to stop reading … break; return true;...
  • Page 75: Chapter 6. General Helper Functions

    General Helper Functions Introduction ................6-3 RFID_GetCommandStatusText.
  • Page 76 XR400 Reader C API Programmer Reference Guide...
  • Page 77: Introduction

    General Helper Functions 6-3 Introduction This chapter includes commands for retrieving API status codes and module statistics.
  • Page 78 XR400 Reader C API Programmer Reference Guide RFID_GetCommandStatusText Description This function returns RFID API status codes as English text strings. The hRFIDReader handle is not required, but used for consistency with the rest of this API. Function Prototype const TCHAR * RFID_GetCommandStatusText(int stat); Parameters stat Status code returned by an RFID API function call.
  • Page 79 General Helper Functions 6-5 RFID_GetStats Description This function fills the RFID_STATS structure with RFID module statistics. Statistics include Total Characters Transmitted, Total Characters Received, and Total Tags Read. Function Prototype DWORD RFID_GetStats(HANDLE hReader, RFID_STATS *pStats); Parameters HReader Open RFID device handle. PStats Pointer to RFID_STATS structure that receives the latest stats.
  • Page 80 XR400 Reader C API Programmer Reference Guide...
  • Page 81 RFID API Capabilities Introduction ................A-3 RFID_INFCAP_SUPPORTEDCAPS.
  • Page 82 XR400 Reader C API Programmer Reference Guide RFID_TAGCAP_MASK_BITS ..................A-30 RFID_TAGCAP_MASK_NUMBITS_TOMATCH .
  • Page 83: Introduction

    RFID API Capabilities Introduction This appendix provides the description of the definition and usage of RFID API capabilities.
  • Page 84: Rfid_Infcap_Supportedcaps

    XR400 Reader C API Programmer Reference Guide RFID_INFCAP_SUPPORTEDCAPS Description This capability can hold a complete list of all capability IDs. Capability Type CAPUINT32: Each item is a 32-bit value, 4 bytes. Maximum Number of Items This capability can hold 40 items Container Type CONT_ARRAY: This capability contains an array of value Container Size...
  • Page 85: Rfid_Devcap_Ip_Name

    RFID API Capabilities RFID_DEVCAP_IP_NAME This is the IP address to use when calling RFID_FindFirst. Description This capability represents the IP address of the reader (Unicode string) Capability Type CAPUINT16: Each item is a 16-bit value, 2 bytes. Maximum Number of Item This capability can hold 14 items Container Type CONT_ARRAY: This capability's container contains an array.
  • Page 86: Rfid_Devcap_Ip_Port

    XR400 Reader C API Programmer Reference Guide RFID_DEVCAP_IP_PORT This is the IP port number to use when calling RFID_FindFirst. Description This capability represents the TCP port of the reader Capability Type CAPUINT32: Each item is a 32-bit value, 4 bytes. Maximum Number of Item This capability can hold 1 item Container Type...
  • Page 87 RFID API Capabilities...
  • Page 88: Rfid_Devcap_Antenna_Sequence

    XR400 Reader C API Programmer Reference Guide RFID_DEVCAP_ANTENNA_SEQUENCE Use this to set the antenna sequence when reading tags. The ReadTag functions issue one set of read commands for each antenna specified in the sequence. Description Use this to set the antenna sequence when reading tags. The ReadTag functions issue one set of read commands for each antenna specified in the sequence.
  • Page 89 RFID API Capabilities Example // Create a small list of antenna's to use when reading. // Read functions will cycle through the antenna sequence BOOL ConfigureAntennas(void) BOOL bSuccess = FALSE; DWORD dwNumItems; char cAntennaSequence[2]; cAntennaSequence[0] = 1;// First antenna cAntennaSequence[1] = 0;// Second antenna dwNumItems = 2;...
  • Page 90: Rfid_Readcap_Rf_Attenuation

    A-10 XR400 Reader C API Programmer Reference Guide RFID_READCAP_RF_ATTENUATION Description This function represents the attenuation level to use for all tag read operations. Description This capability represents the attenuation level to use for tag read operations. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Items This capability can hold 1 item Container Type...
  • Page 91: Rfid_Readcap_Eventtagptr

    RFID API Capabilities A-11 RFID_READCAP_EVENTTAGPTR Description This capability contains the address of a TYPE_TAG structure owned by the application. To use this feature, also set the RFID_READCAP_EVENTNAME capability. This capability operates as follows: In On Demand mode, when a tag is read, the API checks to see if the RFID_READCAP_EVENTNAME event is reset. If so, the API places tag data into the user supplied TYPE_TAG structure, and sets the event RFID_READCAP_EVENTNAME.
  • Page 92: Rfid_Readcap_Eventname

    A-12 XR400 Reader C API Programmer Reference Guide RFID_READCAP_EVENTNAME Description The name of the windows event object user provided for signaling tag read Capability Type CAPUINT16: Each item is a 16-bit value, 2 byte (Unicode string). Maximum Number of Items This capability can hold 1 item Container Type CONT_ARRAY: This capability contains an array of Unicode characters...
  • Page 93 RFID API Capabilities A-13 // Register for tag read events using a named event // include the null character dwNumItems = wcslen(szReadEvent) + 1; dwSize = dwNumItems * sizeof(szReadEvent[0]); RFID_SetCapCurrValue(hReader, RFID_READCAP_EVENTNAME, &dwNumItems, dwSize, szReadEvent); dwNumItems = 1; // Tell API to configure autonomous read mode // Once this is called, reading starts…...
  • Page 94 A-14 XR400 Reader C API Programmer Reference Guide On Demand Tag Event Handling In On Demand mode, calls to RFID_ReadTagInventory() and RFID_GetTagID() block until the read process completes. Since the application thread is blocked, the application cannot see tags until the call completes. However, the developer can process read events while blocked by listening to events on another thread as follows: DWORD WINAPI OnDemandModeTagEventThread(LPVOID pvarg) DWORD dwTotalReads = 0;...
  • Page 95 RFID API Capabilities A-15 // Register for tag read events using a named event // include the null character dwNumItems = wcslen(szReadEvent) + 1; dwSize = dwNumItems * sizeof(szReadEvent[0]); RFID_SetCapCurrValue(hReader, RFID_READCAP_EVENTNAME, &dwNumItems, dwSize, szReadEvent); // Give the API a place to store tag dwNumItems = 1;...
  • Page 96: Rfid_Readcap_Event_Alltags

    A-16 XR400 Reader C API Programmer Reference Guide RFID_READCAP_EVENT_ALLTAGS Set this to generate events (RFID_READCAP_EVENTNAME) on all tag reads while in On Demand mode. By default, the API signals only new tags (i.e., it does not signal duplicates).
  • Page 97: Rfid_Readcap_Method

    RFID API Capabilities A-17 RFID_READCAP_METHOD Description This function represents the tag reading method to use when performing the RFID_ReadTagInventory call. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Item This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value.
  • Page 98: Rfid_Readcap_Outloop

    A-18 XR400 Reader C API Programmer Reference Guide RFID_READCAP_OUTLOOP Description This function represents the outer loop value used when performing the RFID_ReadTagInventory call. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Item This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value.
  • Page 99 RFID API Capabilities A-19 Example void ReadTagInventoryTest(void) DWORD dwNumItems = 1; BYTE bParam; ZeroMemory(&TagList, sizeof(TagList)); // Set Outer loop to 3 bParam = 3; dwNumItems = 1; RFID_SetCapCurrValue(hReader, RFID_READCAP_OUTLOOP, &dwNumItems, sizeof(bParam), &bParam); // Set inner loop to 5 bParam = 5; dwNumItems = 1;...
  • Page 100: Rfid_Readcap_Inloop

    A-20 XR400 Reader C API Programmer Reference Guide RFID_READCAP_INLOOP Description This function represents the inner loop value used when performing the RFID_ReadTagInventory call. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Item This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value.
  • Page 101 RFID API Capabilities A-21 RFID_READCAP_READMODE Description The API currently supports two reading modes, On Demand and Autonomous. The Autonomous reading mode is implemented in the API software, however it may not be available using the reader capabilities. Use this capability to set the read mode to On Demand or Autonomous mode. The default mode is On Demand. This capability can have one of the following values: RFID_READCAP_READMODE_ONDEMAND RFID_READCAP_READMODE_AUTONOMOUS...
  • Page 102: Rfid_Writecap_Rf_Attenuation

    A-22 XR400 Reader C API Programmer Reference Guide RFID_WRITECAP_RF_ATTENUATION This function represents the power level when writing to a tag. Description This capability represents the attenuation level to use for tag write operations. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Items This capability can hold 1 item Container Type...
  • Page 103: Rfid_Writecap_Tagtype

    RFID API Capabilities A-23 RFID_WRITECAP_TAGTYPE This is the tag type to use during a write operation. Description This capability represents the tag type tag write operations. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Item This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value...
  • Page 104: Rfid_Tagcap_Lockcode

    A-24 XR400 Reader C API Programmer Reference Guide RFID_TAGCAP_LOCKCODE This is the tag lock code to use for lock and killtag commands (used when setting lockcode to 0 when calling a lock/kill function). Description This capability represents the lock code for tag lock or kill operations. This capability only applies to Class 0 and Class 1 tags. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte.
  • Page 105: Rfid_Tagcap_Supported_Types

    RFID API Capabilities A-25 RFID_TAGCAP_SUPPORTED_TYPES This is a list of supported tag types. Description This capability represents the supported tag types for tag read operations. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Item This capability can hold 5 items Container Type CONT_ARRAY: This capability's container contains an array.
  • Page 106 A-26 XR400 Reader C API Programmer Reference Guide RFID_TAGCAP_ENABLED_TYPES This is a list of enabled tag types. Description This capability represents the enabled tag types for tag read operations. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Items This capability can hold 5 items Container Type...
  • Page 107: Rfid_Writecap_Antenna

    RFID API Capabilities A-27 RFID_WRITECAP_ANTENNA Description Use this capability to set the antenna for tag write operation. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Item This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value.
  • Page 108: Rfid_Tagcap_G2_Access_Password

    A-28 XR400 Reader C API Programmer Reference Guide RFID_TAGCAP_G2_ACCESS_PASSWORD Description This capability represents the access password for Gen 2 access operations. This capability only applies Gen 2 tags. Capability Type CAPUINT8: Each item is a 32-bit value, 4 bytes. Maximum Number of Item This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value.
  • Page 109: Rfid_Devcap_Antenna_Group

    RFID API Capabilities A-29 RFID_DEVCAP_ANTENNA_GROUP Description Use this to form logical groups among antennae when reading tags. The ReadTag functions issue one set of read commands for each group specified in this capability. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Item This capability can hold 8 items Container Type...
  • Page 110 A-30 XR400 Reader C API Programmer Reference Guide RFID_TAGCAP_MASK_BITS Description Use this capability to set the tag mask bits. Capability Type CAPUINT8: Each item is a 8-bit value, 1 byte. Maximum Number of Items This capability can hold 64 items Container Type CONT_ARRAY: This capability's container contains an array.
  • Page 111 RFID API Capabilities A-31 RFID_TAGCAP_MASK_STARTPOS Description Use this capability to set the start matching position in the tag mask bits. Capability Type CAPUINT32: Each item is a 32-bit value, 4 byte. Maximum Number of Items This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value.
  • Page 112 A-32 XR400 Reader C API Programmer Reference Guide RFID_TAGCAP_MASK_LENGTH Description Use this capability to set the tag mask length. Capability Type CAPUINT32: Each item is a 32-bit value, 4 bytes. Maximum Number of Items This capability can hold 1 item Container Type CONT_ONEVALUE: This capability's container contains one value.
  • Page 113 Return Values Introduction ................B- 3...
  • Page 114 XR400 Reader C API Programmer Reference Guide...
  • Page 115 Return Values Introduction Table 2-1 lists and describes the return values that the C API uses when responding to function calls. Table 2-1. RFID C API Return Values Return Value Code Description RFID_SUCCESS Function is successful. RFID_PORT_OPEN_ERROR Port is not open. RFID_PARAM_ERROR Invalid parameter provided.
  • Page 116 XR400 Reader C API Programmer Reference Guide Table 2-1. RFID C API Return Values (Continued) Return Value Code Description RFID_CMD_PROGFAIL 0x88 Failure to program the tag. RFID_CMD_TAGLOCK 0x89 Tag is locked, command cannot proceed. RFID_CMD_KILLFAIL 0x8A Failure to kill the tag. RFID_CMD_LOCKFAIL 0x8B Failure to lock the tag.
  • Page 117 Sample Application Introduction ................B- 3...
  • Page 118 XR400 Reader C API Programmer Reference Guide...
  • Page 119 Sample Application Introduction This sample application can be built both in Visual Studio 2005 for PC and eVC++ 4.0 for XR400/480 device version. #pragma once #define WIN32_LEAN_AND_MEAN// Exclude rarely-used stuff from Windows headers #include <stdio.h> #include <tchar.h> #include <windows.h> #include <stdlib.h> #include "rfiddefs.h"...
  • Page 120 XR400 Reader C API Programmer Reference Guide *pOutPtr++ = (unsigned char)temp; pBuf += 2; nBytesConverted++; return(nBytesConverted); void DisplayCapabilities(HANDLE hReader) DWORD *pCaps; DWORD dwNumCaps; CAPINFO CapInfo; // ask for the number of capabilities supported if(RFID_GetCapList(hReader, 0, &dwNumCaps) == RFID_SUCCESS) // allocate a buffer for them pCaps = (DWORD *)malloc(dwNumCaps * sizeof(DWORD));...
  • Page 121 Sample Application free(pCaps); /// Removes an antenna from a reader's antenna sequence /// @param[in] hReaderThe handle of the reader /// @param[in] AntennaIndex The 0 based index of the antenna void RemoveAntennaFromSequence(HANDLE hReader, BYTE AntennaIndex) BYTE NewSequence[RFID_ANTENNA_SEQUENCE_LENGTH]; BYTE CapSequence[RFID_ANTENNA_SEQUENCE_LENGTH]; memset(NewSequence, 0, sizeof(NewSequence)); memset(CapSequence, 0, sizeof(CapSequence));...
  • Page 122 XR400 Reader C API Programmer Reference Guide bool ProcessError(HANDLE hReader, DWORD dwStatus, WORD wStatusDetail, BYTE antennaNum) if (dwStatus == RFID_SUCCESS) return false; printf("RFID_GetTagID Error %S, detail: %2x, antenna: %2u\n", RFID_GetCommandStatusText(0, dwStatus), wStatusDetail, antennaNum); switch (dwStatus) case RFID_CMD_UNKVAL: switch (wStatusDetail) case 0xF0:// invalid command params //RemoveAntennaFromSequence(hReader, antennaNum);...
  • Page 123 Sample Application break; case RFID_PORT_OPEN_ERROR: case RFID_PORT_WRITE_ERROR: case RFID_COMMAND_TIMEOUT: case RFID_PORT_NOT_OPEN: case RFID_UNKNOWN_COMM_TYPE: #if 0 ToggleReadMode(hReader, false); // clean up the queue do { dwStatus = RFID_GetTagIDEX(hReader, &Tag); } while (dwStatus != RFID_CMD_NOTAG); #endif //0 break; case RFID_CMD_UNKLEN://0xF1:// insufficient data case RFID_CMD_UNKCMD://0xF2:// Command not supported case RFID_UNKNOWN_ERROR://0xFF: default:...
  • Page 124 XR400 Reader C API Programmer Reference Guide /// @param[in] TagThe tag structure which holds the status information bool ProcessErrorReadEx(HANDLE hReader, TYPE_TAG_EX &Tag) return ProcessError(hReader, Tag.dwOperationStatus, Tag.wStatusDetail, Tag.antennaNum); /// To detect if the reader is XR480 series, which supports 8 ports /// @param[in] hReader the handle of the reader /// @return true if it is a XR480, false for XR400 bool IsXR480(HANDLE hReader)
  • Page 125 Sample Application /// Prints a tag to the stdout /// @param[in] hReaderThe handle of the reader /// @param[in] pTagThe pointer to a tag structure void PrintTagEx(HANDLE hReader, TYPE_TAG_EX *pTag) char szTagID[64]; char *szProtocol; if (ProcessErrorReadEx(hReader, *pTag)) return; MakeHexString(pTag->tagID, pTag->dataLength, szTagID); if(pTag->dwType == RFID_TAG_TYPE_EPC_CLASS0 || pTag->dwType == RFID_TAG_TYPE_EPC_CLASS0PLUS) szProtocol = "C0";...
  • Page 126 C-10 XR400 Reader C API Programmer Reference Guide pTag->lastSeen.wMilliseconds /// Prints a tag list to the stdout /// @param[in] hReaderThe handle of the reader /// @param[in] pTagList The pointer to a tag list structure void PrintTagList(HANDLE hReader, TAG_LIST *pTagList) DWORD dwI = pTagList->dwTotalTags; char *szProtocol;...
  • Page 127 Sample Application C-11 DWORD indexEnd = pTagList->dwTotalTags + pTagList->dwErrorTags; for(; dwI < indexEnd; dwI++) ProcessErrorRead(hReader, pTagList->Tags[dwI]); /// Prints a tag list to the stdout /// @param[in] hReaderThe handle of the reader /// @param[in] pTagList The pointer to a tag list structure void PrintTagListEx(HANDLE hReader, TAG_LIST_EX *pTagList) DWORD dwI = 0;...
  • Page 128 C-12 XR400 Reader C API Programmer Reference Guide szProtocol = "G2"; else szProtocol = " "; printf("Tag %3.3u Reads: %3.3u Type: %s Ant: %2.2u:%s\n", dwI+1, pTagList->Tags[dwI].readCount, szProtocol, pTagList->Tags[dwI].antennaNum, szTagID); DWORD indexEnd = pTagList->dwTotalTags + pTagList->dwErrorTags; for(; dwI < indexEnd; dwI++) ProcessErrorReadEx(hReader, pTagList->Tags[dwI]);...
  • Page 129 Sample Application C-13 return RFID_SetCapCurrValue(hReader, RFID_READCAP_RF_ATTENUATION, &dwNumItems, dwBufferSize, &bValueBuffer); /// Set RF power attenuation for programming tag /// @param[in] hReader The handle of the reader /// @param[in] NewValue The new write power attenuation value, 0 means maxium power! /// @return RFID_SUCCESS for success, otherwise error code for reason DWORD SetWritePowerAttenuation(HANDLE hReader, BYTE NewValue) // buffer to hold the capability value BYTE bValueBuffer = NewValue;// 0 -->...
  • Page 130 C-14 XR400 Reader C API Programmer Reference Guide // retrieve the capability value for supported tag types from the API if(RFID_GetCapCurrValue(hReader, RFID_TAGCAP_SUPPORTED_TYPES, &dwNumItems, dwBufferSize, bValueBuffer) == RFID_SUCCESS) if (bValueBuffer[RFID_TAG_TYPE_EPC_CLASS0]) { // EPC Gen 1 Class 0 is supported by the reader if (bValueBuffer[RFID_TAG_TYPE_EPC_CLASS0PLUS]) { // EPC Gen 1 Class 0+ is supported by the reader if (bValueBuffer[RFID_TAG_TYPE_EPC_CLASS1]) {...
  • Page 131 Sample Application C-15 return (bValueBuffer[TagTypeIndex] != 0); return false; /// Enable tag types for reading /// @param[in] TagTypeIndex The index of the tag type /// @param[in] EnableTrue to enable the specified type, false to disable this type /// @return RFID_SUCCESS for success, /// RFID_TAGTYPE_NOSUPPORT if the type is not supported, /// or other error code for reason DWORD SetTagTypeForReading(HANDLE hReader, RFID_TAG_TYPE_INDEX TagTypeIndex, bool Enable)
  • Page 132 C-16 XR400 Reader C API Programmer Reference Guide return dwStatus; /// Enable tag types for writing /// @param[in] TagTypeIndex The tag type for writing /// @return RFID_SUCCESS for success, /// RFID_TAGTYPE_NOSUPPORT if the type is not supported, /// or other error code for reason DWORD SetTagTypeForWriting(HANDLE hReader, RFID_TAG_TYPE_INDEX TagTypeIndex) // buffer to hold the capability value BYTE bValueBuffer = TagTypeIndex;...
  • Page 133 Sample Application C-17 /// Configure a reader work in on demand reading mode /// @param[in] hReader The handle of the reader void ConfigureOnDemandMode(HANDLE hReader) DWORD dwParamValue = RFID_READCAP_READMODE_ONDEMAND; DWORD dwNumItems = 1; // Now tell API to configure the read mode RFID_SetCapCurrValue(hReader, RFID_READCAP_READMODE, &dwNumItems, sizeof(dwParamValue), &dwParamValue);...
  • Page 134 C-18 XR400 Reader C API Programmer Reference Guide DWORD dwStatus = RFID_ReadTagInventoryEX(hReader, pTagList, TRUE); if(dwStatus == RFID_SUCCESS) PrintTagListEx(hReader, pTagList); else printf("%S\n", RFID_GetCommandStatusText(hReader, dwStatus)); /// Read tags in the autonomous reading mode /// @param[in] hReader The handle of the reader void ReadAutonomous(HANDLE hReader, TAG_LIST_EX *pTagList) { printf("\nAutonomous read from Reader %8x\n", (WORD)hReader);...
  • Page 135 Sample Application C-19 TCHAR tszReadTagEventName[MAX_PATH]; // prepare the unique tag read event name for this reader swprintf(tszReadTagEventName, TEXT("ReadTagEvent%8x"),(WORD)hReader); // create a tag read event for this reader HANDLE hReadTagEvent = CreateEvent(NULL, TRUE, FALSE, tszReadTagEventName); if (!hReadTagEvent) return 0; DWORD dwNumItems = (DWORD)wcslen(tszReadTagEventName) + 1;// include the null character DWORD dwStatus = RFID_SetCapCurrValue(hReader, RFID_READCAP_EVENTNAME, &dwNumItems, dwNumItems * sizeof(tszReadTagEventName[0]), tszReadTagEventName);...
  • Page 136 C-20 XR400 Reader C API Programmer Reference Guide SetTagTypeForReading(hReader, RFID_TAG_TYPE_EPC_CLASS1, true); SetTagTypeForReading(hReader, RFID_TAG_TYPE_EPC_CLASSG2, true); /// Configure the parameters for the reader /// @param[in] hReader the handle of the reader /// @return true for success, false for failure bool ConfigureReader(HANDLE hReader) if (!hReader) return false;...
  • Page 137 Sample Application C-21 if(dwStatus == RFID_SUCCESS) bSuccess = true; else printf("RFID_DEVCAP_IP_NAME Set Cap Error %S\n", RFID_GetCommandStatusText(hReader, dwStatus)); else printf("RFID_DEVCAP_IP_PORT Set Cap Error %S\n", RFID_GetCommandStatusText(hReader, dwStatus)); return(bSuccess); /// Opens and establishs connection to a reader /// @param[in] tszNewIPAddressThe IP address of the reader /// @param[in] wPortThe TCP port of the reader HANDLE OpenReader(TCHAR tszNewIPAddress[32], WORD wPort) HANDLE hReader = 0;...
  • Page 138 C-22 XR400 Reader C API Programmer Reference Guide RFID_CAPS Caps; if(RFID_GetCaps(hReader, &Caps) == RFID_SUCCESS) printf("RFIDAPI Version %S Firmware Version %S\n\n", Caps.szAPIVersionString, Caps.szFirmwareVersion); printf(" Serial # Info: %S\n", Caps.szSerialInfo); else printf("Failed to open RFIDAPI\n"); return hReader; /// @class XR400APITestReader /// A class encapsulates the common functionalities of a test reader class XR400APITestReader { public: /// Default constructor...
  • Page 139 Sample Application C-23 if (hReader) { RFID_CloseReader(hReader); RFID_Close(&hReader); public: HANDLE hReader; HANDLE hReadTagEvent; TAG_LIST_EX tagList; TCHAR tszReadTagEventName[32];// = L"TagReadEvent"; TCHAR tszIPAddress[32]; int main(int argc, char* argv[]) printf("Test programm (%s %s) started...\n", __DATE__, __TIME__); printf("Create instance...\n"); XR400APITestReader reader1; #ifndef _WIN32_WCE reader1.hReader = OpenReader(TEXT("157.235.88.44"), 3000); #else printf("Open reader...\n");...
  • Page 140 C-24 XR400 Reader C API Programmer Reference Guide DisplayCapabilities(reader2.hReader); #endif //_WIN32_WCE printf("Tag list instance...\n"); TAG_LIST tagList; printf("Clear Tag list instance...\n"); memset(&tagList, 0, sizeof(tagList)); printf("ReadOnDemand...\n"); ReadOnDemand(reader1.hReader, &tagList); #ifndef _WIN32_WCE memset(&tagList, 0, sizeof(tagList)); ReadOnDemand(reader2.hReader, &tagList); #endif //_WIN32_WCE TAG_LIST_EX1_INIT(reader1.tagList, 0); ReadOnDemandEx(reader1.hReader, &reader1.tagList); #ifndef _WIN32_WCE TAG_LIST_EX1_INIT(reader2.tagList, 0);...
  • Page 141 Sample Application C-25...
  • Page 142 C-26 XR400 Reader C API Programmer Reference Guide...
  • Page 143 Index API capabilities ......A-3 capabilities ......4-3, A-3 RFID_DEVCAP_ANTENNA_SEQUENCE .
  • Page 144 IN-2 XR400 Reader C API Programmer Reference Guide device capabilities ......4-3 on demand mode ....5-4, 5-14, A-12 setting .
  • Page 145 We’d like to know what you think about this Manual. Please take a moment to fill out this questionnaire and fax this form to: (631) 738-3318, or mail to: Symbol Technologies, Inc. One Symbol Plaza M/S B-4 Holtsville, NY 11742-1300 Attention: Technical Publications Manager IMPORTANT: If you need product support, please call the appropriate customer support number provided.
  • Page 148 Symbol Technologies, Inc. One Symbol Plaza Holtsville, New York 11742-1300 http://www.symbol.com 72E-73028-02 Revision A - July 2006...

This manual is also suitable for:

Xr400

Table of Contents