
 /*****************************************************************************
 *                Copyrights 2010-2016 Symbol Technologies LLC
 *                          All rights reserved
 * 
 *  
 *****************************************************************************
 */

/**
 *****************************************************************************
 ** 
 ** @file	rfidapi.h
 ** 
 ** @brief	RFID API3 main header file and defines external interface
 **			for RFID API3 Library
 **
 **
 ****************************************************************************/
#ifndef RFIDCAPI3_H
#define RFIDCAPI3_H

#include "rfidapiTypes.h"
#include "rfidapiConstants.h"
#include "rfidapiStructs.h"
#include "rfidapiErrors.h"


#if defined(__cplusplus)
extern "C"
{
#endif


RFID_STATUS WINAPI RFID_ConnectW(
		RFID_HANDLE32* pReaderHandle, 
		WCHAR* pHostName,  
		UINT32 port,
		UINT32 timeoutMilliseconds,
		LPCONNECTION_INFO lpConnectionInfo);

RFID_STATUS WINAPI RFID_ConnectA(
		RFID_HANDLE32* pReaderHandle, 
		CHAR* pHostName,  
		UINT32 port,
		UINT32 timeoutMilliseconds,
		LPCONNECTION_INFO lpConnectionInfo);

#ifdef UNICODE
#define RFID_Connect RFID_ConnectW
#else
#define RFID_Connect RFID_ConnectA
#endif

RFID_STATUS WINAPI RFID_Reconnect(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_AcceptConnection(RFID_HANDLE32* pReaderHandle,
		SOCKET_HANDLE readerSocket,
		LPSERVER_INFO lpServerInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_Disconnect(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_GetDllVersionInfoW(
		LPVERSION_INFOW lpVersionInfo);

RFID_STATUS WINAPI RFID_GetDllVersionInfoA(
		LPVERSION_INFOA lpVersionInfo);

#ifdef UNICODE
#define RFID_GetDllVersionInfo RFID_GetDllVersionInfoW
#else
#define RFID_GetDllVersionInfo RFID_GetDllVersionInfoA
#endif

RFID_STATUS WINAPI RFID_GetReaderCapsW(
		RFID_HANDLE32 readerHandle, 
		LPREADER_CAPSW lpReaderCaps);

RFID_STATUS WINAPI RFID_GetReaderCapsA(
		RFID_HANDLE32 readerHandle, 
		LPREADER_CAPSA lpReaderCaps);
#ifdef UNICODE
#define RFID_GetReaderCaps RFID_GetReaderCapsW
#else
#define RFID_GetReaderCaps RFID_GetReaderCapsA
#endif

RFID_STATUS WINAPI RFID_GetSledBatteryStatus( 
        RFID_HANDLE32 readerHandle, 
        LPSLED_BATTERY_STATUS lpSledBatteryStatus);

RFID_STATUS WINAPI RFID_GetAntennaConfig(
		RFID_HANDLE32 readerHandle, 
		UINT16 antennaID,
		UINT16* pReceiveSensitivityIndex, 
		UINT16* pTransmitPowerIndex, 
		UINT16* pTransmitFrequencyIndex);

RFID_STATUS WINAPI RFID_SetAntennaConfig(
		RFID_HANDLE32 readerHandle,
		UINT16 antennaID, 
		UINT16 receiveSensitivityIndex, 
		UINT16 transmitPowerIndex, 
		UINT16 transmitFrequencyIndex);

RFID_STATUS WINAPI RFID_SetAntennaRfConfig(
		RFID_HANDLE32 readerHandle,
		UINT16 antennaID,
		LPANTENNA_RF_CONFIG lpAntennaRfConfig);

RFID_STATUS WINAPI RFID_GetAntennaRfConfig(
		RFID_HANDLE32 readerHandle,
		UINT16 antennaID,
		LPANTENNA_RF_CONFIG lpAntennaRfConfig);

RFID_STATUS WINAPI RFID_GetPhysicalAntennaProperties(
		RFID_HANDLE32 readerHandle, 
		UINT16 antennaID, 
		BOOLEAN* pStatus, 
		UINT32* pAntennaGain);

RFID_STATUS WINAPI RFID_ResetConfigToFactoryDefaults(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_SetGPOState(
		RFID_HANDLE32 readerHandle, 
		UINT32 portNumber, 
		BOOLEAN gpoState);

RFID_STATUS WINAPI RFID_GetGPOState(
		RFID_HANDLE32 readerHandle, 
		UINT32 portNumber, 
		BOOLEAN* pGPOState);
		
RFID_STATUS WINAPI RFID_GetGPIState(
		RFID_HANDLE32 readerHandle, 
		UINT32 portNumber, 
		BOOLEAN* pGPIEnable, 
		GPI_PORT_STATE* pState);

RFID_STATUS WINAPI RFID_EnableGPIPort(
		RFID_HANDLE32 readerHandle, 
		UINT32 portNumber, 
		BOOLEAN gpiEnable);

RFID_STATUS WINAPI RFID_GetSingulationControl(
		RFID_HANDLE32 readerHandle,
		UINT16 antennaID, 
		LPSINGULATION_CONTROL lpSingulationControl);

RFID_STATUS WINAPI RFID_SetSingulationControl(
		RFID_HANDLE32 readerHandle,
		UINT16 antennaID, 
		LPSINGULATION_CONTROL lpSingulationControl);

RFID_STATUS WINAPI RFID_GetRFMode(
		RFID_HANDLE32 readerHandle,
		UINT16 antennaID,  
		UINT32* pRfModeTableIndex,
		UINT32* pTari);

RFID_STATUS WINAPI RFID_SetRFMode(
		RFID_HANDLE32 readerHandle,
		UINT16 antennaID,  
		UINT32 rfModeTableIndex,
		UINT32 tari);

RFID_STATUS WINAPI RFID_GetRadioPowerState(
		RFID_HANDLE32 readerHandle,
		BOOLEAN* pPowerState);

RFID_STATUS WINAPI RFID_SetRadioPowerState(
		RFID_HANDLE32 readerHandle,
		BOOLEAN powerState);

RFID_STATUS WINAPI RFID_GetDutyCycle(
		RFID_HANDLE32 readerHandle,
		UINT16* pDutyCycleIndex,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_SetDutyCycle(
		RFID_HANDLE32 readerHandle,
		UINT16 dutyCycleIndex,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_RegisterEventNotification(
		RFID_HANDLE32 readerHandle, 
		RFID_EVENT_TYPE eventType, 
		EVENT_HANDLE notifyObject);
		
typedef void (WINAPI *RfidEventCallbackFunction)(
		RFID_HANDLE32 readerHandle, 
		RFID_EVENT_TYPE eventType);

RFID_STATUS WINAPI RFID_RegisterEventNotificationCallback(
		RFID_HANDLE32 readerHandle,
		RFID_EVENT_TYPE *pEvents,
		UINT32 numEvents,
		RfidEventCallbackFunction pFnRfidEventCallbackFunction,
		LPVOID rsvd1,
		LPVOID rsvd2		
		);

RFID_STATUS WINAPI RFID_SetEventNotificationParams(
		RFID_HANDLE32 readerHandle, 
		RFID_EVENT_TYPE eventType, 
		STRUCT_HANDLE pEventParams);

RFID_STATUS WINAPI RFID_DeregisterEventNotification(
		RFID_HANDLE32 readerHandle, 
		RFID_EVENT_TYPE eventType);

RFID_STATUS WINAPI RFID_GetEventData(
		RFID_HANDLE32 readerHandle, 
		RFID_EVENT_TYPE eventType, 
		STRUCT_HANDLE pEventData);

RFID_STATUS WINAPI RFID_AddPreFilter(
		RFID_HANDLE32 readerHandle, 
		UINT16 antennaID,
		LPPRE_FILTER lpPreFilter,
		UINT32* pFilterIndex);

RFID_STATUS WINAPI RFID_DeletePreFilter(
		RFID_HANDLE32 readerHandle, 
		UINT16 antennaID,
		UINT32 filterIndex);

RFID_STATUS WINAPI RFID_GetTagStorageSettings(
		RFID_HANDLE32 readerHandle, 
		LPTAG_STORAGE_SETTINGS lpTagStorageSettings);

RFID_STATUS WINAPI RFID_SetTagStorageSettings(
		RFID_HANDLE32 readerHandle, 
		LPTAG_STORAGE_SETTINGS lpTagStorageSettings);

LPTAG_DATA  WINAPI RFID_AllocateTag(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_DeallocateTag(
		RFID_HANDLE32 readerHandle, 
		LPTAG_DATA lpTagData);

RFID_STATUS WINAPI RFID_PerformInventory(
		RFID_HANDLE32 readerHandle,
		LPPOST_FILTER lpPostFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTRIGGER_INFO lpTriggerInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_StopInventory(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_PerformTagLocationing(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd,
		LPVOID rsvd1);

RFID_STATUS WINAPI RFID_StopTagLocationing(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_PerformZoneInventory(
		RFID_HANDLE32 readerHandle,
		LPPOST_FILTER lpPostFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTRIGGER_INFO lpTriggerInfo,
		LPZONE_SEQUENCE lpZoneSequence,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_AddZoneW(
		RFID_HANDLE32 readerHandle,
		UINT16 zoneId,
		LPZONE_CONFIGW zoneConfig,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_AddZoneA(
		RFID_HANDLE32 readerHandle,
		UINT16 zoneId,
		LPZONE_CONFIGA zoneConfig,
		LPVOID rsvd);

#ifdef UNICODE
#define RFID_AddZone RFID_AddZoneW
#else
#define RFID_AddZone RFID_AddZoneA
#endif

RFID_STATUS WINAPI RFID_DeleteZone(
		RFID_HANDLE32 readerHandle,
		UINT32 zoneId,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_GetReadTag (
		RFID_HANDLE32 readerHandle, 
		LPTAG_DATA lpTagData);

RFID_STATUS WINAPI RFID_PurgeTags (
		RFID_HANDLE32 readerHandle,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_Read(
		RFID_HANDLE32 readerHandle, 
		UINT8* pTagID, 
		UINT32 tagIDLength,
		LPREAD_ACCESS_PARAMS lpReadAccessParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo, 
		LPTAG_DATA lpTagData,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_Write(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPWRITE_ACCESS_PARAMS lpWriteAccessParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_WriteTagID(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPWRITE_SPECIFIC_FIELD_ACCESS_PARAMS lpWriteSpecificFieldAccessParams,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_WriteKillPassword(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPWRITE_SPECIFIC_FIELD_ACCESS_PARAMS lpWriteSpecificFieldAccessParams,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_WriteAccessPassword(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPWRITE_SPECIFIC_FIELD_ACCESS_PARAMS lpWriteSpecificFieldAccessParams,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);


RFID_STATUS WINAPI RFID_Kill(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagData,
		UINT32 tagDataLength,
		LPKILL_ACCESS_PARAMS lpKillParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_Lock(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagData,
		UINT32 tagDataLength,
		LPLOCK_ACCESS_PARAMS lpLockAccessParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_BlockWrite(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPWRITE_ACCESS_PARAMS lpWriteAccessParams, 
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_BlockErase(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPBLOCK_ERASE_ACCESS_PARAMS lpBlkEraseAccessParams, 
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_Recommission(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPRECOMMISSION_ACCESS_PARAMS lpRecommissionParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_BlockPermalock(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
        UINT32 tagIDLength,
		LPBLOCK_PERMALOCK_ACCESS_PARAMS lpBlkPermalockAccessParams, 
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTAG_DATA lpTagData,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_InitializeAccessSequence(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_AddOperationToAccessSequence(
		RFID_HANDLE32 readerHandle, 
		LPOP_CODE_PARAMS lpOpCodeParams,
		UINT32* pOpCodeIndex);

RFID_STATUS WINAPI RFID_DeleteOperationFromAccessSequence(
		RFID_HANDLE32 readerHandle, 
		UINT32 opCodeIndex);

RFID_STATUS WINAPI RFID_DeinitializeAccessSequence(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_PerformAccessSequence(
		RFID_HANDLE32 readerHandle,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTRIGGER_INFO lpTriggerInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_StopAccessSequence(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_GetLastAccessResult(
		RFID_HANDLE32 readerHandle,
		UINT32* pSuccessCount,
		UINT32* pFailureCount);

RFID_STATUS WINAPI RFID_NXPSetEAS( 
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPNXP_SET_EAS_PARAMS lpNXPSetEASParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_NXPReadProtect( 
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPNXP_READ_PROTECT_PARAMS lpNXPReadProtectParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_NXPResetReadProtect(
		RFID_HANDLE32 readerHandle,
		LPNXP_RESET_READ_PROTECT_PARAMS lpNXPResetReadProtectParams,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_PerformNXPEASScan(
		RFID_HANDLE32 readerHandle,
		LPANTENNA_INFO lpAntennaInfo,
		LPTRIGGER_INFO lpTriggerInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_StopNXPEASScan(
		RFID_HANDLE32 readerHandle);

RFID_STATUS WINAPI RFID_FujitsuChangeWordLock(
		RFID_HANDLE32 rfidHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_CHANGE_WORDLOCK_ACCESS_PARAMS lpChangeWordLockParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuChangeBlockLock(  
        RFID_HANDLE32 readerHandle,
 		UINT8* pTagID, 
 		UINT32 tagIDLength, 
		LPFUJITSU_CHANGE_BLOCKLOCK_ACCESS_PARAMS lpChangeBlockLockParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuReadBlockLock(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_READ_BLOCKLOCK_ACCESS_PARAMS lpReadBlockLockParams,
		LPACCESS_FILTER lpAccessFilter, 
		LPANTENNA_INFO lpAntennaInfo,
		LPTAG_DATA lpTagData,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuBurstWrite(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_BURST_WRITE_ACCESS_PARAMS  lpBurstWriteParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTAG_DATA lpTagData,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuBurstErase(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_BURST_ERASE_ACCESS_PARAMS lpBurstEraseParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTAG_DATA lpTagData,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuChangeBlockOrAreaGroupPassword(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_CHANGE_BLOCK_OR_AREA_GROUPPASSWORD_ACCESS_PARAMS lpChangeBlockOrAreaGroupPasswordParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuAreaReadLock(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_AREA_READLOCK_ACCESS_PARAMS lpAreaReadLockParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuAreaWriteLock(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_AREA_WRITELOCK_ACCESS_PARAMS lpAreaWriteLockParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_FujitsuAreaWriteLockWOPassword(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPFUJITSU_AREA_WRITELOCK_WOPASSWORD_ACCESS_PARAMS  lpAreaWriteLockWOPasswordParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_ImpinjQTWrite(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID,
		UINT32 tagIDLength,
		LPIMPINJ_QT_WRITE_PARAMS lpQTWriteParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_ImpinjQTRead(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
		UINT32 tagIDLength,
		LPIMPINJ_QT_READ_PARMS lpQTReadParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTAG_DATA lpTagData, 
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_NXPChangeConfig(
		RFID_HANDLE32 readerHandle,
		UINT8* pTagID, 
		UINT32 tagIDLength,
		LPNXP_CHANGE_CONFIG_PARAMS lpNXPChangeConfigParams,
		LPACCESS_FILTER lpAccessFilter,
		LPANTENNA_INFO lpAntennaInfo,
		LPTAG_DATA lpTagData, 
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_LoginW(
		RFID_HANDLE32* pReaderManagementHandle,
		LPLOGIN_INFOW lpLoginInfo,
		READER_TYPE readerType,
		BOOLEAN secureMode,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_LoginA(
		RFID_HANDLE32* pReaderManagementHandle,
		LPLOGIN_INFOA lpLoginInfo,
		READER_TYPE readerType,
		BOOLEAN secureMode,
		LPVOID rsvd);

#ifdef UNICODE
#define RFID_Login RFID_LoginW
#else
#define RFID_Login RFID_LoginA
#endif

RFID_STATUS WINAPI RFID_Logout(
		RFID_HANDLE32 readerManagementHandle);

RFID_STATUS WINAPI RFID_EnableReadPoint(
		RFID_HANDLE32 readerManagementHandle,
		UINT16 antennaID,
		BOOLEAN status);

RFID_STATUS WINAPI RFID_GetReadPointStatus(
		RFID_HANDLE32 readerManagementHandle,
		UINT16 antennaID,
		BOOLEAN* pStatus);

RFID_STATUS WINAPI RFID_SetAntennaMode(
		RFID_HANDLE32 readerManagementHandle,
		ANTENNA_MODE antennaMode);

RFID_STATUS WINAPI RFID_GetAntennaMode(
		RFID_HANDLE32 readerManagementHandle,
		ANTENNA_MODE* pAntennaMode);

RFID_STATUS WINAPI RFID_ExportProfileToReaderW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pProfileName,
		WCHAR* pProfilePath,
		BOOLEAN activation);

RFID_STATUS WINAPI RFID_ExportProfileToReaderA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pProfileName,
		CHAR* pProfilePath,
		BOOLEAN activation);

#ifdef UNICODE
#define RFID_ExportProfileToReader RFID_ExportProfileToReaderW
#else
#define RFID_ExportProfileToReader RFID_ExportProfileToReaderA
#endif

RFID_STATUS WINAPI RFID_TurnOffRadioWhenIdle(
		RFID_HANDLE32 readerManagementHandle,
		INT32 idleTimeoutSeconds);

RFID_STATUS WINAPI RFID_GetRadioIdleTimeout(
		RFID_HANDLE32 readerManagementHandle,
		INT32* pIdleTimeoutSeconds);

RFID_STATUS WINAPI RFID_InstallUserAppW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pPathToPackage);

RFID_STATUS WINAPI RFID_InstallUserAppA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pPathToPackage);

#ifdef UNICODE
#define RFID_InstallUserApp RFID_InstallUserAppW
#else
#define RFID_InstallUserApp RFID_InstallUserAppA
#endif

RFID_STATUS WINAPI RFID_UninstallUserAppW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pAppName);

RFID_STATUS WINAPI RFID_UninstallUserAppA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pAppName);


#ifdef UNICODE
#define RFID_UninstallUserApp RFID_UninstallUserAppW
#else
#define RFID_UninstallUserApp RFID_UninstallUserAppA
#endif
	
RFID_STATUS WINAPI RFID_StartUserAppW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pAppName);

RFID_STATUS WINAPI RFID_StartUserAppA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pAppName);

#ifdef UNICODE
#define RFID_StartUserApp RFID_StartUserAppW
#else
#define RFID_StartUserApp RFID_StartUserAppA
#endif
	
RFID_STATUS WINAPI RFID_StopUserAppW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pAppName);

RFID_STATUS WINAPI RFID_StopUserAppA(
		RFID_HANDLE32 readerHandle,
		CHAR* pAppName);

#ifdef UNICODE
#define RFID_StopUserApp RFID_StopUserAppW
#else
#define RFID_StopUserApp RFID_StopUserAppA
#endif

RFID_STATUS WINAPI RFID_GetUserAppRunStatusW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pAppName,
		BOOLEAN* pRunStatus);

RFID_STATUS WINAPI RFID_GetUserAppRunStatusA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pAppName,
		BOOLEAN* pRunStatus);

#ifdef UNICODE
#define RFID_GetUserAppRunStatus RFID_GetUserAppRunStatusW
#else
#define RFID_GetUserAppRunStatus RFID_GetUserAppRunStatusA
#endif
	
RFID_STATUS WINAPI RFID_ListUserAppsW(
		RFID_HANDLE32 readerManagementHandle,
		LPUSERAPP_LISTW lpAppList);

RFID_STATUS WINAPI RFID_ListUserAppsA(
		RFID_HANDLE32 readerManagementHandle,
		LPUSERAPP_LISTA lpAppList);

#ifdef UNICODE
#define RFID_ListUserApps RFID_ListUserAppsW
#else
#define RFID_ListUserApps RFID_ListUserAppsA
#endif

RFID_STATUS WINAPI RFID_SetUserAppAutoStartW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pAppName,
		BOOLEAN Enable);

RFID_STATUS WINAPI RFID_SetUserAppAutoStartA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pAppName,
		BOOLEAN Enable);

#ifdef UNICODE
#define RFID_SetUserAppAutoStart RFID_SetUserAppAutoStartW
#else
#define RFID_SetUserAppAutoStart RFID_SetUserAppAutoStartA
#endif

RFID_STATUS WINAPI RFID_ImportProfileFromReaderW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pProfileName,
		WCHAR* pProfilePath);

RFID_STATUS WINAPI RFID_ImportProfileFromReaderA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pProfileName,
		CHAR* pProfilePath);

#ifdef UNICODE
#define RFID_ImportProfileFromReader RFID_ImportProfileFromReaderW
#else
#define RFID_ImportProfileFromReader RFID_ImportProfileFromReaderA
#endif

  
RFID_STATUS WINAPI RFID_GetProfileListW(
		RFID_HANDLE32 readerManagementHandle,
		LPPROFILE_LISTW lpProfileList);

RFID_STATUS WINAPI RFID_GetProfileListA(
		RFID_HANDLE32 readerManagementHandle,
		LPPROFILE_LISTA lpProfileList);

#ifdef UNICODE
#define RFID_GetProfileList RFID_GetProfileListW
#else
#define RFID_GetProfileList RFID_GetProfileListA
#endif 

RFID_STATUS WINAPI RFID_SetActiveProfileW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pProfileName);

RFID_STATUS WINAPI RFID_SetActiveProfileA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pProfileName);

#ifdef UNICODE
#define RFID_SetActiveProfile RFID_SetActiveProfileW
#else
#define RFID_SetActiveProfile RFID_SetActiveProfileA
#endif

RFID_STATUS WINAPI RFID_DeleteProfileW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pProfileName);

RFID_STATUS WINAPI RFID_DeleteProfileA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pProfileName);

#ifdef UNICODE
#define RFID_DeleteProfile RFID_DeleteProfileW
#else
#define RFID_DeleteProfile RFID_DeleteProfileA
#endif

RFID_STATUS WINAPI RFID_UpdateSoftwareW(
		RFID_HANDLE32 readerManagementHandle,
		LPFTPSERVER_INFOW pLocationInfo);

RFID_STATUS WINAPI RFID_UpdateSoftwareA(
		RFID_HANDLE32 readerManagementHandle,
		LPFTPSERVER_INFOA pLocationInfo);

#ifdef UNICODE
#define RFID_UpdateSoftware RFID_UpdateSoftwareW
#else
#define RFID_UpdateSoftware RFID_UpdateSoftwareA
#endif

RFID_STATUS WINAPI RFID_UpdateRadioFirmwareW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pFileName);

RFID_STATUS WINAPI RFID_UpdateRadioFirmwareA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pFileName);

#ifdef UNICODE
#define RFID_UpdateRadioFirmware RFID_UpdateRadioFirmwareW
#else
#define RFID_UpdateRadioFirmware RFID_UpdateRadioFirmwareA
#endif

RFID_STATUS WINAPI RFID_UpdateRadioConfigW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* pFileName);

RFID_STATUS WINAPI RFID_UpdateRadioConfigA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR* pFileName);

#ifdef UNICODE
#define RFID_UpdateRadioConfig RFID_UpdateRadioConfigW
#else
#define RFID_UpdateRadioConfig RFID_UpdateRadioConfigA
#endif

RFID_STATUS WINAPI RFID_GetUpdateStatusW(
		RFID_HANDLE32 readerManagementHandle,
		LPUPDATE_STATUSW lpStatus);

RFID_STATUS WINAPI RFID_GetUpdateStatusA(
		RFID_HANDLE32 readerManagementHandle,
		LPUPDATE_STATUSA lpStatus);

#ifdef UNICODE
#define RFID_GetUpdateStatus RFID_GetUpdateStatusW
#else
#define RFID_GetUpdateStatus RFID_GetUpdateStatusA
#endif

RFID_STATUS WINAPI RFID_Restart(
		RFID_HANDLE32 readerManagementHandle);

RFID_STATUS WINAPI RFID_GetSystemInfoW(
		RFID_HANDLE32 readerManagementHandle,
		LPREADER_SYSTEM_INFOW lpSystemInfo);

RFID_STATUS WINAPI RFID_GetSystemInfoA(
		RFID_HANDLE32 readerManagementHandle,
		LPREADER_SYSTEM_INFOA lpSystemInfo);

#ifdef UNICODE
#define RFID_GetSystemInfo RFID_GetSystemInfoW
#else
#define RFID_GetSystemInfo RFID_GetSystemInfoA
#endif

RFID_STATUS WINAPI RFID_GetHealthStatus(
		RFID_HANDLE32 readerManagementHandle, 
		SERVICE_ID serviceID, 
		HEALTH_STATUS* pHealthStatus, 
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_GetUSBOperationMode(
		RFID_HANDLE32 readerManagementHandle, 
		LPUSB_OPERATION_INFO lpUsbOperationInfo);


RFID_STATUS WINAPI RFID_SetUSBOperationMode(
		RFID_HANDLE32 readerManagementHandle,
		LPUSB_OPERATION_INFO lpUsbOperationInfo);

RFID_STATUS WINAPI RFID_GetGPIDebounceTime(
		RFID_HANDLE32 readerManagementHandle, 
		UINT32 *pDebounceTimeMilliseconds,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_SetGPIDebounceTime(
		RFID_HANDLE32 readerManagementHandle, 
		UINT32 debounceTimeMilliseconds,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_SetUserLED(
		RFID_HANDLE32 readerManagementHandle, 
		LPLED_INFO lpLedInfo);

RFID_STATUS WINAPI RFID_GetLocalTime(
		RFID_HANDLE32 readerManagementHandle, 
		LPSYSTEMTIME lpSystemTime);

RFID_STATUS WINAPI RFID_SetLocalTime(
		RFID_HANDLE32 readerManagementHandle, 
		LPSYSTEMTIME lpSystemTime);

RFID_STATUS WINAPI RFID_GetReaderStats(
		RFID_HANDLE32 readerManagementHandle, 
		UINT16 antennaID,
		LPREADER_STATS lpReaderStats);

RFID_STATUS WINAPI RFID_ClearReaderStats(
		RFID_HANDLE32 readerManagementHandle);

RFID_STATUS WINAPI RFID_SetReaderInfoW(
		RFID_HANDLE32 readerManagementHandle,
		LPREADER_INFOW lpReaderInfo);

RFID_STATUS WINAPI RFID_SetReaderInfoA(
		RFID_HANDLE32 readerManagementHandle,
		LPREADER_INFOA lpReaderInfo);

#ifdef UNICODE
#define RFID_SetReaderInfo RFID_SetReaderInfoW
#else
#define RFID_SetReaderInfo RFID_SetReaderInfoA
#endif

RFID_STATUS WINAPI RFID_GetReaderInfoW(
		RFID_HANDLE32 readerManagementHandle,
		LPREADER_INFOW lpReaderInfo);

RFID_STATUS WINAPI RFID_GetReaderInfoA(
		RFID_HANDLE32 readerManagementHandle,
		LPREADER_INFOA lpReaderInfo);

#ifdef UNICODE
#define RFID_GetReaderInfo RFID_GetReaderInfoW
#else
#define RFID_GetReaderInfo RFID_GetReaderInfoA
#endif

RFID_STATUS WINAPI RFID_GetTimeZoneListW(
		RFID_HANDLE32 readerManagementHandle,
		LPTIME_ZONE_LISTW lpTimeZoneList);

RFID_STATUS WINAPI RFID_GetTimeZoneListA(
		RFID_HANDLE32 readerManagementHandle,
		LPTIME_ZONE_LISTA lpTimeZoneList);

#ifdef UNICODE
#define RFID_GetTimeZoneList RFID_GetTimeZoneListW
#else
#define RFID_GetTimeZoneList RFID_GetTimeZoneListA
#endif

RFID_STATUS WINAPI RFID_SetTimeZone(
		RFID_HANDLE32 readerManagementHandle,
		UINT16 timeZoneIndex);

RFID_STATUS WINAPI RFID_GetLLRPConnectionConfigW(
		RFID_HANDLE32 readerManagementHandle,
		LPLLRP_CONNECTION_CONFIGW lpLLRPConnectionConfig);

RFID_STATUS WINAPI RFID_GetLLRPConnectionConfigA(
		RFID_HANDLE32 readerManagementHandle,
		LPLLRP_CONNECTION_CONFIGA lpLLRPConnectionConfig);

#ifdef UNICODE
#define RFID_GetLLRPConnectionConfig RFID_GetLLRPConnectionConfigW
#else
#define RFID_GetLLRPConnectionConfig RFID_GetLLRPConnectionConfigA
#endif

RFID_STATUS WINAPI RFID_SetLLRPConnectionConfigW(
		RFID_HANDLE32 readerManagementHandle,
		LPLLRP_CONNECTION_CONFIGW lpLLRPConnectionConfig);

RFID_STATUS WINAPI RFID_SetLLRPConnectionConfigA(
		RFID_HANDLE32 readerManagementHandle,
		LPLLRP_CONNECTION_CONFIGA lpLLRPConnectionConfig);

#ifdef UNICODE
#define RFID_SetLLRPConnectionConfig RFID_SetLLRPConnectionConfigW
#else
#define RFID_SetLLRPConnectionConfig RFID_SetLLRPConnectionConfigA
#endif

RFID_STATUS WINAPI RFID_InitiateLLRPConnectionFromReader(
		RFID_HANDLE32 readerManagementHandle,
		LPVOID rsvd);

RFID_STATUS WINAPI RFID_DisconnectLLRPConnectionFromReader(
		RFID_HANDLE32 readerManagementHandle);

RFID_STATUS WINAPI RFID_SetTraceLevel(
		RFID_HANDLE32 readerHandle,
		UINT32 traceLevel);

WCHAR* WINAPI RFID_GetErrorDescriptionW(
		RFID_STATUS errorCode);

CHAR* WINAPI RFID_GetErrorDescriptionA(
		RFID_STATUS errorCode);

#ifdef UNICODE
#define RFID_GetErrorDescription RFID_GetErrorDescriptionW
#else
#define RFID_GetErrorDescription RFID_GetErrorDescriptionA
#endif

RFID_STATUS WINAPI RFID_GetLastErrorInfoW(
		RFID_HANDLE32 readerHandle,
		LPERROR_INFOW lpErrorInfo);

RFID_STATUS WINAPI RFID_GetLastErrorInfoA(
		RFID_HANDLE32 readerHandle,
		LPERROR_INFOA lpErrorInfo);

#ifdef UNICODE
#define RFID_GetLastErrorInfo RFID_GetLastErrorInfoW
#else
#define RFID_GetLastErrorInfo RFID_GetLastErrorInfoA
#endif

RFID_STATUS WINAPI RFID_SetCableLossCompensation(
		RFID_HANDLE32 readerManagementHandle,
		UINT16 nTotalAntennasToSet,
		LPCABLE_LOSS_COMPENSATION* lppCableLossCompensation);
		
RFID_STATUS WINAPI RFID_GetCableLossCompensation(
		RFID_HANDLE32 readerManagementHandle,
		LPCABLE_LOSS_COMPENSATION lpCableLossCompensation);

RFID_STATUS WINAPI RFID_GetSupportedRegionListW(
		RFID_HANDLE32 readerManagementHandle,
		REGION_LISTW *SupportedRegions);

RFID_STATUS WINAPI RFID_GetSupportedRegionListA(
		RFID_HANDLE32 readerManagementHandle,
		REGION_LISTA *SupportedRegions);

RFID_STATUS WINAPI RFID_GetRegionStandardListW (
		RFID_HANDLE32 readerManagementHandle,
		WCHAR* RegionName,
		STANDARD_INFO_LISTW *RegionStds);

RFID_STATUS WINAPI RFID_GetRegionStandardListA (
		RFID_HANDLE32 readerManagementHandle,
		CHAR* RegionName,
		STANDARD_INFO_LISTA *RegionStds);

RFID_STATUS WINAPI RFID_SetActiveRegionW(
		RFID_HANDLE32 readerManagementHandle,
		WCHAR*  RegionName,
		WCHAR* CommunicationStandardName);

RFID_STATUS WINAPI RFID_SetActiveRegionA(
		RFID_HANDLE32 readerManagementHandle,
		CHAR*  RegionName,
		CHAR* CommunicationStandardName);

RFID_STATUS WINAPI RFID_SetFrequencySetting (
		RFID_HANDLE32 readerManagementHandle,
		BOOLEAN bEnableFrequencyHopping,
		CHANNEL_LIST* lpChannelTable);

RFID_STATUS WINAPI RFID_GetActiveRegionInfoW(
		RFID_HANDLE32 readerManagementHandle,
		ACTIVE_REGION_INFOW* ActiveRegionInfo);

RFID_STATUS WINAPI RFID_GetActiveRegionInfoA(
		RFID_HANDLE32 readerManagementHandle,
		ACTIVE_REGION_INFOA* ActiveRegionInfo);

RFID_STATUS WINAPI RFID_GetActiveRegionStandardInfoW(
		RFID_HANDLE32 readerManagementHandle,
		STANDARD_REGION_INFOW* CurrentActiveRegionStandardInfo);

RFID_STATUS WINAPI RFID_GetActiveRegionStandardInfoA(
		RFID_HANDLE32 readerManagementHandle,
		STANDARD_REGION_INFOA* CurrentActiveRegionStandardInfo);

RFID_STATUS WINAPI RFID_ChangePasswordW(
		RFID_HANDLE32 readerManagementHandle,
		USER_INFOW* lpUserInfo);

RFID_STATUS WINAPI RFID_ChangePasswordA(
		RFID_HANDLE32 readerManagementHandle,
		USER_INFOA* lpUserInfo);

RFID_STATUS WINAPI RFID_GetPowerNegotiationState(
		RFID_HANDLE32 readerManagementHandle,
		BOOLEAN *lpPowerNegotiationInfo);

RFID_STATUS WINAPI RFID_SetPowerNegotiationState(
		RFID_HANDLE32 readerManagementHandle,
		BOOLEAN powerNegotiationInfo);

RFID_STATUS WINAPI RFID_GetPowerNegotiationStatus(
		RFID_HANDLE32 readerManagementHandle,
		POWER_NEGOTIATION_STATUS* lpPowerNegotiationStatus);

#ifdef UNICODE
#define RFID_GetSupportedRegionList			RFID_GetSupportedRegionListW
#define RFID_GetRegionStandardList			RFID_GetRegionStandardListW
#define RFID_SetActiveRegion				RFID_SetActiveRegionW
#define RFID_GetActiveRegionInfo			RFID_GetActiveRegionInfoW
#define RFID_GetActiveRegionStandardInfo	RFID_GetActiveRegionStandardInfoW
#define RFID_ChangePassword					RFID_ChangePasswordW
#else
#define RFID_GetSupportedRegionList			RFID_GetSupportedRegionListA
#define RFID_GetRegionStandardList			RFID_GetRegionStandardListA
#define RFID_SetActiveRegion				RFID_SetActiveRegionA
#define RFID_GetActiveRegionInfo			RFID_GetActiveRegionInfoA
#define RFID_GetActiveRegionStandardInfo	RFID_GetActiveRegionStandardInfoA
#define RFID_ChangePassword					RFID_ChangePasswordA
#endif

#ifdef __cplusplus
}
#endif

#endif
/*                Copyrights 2010-2016 Symbol Technologies LLC
 *                          All rights reserved
 * 
 *  
 *****************************************************************************
 */

/**
 *****************************************************************************
 ** 
 ** @file  rfidapiConstants.h
 ** 
 ** @brief <b>  Enumerated Types </b> 
 **
 ** 
 ****************************************************************************/
#ifndef RFIDAPI_CONSTANTS_H
#define RFIDAPI_CONSTANTS_H

#if defined(__cplusplus)
extern "C"
{
#endif

	
/**
* RFID_VERSION is a member of CONNECTION_INFO.
*/
typedef enum _RFID_VERSION
{
	RFID_API3_5_0 = 0, /**< Basic version of RFIDAPI3 - Dll version 5.0.xx*/

	RFID_API3_5_1 = 1, /**<  RFID API3  - Dll version 5.1.xx. Supports features related to TagEventReporting, RSSI-Filtering, 
											NXP Tag Support, RFID_WriteXXX, APIs, Push-Model of Firmware Update in fixed Readers, 
											TagLocationing, DutyCycle.*/
	RFID_API3_5_5 = 2, /**<  RFID API3  - Dll version 5.5.xx. Supports features related to Periodic Reporting of Tags, SL_All, Phase,
											AB_Flip, Antenna Configuration and Secure Connection.*/
}RFID_VERSION;

/**
* RFID_EVENT_TYPE is a parameter for RFID_RegisterEventNotification.
*/
typedef enum _RFID_EVENT_TYPE
{
	GPI_EVENT = 0, 				/**<  A GPI event (state change from high to low, or low to high) has occurred on a GPI port.
								When this event is signaled, RFID_GetEventData can be called to know 
								the GPI port and the event that has occurred. 
								The Dll can store a maximum of
								2000 GPI_EVENT_DATA, which if not retrieved using RFID_GetEventData,
								results in dropping of events in FIFO manner.
								*/
	TAG_DATA_EVENT = 1,			
	TAG_READ_EVENT = 1,			/**<  Applications can register for this event to get Tag Reports from the 
								Reader.
								When the event corresponding to this is signaled, it implies that 
								Tag(s) are available for the Application to read and the application can call
								RFID_GetReadTag till all Tags are fetched from the Dll's Queue.
								The Dll can store a maximum of
								4096 TAG_DATA by default, which if not retrieved using RFID_GetEventData,
								results in dropping of further events. The maximum Tag Storage count can be altered
								using the function RFID_SetTagStorageSettings. Inorder to get Tag reports indicating 
								result of Access-operations, applications can set the value in 
								RFID_SetTagStorageSettings.
								*/
	BUFFER_FULL_WARNING_EVENT = 2,/**<  When the internal buffers are 90% full, this event will be signaled.*/

	ANTENNA_EVENT = 3,			/**<  A particular Antenna has been Connected/Disconnected.
								When this event is signaled, RFID_GetEventData can be called to know 
								the Antenna and the Connection Status that has occurred.
								The Dll can store a maximum of
								2000 ANTENNA_EVENT_DATA, which if not retrieved using RFID_GetEventData,
								results in dropping of events in FIFO manner.
								*/
	INVENTORY_START_EVENT = 4,	/**<  Inventory Operation has started. In case of periodic trigger
									this event will be triggered for each period.*/
	INVENTORY_STOP_EVENT = 5,	/**<  Inventory Operation has stopped. In case of periodic trigger
									this event will be triggered for each period.*/
	ACCESS_START_EVENT = 6,		/**<  Access Operation has started.*/
	ACCESS_STOP_EVENT = 7,		/**<  Access Operation has stopped.*/
	DISCONNECTION_EVENT = 8,	/**< Event notifying disconnection from the Reader. 
								When this event is signaled, RFID_GetEventData can be called to know 
								the reason for the disconnection. The Application can call RFID_Reconnect 
								periodically to attempt reconnection or call RFID_Disconnect to cleanup and exit.*/
	BUFFER_FULL_EVENT = 9,		/**<  When the internal buffers are 100% full, this event will be signaled and 
								  tags are discarded in FIFO manner.*/
    NXP_EAS_ALARM_EVENT = 10,		/**<This Event is generated when Reader finds a(NXP)tag with it's EAS System bit	
									still set to true.>*/

	READER_EXCEPTION_EVENT = 11, /**< Event notifying that an exception has occurred in the Reader. 
								When this event is signaled, RFID_GetEventData can be called to know 
								the reason for the exception. The Application can continue to use the connection if
								the reader renders is usable.*/		
	HANDHELD_TRIGGER_EVENT = 12, 	/**<  A Handheld Gun/Button event Pull/Release has occurred.
								When this event is signaled, RFID_GetEventData can be called to know 
								which event that has occurred. 
								The Dll can store a maximum of
								2000 HANDHELD_TRIGGER_EVENT_DATA, which if not retrieved using RFID_GetEventData,
								results in dropping of events in FIFO manner.
								*/						  
    DEBUG_INFO_EVENT = 13,		/**<This Event is generated when Reader sends a debug information>*/

	TEMPERATURE_ALARM_EVENT = 14, /** <When the readers operating temperature reaches Threshold level, 
								  this event will be generated. RFID_GetEventData can be called to get the event 
								  details like source name (PA/Ambient), current Temperature 
								  and alarm Level (Low, High or Critical).>*/

}RFID_EVENT_TYPE;

/**
* READER_EXCEPTION_EVENT_TYPE specifies the event indicating the reason for Reader exception.
*/
typedef enum _READER_EXCEPTION_EVENT_TYPE
{
	UNKNOWN_EXCEPTION = 0, /**< Unknown exception. More data of the exception may be available in exceptionInfo of READER_EXCEPTION_EVENT_DATA.*/
}READER_EXCEPTION_EVENT_TYPE;

/**
* DISCONNECTION_EVENT_TYPE specifies the event indicating the reason for Disconnection.
*/
typedef enum _DISCONNECTION_EVENT_TYPE
{
	READER_INITIATED_DISCONNECTION = 0, /**< Disconnection notified from Reader 
								 (For e.g. Disconnect initiated from the web-console).*/
	READER_EXCEPTION = 1, /**< Reader has reported an exception. */
	CONNECTION_LOST = 2, /**<  Connection to Reader lost, say because of a network
								problem. If the connection to the reader was inactive (no keep-alive
								message from the Reader) for a time greater 
								than 10 times the timeout as specified in RFID_Connect, this event
								will be triggered to the application.*/
}DISCONNECTION_EVENT_TYPE;

/**
* ANTENNA_EVENT_TYPE specified the event indicating whether an antenna is connected or disconnected.
*/
typedef enum _ANTENNA_EVENT_TYPE
{
    ANTENNA_CONNECTED = 1,	/**<  Antenna is connected*/
    ANTENNA_DISCONNECTED = 0,	/**<  Antenna is disconnected*/
}ANTENNA_EVENT_TYPE;

/**
* GPI_PORT_STATE specifies the state of a GPI port.
*/
typedef enum _GPI_PORT_STATE
{
    GPI_PORT_STATE_LOW = 0,			/**<  GPI state is low.*/
    GPI_PORT_STATE_HIGH = 1,		/**<  GPI state is high.*/
    GPI_PORT_STATE_UNKNOWN = 2,		/**<  GPI state is unknown.*/
}GPI_PORT_STATE;

/**
* HANDHELD_TRIGGER_EVENT_TYPE specifies the type trigger that occurred.
*/
typedef enum _HANDHELD_TRIGGER_EVENT_TYPE
{
    HANDHELD_TRIGGER_RELEASED = 0,		/**<  The Gun/Button on the Handheld device was released.*/
    HANDHELD_TRIGGER_PRESSED = 1,		/**<  The Gun/Button on the Handheld device was pressed.*/
}HANDHELD_TRIGGER_EVENT_TYPE;

/**
*  READER_ID_TYPE indicates whether the Reader specifies the ReaderID as MAC Address or EPC-Id.
*/
typedef enum _READER_ID_TYPE
{
    MAC_ADDRESS = 0,/**<  Reader ID: MAC Address.*/
    EPC_ID = 1		/**<  Reader ID: EPC-ID.*/
}READER_ID_TYPE;

/**
* FORWARD_LINK_MODULATION indicates the type of forward link modulation. 
* It is a member of RF_MODE_TABLE_ENTRY.
*/
typedef enum _FORWARD_LINK_MODULATION
{
    FORWARD_LINK_MODULATION_PR_ASK = 0,
    FORWARD_LINK_MODULATION_SSB_ASK = 1,
    FORWARD_LINK_MODULATION_DSB_ASK = 2,
}FORWARD_LINK_MODULATION;

/**
* MODULATION indicates the type of modulation.
* It is a member of RF_MODE_TABLE_ENTRY.
*/
typedef enum _MODULATION
{
    MV_FM0 = 0,
    MV_2 = 1,
    MV_4 = 2,
	MV_8 = 3,
}MODULATION;

/**
* DIVIDE_RATIO indicates the Divide Ratio.
* It is a member of RF_MODE_TABLE_ENTRY.
*/
typedef enum _DIVIDE_RATIO
{
    DR_8 = 0,
    DR_64_3 = 1,
}DIVIDE_RATIO;

/**
* SPECTRAL_MASK_INDICATOR indicates the Spectral mask characteristics of the mode.
* It is a member of RF_MODE_TABLE_ENTRY.
*/
typedef enum _SPECTRAL_MASK_INDICATOR
{
    SMI_UNKNOWN = 0,
    SMI_SI = 1,
	SMI_MI = 2,
	SMI_DI = 3

}SPECTRAL_MASK_INDICATOR;

/**
* COMMUNICATION_STANDARD indicates the communication standard currently set for the Reader.
* It is a member of READER_CAPS.
*/
typedef enum _COMMUNICATION_STANDARD
{
	UNSPECIFIED=0,
	US_FCC_PART_15,
	ETSI_302_208,
	ETSI_300_220,
	AUSTRALIA_LIPD_1W,
	AUSTRALIA_LIPD_4W,
	JAPAN_ARIB_STD_T89,
	HONGKONG_OFTA_1049,
	TAIWAN_DGT_LP0002,
	KOREA_MIC_ARTICLE_5_2
}COMMUNICATION_STANDARD;

/**
* MEMORY_BANK specifies the four memory banks as supported by Class 1 Gen 2 Specification.
*/
typedef enum _MEMORY_BANK
{
    MEMORY_BANK_RESERVED = 0,	/**<  Reserved Memory: contain the kill and access passwords*/
    MEMORY_BANK_EPC,		/**<  EPC Memory: Contains CRC, Protocol-Control Bits, EPC Code*/
    MEMORY_BANK_TID,		/**<  TID Memory: Contains 8-bit class identifier and identifying information*/
    MEMORY_BANK_USER		/**<  User Memory: Contains user-specific data storage.*/
}MEMORY_BANK;

/**
* START_TRIGGER_TYPE indicates type of start trigger.
*/
typedef enum _START_TRIGGER_TYPE
{
	START_TRIGGER_TYPE_IMMEDIATE = 0, /**<  Start immediately when RFID_PerformInventory or RFID_PerformAccessSequence is called*/
	START_TRIGGER_TYPE_PERIODIC, /**<  Start periodically as per START_TRIGGER_PERIODIC*/
	START_TRIGGER_TYPE_GPI, /**<  Start based on GPI Trigger set by GPI_TRIGGER*/
	START_TRIGGER_TYPE_HANDHELD /**<  Start based on Handheld Gun/Button Trigger set by HANDHELD_TRIGGER*/
}START_TRIGGER_TYPE;

/**
* STOP_TRIGGER_TYPE indicates the type of stop trigger.
*/
typedef enum _STOP_TRIGGER_TYPE
{
	STOP_TRIGGER_TYPE_IMMEDIATE = 0, /**<  Stop immediately when RFID_StopInventory or RFID_StopAccessSequence is called*/
	STOP_TRIGGER_TYPE_DURATION, /**<  Stop after a specified duration*/
	STOP_TRIGGER_TYPE_GPI_WITH_TIMEOUT, /**<  Stop after a specified GPI Timeout*/
	STOP_TRIGGER_TYPE_TAG_OBSERVATION_WITH_TIMEOUT, /**<  Stop after a specified number of Tags are read*/
	STOP_TRIGGER_TYPE_N_ATTEMPTS_WITH_TIMEOUT, /**<  Stop after a specified number of attempts*/
	STOP_TRIGGER_TYPE_HANDHELD_WITH_TIMEOUT,/**<  Stop after a specified Handheld Trigger Gun/Button Timeout*/
}STOP_TRIGGER_TYPE;

/**
* TRUNCATE_ACTION indicates whether only a truncated portion of the tag is
* to be backscattered by the tag or not.
*/
typedef enum _TRUNCATE_ACTION
{
	TRUNCATE_ACTION_UNSPECIFIED = 0,/**<  The Reader decides what truncate action to take.*/
	TRUNCATE_ACTION_DO_NOT_TRUNCATE,/**<  Do not truncate*/
	TRUNCATE_ACTION_TRUNCATE,/**<  Truncate*/
}TRUNCATE_ACTION;

/**
* SESSION specifies the 4 sessions as supported by Class 1 Gen 2 Specification.
*/
typedef enum _SESSION
{
	SESSION_S0 = 0,/**<  Indicates to perform inventory based on Session S0 */
	SESSION_S1 = 1,/**<  Indicates to perform inventory based on Session S1 */
	SESSION_S2 = 2,/**<  Indicates to perform inventory based on Session S2 */
	SESSION_S3 = 3,/**<  Indicates to perform inventory based on Session S3 */
}SESSION;

/**
* INVENTORY_STATE specifies the two inventory-States as supported by Class 1 Gen 2 Specification.
*/

typedef enum _INVENTORY_STATE
{
	INVENTORY_STATE_A = 0, /**<  Indicates to select tags in State A for the session specified in SINGULATION_CONTROL.*/
	INVENTORY_STATE_B = 1, /**<  Indicates to select tags in State B for the session specified in SINGULATION_CONTROL.*/
	INVENTORY_STATE_AB_FLIP = 2 /**<  Indicates to select tags in State A or B and then flip them for the session specified in SINGULATION_CONTROL.*/
}INVENTORY_STATE;

/**
* FILTER_ACTION specifies the filter actions for the PreFilter: State Aware, Unaware or Default.
* 
*/
typedef enum _FILTER_ACTION
{
	FILTER_ACTION_DEFAULT = 0, /**<  Target and Action will be based on Reader-Settings*/
	FILTER_ACTION_STATE_AWARE = 1,/**<  State Aware */ 	
	FILTER_ACTION_STATE_UNAWARE = 2, /**<  State Unaware */
}FILTER_ACTION;



/**
* SL_FLAG specifies the Select-Flag as supported by Class 1 Gen 2 Specification.
*/
typedef enum _SL_FLAG
{
	SL_FLAG_ASSERTED = 0, /**<  Indicates to select tags with SL TRUE*/
	SL_FLAG_DEASSERTED = 1,/**<  Indicates to select tags with SL FALSE*/ 	
	SL_ALL  = 2
}SL_FLAG;

/**
* TARGET  specifies the Target Parameter for PreFilter (C1G2 Select) as supported by Class 1 Gen 2 Specification.
*/
typedef enum _TARGET
{
    TARGET_SL = 0,					/**<  Inventoried state for SL*/
    TARGET_INVENTORIED_STATE_S0 = 1,/**<  Inventoried state for session S0*/
    TARGET_INVENTORIED_STATE_S1 = 2,/**<  Inventoried state for session S1*/
    TARGET_INVENTORIED_STATE_S2 = 3,/**<  Inventoried state for session S2*/
    TARGET_INVENTORIED_STATE_S3 = 4,/**<  Inventoried state for session S3*/
}TARGET;

/**
* STATE_UNAWARE_ACTION specifies the state unware Action Parameter for PreFilter (C1G2 Select).
*/
typedef enum _STATE_UNAWARE_ACTION
{
	STATE_UNAWARE_ACTION_SELECT_NOT_UNSELECT = 0x00,	/**<   Action 0: 
	Matching tags: SELECT , Non-matching tags: UNSELECT*/
	STATE_UNAWARE_ACTION_SELECT = 0x01,	/**<   Action 1: 
	Matching tags: SELECT, Non-matching tags: do nothing*/
	STATE_UNAWARE_ACTION_NOT_UNSELECT = 0x02,	/**<   Action 2: 
	Matching tags: do nothing, Non-matching tags: UNSELECT*/
	STATE_UNAWARE_ACTION_UNSELECT = 0x03,	/**<   Action 3: 
	Matching tags: UNSELECT , Non-matching tags: do nothing*/
	STATE_UNAWARE_ACTION_UNSELECT_NOT_SELECT = 0x04,	/**<   Action 4: 
	Matching tags: UNSELECT , Non-matching tags: SELECT*/	
	STATE_UNAWARE_ACTION_NOT_SELECT = 0x05,	/**<   Action 5: 
	Matching tags: do nothing, Non-matching tags: SELECT*/
}STATE_UNAWARE_ACTION;

/**
* STATE_AWARE_ACTION specifies the state aware action Parameter for PreFilter (C1G2 Select).
*/
typedef enum _STATE_AWARE_ACTION 
{
	STATE_AWARE_ACTION_INV_A_NOT_INV_B			= 0x00,	/**<   Action 0:  
	Matching tags: inventoried state to A, Non-matching tags: inventoried state to B*/
	STATE_AWARE_ACTION_ASRT_SL_NOT_DSRT_SL		= 0x00,	/**<   Action 0:
	Matching tags: assert SL , Non-matching tags: deassert SL*/
	STATE_AWARE_ACTION_INV_A					= 0x01,/**<   Action 1: 
	Matching tags: inventoried state to A, Non-matching tags: do nothing*/
	STATE_AWARE_ACTION_ASRT_SL	= 0x01,/**<   Action 1: 
	Matching tags: assert SL , Non-matching tags: do nothing*/
	STATE_AWARE_ACTION_NOT_INV_B = 0x02,/**<   Action 2:
	Matching tags: do nothing, Non-matching tags: inventoried state to B*/
	STATE_AWARE_ACTION_NOT_DSRT_SL	= 0x02,/**<   Action 2: 
	Matching tags: do nothing, Non-matching tags: deassert SL*/
	STATE_AWARE_ACTION_INV_A2BB2A = 0x03,/**<   Action 3:
	Matching tags: (A to B, B to A), Non-matching tags:  do nothing*/
	STATE_AWARE_ACTION_INV_A2BB2A_NOT_INV_A = 0x03,/**<   Action 3:
	[Obsolete("Do not use this enumeration. Use STATE_AWARE_ACTION_INV_A2BB2A")]												
	Matching tags: (A to B, B to A), Non-matching tags:  do nothing*/
	STATE_AWARE_ACTION_NEG_SL = 0x03,/**<   Action 3:
	Matching tags: negate SL , Non-matching tags:  do nothing*/
	STATE_AWARE_ACTION_NEG_SL_NOT_ASRT_SL		= 0x03,/**<   Action 3:
	[Obsolete("Do not use this enumeration. Use STATE_AWARE_ACTION_NEG_SL")]
	Matching tags: negate SL , Non-matching tags:  do nothing*/
	STATE_AWARE_ACTION_INV_B_NOT_INV_A			= 0x04,/**<   Action 4: 
	Matching tags: inventoried state to B, Non-matching tags:   inventoried state to A*/
	STATE_AWARE_ACTION_DSRT_SL_NOT_ASRT_SL		= 0x04,/**<   Action 4: 
	Matching tags: deassert SL, Non-matching tags:  assert SL*/
	STATE_AWARE_ACTION_INV_B = 0x05,/**<   Action 5: 
	Matching tags: inventoried state to B, Non-matching tags:  do nothing*/
	STATE_AWARE_ACTION_DSRT_SL	= 0x05,/**<   Action 5: 
	Matching tags: deassert SL  , Non-matching tags:  do nothing*/
	STATE_AWARE_ACTION_NOT_INV_A	= 0x06,/**<   Action 6: 
	Matching tags: do nothing, Non-matching tags:  inventoried state to A*/
	STATE_AWARE_ACTION_NOT_ASRT_SL	= 0x06,/**<   Action 6: 
	Matching tags: do nothing, Non-matching tags:  assert SL*/
	STATE_AWARE_ACTION_NOT_INV_A2BB2A	= 0x07,/**<   Action 7:
	Matching tags: do nothing, Non-matching tags:  (A to B, B to A)*/
	STATE_AWARE_ACTION_NOT_NEG_SL	= 0x07/**<   Action 7:
	Matching tags: do nothing, Non-matching tags:  negate SL */
}STATE_AWARE_ACTION;


/**
*  LOCK_PRIVILEGE specifies the privilege Parameter for RFID_Lock.
*/
typedef enum _LOCK_PRIVILEGE
{
	 LOCK_PRIVILEGE_NONE = 0,				/**<   This is the default Value for privilege field in LOCK_ACCESS_PARAMS. 
															 This value indicates that when user is calling RFID_Lock, he  
															 doesnt want to change the lock privilege of the particular memory bank*/
    LOCK_PRIVILEGE_READ_WRITE = 1,		/**<   Lock Privilege: Read-Write*/
    LOCK_PRIVILEGE_PERMA_LOCK = 2,		/**<   Lock Privilege: Permanent Lock*/
    LOCK_PRIVILEGE_PERMA_UNLOCK = 3,	/**<   Lock Privilege: Permanent unlock*/
    LOCK_PRIVILEGE_UNLOCK = 4,			/**<   Lock Privilege: Unlock*/
}LOCK_PRIVILEGE;
#define NUM_LOCK_DATA_FIELDS 5 /**< This indicates the number of data fields that can be used for 
										Lock operation. The fields are as in LOCK_DATA_FIELD*/

/**
*  LOCK_DATA_FIELD specifies the data field on which lock operation is to performed using RFID_Lock.*/
typedef enum _LOCK_DATA_FIELD
{
    LOCK_KILL_PASSWORD = 0,	/**<   Lock the data field: Kill Password.*/
    LOCK_ACCESS_PASSWORD= 1,	/**<   Lock the data field: Access Password.*/
    LOCK_EPC_MEMORY = 2,		/**<   Lock the data field: EPC Memory.*/
    LOCK_TID_MEMORY = 3,		/**<   Lock the data field: TID Memory.*/
    LOCK_USER_MEMORY = 4,		/**<   Lock the data field: User Memory.*/
}LOCK_DATA_FIELD;

/**
*  RECOMMISSION_OPERATION_CODE specifies the operation Parameter for RFID_Recommission.
* Note: Options 3 and 7 are subject to change as functionality is not finalized.
*/
typedef enum _RECOMMISSION_OPERATION_CODE
{
	RECOMMISSION_DISABLE_PERMALOCK = 1,				/**<   The Block PermaLocking disabled, and any blocks of user memory that has been
															previously blocked permalocked are no longer block permalocked.*/
    RECOMMISSION_DISABLE_USER_MEMORY = 2,			/**<   The User Memory has been rendered inaccessible. */
    RECOMMISSION_DISABLE_USER_MEMORY_2ND_OPTION = 3,/**<   Same as RECOMMISSION_DISABLE_USER_MEMORY above. */
	RECOMMISSION_DISABLE_PASSWORD = 4,				/**<   Unlock EPC, TID, and User memory banks has been unlocked and Render the kill 
															and access passwords permanently unreadable.*/
    RECOMMISSION_DISABLE_PERMALOCK_PASSWORD = 5,	/**<   Combines DISABLE_PERMALOCK and DISABLE_PASSWORD.*/
    RECOMMISSION_DISABLE_USER_MEMORY_PASSWORD = 6,	/**<   Combine DISABLE_USER_MEMORY and DISABLE_PASSWORD.*/
	RECOMMISSION_DISABLE_USER_MEMORY_PASSWORD_2ND_OPTION = 7 /**< Same as RECOMMISSION_DISABLE_USER_MEMORY_PASSWORD above.*/
}RECOMMISSION_OPERATION_CODE;

/**
*  ANTENNA_MODE specifies the Antenna mode setting for RFID_SetAntennaMode.
*/
typedef enum _ANTENNA_MODE
{
	 ANTENNA_MODE_BISTATIC	= 0, /**< Bi-static  Antenna.*/
	 ANTENNA_MODE_MONOSTATIC= 1 /**<  Mono-static Antenna.*/
}ANTENNA_MODE;


/**
*  ACCESS_OPERATION_CODE specifies the Operation Code for Operation Sequence.
*/
typedef enum _ACCESS_OPERATION_CODE
{
	ACCESS_OPERATION_READ						= 0, /**<   Read*/
	ACCESS_OPERATION_WRITE						= 1, /**<   Write*/
	ACCESS_OPERATION_LOCK						= 2, /**<   Lock*/
	ACCESS_OPERATION_KILL						= 3, /**<   Kill*/
	ACCESS_OPERATION_BLOCK_WRITE				= 4, /**<   Block Write*/
	ACCESS_OPERATION_BLOCK_ERASE				= 5, /**<   Block Erase*/
	ACCESS_OPERATION_RECOMMISSION				= 6, /**<  Recommission*/
	ACCESS_OPERATION_BLOCK_PERMALOCK			= 7, /**<  Block Permalock*/
	ACCESS_OPERATION_NXP_SET_EAS				= 8, /**< Change EAS state of NXP tag(s)*/
	ACCESS_OPERATION_NXP_READ_PROTECT			= 9, /**<Protect NXP tags from Inventory and access */
	ACCESS_OPERATION_NXP_RESET_READ_PROTECT     = 10,/**< Remove Read Protection for NXP tags*/
	ACCESS_OPERATION_FUJITSU_CHANGE_WORDLOCK    = 11,/**< Changes WordLock flags for two words in Fujitsu's 64K tags*/
	ACCESS_OPERATION_FUJITSU_CHANGE_BLOCKLOCK	= 12,/**< Changes BlockLock flags for the Blocks inside a BlockGroup of Fujitsu's 64K Tags*/
	ACCESS_OPERATION_FUJITSU_READ_BLOCKLOCK		= 13,/**< Reads status of BlockLock flags inside a BlockGroup of Fujitsu's 64K Tags*/
	ACCESS_OPERATION_FUJITSU_BURST_WRITE        = 14,/**< Does a BurstWrite of Data,in multiples of 4 bytes,into Fujitsu 64K Tags and returns with number of bytes not successfully written.*/  
	ACCESS_OPERATION_FUJITSU_BURST_ERASE		= 15,/**< Does a BurstErase of Data,in multiples of 4 bytes,in the 64K Fujitsu Tags and returns with number of bytes not successfully erased.*/
	ACCESS_OPERATION_FUJITSU_CHANGE_BLOCK_OR_AREA_GROUPPASSWORD = 16,/**<Changes a BlockGroup's password or an AreaGroup's password depending on whether target tag is 64K or 8K Fujitsu Tag*/
	ACCESS_OPERATION_FUJITSU_AREA_READLOCK		= 17,/**< Changes ReadLock flags for the Areas inside an AreaGroup of Fujitsu's 8K Tags*/
	ACCESS_OPERATION_FUJITSU_AREA_WRITELOCK		= 18,/**< Changes WriteLock flags for the Areas inside an AreaGroup of Fujitsu's 8K Tags*/
	ACCESS_OPERATION_FUJITSU_AREA_WRITELOCK_WOPASSWORD = 19, /**<Sets WriteLock flags for the Areas inside an AreaGroup of Fujitsu's 8K Tags without requiring the AreaGroup's password*/
	ACCESS_OPERATION_IMPINJ_QT_WRITE			= 20, /**<  Sets the Read/Write and Persistence flags*/
	ACCESS_OPERATION_IMPINJ_QT_READ				= 21, /**<  Gets the Read/Write and Persistence flags*/
	ACCESS_OPERATION_NXP_CHANGE_CONFIG			= 22, /**<  NXP change config access operation*/
	ACCESS_OPERATION_NONE = 0xFF, /**<  Not to be used for RFID_AddOperationToAccessSequence*/
}ACCESS_OPERATION_CODE;


/**
*  TAG_FIELD specifies the fields to be enabled in TAG_DATA.
*/
typedef enum _TAG_FIELD
{
	ANTENNA_ID					= 1,	/**<   Fetch AntennaID on which Tag was found from Reader */
	FIRST_SEEN_TIME_STAMP		= 2,	/**<   Fetch Tag's First Seen Time Stamp from Reader */
	LAST_SEEN_TIME_STAMP		= 4,	/**<   Fetch Tag's Last Seen Time Stamp from Reader */
	PEAK_RSSI					= 8,	/**<   Fetch RSSI of the tag from Reader */
	TAG_SEEN_COUNT				= 16,	/**<   Fetch Tag Seen Count of the tag from Reader */
	PC							= 32,	/**<   Fetch Tag's PC field from Reader */
	XPC							= 64,	/**<   Fetch Tag's XPC field from Reader */
	CRC							= 128,	/**<   Fetch Tag's CRC field from Reader */
	CHANNEL_INDEX				= 256,	/**<   Fetch the Channel Index on which the Tag was found*/
	PHYSICAL_PORT				= 512,	/**<   Fetch the Transmit and receive port of the Antenna on which the Tag was found*/
	ZONE_ID						= 1024, /**<   Fetch the Zone ID of the zone where the tag was found */
	ZONE_NAME					= 2048, /**<   Fetch the Zone Name where the tag was found */
	PHASE_INFO					= 4096, /**<   Fetch the Phase information reported by the reader when this tag was seen */
	ALL_TAG_FIELDS				= 0x1FFF /**<	Fetch all fields*/
}TAG_FIELD;

/**
*  TAG_EVENT specifies the event pertaining to a Tag reported via TAG_DATA.
*/
typedef enum _TAG_EVENT
{	
	UNKNOWN_STATE = 0,			/**<   This implies that the Tag is a result of autonomous mode operation and
									but the state of the tag is not known.*/
	NEW_TAG_VISIBLE = 1,		/**<   This implies that the Tag is a result of autonomous mode operation and
									the tag is visible for the first time.*/
	TAG_NOT_VISIBLE = 2,		/**<   This implies that the Tag is a result of autonomous mode operation and
									the tag is not visible.*/
	TAG_BACK_TO_VISIBILITY = 3,	/**<   This implies that the Tag is a result of autonomous mode operation and
									the tag is back to visibility.*/
	NONE = 4,				/**<   This implies that the Tag is not a result of autonomous mode operation.*/

}TAG_EVENT;

/**
*  Report Trigger Types for Tag reporting when Reader is operating in Autonomous mode.
*/
typedef enum _TAG_EVENT_REPORT_TRIGGER
{
	NEVER = 0,				/**< Disable new event reporting.*/
	IMMEDIATE = 1,			/**< Report immediately when the event occurs. */
	MODERATED = 2,			/**< Report subject to a moderation time.*/

}TAG_EVENT_REPORT_TRIGGER;
/**
*  READER_TYPE specifies the Reader Type and is a parameter for RFID_Login.
*/
typedef enum _READER_TYPE
{
	XR = 0, /**<   All Readers of XR Series*/
	FX = 1, /**<   All Readers of FX Series*/
	MC = 2, /**<   All (LLRP compliant) Readers of MC Series*/
}READER_TYPE;

/**
* MATCH_PATTERN specifies whether the criteria of filtering tags matching patterns A and B.
* It is a member of POST_FILTER and ACCESS_FILTER.
*/
typedef enum _MATCH_PATTERN
{
	A_AND_B=0,		/**<   Filter tags that match both the pattern A and pattern B.*/
	NOTA_AND_B,		/**<   Filter tags that do not match pattern A where as matches pattern B.*/
	NOTA_AND_NOTB,	/**<   Filter tags that do not match pattern A and also do not match pattern B.*/
	A_AND_NOTB		/**<   Filter Tags which match pattern A but do not match Pattern B. */
}MATCH_PATTERN;

/**
* MATCH_RANGE specifies the Selection for match range.
* It is a member of RSSI_RANGE_FILTER and TIME_RANGE_FILTER.
*/
typedef enum _MATCH_RANGE
{
	WITHIN_RANGE = 0,				/**<	Within range; between lower and upper time limits, 
											lower and upper limit inclusive. */
	OUTSIDE_RANGE = 1,				/**<	Outside range; outside lower and upper time limits, 
											lower and upper limit inclusive. */
	GREATER_THAN_LOWER_LIMIT = 2,	/**<	Greater than lower limit; Greater than lower time limit, 
											lower limit inclusive, upper limit ignored. */
	LOWER_THAN_UPPER_LIMIT = 3,	/**<	Lower than upper limit; Lower than upper time limit,
											upper limit inclusive, lower limit ignored.*/
}MATCH_RANGE;

/**
*  TRACE_LEVEL specifies the trace-level setting for RFID_SetTraceLevel.
*/
typedef enum _TRACE_LEVEL
{
	TRACE_LEVEL_OFF = 0,		/**<   Disable all traces.*/
	TRACE_LEVEL_FATAL	= 1,	/**<   Set trace-level to see Fatal Errors.*/
	TRACE_LEVEL_ERROR = 2,		/**<   Set trace-level to see Errors.*/
	TRACE_LEVEL_WARNING = 4,	/**<   Set trace-level to see Warnings (Unexpected events).*/
	TRACE_LEVEL_INFO = 8,		/**<   Set trace-level to see info (Tag reports, Events, function entry/exit of APIs, etc)*/
	TRACE_LEVEL_VERBOSE = 16,	/**<   Set trace-level to see verbose (function entry/exit of internal functions).*/
	TRACE_LEVEL_ALL = 31		/**<   Enable all traces.*/
}TRACE_LEVEL;

/**
*  READER_ID_LENGTH specifies the length of ReaderID.
*/
typedef enum _READER_ID_LENGTH
{
	MAC_LENGTH = 8,/**<   Length of MAC Address*/
	EPC_LENGTH = 12/**<   Length of EPC-Id*/
}READER_ID_LENGTH;

/**
*  SERVICE ID specifies the Application/ Component for RFID_GetHealthStatus
*/
typedef enum _SERVICE_ID
{
	RM   = 0, /**<   RM Server*/
	LLRP_SERVER = 1, /**<   LLRP Server*/
}SERVICE_ID;

/**
*  HEALTH status specifies whether it is up/down
*/
typedef enum _HEALTH_STATUS
{
	DOWN = 0,/**<   Health status is DOWN*/
	UP   = 1 /**<   Health status is UP*/

}HEALTH_STATUS;

/**
*  USB_OPERATION_MODE specifies the operation mode of USB setting on the Reader
*/
typedef enum _USB_OPERATION_MODE
{
	ACTIVE_SYNC = 0,/**<   Indicates that activeSync will be enabled over USB connection */
	NETWORK = 1,/**<   Indicates that Virtual Network over USB will be enabled*/
}USB_OPERATION_MODE;

typedef enum _POWER_SOURCE_MODE
{
	FULL = 0,/**<   Indicates that Power source type is FULL 24v */
	POE_PLUS = 1,/**<   Indicates that Power source type is POE+*/
    POE = 2,/**<   Indicates that Power source type is POE  */
}POWER_SOURCE_MODE;

typedef enum _POWER_NEGOTIATION_STATUS
{
	DISABLED_STATE = 0,/**<   Indicates that Power Negotiation status is Disabled */
	ONGOING = 1,/**<   Indicates that Power Negotiation status is Disabled */
    SUCCEEDED = 2,/**<   Indicates that Power Negotiation status is Succeeded  */
	FAILURE = 3,/**<   Indicates that Power Negotiation status is Failure  */
	NOT_APPLICABLE = 4,/**<   Indicates that Power Negotiation status is NotApplicable  */
}POWER_NEGOTIATION_STATUS;

typedef enum _LED_COLOR
{
	LED_OFF =0,
	LED_RED,
	LED_GREEN,
	LED_YELLOW
}LED_COLOR;

/**
*   OPERATION_QUALIFIER indicates the operation to be performed on the corresponding antenna
*/
typedef enum _OPERATION_QUALIFIER
{
  C1G2_OPERATION = 0,  /**< Inventory or Access operation(Default) */
  NXP_EAS_SCAN =1,	   /**< Electronic Article Surveillance */
  LOCATE_TAG = 2,				/**< Tag locating using default algorithm. This algorithm can be performed only on Single antenna.*/
}OPERATION_QUALIFIER;

/**
* Source of the Temperature Alarm Event
*/
typedef enum _TEMPERATURE_SOURCE
{
	 AMBIENT = 0, /**< Ambient Temperature */
	 PA, /**< PA Temperature */
}TEMPERATURE_SOURCE;

/**
* Specifies Alarm Level
*/
typedef enum _ALARM_LEVEL
{
	 LOW = 0, /**< Low */
	 HIGH, /**< High */
	 CRITICAL /**< Critical */
}ALARM_LEVEL;


typedef enum _ANTENNA_STOP_TRIGGER_TYPE
{
  ANTENNA_STOP_TRIGGER_TYPE_N_ATTEMPTS=1, /**<  Stop after a specified number of attempts*/  
  ANTENNA_STOP_TRIGGER_TYPE_DURATION_MILLISECS=2, /**<  Stop after a specified Millsecond duration*/
  ANTENNA_STOP_TRIGGER_TYPE_DURATION_SECS=3, /**<  Stop after a specified Second duration*/
}ANTENNA_STOP_TRIGGER_TYPE;

/** 
 *   BATTERY_STATUS ENUM 
 */
typedef enum _BATTERY_STATUS 
{ 
  BATTERY_CHARGING = 0,         /**<  battery charging */ 
  BATTERY_DISCHARGING = 1,      /**<  battery discharging */ 
  BATTERY_LEVEL_CRITICAL = 2,   /**<  battery level critical*/ 
  BATTERY_STATUS_UNKNOWN = -1           /**<   status is unknown */
}BATTERY_STATUS; 

#ifdef __cplusplus
}
#endif
#endif //RFIDAPI_CONSTANTS_H
/*                Copyrights 2010-2016 Symbol Technologies LLC
 *                          All rights reserved
 * 
 *  
 *****************************************************************************
 */

/**
 *****************************************************************************
 ** 
 ** @file  rfidapiErrors.h
 ** 
 ** @brief <b>  Error codes </b> 
 ** 
 ** 
 ****************************************************************************/
#ifndef RFIDAPI_ERRORS_H
#define RFIDAPI_ERRORS_H
#include "rfidapiTypes.h"

#if defined(__cplusplus)
extern "C"
{
#endif
typedef enum _RFID_STATUS
{
	RFID_API_SUCCESS					=	0,		/*!< Function succeeded*/
	RFID_API_COMMAND_TIMEOUT			=	1,		/*!< Command timeout*/
	RFID_API_PARAM_ERROR 				=	2,		/*!< Invalid parameter given*/
	RFID_API_PARAM_OUT_OF_RANGE			=	3,		/*!< Parameter out of range*/
	RFID_API_CANNOT_ALLOC_MEM 			=	4,		/*!< Cannot allocate memory*/
	RFID_API_UNKNOWN_ERROR 				=	5,		/*!< Unable to determine error*/
	RFID_API_INVALID_HANDLE				=	6,		/*!< Invalid Handle is provided*/
	RFID_API_BUFFER_TOO_SMALL			=	7,		/*!< Assigned memory buffer is small*/
	RFID_READER_FUNCTION_UNSUPPORTED	=	8,		/*!< Functionality Not Supported by Reader*/
	RFID_RECONNECT_FAILED				=	9,		/*!< Unable to Reconnect to reader. The Reader state 
													might have changed. Attempt Connect API instead of Reconnect API.*/
	RFID_API_DATA_NOT_INITIALISED		=	10,		/*!< DATA should be initalised before using the structure*/
	RFID_API_ZONE_ID_ALREADY_EXITS		=	11,		/*!< Zone ID already exists*/
	RFID_API_ZONE_ID_NOT_FOUND			=	12,		/*!< Zone ID not found*/
	
	RFID_COMM_OPEN_ERROR				=	100,	/*!< Unable to open connection to the reader*/
	RFID_COMM_CONNECTION_ALREADY_EXISTS	=	101,	/*!< Connection Already exists*/
	RFID_COMM_RESOLVE_ERROR				=	102,	/*!< Unable to resolve IP or Host Name*/
	RFID_COMM_SEND_ERROR				=	103,	/*!< Error writing to transport interface*/
	RFID_COMM_RECV_ERROR				=	104,	/*!< Error reading from transport interface*/
	RFID_COMM_NO_CONNECTION				=	105,	/*!< No Connection exists to the Host*/
	RFID_INVALID_SOCKET					=   106,    /*!< Invalid Socket Handle passed*/
	RFID_READER_REGION_NOT_CONFIGURED   =   107,    /*!< Region of the Reader is not configured*/
	RFID_READER_REINITIALIZING			=   108,    /*!< Reader is reinitializing after a Firmware/OEM update*/
	RFID_SECURE_CONNECTION_ERROR		=	109,	/*!< Secure connection error. Process connStatus in SEC_CONNECTION_INFO for additional info */
	RFID_ROOT_SECURITY_CERTIFICATE_ERROR	=	110,	/*!< Root CA Security certificate missing or invalid*/
	RFID_HOST_SECURITY_CERTIFICATE_ERROR	=	111,	/*!< Host Security certificate missing or invalid*/
	RFID_HOST_SECURITY_KEY_ERROR			=	112,	/*!< Host private key missing or invalid*/
	
	RFID_CONFIG_GET_FAILED				=	200,	/*!< Unable to get the configuration*/
	RFID_CONFIG_SET_FAILED				=	201,	/*!< Unable to set the configuration*/

	RFID_CAP_NOT_SUPPORTED				=	300,	/*!< The specified capability is not supported*/
	RFID_CAP_GET_FAILED					=	301,	/*!< Unable to get the capability*/
	
	RFID_FILTER_NO_FILTER				=	400,	/*!< No Filter criteria specified*/
	RFID_FILTER_INVALID_INDEX			=	401,	/*!< Invalid index specified*/
	RFID_FILTER_MAX_FILTERS_EXCEEDED	=	402,	/*!< Reached limit for maximum number of filters that can be added*/ 
	RFID_NO_READ_TAGS					=	403,	/*!< No read Tags */
	RFID_NO_REPORTED_EVENTS				=	404,	/*!< No Events have been reported from the Reader */
	RFID_INVENTORY_MAX_TAGS_EXCEEDED	=	405,	/*!< Tag List is full, tag cannot be stored*/
	RFID_INVENTORY_IN_PROGRESS			=	406,	/*!< Inventory in progress, cannot perform
														requested operation*/ 
	RFID_NO_INVENTORY_IN_PROGRESS		=	407,	/*!< There is no Inventory in progress*/ 

	RFID_TAG_LOCATING_IN_PROGRESS		=	420,	/*!< Tag Locating in progress, cannot perform
														requested operation*/ 
	RFID_NO_TAG_LOCATING_IN_PROGRESS	=	421,	/*!< There is no Tag locating operation in progress*/ 

	RFID_NXP_EAS_SCAN_IN_PROGRESS		=	422,	/*!< NXP EAS SCAN Operation in progress, cannot perform
														requested operation*/ 
	RFID_NO_NXP_EAS_SCAN_IN_PROGRESS	=	423,	/*!< There is no NXP EAS SCAN operation in progress*/ 

	RFID_ACCESS_IN_PROGRESS				=	500,	/*!< Access Operation in progress, cannot perform
														requested operation*/ 
	RFID_NO_ACCESS_IN_PROGRESS			=	501,	/*!< There is no Access operation in progress*/ 
	RFID_ACCESS_TAG_READ_FAILED			=	502,	/*!< Tag read failed*/
	RFID_ACCESS_TAG_WRITE_FAILED		=	503,	/*!< Tag write failed*/
	RFID_ACCESS_TAG_LOCK_FAILED			=	504,	/*!< Tag Lock failed*/
	RFID_ACCESS_TAG_KILL_FAILED			=	505,	/*!< Tag Kill failed*/
	RFID_ACCESS_TAG_BLOCK_ERASE_FAILED	=	506,	/*!< Tag Block Erase failed*/
	RFID_ACCESS_TAG_BLOCK_WRITE_FAILED	=	507,	/*!< Tag Block Write failed*/
	RFID_ACCESS_TAG_NOT_FOUND			=	508,	/*!< Tag(s) not found in the field which matches the set Filter(s)*/
	RFID_ACCESS_SEQUENCE_NOT_INITIALIZED	=	510,	/*!< Access Sequence is not initialized*/ 
	RFID_ACCESS_SEQUENCE_EMPTY				=	511,	/*!< Access Sequence is Empty*/ 
	RFID_ACCESS_SEQUENCE_IN_USE				=	512,	/*!< Access Sequence is already in use*/ 
	RFID_ACCESS_SEQUENCE_MAX_OP_EXCEEDED	=	513,	/*!< Reached limit for maximum number of operations that can be added into Access-Sequence*/ 
	RFID_ACCESS_TAG_RECOMMISSION_FAILED		=	514,	/*!< Tag Recommission failed*/
	RFID_ACCESS_TAG_BLOCK_PERMALOCK_FAILED	=	515,	/*!< Tag Block Permalock failed*/
    RFID_ACCESS_NXP_TAG_SET_EAS_FAILED       =  516,     /*!<Tag Set EAS failed*/
	RFID_ACCESS_NXP_TAG_READ_PROTECT_FAILED  =  517,     /*!<Tag ReadProtect failed*/
	RFID_ACCESS_FUJITSU_CHANGE_WORDLOCK_FAILED = 518,    /*!< Tag Change WordLock failed*/
	RFID_ACCESS_FUJITSU_CHANGE_BLOCKLOCK_FAILED = 519,	 /*!< Tag Change BlockLock failed*/
	RFID_ACCESS_FUJITSU_READ_BLOCKLOCK_FAILED   = 520,	 /*!< Tag Read BlockLock failed*/
	RFID_ACCESS_FUJITSU_BURST_WRITE_FAILED      = 521,	 /*!< Tag Burst Write failed*/
	RFID_ACCESS_FUJITSU_BURST_ERASE_FAILED	    = 522,   /*!< Tag Burst Erase failed*/		
	RFID_ACCESS_FUJITSU_CHANGE_BLOCK_OR_AREA_GROUPPASSWORD_FAILED = 523,  /*!< Tag Change BlockOrAreaGroup Passowrd failed*/
    RFID_ACCESS_FUJITSU_AREA_READLOCK_FAILED    = 524,   /*!< Tag Area ReadLock failed*/	
	RFID_ACCESS_FUJITSU_AREA_WRITELOCK_FAILED   = 525,   /*!< Tag Area WriteLock failed*/
	RFID_ACCESS_FUJITSU_AREA_WRITELOCK_WOPASSWORD_FAILED = 526,	/*!< Tag Area WriteLockWOPassword failed*/
	RFID_ACCESS_NXP_CHANGE_CONFIG_FAILED		= 527,			/*!< NXP Change Config failed*/
	RFID_ACCESS_IMPINJ_QT_READ_FAILED			= 528,			/*!< Impinj QT Read failed*/
	RFID_ACCESS_IMPINJ_QT_WRITE_FAILED			= 529,			/*!< Impinj QT Write failed*/
	RFID_RM_INVALID_USERNAME_PASSWORD	=	601,	/*!< Invalid Username or password*/
	RFID_RM_NO_UPDATION_IN_PROGRESS		=	602,	/*!< No Updation going on at present*/
	RFID_RM_UPDATION_IN_PROGRESS		=	603,	/*!< Updation already in progress*/
	RFID_RM_COMMAND_FAILED				=	604,	/*!< RM Command processing failed*/
	RFID_INVALID_ERROR_CODE				=	700,	/*!< Invalid Error-Code*/
}RFID_STATUS;


typedef enum _ACCESS_OPERATION_STATUS
{	
	ACCESS_SUCCESS							=	0,		/*!< Tag Operation succeeded*/
	ACCESS_TAG_NON_SPECIFIC_ERROR			=	1,		/*!< Non-Specific Tag Error*/
	ACCESS_READER_NON_SPECIFIC_ERROR		=	2, 		/*!< Non-Specific Reader Error*/
	ACCESS_NO_RESPONSE_FROM_TAG				=	3,		/*!< No response from Tag*/
	ACCESS_INSUFFIFICENT_POWER				=	4,		/*!< Operation Failed due to insufficient Power*/
	ACCESS_INSUFFICENT_POWER				=	4,		/*!< Operation Failed due to insufficient Power*/ /*typo corrected*/
	ACCESS_TAG_MEMORY_LOCKED_ERROR			=	5,		/*!< Operation Failed as Tag memory was locked*/
	ACCESS_TAG_MEMORY_OVERRUN_ERROR			=	6,		/*!< Operation Failed due to memory overrun*/
	ACCESS_ZERO_KILL_PASSWORD_ERROR			=	7,		/*!< Operation Failed as Kill password provided was zero*/
}ACCESS_OPERATION_STATUS;

#ifdef __cplusplus
}
#endif

#endif //RFIDAPI_ERRORS_H
/*                Copyrights 2010-2016 Symbol Technologies LLC
*                           All rights reserved
* 
*  
*****************************************************************************
*/

/**
*****************************************************************************
** 
** @file  rfidapiStructs.h
** 
** @brief <b> Structures </b> 
** 
** 
****************************************************************************/
#ifndef RFIDAPI_STRUCTS_H
#define RFIDAPI_STRUCTS_H
#include "rfidapiErrors.h"

#if defined(__cplusplus)
extern "C"
{
#endif

	
/**
* SEC_CONNECTION holds additional information for establishing secure connection.
*/
typedef struct _SEC_CONNECTION_INFO
{
	BOOLEAN secureMode;	/**< Indicates whether secure connection is required. Remaining parameters take effect only if secureMode is true */
	BOOLEAN validatePeerCert; /**< Validate peer certificate. If true, reader certificate is validated against root certificate */
	UINT32	sizeCertBuff;	/**< Number of bytes in clientCertBuff parameter */
	BYTE*	clientCertBuff;	/**< LLRP client's certificate data. Non-null for client certificate authentication */
	UINT32	sizeKeyBuff;	/**< Number of bytes in keyBuff parameter */
	BYTE*	clientKeyBuff;	/**< Client's private key data. Non-null for client certificate authentication. */
	UINT32	sizePhraseBuff;	/**< Number of bytes in phraseBuff parameter. Zero if key not encrypted */
	BYTE*	phraseBuff;	/**< Private key password */
	UINT32	sizeRootCertBuff;	/**< Number of bytes in rootCertBuff parameter */
	BYTE*	rootCertBuff;	/**< Root certificate data. Non-null for reader certificate validation */
	ULONG	connStatus;		/**< Status of connection. Call OpenSSL ERR_reason_error_string(connStatus) for details */	
	LPVOID lpReserved[4];	/**<  Reserved for future.*/
} SEC_CONNECTION_INFO, *PSEC_CONNECTION_INFO;

/**
* CONNECTION_INFO holds the information related to connection.
*/
typedef struct _CONNECTION_INFO
{
	RFID_VERSION version;			/**<  RFIDAPI version to be used.*/
	PSEC_CONNECTION_INFO lpSecConInfo;	/**< Secure connection parameters. */
	LPVOID lpReserved[4-1];				/**<  Reserved for future. 1 reserved LPVOID used for PSEC_CONNECTION_INFO **/
}CONNECTION_INFO, *LPCONNECTION_INFO;
/**
SERVER_INFO holds the timeout and version information related to the connection accepted.
*/

typedef struct _SERVER_INFO
{
    UINT32 timeoutMilliseconds;
	RFID_VERSION version;
	PSEC_CONNECTION_INFO lpSecConInfo;	/**< Secure connection parameters. */
	LPVOID lpReserved[4-1]; /**< Reserved for future. 1 reserved LPVOID used for PSEC_CONNECTION_INFO */

}SERVER_INFO,*LPSERVER_INFO;

/**
* Contains Antenna Information to be used for Inventory or Access Operations
*/
typedef struct _ANTENNA_INFO
{
	UINT16*  pAntennaList;/**<  Array for holding the Antennas to be used for the operation:
								 Range: 1 - N (N = Max. No of Antenna Supported).*/
	UINT32 length;/**<  Number of elements in array pAntennaList .*/
    
	OPERATION_QUALIFIER* pAntennaOpList; /** Array of operations for each antenna ID specified in the pAntennaList.
											 Operation at nth Index of this array is meant for the antenna ID at nth Index in the pAntennaList Array.
											 Should be null for running a Gen2 operation on all the antenna in the pAntennaList
											 It is invalid to set operation as NXP_EAS_SCAN ,if this structure is being used in any Access API  or
											 RFID_PerformAccessSequence Call*/
	LPVOID lpReserved[3];	/**<  Reserved for future.*/
}ANTENNA_INFO, *LPANTENNA_INFO;


/**<
* Contains the result of locating operation being performed.
*/
typedef struct _LOCATION_INFO
{ 
  union
  {
	  INT16 relativeDistance;/**< Locationing result when using LOCATE_TAG mechanism.*/
	  LPVOID lpReserved[16];	/**<  Reserved for place holder for expansion of union.*/
  };	
  LPVOID lpReserved1[4];	/**<  Reserved for future.*/
}LOCATION_INFO,*LPLOCATION_INFO;

/**<
* Contains Impinj QT Data
*/
typedef struct _IMPINJ_QT_DATA
{
	UINT16 QTControlData;				/**<  QT Control bits. Bit 15 controls the Short Range Feature and Bit 14 Controls the Public or Private Memory Map.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}IMPINJ_QT_DATA,*LPIMPINJ_QT_DATA;

/**<
* Contains the Write Parameters for Impinj QT Write
*/
typedef struct _IMPINJ_QT_WRITE_PARAMS
{
	UINT32			accessPassword; /**< Access Password of the Impinj tag*/
	BOOLEAN			QTPersist; /**< Indicates whether the QT control is written to nonvolatile (NVM) or volatile memory*/
	IMPINJ_QT_DATA	qtdata;
	LPVOID lpReserved[4];	/**<  Reserved for future.*/
}IMPINJ_QT_WRITE_PARAMS,*LPIMPINJ_QT_WRITE_PARAMS;

/**<
* Contains the Read Parameters for Impinj QT Read
*/
typedef struct _IMPINJ_QT_READ_PARMS
{
	UINT32			accessPassword; /**< Access Password of the Impinj tag*/
	LPVOID			lpReserved[4];	/**<  Reserved for future.*/
}IMPINJ_QT_READ_PARMS,*LPIMPINJ_QT_READ_PARMS;

/**<
* Contains the NXP Change config parameters
*/
typedef struct _NXP_CHANGE_CONFIG_PARAMS
{
	UINT32			accessPassword;				/**< Access Password of the Impinj tag*/
	UINT16			NXPChangeConfigWord;		/**< Change config word*/
	LPVOID			lpReserved[4];				/**<  Reserved for future.*/
}NXP_CHANGE_CONFIG_PARAMS,*LPNXP_CHANGE_CONFIG_PARAMS;

/**
*  Contains the result of AccessOperation on a particular tag.Applicable only when
   TagData.OpCode is one of ACCESS_OPERATION_FUJITSU_READ_BLOCKLOCK,ACCESS_OPERATION_FUJITSU_BURST_WRITE,
   ACCESS_OPERATION_FUJITSU_BURST_ERASE, ACCESS_OPERATION_IMPINJ_QT_READ, ACCESS_OPERATION_NXP_CHANGE_CONFIG
*/

typedef struct _ACCESS_OPERATION_RESULT
{ 
   union
   {    
	    /**
			Result of Fujitsu's ReadBlockLock operation on a 64K Tag
		*/
		struct
		{
		   UINT16 blockLockStatus;   /**<status of the 16 BlockLock flags inside the BlockGroup */
	  	
		 }FujitsuReadBlockLockResult; 
		 
		 
	    /**
			Result of Fujitsu's BurstWrite operation on a 64K Tag
		*/
		 struct
		 {
		   UINT8 numberOfBytesNotWritten;

 		 }FujitsuBurstWriteResult;
		 
		 
	    /**
			Result of Fujitsu's BurstErase operation on a 64K Tag
		*/
		 struct
		 {
	       UINT8 numberOfBytesNotErased;
		   
 		 }FujitsuBurstEraseResult;
		/**
			Result of Impinj QT Data operation 
		*/
		 IMPINJ_QT_DATA QtData;
		/**
			Result of NXPChange config Data operation 
		*/
		 struct
		 {
			UINT16 ChangeConfigWord;		   
 		 }NXPChangeConfigWordResult;
		LPVOID lpReserved1[16];
   };
   LPVOID lpReserved[2];
}ACCESS_OPERATION_RESULT,*LPACCESS_OPERATION_RESULT;

/**
* contains struct info 
*/
typedef struct 
{
	UINT32            memoryAllocated; /**<  Memory allocated by that structure.*/
	UINT32            memoryUsed; /**<  Memory used by that structure.*/
} _STRUCT_INFO;

/** 
* STATE_AWARE_SINGULATION_ACTION contains State Aware Singulation Action parameters.
* It is a member of SINGULATION_CONTROL.
*/
typedef struct _STATE_AWARE_SINGULATION_ACTION
{
	BOOLEAN perform;/**< Indicates whether to perform State Aware Singulation Action or not.
						 Can be TRUE if the capability is supported by reader.*/

	INVENTORY_STATE inventoryState;/**< Indicates the inventory state [A or B] to be matched during the singulation.*/
	SL_FLAG slFlag;/**< Indicates the SL bit [asserted or deasserted] to be matched during the singulation.*/
}STATE_AWARE_SINGULATION_ACTION, *LPSTATE_AWARE_SINGULATION_ACTION;

/** 
* SINGULATION_CONTROL contains Singulation Control parameters.
*/
typedef struct _SINGULATION_CONTROL
{
	SESSION session;/**< Session number to use for the inventory operation.*/
	UINT16 tagPopulation; /**< An estimate of the tag population in view of 
								 the RF field of the antenna.*/
	UINT16 tagTransitTimeMilliseconds; /**< An estimate of the time a tag will typically 
								  remain in the RF field of the antenna specified in milliseconds.*/
	STATE_AWARE_SINGULATION_ACTION stateAwareSingulationAction; /**< Can be ignored if 
														capability is not supported by reader.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}SINGULATION_CONTROL, *LPSINGULATION_CONTROL;

/** 
* RF_MODE_TABLE_ENTRY contains the various parameters of an RF Mode supported by the Reader.
* It is a member of UHF_RF_MODE_TABLE.
*/
typedef struct _RF_MODE_TABLE_ENTRY
{
	UINT32 modeIdentifer;/**< Reader defined identifier as index to this RF_MODES.*/
	DIVIDE_RATIO divideRatio; /**< */
	UINT32 bdrValue; /**< */
	MODULATION modulation;/**< */
	FORWARD_LINK_MODULATION forwardLinkModulationType;/**< */
	UINT32 pieValue;/**< */
	UINT32 minTariValue;/**< */
	UINT32 maxTariValue;/**< */
	UINT32 stepTariValue;/**< */
	SPECTRAL_MASK_INDICATOR spectralMaskIndicator;/**< */
	BOOLEAN epcHAGTCConformance; /**< */
	LPVOID lpReserved[4];				/**<  Reserved for future.*/

} RF_MODE_TABLE_ENTRY, *LPRF_MODE_TABLE_ENTRY;

/** 
* UHF_RF_MODE_TABLE contains RF Mode table parameters for each air protocol.
* It is a member of RF_MODES.
*/
typedef struct _UHF_RF_MODE_TABLE
{
	UINT16					protocolID;/**< Specifies the air protocol in use.*/
	UINT16					numEntries;/**< Number of entries in pTablesEntries.*/
	RF_MODE_TABLE_ENTRY*	pTablesEntries;/**< Pointer to RF MODE Table entries.*/
} UHF_RF_MODE_TABLE, *LPUHF_RF_MODE_TABLE; 

/** 
* RF_MODES gives information on RF Modes supported by the Reader.
* It is a member of READER_CAPS.
*/
typedef struct _RF_MODES
{
	UINT16				numTables;/**< Number of RF Modes supported by the Reader.*/
	UHF_RF_MODE_TABLE*	pUHFTables; /**< Pointer to the RF Mode tables.*/
} RF_MODES, *LPRF_MODES;

/**
* TRANSMIT_POWER_LEVEL_TABLE gives information on the Transmit Power Levels supported by the Reader.
* It is a member of READER_CAPS.
*/
typedef struct _TRANSMIT_POWER_LEVEL_TABLE
{
	UINT16		numValues; /**< Number of elements in the array pPowerValueList.*/
	UINT16*		pPowerValueList;/**<   Array of transmit power expressed in dBm*100 to allow fractional dBm representation.*/
} TRANSMIT_POWER_LEVEL_TABLE, *LPTRANSMIT_POWER_LEVEL_TABLE;

/**
* RECEIVE_SENSITIVITY_TABLE gives information on the Receive Sensitivity values supported by the Reader.
* It is a member of READER_CAPS.
*/
typedef struct _RECEIVE_SENSITIVITY_TABLE
{
	UINT16		numValues; /**< Number of elements in the array pReceiveSensitivityValueList.*/
	UINT32*		pReceiveSensitivityValueList;/**<   Array of Receive Sensitivity in 
											 dB relative to the maximum sensitivity, 
											 Possible Values: 0 to 128.*/
} RECEIVE_SENSITIVITY_TABLE, *LPRECEIVE_SENSITIVITY_TABLE;

/**
* DUTY_CYCLE_TABLE gives information on the Duty Cycle Percentage values supported by the Reader.
* It is a member of READER_CAPS.
*/
typedef struct _DUTY_CYCLE_TABLE
{
	UINT16		numValues; /**< Number of elements in the array pDutyCycleValueList. If 0, it indicates that the 
								reader does not support Duty cycle setting.*/
	UINT16*		pDutyCycleValueList;/**<   Array of Duty Cycle values. For MC devices it is in percentage.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
} DUTY_CYCLE_TABLE, *LPDUTY_CYCLE_TABLE;


/**
*  Frequency Hope Table. Zero or more instance when hopping is true.
* It is a member of FREQ_HOP_INFO.
*/
typedef struct _FREQ_HOP_TABLE
{
	UINT16   hopTableID;
	UINT16   numFreq;
	UINT32*  pFreqList;
} FREQ_HOP_TABLE, *LPFREQ_HOP_TABLE;

/**
*  Frequency Hope Table Entry. 
* It is a member of READER_CAPS.
*/
typedef struct _FREQ_HOP_INFO
{
	UINT16			  numTables;
	FREQ_HOP_TABLE*   pFreqTables;
} FREQ_HOP_INFO, *LPFREQ_HOP_INFO;

/**
* Fixed Frequency Table. At most one instance only when hopping is false
* It is a member of READER_CAPS.
*/
typedef struct _FIXED_FREQ_INFO
{
	UINT16   numFreq;
	UINT32*  pFreqList;
} FIXED_FREQ_INFO, *LPFIXED_FREQ_INFO;

/**
* PerAntennaReceiveSensitivityRange Parameter.
* It is a member of READER_CAPS.
*/
typedef struct _PER_ANTENNA_RECEIVE_SENSITIVITY_RANGE
{
	/*Shall be defined in future when supported.*/
	LPVOID lpReserved[32];				/**<  Reserved for future.*/
} PER_ANTENNA_RECEIVE_SENSITIVITY_RANGE, *LPPER_ANTENNA_RECEIVE_SENSITIVITY_RANGE;


/**
* Reader ID as supported by the reader either MAC for EPC Format.  
* It is a member of READER_CAPS.
*/
typedef struct _READER_IDW
{
	READER_ID_TYPE   type; /**<  Reader shall support representation of ReaderID of type MAC-Address
						   or EPC-ID. This field mentions the type which reader supports and 
						   indicates the Reader ID type of the value field in READER_ID.*/
	WCHAR			 value[MAX_PATH]; /**<  Reader ID as reported by the Reader.*/
} READER_IDW, *LPREADER_IDW;

typedef struct _READER_IDA
{
	READER_ID_TYPE   type; /**<  Reader shall support representation of ReaderID of type MAC-Address
						   or EPC-ID. This field mentions the type which reader supports and 
						   indicates the Reader ID type of the value field in READER_ID.*/
	CHAR			 value[MAX_PATH]; /**<  Reader ID as reported by the Reader.*/
} READER_IDA, *LPREADER_IDA;

#ifdef UNICODE
typedef READER_IDW READER_ID;
typedef LPREADER_IDW LPREADER_ID;
#else
typedef READER_IDA READER_ID;
typedef LPREADER_IDA LPREADER_ID;
#endif

/** 
* VERSIONSW gives name and version of a sp[ecific reader module.
* This is part of READER_MODULE_VERSIONS.
*/
typedef struct _VERSIONW
{
	WCHAR			moduleName[MAX_PATH];/**< Name of module*/
	WCHAR			moduleVersion[MAX_PATH];/**< Version of module*/
}VERSIONW, *LPVERSIONSW;
typedef struct _VERSIONA
{
	CHAR			moduleName[MAX_PATH];
	CHAR			moduleVersion[MAX_PATH];
}VERSIONA, *LPVERSIONA;

/** 
* READER_MODULE_VERSIONS gives versions of reader modules as reported by the Reader.
* This is part of READER_CAPS.
*/
typedef struct _READER_MODULE_VERSIONSW
{
	UINT16 numVersions;/**< Number of versions in pVersionList*/
	VERSIONW *pVersionList;/**< Pointer to an array of VERSIONSW*/
	LPVOID lpReserved[4];				/**<  Reserved  for future.*/
}READER_MODULE_VERSIONSW, *LPREADER_MODULE_VERSIONSW;

typedef struct _READER_MODULE_VERSIONSA
{
	UINT16 numVersions;/**< Number of versions in pVersionList*/
	VERSIONA *pVersionList;/**< Pointer to an array of VERSIONSW*/
	LPVOID lpReserved[4];				/**<  Reserved  for future.*/
}READER_MODULE_VERSIONSA, *LPREADER_MODULE_VERSIONSA;
/** 
* READER_CAPS gives information on Reader Capabilities as reported by the Reader.
* This can be obtained by calling RFID_GetReaderCaps.
*/
typedef struct READER_CAPSW
{
	/* Sub-structure describing memory allocated and used by this     
	structure.*/
	_STRUCT_INFO        structInfo;
	READER_IDW			readerID;/**<  Reader ID in either MAC for EPC Format.*/
	/*  General Capabilities.*/

	WCHAR			firmWareVersion[MAX_PATH];/**< Firmware Version of the reader*/
	WCHAR			modelName[MAX_PATH];/**< Reader Model*/
	UINT16	numAntennas; /**<  Number of Antenna Supported.*/
	//	AIR_PROTOCOL   airProtocolSupported;
	UINT16	numGPIs; /**<  Number of GPI ports.*/
	UINT16	numGPOs; /**<  Number of GPO ports.*/
	BOOLEAN utcClockSupported;
	RECEIVE_SENSITIVITY_TABLE receiveSensitivtyTable; /**<  Receive Sensitivty Table.*/
	PER_ANTENNA_RECEIVE_SENSITIVITY_RANGE perAntennaReceiveSensitivtyRange; /**< Valid if Reader supports multiple antennas 
																									where the antennas can have different receive sensitivity values.
																									Not supported, may be support in future.*/

	/*  Gen2LLRP Capabilities.*/
	BOOLEAN blockEraseSupported; /**<  Indicates whether Block Erase is supported by the Reader.*/
	BOOLEAN blockWriteSupported; /**<  Indicates whether Block Write is supported by the Reader .*/
	BOOLEAN stateAwareSingulationSupported; /**<  Indicates whether Inventory State Aware Singulation is supported by the Reader.*/
	BOOLEAN recommissionSupported; /**<  Indicates whether Recommission is supported by the Reader.*/
	BOOLEAN blockPermalockSupported; /**<  Indicates whether Block Permalock is supported by the Reader.*/
	BOOLEAN writeUMISupported; /**<  Indicates whether UMI (User Memory Indicator) Write is supported by the Reader.*/
	BOOLEAN radioPowerControlSupported; /**<  Indicates whether radio can be powered ON or OFF.*/
	UINT16 maxNumOperationsInAccessSequence; /**<  Maximum Number of OpSpecs allowed per access Filter.*/
	UINT16 maxNumPreFilters;  /**<  Maximum Number of Pre-Filters allowed per antenna.*/
	RF_MODES rfModes;/**<  List of RF Mode tables supported by the Reader.*/

	/*   Regulatory Capabilities.*/
	UINT16	countryCode; /**<  Country Code .*/
	COMMUNICATION_STANDARD	communicationStandard; /**<  Communication Standard .*/

	/*  UHF Band capabilities.*/
	TRANSMIT_POWER_LEVEL_TABLE transmitPowerLevelTable; /**< Transmit Power Level Table .*/

	/*  Frequency Information.*/
	BOOLEAN hoppingEnabled; /**<  Is Frequency hopping enabled.*/
	FREQ_HOP_INFO freqHopInfo; /**<  Frequency Hop information.*/
	FIXED_FREQ_INFO fixedFreqInfo; /**<  Fixed Frequency Information .*/
	
	BOOLEAN tagEventReportingSupported;	/**<	Indicates the readers ability to report tag visibility state changes.
												If true, the client can choose the tag event state changes to 
												monitor and report. Event state options are New Tag, Tag Invisible, 
												or Tag Visibility Changed.*/
	BOOLEAN rssiFilterSupported;		/**<	Indicates the readers ability to report tags based
												on the signal strength of the back-scattered signal 
												from the tag.*/
	BOOLEAN NXPCommandsSupported; /**< Indicates whether the reader supports NXP commands like Change EAS,set Quiet, Reset Quiet,Calibrate*/
	BOOLEAN tagLocationingSupported;		/**<	Indicates the readers ability to locate a tag.*/
	LPDUTY_CYCLE_TABLE lpDutyCycleTable;	/**<	List of DutyCycle percentages supported by the reader.*/
	BOOLEAN FujitsuCommandsSupported;       /**< Indicates the reader support for Fujitsu custom commands for 64K and 8K Tags.*/
	BOOLEAN ImpinjCommandSupported;       /**< Indicates the reader support for Impinj QT Commands.*/
	BOOLEAN SledBatteryStatusSupported;				/**< Sled Battery Status support*/
	BYTE reserved1;
	LPREADER_MODULE_VERSIONSW lpVersions; /**< List of versions of reader modules.*/
	BOOLEAN PeriodicTagReportsSupported;	/**< Periodic tag reporting is supported */
	BOOLEAN TagPhaseReportingSupported;		/**< Tag Phase information in tag report */
	BOOLEAN ZoneSuppported;					/**< Zone support*/
	BOOLEAN AntennaRFConfigSupported;		/**< Radio RF capabilities - Stop condition, physical port config & SL_ALL & AB_FLIP support */
	UINT32 reserved32[4-1];				/**< for future expansions other than pointers types
											 1 UINT32 used for PeriodicTagReportsSupported, TagPhaseReportingSupported, 
											          ZoneSuppported	& AntennaRFConfigSupported BOOLEAN data type*/
	LPVOID lpReserved[32-8];				/**<  Reserved  for future.*/
}READER_CAPSW, *LPREADER_CAPSW;

typedef struct READER_CAPSA
{
	/* Sub-structure describing memory allocated and used by this     
	structure.*/
	_STRUCT_INFO        structInfo;
	READER_IDA			readerID;/**<  Reader ID in either MAC for EPC Format.*/
	/*  General Capabilities.*/
	CHAR			firmWareVersion[MAX_PATH];/**< Firmware Version of the reader*/
	CHAR			modelName[MAX_PATH];/**< Reader Model*/

	UINT16	numAntennas; /**<  Number of Antenna Supported.*/
	//	AIR_PROTOCOL   airProtocolSupported;
	UINT16	numGPIs; /**<  Number of GPI ports.*/
	UINT16	numGPOs; /**<  Number of GPO ports.*/
	BOOLEAN utcClockSupported;
	RECEIVE_SENSITIVITY_TABLE receiveSensitivtyTable; /**<  Receive Sensitivty Table.*/
	PER_ANTENNA_RECEIVE_SENSITIVITY_RANGE perAntennaReceiveSensitivtyRange; /**< Valid if Reader supports multiple antennas 
																									where the antennas can have different receive sensitivity values.
																									Not supported, may be support in future.*/

	/*  Gen2LLRP Capabilities.*/
	BOOLEAN blockEraseSupported; /**<  Indicates whether Block Erase is supported by the Reader.*/
	BOOLEAN blockWriteSupported; /**<  Indicates whether Block Write is supported by the Reader .*/
	BOOLEAN stateAwareSingulationSupported; /**<  Indicates whether Inventory State Aware Singulation is supported by the Reader.*/
	BOOLEAN recommissionSupported; /**<  Indicates whether Recommission is supported by the Reader.*/
	BOOLEAN blockPermalockSupported; /**<  Indicates whether Block Permalock is supported by the Reader.*/
	BOOLEAN writeUMISupported; /**<  Indicates whether UMI (User Memory Indicator) Write is supported by the Reader.*/
	BOOLEAN radioPowerControlSupported; /**<  Indicates whether radio can be powered ON or OFF.*/
	UINT16 maxNumOperationsInAccessSequence; /**<  Maximum Number of OpSpecs allowed per access Filter.*/
	UINT16 maxNumPreFilters;  /**<  Maximum Number of Pre-Filters allowed per antenna.*/
	RF_MODES rfModes;/**<  List of RF Mode tables supported by the Reader.*/

	/*   Regulatory Capabilities.*/
	UINT16	countryCode; /**<  Country Code .*/
	COMMUNICATION_STANDARD	communicationStandard; /**<  Communication Standard .*/

	/*  UHF Band capabilities.*/
	TRANSMIT_POWER_LEVEL_TABLE transmitPowerLevelTable; /**< Transmit Power Level Table .*/

	/*  Frequency Information.*/
	BOOLEAN hoppingEnabled; /**<  Is Frequency hopping enabled.*/
	FREQ_HOP_INFO freqHopInfo; /**<  Frequency Hop information.*/
	FIXED_FREQ_INFO fixedFreqInfo; /**<  Fixed Frequency Information .*/
	
	BOOLEAN tagEventReportingSupported;	/**<	Indicates the readers ability to report tag visibility state changes.
												If true, the client can choose the tag event state changes to 
												monitor and report. Event state options are New Tag, Tag Invisible, 
												or Tag Visibility Changed.*/
	BOOLEAN rssiFilterSupported;		/**<	Indicates the readers ability to report tags based
												on the signal strength of the back-scattered signal 
												from the tag.*/
	BOOLEAN NXPCommandsSupported; /**< Indicates whether the NXP Commands - ChangeEAS,EASAlarm,SetQuiet,ResetQuiet are supported by the Reader. */
	BOOLEAN tagLocationingSupported;		/**<	Indicates the readers ability to locate a tag.*/
	LPDUTY_CYCLE_TABLE lpDutyCycleTable;	/**<	List of DutyCycle percentages supported by the reader.*/
	BOOLEAN FujitsuCommandsSupported;       /**< Indicates whether the reader supports Fujitsu custom commands for 64K and 8K Tags are supported or not*/
	BOOLEAN ImpinjCommandSupported;       /**< Indicates whether the reader supports Impinj QT Commands*/
	LPREADER_MODULE_VERSIONSA lpVersions; /**< List of versions of reader modules.*/
	BOOLEAN SledBatteryStatusSupported;				/**< Sled Battery Status support*/
	BYTE reserved1;
	BOOLEAN PeriodicTagReportsSupported;	/**< Periodic tag reporting is supported */
	BOOLEAN TagPhaseReportingSupported;		/**< Tag Phase information in tag report */
	BOOLEAN ZoneSuppported;				/**< Zone support*/
	BOOLEAN AntennaRFConfigSupported;		/**< Radio RF capabilities - Stop condition, physical port config & SL_ALL & AB_FLIP support */
	
	UINT32 reserved32[4-1];				/**< for future expansions other than pointers types
											 1 UINT32 used for PeriodicTagReportsSupported, TagPhaseReportingSupported, 
											          ZoneSuppported	& AntennaRFConfigSupported BOOLEAN data type*/
	LPVOID lpReserved[32-8];				/**<  Reserved  for future.*/
}READER_CAPSA, *LPREADER_CAPSA;
#ifdef UNICODE
typedef READER_CAPSW READER_CAPS;
typedef LPREADER_CAPSW LPREADER_CAPS;
#else
typedef READER_CAPSA READER_CAPS;
typedef LPREADER_CAPSA LPREADER_CAPS;
#endif

/** 
* GPI_TRIGGER contains the GPI-Trigger information.
* GPI based trigger can be specified for Start Trigger as well as Stop Trigger.
*/
typedef struct _GPI_TRIGGER
{
	UINT16 portNumber;/**<  GPI Port number on which the trigger is to be enabled.*/
	BOOLEAN gpiEvent;/**<  The Boolean value that causes a GPI event to trigger.*/
	UINT32 timeoutMilliseconds;/**<  Trigger timeout in milliseconds. If set to zero, it indicates there is no timeout.
				   Ignored for START_TRIGGER_TYPE_GPI; Valid only for STOP_TRIGGER_TYPE_GPI_WITH_TIMEOUT.*/
}GPI_TRIGGER, *LPGPI_TRIGGER;

/** 
* HANDHELD_TRIGGER contains the Trigger information for Handheld Gun/Button that can Start/Stop an operation, like Inventory, Access, TagLocationing, etc.
* Handheld Gun/Button based trigger can be specified for Start Trigger as well as Stop Trigger.
*/
typedef struct _HANDHELD_TRIGGER
{
	HANDHELD_TRIGGER_EVENT_TYPE handheldEvent;/**<  The HANDHELD_TRIGGER_EVENT_TYPE that causes the operation to start.*/
	UINT32 timeoutMilliseconds;/**<  Trigger timeout in milliseconds. If set to zero, it indicates there is no timeout.
				   Ignored for START_TRIGGER_TYPE_HANDHELD; Valid only for STOP_TRIGGER_TYPE_HANDHELD_WITH_TIMEOUT.*/
}HANDHELD_TRIGGER, *LPHANDHELD_TRIGGER;

/** 
* TRIGGER_WITH_TIMEOUT  contains information for triggers with timeout
*/
typedef struct _TRIGGER_WITH_TIMEOUT
{
	UINT16 n;/**<  N attempts or N Tag-Observations.*/
	UINT32 timeoutMilliseconds;/**<  For specifying a fail-safe timeout when this trigger is used as a 
						stop trigger. When the timeout is 0, it indicates that there is no 
						timeout.*/
}TRIGGER_WITH_TIMEOUT, *LPTRIGGER_WITH_TIMEOUT;

/**
* PERIODIC_TRIGGER specifies when to start the Inventory or AccessSequece operation 
* and the time period to run the operation. 
* It is a member of START_TRIGGER.
*/
typedef struct _PERIODIC_TRIGGER
{
	UINT32 periodMilliseconds;/**<  Non-zero value indicating the time period in milliseconds for which inventory will run.*/
	SYSTEMTIME* startTime;	/**< UTC Time to start the operation.*/
}PERIODIC_TRIGGER, *LPPERIODIC_TRIGGER;

/** 
* START_TRIGGER specifies the condition for starting  Inventory or AccessSeqeunce operation.
* It is a member of TRIGGER_INFO.
*/
typedef struct _START_TRIGGER
{
	START_TRIGGER_TYPE	type; /**<  Start trigger of type START_TRIGGER_TYPE.*/
	union
	{
		GPI_TRIGGER gpi; /**< To be specified for START_TRIGGER_TYPE_GPI.*/
		PERIODIC_TRIGGER periodic;/**< To be specified for START_TRIGGER_TYPE_PERIODIC.*/
		HANDHELD_TRIGGER handheld; /**< To be specified for START_TRIGGER_TYPE_HANDHELD.*/
	}value; /**<  Value need not be specified for START_TRIGGER_TYPE_IMMEDIATE.*/
}START_TRIGGER, *LPSTART_TRIGGER;

/**
* STOP_TRIGGER specifies the condition for stopping Inventory or Access-Sequence operation.
* It is a member of TRIGGER_INFO.
*/
typedef struct _STOP_TRIGGER
{
	STOP_TRIGGER_TYPE	type;/**< Stop trigger of type STOP_TRIGGER_TYPE.*/
	union
	{
		UINT32 duration;/**<  Duration in Milli-seconds if type is STOP_TRIGGER_TYPE_DURATION.*/
		TRIGGER_WITH_TIMEOUT tagObservation; /**<  Upon seeing N tag observations, or timeout 
											 if type is STOP_TRIGGER_TYPE_TAG_OBSERVATION_WITH_TIMEOUT.*/
		TRIGGER_WITH_TIMEOUT numAttempts; /**< N attempts to see all tags in the FOV, or timeout 
										  if type is STOP_TRIGGER_TYPE_N_ATTEMPTS_WITH_TIMEOUT.*/
		GPI_TRIGGER gpi;/**< GPI with a timeout value if type is STOP_TRIGGER_TYPE_GPI_WITH_TIMEOUT.*/
		HANDHELD_TRIGGER handheld;/**< Gun/Button Trigger with a timeout value if type is STOP_TRIGGER_TYPE_HANDHELD_WITH_TIMEOUT.*/
	}value; /**<  value corresponding to the stop trigger type.*/
}STOP_TRIGGER, *LPSTOP_TRIGGER;


/**
* TAG_EVENT_REPORT_INFO specifies the configuration of events for the reader to 
* report tag state changes.
* It is a member of TRIGGER_INFO.
*/
typedef struct _TAG_EVENT_REPORT_INFO
{
	TAG_EVENT_REPORT_TRIGGER	reportNewTagEvent;/**<  Report criteria when a new Tag is visible.*/
	UINT16						newTagEventModeratedTimeoutMilliseconds;
								/**< Timeout in milliseconds for moderating new tag event
									reporting. Use this only when reportNewTagEvent is set to 
									MODERATED.*/
	TAG_EVENT_REPORT_TRIGGER	reportTagInvisibleEvent;/**<  Report criteria when a Tag is invisible.*/
	UINT16						tagInvisibleEventModeratedTimeoutMilliseconds;
								/**< Timeout in milliseconds for moderating tag invisible event
									reporting. Use this only when reportTagInvisibleEvent is set to 
									MODERATED.*/
	TAG_EVENT_REPORT_TRIGGER	reportTagBackToVisibilityEvent;/**<  Report criteria when a Tag is back to visibility.*/
	UINT16						tagBackToVisibilityModeratedTimeoutMilliseconds;
								/**< Timeout in milliseconds for moderating tag back to visibility event
									reporting. Use this only when reportTagBackToVisibilityEvent is set to 
									MODERATED.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}TAG_EVENT_REPORT_INFO, *LPTAG_EVENT_REPORT_INFO;

/**
* REPORT TRIGGER specifies configuration for different type of reporting trigger mechanism
* Currently supports only periodic trigger report 
*/

typedef struct _REPORT_TRIGGERS
{
	UINT32 periodicReportDuration;  /**< Duration is in Seconds, Reports the tags periodically if the tag is continued to be seen after the duration has elapsed.
								0 - Report tags after the end of inventory.
								n - Report tag first time it is reader and then after every 'n' seconds (periodically) time interval if the tag is continued to be read.
								The following restrictions are applicable when using a periodic report trigger on the reader.
								1. Access Operation results will not be sent as part of the periodic report trigger and the reader sends an exception event when access operations are added with reader
								configured for periodic reporting of tags.
								2. Stop trigger of type tagObservation 'Upon_Seeing_N_Tags_Or_Timeout' is not supported with the reader configured for periodic reporting of tags.								
								*/
	LPVOID lpReserved[4];
}REPORT_TRIGGERS,*LPREPORT_TRIGGERS;

/**
* TRIGGER_INFO contains trigger criteria to be used for an Inventory or Access Sequence operation.
*/
typedef struct _TRIGGER_INFO
{
	START_TRIGGER startTrigger;/**<  Condition to be met to start the operation.*/
	STOP_TRIGGER stopTrigger;/**<  Condition to be met to stop the operation.*/
	UINT32 tagReportTrigger; 	/**< 	Signifies when to get triggered  on TAG_READ_EVENT.
										0 - Tag reports will be triggered when the Stop-Criteria 
										is met. In case of periodic trigger, reports will 
										be triggerd after every period.
										n - Report when 'n' unique tags are found
										The default settings is 1, which implies to get Tag reports immediately.
										This will be ignored when lpTagEventReportInfo is not NULL.*/
	LPTAG_EVENT_REPORT_INFO lpTagEventReportInfo; /**<  Parameters for enabling and configuring 
												   events for the reader to report tag state changes.*/
	LPREPORT_TRIGGERS lpReportTriggers; /**<  specifies configuration different type of reporting trigger mechanisms.
										  Currently provides support for periodic report trigger and available only in FX7500.  */
	LPVOID lpReserved[4-2];				/**<  Reserved for future.
										1 LPVOID consumed for LPTAG_EVENT_REPORT_INFO
										1 LPVOID consumed for PREPORT_TRIGGERS*/
}TRIGGER_INFO, *LPTRIGGER_INFO;

/** 
* TAG_ZONE_INFO provides information about Zone based Operation.
*/
typedef struct _TAG_ZONE_INFOW
{
	UINT16		zoneID;			/**< Zone Id of the Tag Events.*/	
	WCHAR		zoneName[MAX_PATH];		/**< Zone Name of the Tag Events.*/
	LPVOID		lpReserved[4];				/**<  Reserved for future.*/
}TAG_ZONE_INFOW, *LPTAG_ZONE_INFOW;

typedef struct _TAG_ZONE_INFOA
{
	UINT16		zoneID;			/**< Zone Id of the Tag Events.*/	
	CHAR		zoneName[MAX_PATH];		/**< Zone Name of the Tag Events.*/
	LPVOID		lpReserved[4];				/**<  Reserved for future.*/
}TAG_ZONE_INFOA, *LPTAG_ZONE_INFOA;


#ifdef UNICODE
typedef TAG_ZONE_INFOW TAG_ZONE_INFO;
typedef LPTAG_ZONE_INFOW LPTAG_ZONE_INFO;
#else
typedef TAG_ZONE_INFOA TAG_ZONE_INFO;
typedef LPTAG_ZONE_INFOA LPTAG_ZONE_INFO;
#endif

/**
* TAG_DATA contains Tag related information.
* When Inventory or Read Access Operation is performed, Tags reported by Reader 
* are reported back to application in the format of TAG_DATA. 
*/
typedef struct _TAG_DATA
{
	/* Sub-structure describing memory allocated and used by this     
	structure .*/
	_STRUCT_INFO         structInfo;		

	UINT8*		pTagID; /**< Tag ID, for C1G2 this field refers EPC Data.*/	                        
	UINT32		tagIDLength; /**< Tag ID Length (Number of Bytes).*/	
	UINT32		tagIDAllocated; /**<  Memory allocated for Tag ID  (Number of Bytes) .*/
	UINT16		PC; /**< PC BITS.*/
	UINT32		XPC; /** XPC BITS - XPC_W1 = LOWORD(XPC) and XPC_W2 = HIWORD(XPC) .*/
	UINT16		CRC;  /**< CRC.*/
	UINT16		antennaID;/**< Antenna ID .*/
	union
	{
		struct _UP_TIME
		{
			UINT64		firstSeenTimeStamp;	/**< First Seen Time Stamp, Time of the first observation amongst the tag reports .*/
			UINT64		lastSeenTimeStamp; /**< Last Seen Time Stamp,  Time of the last observation amongst the tag reports .*/
		}upTime;/**< seenTime: Since System UP time .*/
		struct _UTC_TIME
		{
			SYSTEMTIME		firstSeenTimeStamp;	/**< First Seen Time Stamp, Time of the first observation amongst the tag reports .*/
			SYSTEMTIME		lastSeenTimeStamp; /**<  Last Seen Time Stamp,  Time of the last observation amongst the tag reports .*/
		}utcTime;/**< seenTime: As System time .*/

	}seenTime;
	INT8		peakRSSI; /*PeakRSSI, Maximum RSSI value observed amongst the tag reports .*/				
	UINT16		channelIndex; /**< Channel Index, Index of the first channel the tag was seen.*/
	UINT16		tagSeenCount; /**< Tag seen count, Number of tag reports.*/
	ACCESS_OPERATION_CODE opCode;/**< C1G2 Operation as a result of which this Tag is being reported.
								 if opCode is ACCESS_OPERATION_NONE, this Tag is a result of Inventory operation.*/
	ACCESS_OPERATION_STATUS opStatus; /**<Result of C1G2 Access Operation, opCode*/
	MEMORY_BANK		memoryBank;/**< The type descriptor describing the Bank type. This field is to be ignored in 
							       case of opCode specified as ACCESS_OPERATION_BLOCK_PERMALOCK.*/
	UINT8*			pMemoryBankData; /**< The data read from the specified Bank or Block Permalock Mask Data
									 as specified by opCode.*/	
	UINT32			memoryBankDataByteOffset; /**< Byte offset of the data.*/	                       
	UINT32			memoryBankDataLength; /**< The length of the data(Number of Bytes) .*/					
	UINT32			memoryBankDataAllocated; /**<  Memory allocated(Number of Bytes).*/
	TAG_EVENT		tagEvent;
	SYSTEMTIME		tagEventTimeStamp; /**< Time Stamp at which the tagEvent occurred. 
									   This field is not relevant when tagEvent is NONE.*/
	LPLOCATION_INFO lpLocation;	/**< location information. It will be present only when RFID_PerformTagLocationing or RFID_PerformInventory was
									invoked using Operation-qualifier LOCATE_TAG.*/
	LPACCESS_OPERATION_RESULT lpAccessOperationResult; /**<  Contains the result of AccessOperation on a particular tag.
													   Applicable only when TagData.OpCode is one of ACCESS_OPERATION_FUJITSU_READ_BLOCKLOCK,ACCESS_OPERATION_FUJITSU_BURST_WRITE,
													   ACCESS_OPERATION_FUJITSU_BURST_ERASE, ACCESS_OPERATION_IMPINJ_QT_READ and ACCESS_OPERATION_NXP_CHANGE_CONFIG*/

	UINT16	transmitPort; /**< Transmit port of the Antenna or Transmit port on which the Tag read.*/
	UINT16	receivePort;  /**< Receive port of the Antenna or Transmit port on which the Tag read. */
	LPTAG_ZONE_INFO lpZoneInfo; /**< Zone information on which the Tag is read.*/
	INT16 phaseInfo; /**< Phase information reported by the reader when this tag was seen.*/
	UINT16 reserved;				/**< for future expansions other than pointers types*/
	LPVOID lpReserved[6]; /**<  Reserved for future.
									1 dword for tagEvent.
									4 dwords for tagEventTimeStamp.
									1 dword for locationInfo
									 */
} TAG_DATA, *LPTAG_DATA;


/**
* TAG_STORAGE_SETTINGS is used to specify the storage settings related to Tags
* using RFID_SetTagStorageSettings. Maximum size of the settings are not retricted and could be 
* adjusted as per requirements/constraints of the machine (device/host) on which the
* application is executed.
*/
typedef struct _TAG_STORAGE_SETTINGS
{
	UINT32 maxTagCount;				/**<  Maximum Tag Count maintained in the API internal Queue. */
	UINT32 maxMemoryBankByteCount;	/**<  Maximum Size of Memory Bank in Bytes (Should be WORD aligned, i.e. double bytes).*/
	UINT32 maxTagIDByteCount ;		/**<  Maximum size of EPC Data in Bytes (Should be WORD aligned, i.e. double bytes).*/
	UINT16 tagFields;				/**< Bit field indicating contents of TAG_DATA. 
					  It inturn specifies whether certain fields are required to be processed by the Reader/Dll.
					  Absence of certain fields can improve performance of the Reader/Dll or result in 
					  specific behavior. For e.g. disabling Antenna Id can result in application 
					  receiving as single unique tag even though there were multiple entries of the 
					  same tag reported from different Antennas*/
	
	BOOLEAN enableAccessReports; 		/**< Indicates whether Dll should enable reporting of 
										TAG_DATA for access operations like Write, Lock, Kill, etc. 
										By default, this will be false, which implies reports will be 
										enabled only for Inventory, Read and Block-permalock Access 
										operations.*/
	BOOLEAN  discardTagsOnInventoryStop;		/**<  Option to discard the tags which are reported by the reader
											when inventory/access-sequence operation has been stopped by a call
											to RFID_StopInventory or RFID_StopAccessSequence. Choosing this option 
											will not purge the tags which are already queued by the Dll.
											This option will be ignored if tagReportTrigger of TRIGGER_INFO 
											is not equal to 1.*/
	UINT32 reserved32;				/**< for future expansions other than pointers types*/
	LPVOID lpReserved[4-2];	/**<  Reserved for future.
							1. One DWORD consumed for enableAccessReports, tagFields, discardTagsOnInventoryStop*/
}TAG_STORAGE_SETTINGS, *LPTAG_STORAGE_SETTINGS;

/**
*  DISCONNECTION_EVENT_DATA carries information on reason for  disconnection.
*  This data corresponds to DISCONNECTION_EVENT.
*/
typedef struct _DISCONNECTION_EVENT_DATA
{
	DISCONNECTION_EVENT_TYPE eventInfo;/**< Reason for disconnection.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}DISCONNECTION_EVENT_DATA, *LPDISCONNECTION_EVENT_DATA;


/**
*  READER_EXCEPTION_EVENT_DATA carries information on reason for  reader exception.
*  This data corresponds to READER_EXCEPTION_EVENT.
*/
typedef struct _READER_EXCEPTION_EVENT_DATAW
{	
	READER_EXCEPTION_EVENT_TYPE	exceptionType; /**<  Event indicating the reason for Reader exception. */
	WCHAR			exceptionInfo[MAX_PATH];/**< Description of the exception as reported by the Reader.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}READER_EXCEPTION_EVENT_DATAW, *LPREADER_EXCEPTION_EVENT_DATAW;

typedef struct _READER_EXCEPTION_EVENT_DATAA
{	
	READER_EXCEPTION_EVENT_TYPE	exceptionType; /**<  Event indicating the reason for Reader exception. */	
	CHAR			exceptionInfo[MAX_PATH];/**< Description of the exception as reported by the Reader.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}READER_EXCEPTION_EVENT_DATAA, *LPREADER_EXCEPTION_EVENT_DATAA;

#ifdef UNICODE
typedef READER_EXCEPTION_EVENT_DATAW READER_EXCEPTION_EVENT_DATA;
typedef LPREADER_EXCEPTION_EVENT_DATAW LPREADER_EXCEPTION_EVENT_DATA;
#else
typedef READER_EXCEPTION_EVENT_DATAA READER_EXCEPTION_EVENT_DATA;
typedef LPREADER_EXCEPTION_EVENT_DATAA LPREADER_EXCEPTION_EVENT_DATA;
#endif


/**
*  ANTENNA_EVENT_DATA carries an event triggered on an Antenna.
*  This data corresponds to ANTENNA_EVENT.
*/
typedef struct _ANTENNA_EVENT_DATA
{
	UINT16 id;/**< antennaID: Antenna on which the event was triggered .*/
	ANTENNA_EVENT_TYPE eventInfo;/**< Antenna Event Information which indicates whether the Antenna 
										  is connected/disconnected.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}ANTENNA_EVENT_DATA, *LPANTENNA_EVENT_DATA;

/**
*  GPI_EVENT_DATA carries an event triggered on a GPI Port.
*  This data corresponds to GPI_EVENT.
*/
typedef struct _GPI_EVENT_DATA
{
	UINT16 port;/**< port: GPI port on which the event was triggered .*/
	BOOLEAN eventInfo;/**< GPI Event Information indicating if the GPI Port State was changed from 
							low to high (true) or high to low (false). For Handheld readers, a true indicated, trigger pressed and false
							indicates trigger released.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}GPI_EVENT_DATA, *LPGPI_EVENT_DATA;

/**
*  HANDHELD_TRIGGER_EVENT_DATA carries the event information related to a trigger of the Handheld Gun/Button.
*  This data corresponds to HANDHELD_TRIGGER_EVENT.
*/
typedef struct _HANDHELD_EVENT_DATA
{
	HANDHELD_TRIGGER_EVENT_TYPE eventInfo;/**< Handheld Gun/Button Trigger Event Information.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}HANDHELD_TRIGGER_EVENT_DATA, *LPHANDHELD_EVENT_DATA;

/**
*   NXP_EAS_ALARM_DATA contains data associated with an NXP_EAS_ALARM_EVENT;
*   It contains the antenna ID which "saw" an NXP tag with it's EAS bit set and
*   also the Alarm code returned by the NXP tag during NXP_EAS_SCAN.
*/

typedef struct _NXP_EAS_ALARM_DATA
{
	UINT64 alarmCode; /**< Alarm code returned by the NXP tag  */
	UINT16 antennaID; /**< Antenna ID which "saw" an NXP tag with it's EAS bit set*/
	LPVOID lpReserved[4]; /**< Reserved for future use */
}NXP_EAS_ALARM_DATA,*LPNXP_EAS_ALARM_DATA;

/**
*   DEBUG_INFO_DATA contains data associated with DEBUG_INFO_EVENT;
*   It contains the Debug information sent from the reader
*/
typedef struct _DEBUG_INFO_DATAW
{
	WCHAR  szDebugInfo[MAX_PATH]; /**< Debug Info returned by the reader */
	LPVOID lpReserved[4]; /**< Reserved for future use */
}DEBUG_INFO_DATAW,*LPDEBUG_INFO_DATAW;

typedef struct _DEBUG_INFO_DATAA
{
	CHAR  szDebugInfo[MAX_PATH]; /**< Debug Info returned by the reader */
	LPVOID lpReserved[4]; /**< Reserved for future use */
}DEBUG_INFO_DATAA,*LPDEBUG_INFO_DATAA;



#ifdef UNICODE
typedef DEBUG_INFO_DATAW DEBUG_INFO_DATA;
typedef LPDEBUG_INFO_DATAW LPDEBUG_INFO_DATA;
#else
typedef DEBUG_INFO_DATAA DEBUG_INFO_DATA;
typedef LPDEBUG_INFO_DATAA LPDEBUG_INFO_DATA;
#endif

/**
*   TEMPERATURE_ALARM_DATA contains data associated with an TEMPERATURE_ALARM_EVENT;
*   It contains the PA/Ambient Temperature Status
*/
typedef struct _TEMPERATURE_ALARM_DATA
{
	TEMPERATURE_SOURCE sourceName; /**< Source name of Temperature Alarm Event (For example whether the alarm is for the PA or ambient temperature) */
	UINT16 currentTemperature;  /**< Current Temperature reported by the reader in Celsius */
	ALARM_LEVEL alarmLevel;  /**< Alarm Level (Low, High or Critical)*/
	LPVOID lpReserved[4];				/**<  Reserved for future*/

}TEMPERATURE_ALARM_DATA, *LPTEMPERATURE_ALARM_DATA;

/**
* STATE_AWARE_ACTION_PARAMS specifies the action to be performed on specific Sessions
* on matching and/or non-matching tags.
* It is a member of PRE_FILTER.
*/
typedef struct _STATE_AWARE_ACTION_PARAMS
{
	TARGET target;/**<  Specifies the session on which the filter should perform the action.*/
	STATE_AWARE_ACTION stateAwareAction;/**<  Specifies the action to be performed on the selected session.*/
}STATE_AWARE_ACTION_PARAMS, *LPSTATE_AWARE_ACTION_PARAMS;

/**
* PRE_FILTER contains the filter criteria for Inventory. Maps to one SELECT command of C1G2.
*/
typedef struct _PRE_FILTER
{
	MEMORY_BANK memoryBank;	/**<  Memory Bank on which the filter is to be applied
							MEMORY_BANK_RESERVED is not allowed for Inventory/Pre-Filters.*/
	UINT8* pTagPattern;		/**<The bit pattern against which to compare for tag-filtering, as UINT8*.
							The application should allocate an UINT8 array and assign to this field.*/
	UINT16 tagPatternBitCount;	/**<  Number of bits in pTagPattern to be taken for comparison.*/
	UINT16 bitOffset;		/**<  Bit offset; The first (msb) bit location of the specified memory bank against 
							which to compare the TagMask.*/
	FILTER_ACTION filterAction;
	union
	{
		STATE_AWARE_ACTION_PARAMS stateAwareParams;/**<  Parameters for StateAware action
												   if filterAction is FILTER_ACTION_STATE_AWARE.*/
		STATE_UNAWARE_ACTION stateUnawareAction;/**<  Parameters for StateAware action
												   if filterAction is FILTER_ACTION_STATE_UNAWARE.*/
	}filterActionParams; /**<  This field is ignored for FilterAction: FILTER_ACTION_DEFAULT.*/
	TRUNCATE_ACTION truncateAction; /**< This field indicates whether only a truncated portion of the tag 
										is to be backscattered by the tag or not. The portion that gets 
										backscattered includes the portion of the tag ID following the mask. 
										This field has to be set only in the last pre-filter.*/
	LPVOID lpReserved[4-1];				/**<  Reserved for future.
										 * 1 DWORD taken for truncateAction*/
}PRE_FILTER, *LPPRE_FILTER;

/**<
* PRE_FILTER_LIST supports addition of multiple pre filters as part of a specific antenna configuration.
*/
typedef struct _PRE_FILTER_LIST
{
	
	UINT32 preFilterCount;/**<  Number of elements in array pAntennaList .*/
	PRE_FILTER * lpPreFilters;		/**<  filter criteria for Inventory*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}PRE_FILTER_LIST, *LPPRE_FILTER_LIST;
/**<
* Contains Antenna stop trigger configuration 
*/
typedef struct _ANTENNA_STOP_TRIGGER
{
	ANTENNA_STOP_TRIGGER_TYPE stopTriggerType; /**< Antenna stop trigger of type ANTENNA_STOP_TRIGGER_TYPE */
	UINT16 stopTriggerValue;	/**<  Stop Trigger Value */
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}ANTENNA_STOP_TRIGGER,*LPANTENNA_STOP_TRIGGER;
/**<
* Contains Antenna RF configuration 
*/
typedef struct _ANTENNA_RF_CONFIG
{

	UINT16 transmitPowerIndex;/**<The value is the zero-based index into the TransmitPowerTable.*/
	UINT16 receiveSensitivityIndex;/**< The value is the zero-based index into the ReceiveSensitivityTable. */
	UINT16 transmitFrequencyIndex;/**< In frequency-hopping regulatory regions, this is the Frequency hop table ID. In case of Fixed Frequency, this is the one-based channel index in the FixedFrequencyTable.*/
	UINT32 rfModeTableIndex;/**<Index to the RF_MODE_TABLE_ENTRY in UHF_RF_MODE_TABLE present in RF_MODES of READER_CAPS */
	UINT32 tari;/**<Tari value. */
	UINT16 transmitPort;/**<Transmit port of the Antenna. transmitPort field should be used only if the reader supports AntennaRFConfigSupported capability*/
	UINT16 receivePort;/**< Receive port of the Antenna.  receivePort field should be used only only if the reader supports AntennaRFConfigSupported capability*/
	ANTENNA_STOP_TRIGGER antennaStopTrigger;/**< Antenna stop trigger configuration. antennaStopTrigger field should be used only if the reader supports AntennaRFConfigSupported capability*/
	LPVOID lpReserved[32]; /**<  Reserved for future.*/
} ANTENNA_RF_CONFIG, *LPANTENNA_RF_CONFIG;


/**<
* This structure exposes a mechanism to provide the full Antenna configuration including the RF Config, pre filters and singulation control that will be used for the specific antenna.
*/
typedef struct _ANTENNA_CONFIG
{
	/* Sub-structure describing memory allocated and Initilaized used by this structure .*/	
	UINT16 antennaID;/**<Specifies the antenna ID */
	LPANTENNA_RF_CONFIG lpAntennaRfConfig;/**<Pointer to lpAntennaRfConfig */
	LPPRE_FILTER_LIST lpPreFilterList;/**<Pointer to lpPreFilterList. */
	LPSINGULATION_CONTROL lpSingulationControl;/**<Pointer lpSingulationControl  */
	LPVOID lpReserved[32];				/**<  Reserved for future.*/
} ANTENNA_CONFIG, *LPANTENNA_CONFIG;

/**<
* ZONE_CONFIG contains the Configuration of a Zone for Inventory.
*/
typedef struct  _ZONE_CONFIGW
{
	WCHAR ZoneName[MAX_PATH];	/**< Name of the Zone */
	UINT32 antennaCount;/**<  Number of elements in array lpAntennaConfiguartions .*/
	ANTENNA_CONFIG * lpAntennaConfigurations;		/**<  Array of Antenna configuarions of the Antennas in the Zone*/
	LPANTENNA_CONFIG   lpZoneGlobalAntennaConfiguration;   /**<  Pointer to Global Antenna configurations  of all the Antennas in the Zone*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
										 
}ZONE_CONFIGW, *LPZONE_CONFIGW;

typedef struct  _ZONE_CONFIGA
{
	CHAR ZoneName[MAX_PATH];	/**< Name of the Zone */
	UINT32 antennaCount;/**<  Number of elements in array lpAntennaConfiguartions .*/
	ANTENNA_CONFIG * lpAntennaConfigurations;		/**<  Array of Antenna configuarions of the Antennas in the Zone*/
	LPANTENNA_CONFIG   lpZoneGlobalAntennaConfiguration;   /**<  Pointer to Global Antenna configurations  of all the Antennas in the Zone*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
										 
}ZONE_CONFIGA, *LPZONE_CONFIGA;

#ifdef UNICODE
typedef ZONE_CONFIGW ZONE_CONFIG;
typedef LPZONE_CONFIGW LPZONE_CONFIG;
#else
typedef ZONE_CONFIGA ZONE_CONFIG;
typedef LPZONE_CONFIGA LPZONE_CONFIG;
#endif

/**<
* Contains Antenna Information to be used for Zone Inventory or Access Operations
*/
typedef struct _ZONE_INFO
{
	UINT32 zoneID;

	UINT16*  pAntennaList;/**<  Array for holding the Antennas to be used for the operation:
								 Range: 1 - N (N = Max. No of Antenna Supported).*/
	UINT32 antennaListLength;/**<  Number of elements in array pAntennaList .*/
    
	OPERATION_QUALIFIER zoneOperation; /** Array of operations for each antenna ID specified in the pAntennaList.
											 Operation at nth Index of this array is meant for the antenna ID at nth Index in the pAntennaList Array.
											 Should be null for running a Gen2 operation on all the antenna in the pAntennaList
											 It is invalid to set operation as NXP_EAS_SCAN, if this structure is being used in any Access API  or
											 RFID_PerformAccessSequence Call*/
	LPVOID lpReserved[4];	/**<  Reserved for future.*/
}ZONE_INFO, *LPZONE_INFO;

/**
* DEBUG_INFO_PARAMS holds Debug Mask and Length
*/
typedef struct _DEBUG_INFO_PARAMS
{
	UINT16 byteOffset;		/**<  Bit offset. The address of the first (msb) bit against which to apply the 
							Debug Info Mask and compare with the value.*/
	UINT8* pDebugMask;		/**<Bit Mask to be matched 
							The application should allocate an UINT8 array and assign it to this field. 
							The Debuf Info Mask to be used for bit-wise comparison should be filled 
							in the array.*/

	UINT16 debugMaskByteCount;		/**< Number of bits in pDebudMask to be taken for comparison.*/
	LPVOID lpReserved[4];			/**<  Reserved for future.*/
}DEBUG_INFO_PARAMS, *LPDEBUG_INFO_PARAMS;


/**<
* Contains Zone sequence Information to be used for Zone Inventory or Access Operations
*/
typedef struct _ZONE_SEQUENCE
{

	UINT32 zoneListCount;/**<  Number of elements in array pAntennaList .*/

	LPZONE_INFO	 pZoneList;/**<  Array for holding the zone information to be used for the operation:
								 Range: 1 - N (N = Max. No of Antenna Supported).*/

    
	LPVOID lpReserved[4];	/**<  Reserved for future.*/
}ZONE_SEQUENCE, *LPZONE_SEQUENCE;


/**
* TAG_PATTERN holds Tag Pattern criteria  for Filter Operation. 
* If bit i in the mask (pTagMask) is zero, then bit i of the target 
* tag (pTagPattern)  is a dont care (X); if bit i in the mask is one, 
* then bit i of the target tag is bit i of the tag pattern. 
* For example, all tags is specified using a mask length of zero.
*/
typedef struct _TAG_PATTERN
{
	MEMORY_BANK memoryBank;  /**<  Memory Bank to be considered for filtering.*/
	UINT16 bitOffset;		/**<  Bit offset. The address of the first (msb) bit against which to apply the 
							Tag Mask and compare with the value.*/
	UINT8* pTagPattern;		/**<Memory Bank Data which is to be used for comparison.
							The application should allocate an UINT8 array and assign to this field. 
							The Memory Bank Data to be used for comparison should be 
							filled in the array.*/
	UINT16 tagPatternBitCount; /**< Number of bits in pTagPattern to be taken for comparison.*/
	UINT8* pTagMask;		/**<Bit Mask to be matched 
							The application should allocate an UINT8 array and assign it to this field. 
							The Tag Mask to be used for bit-wise comparison should be filled 
							in the array.*/

	UINT16 tagMaskBitCount;		/**< Number of bits in pTagMask to be taken for comparison.*/
	LPVOID lpReserved[4];			/**<  Reserved for future.*/
}TAG_PATTERN, *LPTAG_PATTERN;

/** 
* RSSI_RANGE_FILTER is used to configure filter settings on the reader to filter tags based on the 
* received signal strength of the tag, the time the tag was read, or both.
*/
typedef struct _RSSI_RANGE_FILTER
{
	INT8 peakRSSILowerLimit; /* Peak RSSI Lower Limit */
	INT8 peakRSSIUpperLimit; /* Peak RSSI Upper Limit */
	MATCH_RANGE matchRange; /* Match Range */
	LPVOID lpReserved[4];			/**<  Reserved for future.*/
}RSSI_RANGE_FILTER, *LPRSSI_RANGE_FILTER;

/** 
* POST_FILTER holds the Tag Filter criteria  for Inventory Operation. 
* Each Tag will be checked against both pattern A and pattern B, as per the matchPattern condition.
*/
typedef struct _POST_FILTER
{
	/* Sub-structure describing memory allocated and used by this     
	structure .*/
	_STRUCT_INFO         structInfo;

	LPTAG_PATTERN lpTagPatternA;	/**<	Tag Pattern A to be used for comparison. 
											The application should allocate new TAG_PATTERN and assign this field to 
											the allocated pointer.*/
	LPTAG_PATTERN lpTagPatternB;	/**<	Tag Pattern B to be used for comparison. If using only one filter, 
											this pointer should be assigned to NULL.*/
	MATCH_PATTERN  matchPattern;	/**<	Match criteria to be used for filtering using Tag
											patterns A and B.*/ 
	
	LPRSSI_RANGE_FILTER lpRSSIRangeFilter;	/**< Pointer to RSSI Range Filter to be used.*/
	LPVOID lpReserved[16-1];				/**<	Reserved for future.
												1 - Taken for lpRSSIRangeFilter. */
}POST_FILTER, *LPPOST_FILTER;


/** 
* ACCESS_FILTER holds the Tag Filter criteria  for Access Operation. 
* Each Tag will be checked against both pattern A and pattern B, as per the matchPattern condition.
*/
typedef struct _ACCESS_FILTER
{
	/* Sub-structure describing memory allocated and used by this     
	structure .*/
	_STRUCT_INFO         structInfo;

	LPTAG_PATTERN lpTagPatternA; /**< Tag Pattern A to be used for comparison. 
										  The application should allocate new TAG_PATTERN and assign this field to 
										  the allocated pointer.*/
	LPTAG_PATTERN lpTagPatternB;/**< Tag Pattern B to be used for comparison. If using only one filter, this pointer should be assigned to NULL.*/
	MATCH_PATTERN  matchPattern; /**< Match criteria to be used for filtering using Tag patterns A and B.*/
	
	LPRSSI_RANGE_FILTER lpRSSIRangeFilter;	/**< Pointer to RSSI Range Filter to be used.*/
	LPVOID lpReserved[16-1];				/**<	Reserved for future.
												1 - Taken for lpRSSIRangeFilter. */
}ACCESS_FILTER, *LPACCESS_FILTER;


/**
* READ_ACCESS_PARAMS contains the parameters for Read Access Operation.
*/
typedef struct _READ_ACCESS_PARAMS
{
	MEMORY_BANK			memoryBank;/**< Memory bank from which data is to be read from.*/
	UINT16				byteOffset;/**< Byte offset; The addresss of the first byte to read from the chosen memory bank.
							   Since Access operation is WORD aligned, offset should be in double bytes.*/
	UINT16				byteCount;/**< Number of bytes to read.
							   Since Access operation is WORD aligned, offset be in double bytes.*/
	UINT32				accessPassword;/**< Password to be used for the Access operation.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}READ_ACCESS_PARAMS, *LPREAD_ACCESS_PARAMS;

/**
*  WRITE_ACCESS_PARAMS contains the parameters for Write Access Operation.
*/
typedef struct _WRITE_ACCESS_PARAMS
{
	MEMORY_BANK	memoryBank;/**< Memory bank on which data is to be written to.*/
	UINT16				byteOffset;/**< Byte offset; Addresss of the first byte to be written to the chosen memory bank.
							   Since Access operation is WORD aligned, offset be in double bytes.*/
	UINT8*				pWriteData;/**< Pointer to a UINT8 array which contains the data to be written. 
										  Write operation occurs only on word boundaries, hence it is required to 
										  input this field accordingly. For e.g The word 0x1122 will be UINT8 writeData[2] = {0x11, 0x22}.*/
	UINT16				writeDataLength;/**< Length of the array pWriteData.*/
	UINT32				accessPassword;/**< Password to be used for the Access operation.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}WRITE_ACCESS_PARAMS, *LPWRITE_ACCESS_PARAMS;

/**
*  WRITE_SPECIFIC_FIELD_ACCESS_PARAMS contains the parameters for Write Access Operation.
*/
typedef struct _WRITE_SPECIFIC_FIELD_ACCESS_PARAMS
{
	UINT8*				pWriteData;/**< Pointer to a UINT8 array which contains the data to be written. 
										  Write operation occurs only on word boundaries, hence it is required to 
										  input this field accordingly. For e.g The word 0x1122 will be UINT8 writeData[2] = {0x11, 0x22}.*/
	UINT16				writeDataLength;/**< Length of the array pWriteData.*/
	UINT32				accessPassword;/**< Password to be used for the Access operation.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}WRITE_SPECIFIC_FIELD_ACCESS_PARAMS, *LPWRITE_SPECIFIC_FIELD_ACCESS_PARAMS;
/**
*  KILL_ACCESS_PARAMS contains the parameters for Kill Access Operation, which is Kill-Password.
*/
typedef  struct _KILL_ACCESS_PARAMS
{
	UINT32 killPassword;/**<  Kill Password. If it is zero, LLRP Reader will return zero-password-error.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}KILL_ACCESS_PARAMS, *LPKILL_ACCESS_PARAMS;

/**
*  LOCK_ACCESS_PARAMS contains the parameters for Lock Access Operation.
*/
typedef struct _LOCK_ACCESS_PARAMS
{
	LOCK_PRIVILEGE		privilege[NUM_LOCK_DATA_FIELDS]; /**< Lock privilege for each memory bank. For setting the index use LOCK_DATA_FIELD.
														Assign privilege only for those memory banks whose 
														privilege is to be changed.*/
	UINT32				accessPassword; /**< Lock Password.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}LOCK_ACCESS_PARAMS, *LPLOCK_ACCESS_PARAMS;

/**
*  BLOCK_ERASE_ACCESS_PARAMS contains the parameters for Block-Erase Access Operation.
*/
typedef struct _BLOCK_ERASE_ACCESS_PARAMS
{
	MEMORY_BANK	memoryBank; /**< Memory bank on which access operation is to be performed.*/
	UINT16				byteOffset; /**< Byte offset; The address of first byte to be erased.
							   Since Access operation is WORD aligned, offset be in double bytes.*/
	UINT16				byteCount; /**< Number of Bytes to be erased.
							   Since Access operation is WORD aligned, offset be in double bytes.*/
	UINT32				accessPassword; /**< Password to be used for the Access operation.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}BLOCK_ERASE_ACCESS_PARAMS, *LPBLOCK_ERASE_ACCESS_PARAMS;

/**
*  RECOMMISSION_ACCESS_PARAMS contains the parameters for Recommission Access Operation.
*/
typedef struct _RECOMMISSION_ACCESS_PARAMS
{
	UINT32						killPassword;	/**<  Kill Password. If it is zero, LLRP Reader will return zero-password-error.*/
	RECOMMISSION_OPERATION_CODE	opCode;			/** Recommission operation code.*/
	LPVOID lpReserved[4];							/**<  Reserved for future.*/
}RECOMMISSION_ACCESS_PARAMS, *LPRECOMMISSION_ACCESS_PARAMS;

/**
*  BLOCK_PERMALOCK_ACCESS_PARAMS contains the parameters for BlockPermalock Access Operation.
*/
typedef struct _BLOCK_PERMALOCK_ACCESS_PARAMS
{
	MEMORY_BANK		memoryBank; /**< Memory bank on which access operation is to be performed.*/
	BOOLEAN			readLock;	/**< ReadLock specifies whether a tag backscatters the perlock status
								of, or permalocks, one of more blocks within the memory bank as specified.
								when readLock is true, it performs block perma lock in specified memory bank starting at offset.
								When readLock is false, the Reader get the permalock mask.*/
	UINT16			byteOffset; /**< Byte offset; Address of the first byte for the Mask.*/
	UINT16			byteCount; /**< Specifies the range of Mask, starting from byteOffset and ending (16xBlockRange)-1 blocks later. This is valid only when readLock is false. i.e. for read operation*/
	UINT32			accessPassword;/**< Password to be used for the Access operation.*/
	UINT8*			pMask; /**<Mask specifies which memory blocks a tag permalocks. Masks depends on the
							readLock as follows:
							When readLock is false, the Reader omits permalock mask.								
							when readLock is true, the Reader should permalock as specified by the Mask.
							The application should allocate an UINT8 array and assign it to this field. 
							The Mask to be used for bit-wise comparison should be filled 
							in the array.*/
	UINT16			maskLength; /**< Number of bytes in pMask to be taken for comparison.*/
	LPVOID lpReserved[4];			/**<  Reserved for future.*/
}BLOCK_PERMALOCK_ACCESS_PARAMS, *LPBLOCK_PERMALOCK_ACCESS_PARAMS;

/**
*  OP_CODE_PARAMS contains the parameters for Operation Sequence.
*/
typedef struct _OP_CODE_PARAMS
{
	ACCESS_OPERATION_CODE opCode; /**<  C1G2 Access Operation to be performed.*/
	STRUCT_HANDLE opParams; /**<  Pointer to READ_ACCESS_PARAMS or WRITE_ACCESS_PARAMS or 
									KILL_ACCESS_PARAMS or LOCK_ACCESS_PARAMS or BLOCK_ERASE_ACCESS_PARAMS.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}OP_CODE_PARAMS, *LPOP_CODE_PARAMS;


/**
* READER_STATS contains RFID Reader Statistics
*/
typedef struct _READER_STATS
{
	UINT32 identifiedSuccessCount; /**<  The number of successful tags that have been identified across an AntennaReadPoint.*/
	UINT32 identifiedFailureCount; /**<  The number of number of the failed tag identification attempts at the AntennaReadPoint.*/
	UINT32 readSuccessCount; /**<  The number of successful number of tag memory reads at the AntennaReadPoint.*/
	UINT32 readFailureCount; /**<  The number of the failed tag memory reads at the AntennaReadPoint.*/
	UINT32 writeSuccessCount; /**<  The number of successful tag memory writes at the AntennaReadPoint.*/
	UINT32 writeFailureCount; /**<  The number of the failed tag memory writes at the AntennaReadPoint.*/
	UINT32 killSuccessCount; /**<  The number of tags successfully killed at the AntennaReadPoint.*/
	UINT32 killFailureCount; /**<  The number of the failed tag kills at the AntennaReadPoint.*/
	UINT32 lockSuccessCount; /**<  The number of tags successfully locked at the AntennaReadPoint.*/
	UINT32 lockFailureCount; /**<  The number of the failed tag locked at the AntennaReadPoint.*/

	UINT32 blockWriteSuccessCount; /**<  The number successful tag memory block-writes  at the AntennaReadPoint.*/
	UINT32 blockWriteFailureCount; /**<  The number of the failed tag block-writes at the AntennaReadPoint.*/
	UINT32 blockEraseSuccessCount; /**<  The number of tags successfully block-erased at the AntennaReadPoint.*/
	UINT32 blockEraseFailureCount; /**<  The number of the failed tag block-erase at the AntennaReadPoint.*/
	UINT32 blockPermalockSuccessCount; /**<  The number of tags successfully block-permalocked at the AntennaReadPoint.*/
	UINT32 blockPermalockFailureCount; /**<  The number of the failed tag block-permalock at the AntennaReadPoint.*/

	UINT32 nxpChangeEASSuccessCount; /**<  The number successful NXP Tag operation - Change EAS  at the AntennaReadPoint.*/
	UINT32 nxpChangeEASFailureCount; /**<  The number of the failed NXP Tag operation - Change EAS   at the AntennaReadPoint.*/
	UINT32 nxpEASAlarmSuccessCount; /**<  The number successful NXP Tag operation - EAS Alarm  at the AntennaReadPoint.*/
	UINT32 nxpEASAlarmFailureCount; /**<  The number of the failed NXP Tag operation - EAS Alarm   at the AntennaReadPoint.*/
	UINT32 nxpReadProtectSuccessCount; /**<  The number successful NXP Tag operation - Read Protect  at the AntennaReadPoint.*/
	UINT32 nxpReadProtectFailureCount; /**<  The number of the failed NXP Tag operation - Read Protect   at the AntennaReadPoint.*/
	UINT32 nxpResetReadProtectSuccessCount; /**<  The number successful NXP Tag operation - Reset Read Protect  at the AntennaReadPoint.*/
	UINT32 nxpResetReadProtectFailureCount; /**<  The number of the failed NXP Tag operation - Reset Read Protect   at the AntennaReadPoint.*/
	UINT32 nxpCalibrateSuccessCount; /**<  The number successful NXP Tag operation - Calibrate at the AntennaReadPoint.*/
	UINT32 nxpCalibrateFailureCount; /**<  The number of the failed NXP Tag operation - Calibrate at the AntennaReadPoint.*/
	UINT32 nxpchangeConfigSuccessCount; /**<  The number of the successful NXP Tag operation - Change Config at the AntennaReadPoint.*/
	UINT32 nxpchangeConfigFailureCount; /**<  The number of the failed NXP Tag operation - Change Config at the AntennaReadPoint.*/
    
    UINT32 fujitsuChangeWordLockSuccessCount; /**< The number successful Fujitsu 64K Tag operations - ChangeWordLock  at the AntennaReadPoint*/
    UINT32 fujitsuChangeWordLockFailureCount;/**<  The number of the failed Fujitsu 64K Tag operations -  ChangeWordLock  at the AntennaReadPoint*/
    UINT32 fujitsuChangeBlockLockSuccessCount;/**< The number successful Fujitsu 64K Tag operations - ChangeBlockLock at the AntennaReadPoint*/
    UINT32 fujitsuChangeBlockLockFailureCount;/**< The number of the failed Fujitsu 64K Tag operations- ChangeBlockLock at the AntennaReadPoint */
    UINT32 fujitsuReadBlockLockSuccessCount;/**<   The number successful Fujitsu 64K Tag operations - ReadBlockLock   at the AntennaReadPoint*/
    UINT32 fujitsuReadBlockLockFailureCount;/**<   The number of the failed Fujitsu 64K Tag operations-  ReadBlockLock  at the AntennaReadPoint*/
    UINT32 fujitsuChangeBlockOrAreaGroupPasswordSuccessCount;/**<  The number successful Fujitsu 64K Tag operations- ChangeBlockOrAreaGroupPassword  at the AntennaReadPoint */
    UINT32 fujitsuChangeBlockOrAreaGroupPasswordFailureCount;/**< The number of the failed Fujitsu 64K Tag operations - ChangeBlockOrAreaGroupPassword  at the AntennaReadPoint.*/
    UINT32 fujitsuBurstWriteSuccessCount;/**< The number of the successful Fujitsu 64K Tag operation - Burst Write at the AntennaReadPoint*/
    UINT32 fujitsuBurstWriteFailureCount;/**< The number of failed Fujitsu 64K Tag operations   -  Burst Write  at the AntennaReadPoint*/
    UINT32 fujitsuBurstEraseSuccessCount;/**< The number successful Fujitsu 64K Tag operations  -  Burst Erase  at the AntennaReadPoint*/
    UINT32 fujitsuBurstEraseFailureCount;/**< The number of failed Fujitsu 64K Tag operations   -  Burst Erase  at the AntennaReadPoint*/
    UINT32 fujitsuAreaReadLockSuccessCount;/**< The number successful Fujitsu 8K Tag operations - AreaReadLock  at the AntennaReadPoint. */
    UINT32 fujitsuAreaReadLockFailureCount;/**< The number of the failed Fujitsu 8K Tag operation - AreaReadLock  at the AntennaReadPoint.*/
    UINT32 fujitsuAreaWriteLockSuccessCount;/**< The number successful Fujitsu 8K Tag operations -  AreaWriteLock  at the AntennaReadPoint */
    UINT32 fujitsuAreaWriteLockFailureCount;/**< The number of the failed Fujitsu 8K Tag operations - AreaWriteLock  at the AntennaReadPoint.*/
    UINT32 fujitsuAreaWriteLockWOPasswordSuccessCount;/**<  The number of successful Fujitsu 8K Tag operations - AreaWriteLockWOPassword  at the AntennaReadPoint*/
    UINT32 fujitsuAreaWriteLockWOPasswordFailureCount;/**< The number of the failed Fujitsu 8K Tag operations - AreaWriteLockWOPassword at the AntennaReadPoint*/
	UINT32 impinjQTOperationSuccessCount;/**< The number of the success Impinj QT Tag operations - QT Read or Write at the AntennaReadPoint*/
	UINT32 impinjQTOperationFailureCount;/**< The number of the failed Impinj QT Tag operations - QT Read or Write at the AntennaReadPoint*/


	UINT32 reserved32[48-22];				/**< for future expansions other than pointers types. 2 are used for QT and 2 for changeconfig*/
	LPVOID lpReserved[64-48];				/**<  Reserved for future.*/
}READER_STATS, *LPREADER_STATS;

/**
* VERSION_INFO contains RFID Version Info
*/
typedef struct _VERSION_INFOW
{
	WCHAR			dllVersion[MAX_PATH];/**<  Specifies the version of RFIDAPI3 C Dll.*/

}VERSION_INFOW, *LPVERSION_INFOW;

typedef struct _VERSION_INFOA
{
	CHAR			dllVersion[MAX_PATH];/**<  Specifies the version of RFIDAPI3 C Dll.*/

}VERSION_INFOA, *LPVERSION_INFOA;

#ifdef UNICODE
typedef VERSION_INFOW VERSION_INFO;
typedef LPVERSION_INFOW LPVERSION_INFO;
#else
typedef VERSION_INFOA VERSION_INFO;
typedef LPVERSION_INFOA LPVERSION_INFO;
#endif

/**
* LOGIN_INFO contains the Login information for logging into the reader.
*/
typedef struct _LOGIN_INFOW
{
	WCHAR hostName[MAX_PATH];/**< Reader IP or Reader Host Name*/
	WCHAR userName[MAX_PATH]; /**< User Name*/
	WCHAR password[MAX_PATH]; /**< Password*/
	RFID_VERSION version;			/**<  RFIDAPI version to be used*/
	BOOLEAN forceLogin;/**<  Force Login this host. This setting is valid only for Merlin version 1.1.0 onwards. 
							To work with FX readers of version lesser than 1.1.0, which doesn't 
							support Forcelogin feature, give this value as false.
					   */
	BYTE reserved1[3];				/**<  3 bytes left after using forceLogin*/
	LPVOID lpReserved[4-2];				/**<  Reserved for future.
										DWORD 1 - Used for version,
										DWORD 2 - forceLogin*/
}LOGIN_INFOW, *LPLOGIN_INFOW;


/**
* FTP-Server Or Location details for firmware update.
*/
typedef struct _FTPSERVER_INFOW
{
	WCHAR hostName[MAX_PATH];/**< Location of files for Software Update. This also supports update from secure FTP (FTPS) and SCP.
							 E.g. Software available at FTP location: "ftp://157.235.88.198/pub/XR400/TestRelease/Rev_3_3_7" or 
							 Software available locally: "C:/XR400/TestRelease/Rev_3_3_7".*/
	WCHAR userName[MAX_PATH]; /**< If Software available at FTP/SCP location, provide Username for FTP/SCP Server respectively.*/
	WCHAR password[MAX_PATH]; /**< If Software available at FTP/SCP location, provide Password for FTP/SCP Server respectively.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}FTPSERVER_INFOW, *LPFTPSERVER_INFOW;

typedef struct _LOGIN_INFOA
{
	CHAR hostName[MAX_PATH];
	CHAR userName[MAX_PATH];
	CHAR password[MAX_PATH];
	RFID_VERSION version;	
	BOOLEAN forceLogin;
	BYTE reserved1[3];
	LPVOID lpReserved[4-2];
}LOGIN_INFOA, *LPLOGIN_INFOA;

typedef struct _FTPSERVER_INFOA
{
	CHAR hostName[MAX_PATH];
	CHAR userName[MAX_PATH];
	CHAR password[MAX_PATH];
	LPVOID lpReserved[4];				/**<  Reserved for future.
										1 - Used for version*/
}FTPSERVER_INFOA, *LPFTPSERVER_INFOA;

#ifdef UNICODE
typedef LOGIN_INFOW LOGIN_INFO;
typedef LPLOGIN_INFOW LPLOGIN_INFO;
typedef LPFTPSERVER_INFOW LPFTPSERVER_INFO;
typedef FTPSERVER_INFOW FTPSERVER_INFO;
#else
typedef LOGIN_INFOA LOGIN_INFO;
typedef LPLOGIN_INFOA LPLOGIN_INFO;
typedef LPFTPSERVER_INFOA LPFTPSERVER_INFO;
typedef FTPSERVER_INFOA FTPSERVER_INFO;
#endif
/**
* Gives information on the Firmware/Software update status.
*/
typedef struct _UPDATE_STATUSW
{
	UINT32 percentage; /**< Percentage of update done.*/
	WCHAR  updateInfo[MAX_PATH]; /**< Additional information like 
								 partition on which the update is being done currently and/or 
								 operation currently being performed at reader.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}UPDATE_STATUSW, *LPUPDATE_STATUSW;

typedef struct _UPDATE_STATUSA
{
	UINT32 percentage; /**< Percentage of update done.*/
	CHAR  updateInfo[MAX_PATH]; /**< Partition on which the update is being done currently.*/
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}UPDATE_STATUSA, *LPUPDATE_STATUSA;

#ifdef UNICODE
typedef UPDATE_STATUSW UPDATE_STATUS;
typedef LPUPDATE_STATUSW LPUPDATE_STATUS;
#else
typedef UPDATE_STATUSA UPDATE_STATUS;
typedef LPUPDATE_STATUSA LPUPDATE_STATUS;
#endif


/**
* READER_INFO gives information on the Reader's name, location, description and contact.
*/
typedef struct _READER_INFOW
{
	WCHAR name[MAX_PATH];
	WCHAR description[MAX_PATH];
	WCHAR location[MAX_PATH];
	WCHAR contact[MAX_PATH];
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}READER_INFOW, *LPREADER_INFOW;
typedef struct _READER_INFOA
{
	CHAR name[MAX_PATH];
	CHAR description[MAX_PATH];
	CHAR location[MAX_PATH];
	CHAR contact[MAX_PATH];
	LPVOID lpReserved[4];				/**<  Reserved for future.*/
}READER_INFOA, *LPREADER_INFOA;

#ifdef UNICODE
typedef READER_INFOW READER_INFO;
typedef LPREADER_INFOW LPREADER_INFO;
#else
typedef READER_INFOA READER_INFO;
typedef LPREADER_INFOA LPREADER_INFO;
#endif

/**
* READER_SYSTEM_INFO gives information on the Reader's current state.
*/
typedef struct _READER_SYSTEM_INFOW
{
	/* Sub-structure describing memory allocated and used by this     
	structure .*/
	_STRUCT_INFO         structInfo;
	WCHAR radioFirmwareVersion[MAX_PATH];/**<  Firmware version of the Radio.*/
	WCHAR fPGAVersion[MAX_PATH];		/**<  FPGA version.*/
	WCHAR upTime[MAX_PATH];				/**<  Reader's up-time.*/
	WCHAR readerName[MAX_PATH];			/**<  Reader name.*/
	WCHAR readerLocation[MAX_PATH];		/**<  Location of the Reader.*/
	UINT32 ramAvailable;				/**<  RAM memory available.*/
	UINT32 flashAvailable;				/**<  Flash memory available.*/
	UINT32	ramUsed;						/**<  Ram Used.*/
	UINT32	ramTotal;						/**<  Total RAM.*/
	INT8	cpuUsageForUserProcesses;			/**<  CPU utilization in % for user processes.*/
	INT8	cpuUsageForSystemProcesses;		/**<  CPU utilization in % for system processes.*/
	UINT16	reserved1;						/**<  Reservation for 16 bits remaining after use of two INT8s.*/
	UINT32 reserved32[4];				/**< for future expansions other than pointers types*/
	WCHAR *serialNumber;				/**<  Serial number of the Reader.*/
	POWER_SOURCE_MODE powersource;
	LPVOID lpReserved[16-12];					/**<  Reserved for future. 
											1 - ramUsed, 
											1 - ramTotal,
											1 - cpuUsedUser+cpuUsedSystem+reserved1*/
}READER_SYSTEM_INFOW, *LPREADER_SYSTEM_INFOW;

/**
* READER_SYSTEM_INFO gives information on the Reader's current state.
*/
typedef struct _READER_SYSTEM_INFOA
{
	/* Sub-structure describing memory allocated and used by this     
	structure .*/
	_STRUCT_INFO         structInfo;
	CHAR	radioFirmwareVersion[MAX_PATH];	/**<  Firmware version of the Radio.*/
	CHAR	fPGAVersion[MAX_PATH];			/**<  FPGA version.*/
	CHAR	upTime[MAX_PATH];				/**<  Reader's up-time.*/
	CHAR	readerName[MAX_PATH];			/**<  Reader name.*/
	CHAR	readerLocation[MAX_PATH];		/**<  Location of the Reader.*/
	UINT32	ramAvailable;					/**<  RAM available for use.*/
	UINT32	flashAvailable;					/**<  Flash memory available.*/
	UINT32	ramUsed;						/**<  Ram Used.*/
	UINT32	ramTotal;						/**<  Total RAM.*/
	INT8	cpuUsageForUserProcesses;		/**<  CPU utilization in % for user processes.*/
	INT8	cpuUsageForSystemProcesses;		/**<  CPU utilization in % for system processes.*/
	UINT16	reserved1;						/**<  Reservation for 16 bits remaining after use of two INT8s.*/
	UINT32 reserved32[4];				/**< for future expansions other than pointers types*/
	CHAR *serialNumber;				/**<  Serial number of the Reader.*/
	POWER_SOURCE_MODE powersource;
	LPVOID lpReserved[16-12];					/**<  Reserved for future. 
											1 - ramUsed, 
											1 - ramTotal,
											1 - cpuUsedUser+cpuUsedSystem+reserved1*/
}READER_SYSTEM_INFOA, *LPREADER_SYSTEM_INFOA;

#ifdef UNICODE
typedef READER_SYSTEM_INFOW READER_SYSTEM_INFO;
typedef LPREADER_SYSTEM_INFOW LPREADER_SYSTEM_INFO;
#else
typedef READER_SYSTEM_INFOA READER_SYSTEM_INFO;
typedef LPREADER_SYSTEM_INFOA LPREADER_SYSTEM_INFO;
#endif
/**
* PROFILE_LIST gives the list of profiles available in the Reader.
*/
typedef struct _PROFILE_LISTW
{
	UINT16	numProfiles;	/**<  Number of profiles.*/
	WCHAR	**pProfileName;	/**<  List of profiles.*/
	UINT16	activeProfileIndex;/**< zero based index specifies which profile is active*/
	LPVOID lpReserved[16]; /**<  Reserved for future.*/
} PROFILE_LISTW, *LPPROFILE_LISTW;

typedef struct _PROFILE_LISTA
{
	UINT16	numProfiles;	/**<  Number of profiles.*/
	CHAR	**pProfileName;	/**<  List of profiles.*/
	UINT16	activeProfileIndex;/**< zero based index specifies which profile is active*/
	LPVOID lpReserved[16]; /**<  Reserved for future.*/
} PROFILE_LISTA, *LPPROFILE_LISTA;

#ifdef UNICODE
typedef PROFILE_LISTW PROFILE_LIST;
typedef LPPROFILE_LISTW LPPROFILE_LIST;
#else
typedef PROFILE_LISTA PROFILE_LIST;
typedef LPPROFILE_LISTA LPPROFILE_LIST;
#endif



/**
* TIME_ZONE_LIST gives the list of Time zones available in the Reader.
*/
typedef struct _TIME_ZONE_LISTW
{
	UINT16	numTimeZones;	/**<  Number of Time Zones.*/
	WCHAR	**pTimeZone;	/**<  List of Time Zones.*/
	UINT16	activeTimeZoneIndex;/**< zero based index specifies which Time Zone is active*/
	LPVOID lpReserved[4]; /**<  Reserved for future.*/
} TIME_ZONE_LISTW, *LPTIME_ZONE_LISTW;

typedef struct _TIME_ZONE_LISTA
{	
	UINT16	numTimeZones;
	CHAR	**pTimeZone;
	UINT16	activeTimeZoneIndex;
	LPVOID lpReserved[4]; /**<  Reserved for future.*/
} TIME_ZONE_LISTA, *LPTIME_ZONE_LISTA;

#ifdef UNICODE
typedef TIME_ZONE_LISTW TIME_ZONE_LIST;
typedef LPTIME_ZONE_LISTW LPTIME_ZONE_LIST;
#else
typedef TIME_ZONE_LISTA TIME_ZONE_LIST;
typedef LPTIME_ZONE_LISTA LPTIME_ZONE_LIST;
#endif

/** 
* SECURE_LLRP_CONFIG configures parameters for secure mode LLRP operation
*/
typedef struct _SEC_LLRP_CONFIG 
{
		BOOLEAN secureMode;			/**< Enable TLS mode of operation for LLRP*/
		BOOLEAN validatePeerCert;	/**< Enable validation of peer by verifying its certificate */
		LPVOID lpReserved[4];		/**<  Reserved for future.*/
}SEC_LLRP_CONFIG, *LPSEC_LLRP_CONFIG;

/**
* LLRP_CONNECTION_CONFIG configures the parameters for LLRP Server/Client connectivity.
*/
typedef struct _LLRP_CONNECTION_CONFIGW
{
	BOOLEAN isClient; /**< Configure LLRP as a client.*/
	UINT32 port;	/**<  LLRP Server's port number.*/
	WCHAR  hostServerIP[MAX_PATH];	/**<  IP address of the LLRP server the reader needs to connect to while in client mode.*/
	LPSEC_LLRP_CONFIG	pSecureModeConfig; /**<  Configurations for LLRP secure mode operation. */
	LPVOID lpReserved[6-1]; /**<  Reserved for future.1 used for pSecureModeConfig*/
} LLRP_CONNECTION_CONFIGW, *LPLLRP_CONNECTION_CONFIGW;

typedef struct _LLRP_CONNECTION_CONFIGA
{	
	BOOLEAN isClient;
	UINT32 port;
	CHAR	hostServerIP[MAX_PATH];
	LPSEC_LLRP_CONFIG	pSecureModeConfig; /**<  Configurations for LLRP secure mode operation. */
	LPVOID lpReserved[6-1]; /**<  Reserved for future.1 used for pSecureModeConfig*/
} LLRP_CONNECTION_CONFIGA, *LPLLRP_CONNECTION_CONFIGA;

#ifdef UNICODE
typedef LLRP_CONNECTION_CONFIGW LLRP_CONNECTION_CONFIG;
typedef LPLLRP_CONNECTION_CONFIGW LPLLRP_CONNECTION_CONFIG;
#else
typedef LLRP_CONNECTION_CONFIGA LLRP_CONNECTION_CONFIG;
typedef LPLLRP_CONNECTION_CONFIGA LPLLRP_CONNECTION_CONFIG;
#endif


/** 
* USB_OPERATION_INFO provides information of the reader's USB operation mode.
*/
typedef struct _USB_OPERATION_INFO
{	
	USB_OPERATION_MODE mode;/**< Specifies the USB operation mode*/
	BOOLEAN allowLLRPConnectionOverride;/**< When mode is NETWORK, it is possible for a different client connecting via the USB interface
										to override an LLRP client is connected over the primary interface.*/
	LPVOID lpReserved[4]; /**<  Reserved for future.*/
} USB_OPERATION_INFO, *LPUSB_OPERATION_INFO;



/** 
* LED_INFO contains information of the User LED settings.
*/
typedef struct _LED_INFO
{	
	LED_COLOR ledColor; /**< Specifies LED Color*/
	UINT32 durationSeconds;   /**< Duration in Seconds. If zero, the LED blinks continuously*/
	BOOLEAN blink;	/**< Specifies LED to be blinked or not */
	LPVOID lpReserved[4]; /**<  Reserved for future.*/
}LED_INFO, *LPLED_INFO;



/** 
* ERROR_INFO provides additional information on the last API that failed.
*/
typedef struct _ERROR_INFOW
{
	SYSTEMTIME		errorTimeStamp; /**< UTC Timestamp at which the error occurred.*/
	RFID_STATUS		rfidStatusCode;/**< Error code of the operation that failed.*/
	WCHAR			statusDesc[MAX_PATH];/**< Error description pertaining to rfidStatusCode.*/
	WCHAR			vendorMessage[MAX_PATH];/**< Vendor specific error message for the error that occurred; E.g. LLRP message or Reader Management Message.*/
}ERROR_INFOW, *LPERROR_INFOW;

typedef struct _ERROR_INFOA
{
	SYSTEMTIME		errorTimeStamp; /**< UTC Timestamp at which the error occurred.*/
	RFID_STATUS		rfidStatusCode;/**< Error code of the operation that failed.*/
	CHAR			statusDesc[MAX_PATH];/**< Error description pertaining to rfidStatusCode.*/
	CHAR			vendorMessage[MAX_PATH];/**< Vendor specific error message for the error that occurred; E.g. LLRP message or Reader Management Message.*/
}ERROR_INFOA, *LPERROR_INFOA;

#ifdef UNICODE
typedef ERROR_INFOW ERROR_INFO;
typedef LPERROR_INFOW LPERROR_INFO;
#else
typedef ERROR_INFOA ERROR_INFO;
typedef LPERROR_INFOA LPERROR_INFO;
#endif
/*Parameters of APIs encapsulating  NXP  commands */

/**
*  NXP_SET_EAS_PARAMS contains parameters for NXP's EAS (Electronic Article Surveillance) operation 
*/
typedef struct _NXP_SET_EAS_PARAMS
{
	UINT32   accessPassword; /**< Access Password of the NXP tag*/
	BOOLEAN  EASState;       /**< Desired state of the EAS bit*/
	LPVOID lpReserved[4];       /**< Reserved for future use */
}NXP_SET_EAS_PARAMS,*LPNXP_SET_EAS_PARAMS;


/**
*  NXP_READ_PROTECT_PARAMS contains parameters for NXP's Read-Protect(SetQuiet) operation
*/
typedef struct _NXP_READ_PROTECT_PARAMS
{
	UINT32 accessPassword; /**< Access Password of the NXP tag*/
	LPVOID lpReserved[4];	   /**< Reserved for future use */
 }NXP_READ_PROTECT_PARAMS,*LPNXP_READ_PROTECT_PARAMS;


/**
* NXP_RESET_READ_PROTECT_PARAMS contains parameters for NXP's Reset Read-Protect(Reset Quiet) operation
*/
typedef struct _NXP_RESET_READ_PROTECT_PARAMS
{
	UINT32 accessPassword; /**<  Access Password of the NXP tag*/
	LPVOID lpReserved[4];     /**< Reserved for future use */
 }NXP_RESET_READ_PROTECT_PARAMS,*LPNXP_RESET_READ_PROTECT_PARAMS;
 
/**
* FUJITSU_CHANGEWORDLOCK_ACCESS_PARAMS contains the parameters for Fujitsu's ChangeWordLock operation.Only 2 LSBs of payloadAction and PayloadMask
* are considered for ChangeWordLock's payload.
*/

typedef struct _FUJITSU_CHANGE_WORDLOCK_ACCESS_PARAMS
{
	MEMORY_BANK memoryBankName; 
    UINT16 byteOffset;            /**< Byte-Offset of the starting word*/
    UINT8  payloadAction;         /**< 2LSBs specify the WordLock-Action for words 0 and 1 (in that order)*/
	UINT8  payloadMask;			  /**< 2LSBs specify  the Mask for the action bits in payloadAction*/				
    UINT32 blockGroupPassword;    /**< Password of the containing BlockGroup*/
    LPVOID lpReserved[2];
}FUJITSU_CHANGE_WORDLOCK_ACCESS_PARAMS,*LPFUJITSU_CHANGE_WORDLOCK_ACCESS_PARAMS;
typedef struct _FUJITSU_CHANGE_BLOCKLOCK_ACCESS_PARAMS
{ 
	UINT8 blockGroupOffset;      /**< Index of the Block ranging from 0-31*/
	UINT16 payloadAction;		 /**< A 16 bit pattern where each bit specifies status of BlockLock flags for its respective Block*/
	UINT16 payloadMask;			 /**< Mask for payload Action where each bit specifies whether to apply or ignore the corresponding 'Action' bit*/
	UINT32 blockGroupPassword;   /**< Password of the containing BlockGroup*/
	LPVOID lpReserved[2];

}FUJITSU_CHANGE_BLOCKLOCK_ACCESS_PARAMS,*LPFUJITSU_CHANGE_BLOCKLOCK_ACCESS_PARAMS;
/**
* Parameters for Fujitsu's ReadBlockOperation for 64K Tags.Specifies the BlockGroup whose BlockLock flags will be read.
*/
typedef struct _FUJITSU_READ_BLOCKLOCK_ACCESS_PARAMS
{ 
	UINT8 blockGroupOffset;  /**< Index of the Block ranging from 0-31*/
	LPVOID lpReserved[2];

}FUJITSU_READ_BLOCKLOCK_ACCESS_PARAMS,*LPFUJITSU_READ_BLOCKLOCK_ACCESS_PARAMS;
/**
*  Parameters for the BurstWrite Operation.Specifies BurstWrite Data , the memory location where it should be written and the access password of the tag(s).  
*/
typedef struct _FUJITSU_BURST_WRITE_ACCESS_PARAMS
{ 
	MEMORY_BANK memoryBank;       /**< Memory Bank Name */
	UINT16  byteOffset;			  /**< Byte-Offset in the Memory Bank,must be a multiple of 4 */	
	UINT8*  pBurstWriteData;	  /**< Pointer to Byte-Array containg Data for BurstWrite */
	UINT16  burstWriteDataLength;  /**< Byte-Length of the BurstWrite Data,must be a multiple of 4*/
	UINT32  accessPassword;		  /**< Access password of the participant tags*/
	LPVOID lpReserved[2];		
 
}FUJITSU_BURST_WRITE_ACCESS_PARAMS,*LPFUJITSU_BURST_WRITE_ACCESS_PARAMS;
/**
*  Parameters for the BurstErase Operation.Specifies the memory location of Data to be Burst-erased,its byte-length and the access password of the tag(s).  
*/
typedef struct _FUJITSU_BURSTERASE_ACCESS_PARAMS
{ 
	MEMORY_BANK memoryBank;       /**< Memory Bank Name */
	UINT16  byteOffset;			  /**< Byte-Offset in the Memory Bank,must be a multiple of 4 */	
	UINT16  burstEraseLength;     /**< Byte-Length of the Data to be BurstErased,must be a multiple of 4*/
	UINT32  accessPassword;		  /**< Access password of the participant tags*/
	LPVOID lpReserved[2];		
 
}FUJITSU_BURST_ERASE_ACCESS_PARAMS,*LPFUJITSU_BURST_ERASE_ACCESS_PARAMS;
/**
* Parameters for Fujitsu's AreaReadLock operation for 8K Tags.Specifies
*/

typedef struct _FUJITSU_AREA_READLOCK_ACCESS_PARAMS
{ 
	UINT8  areaGroupOffset;      /**< Index of the Block ranging from 0-15*/
	UINT16 payloadAction;		 /**< A 16 bit pattern where each bit specifies the desired status for ReadLock flag of its respective Area*/
	UINT16 payloadMask;			 /**< Mask for payload Action where each bit specifies whether to apply or ignore the corresponding 'Action' bit*/
	UINT32 areaGroupPassword;    /**< Password of the containing AreaGroup*/
	LPVOID lpReserved[2];

}FUJITSU_AREA_READLOCK_ACCESS_PARAMS,*LPFUJITSU_AREA_READLOCK_ACCESS_PARAMS;
/**
* Parameters for Fujitsu's AreaWriteLock operation for 8K Tags.Specifies
*/

typedef struct _FUJITSU_AREA_WRITELOCK_ACCESS_PARAMS
{ 
	UINT8  areaGroupOffset;      /**< Index of the Block ranging from 0-15*/
	UINT16 payloadAction;		 /**< A 16 bit pattern where each bit specifies the desired status for the WriteLock flag of its respective Area*/
	UINT16 payloadMask;			 /**< Mask for payload Action where each bit specifies whether to apply or ignore the corresponding 'Action' bit*/
	UINT32 areaGroupPassword;    /**< Password of the containing AreaGroup*/
	LPVOID lpReserved[2];

}FUJITSU_AREA_WRITELOCK_ACCESS_PARAMS,*LPFUJITSU_AREA_WRITELOCK_ACCESS_PARAMS;
/**
* Parameters for Fujitsu's AreaWriteLockWoPassword operation for 8K Tags.Specifies the AreaGroup and the PayloadAction.
  The term "WOPASSWORD" meants Without-AreaGroupPassword,as can be noted from the structure definition.
*/

typedef struct _FUJITSU_AREA_WRITELOCK_WOPASSWORD_ACCESS_PARAMS
{ 
	UINT8  areaGroupOffset;      /**< Index of the Block ranging from 0-15*/
	UINT16 payloadAction;		 /**< A 16 bit pattern where each bit specifies whether to set/ignore the status of WriteLock flag of its corresponding Area*/
	LPVOID lpReserved[2];

}FUJITSU_AREA_WRITELOCK_WOPASSWORD_ACCESS_PARAMS,*LPFUJITSU_AREA_WRITELOCK_WOPASSWORD_ACCESS_PARAMS;
/**
* Parameters for Fujitsu's ChangeBlockOrAreaGroupPassword Operation for 64K Tags.Specifies the Block or Area(according to whether the target is 64K or 8K),
  the new-password and the current password.
*/
typedef struct _FUJITSU_CHANGE_BLOCK_OR_AREA_GROUPPASSWORD_ACCESS_PARAMS
{ 
	UINT8 blockOrAreaGroupOffset;  /**< Index of the Block (ranging from 0-31) Or AreaGroup(ranging from 0-15)*/
	UINT32 newPassword;            /**< New BlockGroup or AreaGroup password*/
	UINT32 currentPassword;		   /**< Current BlockGroup or AreaGroup password*/
	LPVOID lpReserved[2];

}FUJITSU_CHANGE_BLOCK_OR_AREA_GROUPPASSWORD_ACCESS_PARAMS,*LPFUJITSU_CHANGE_BLOCK_OR_AREA_GROUPPASSWORD_ACCESS_PARAMS;

/**
* Return value of ListUserApps operation - UNICODE. Contains application related information.
*/
typedef struct _USERAPP_DATAW
{ 
	WCHAR *pAppName;			/**< Name of the app*/
	BOOLEAN runStatus;			/**< Current run status of the app*/
	BOOLEAN autoStart;			/**< Whether the app will run on startup*/
	WCHAR *pMetaData;			/**< Application metadata ex. version*/	
}USERAPP_DATAW, *LPUSERAPP_DATAW;

typedef struct _USERAPP_LISTW
{ 
	UINT32 numMaxApps;
	USERAPP_DATAW *pUserAppData;
}USERAPP_LISTW, *LPUSERAPP_LISTW;

/**
* Return value of ListUserApps operation - ASCII. Contains application related information.
*/

typedef struct _USERAPP_DATAA
{ 
	CHAR *pAppName;				/**< Name of the app*/
	BOOLEAN runStatus;			/**< Current run status of the app*/
	BOOLEAN autoStart;			/**< Whether the app will run on startup*/
	CHAR *pMetaData;			/**< Application metadata. ex:version*/	
}USERAPP_DATAA, *LPUSERAPP_DATAA;

typedef struct _USERAPP_LISTA
{ 
	UINT32 numMaxApps;
	USERAPP_DATAA *pUserAppData;
}USERAPP_LISTA, *LPUSERAPP_LISTA;


#ifdef UNICODE
typedef USERAPP_LISTW USERAPP_LIST;
typedef LPUSERAPP_LISTW LPUSERAPP_LIST;
#else
typedef LPUSERAPP_LISTA LPUSERAPP_LIST;
typedef USERAPP_LISTA USERAPP_LIST;
#endif
/**
* CABLE_LOSS_COMPENSATION gives the way to set/get the cable loss compensation factor.
*/
typedef struct _CABLE_LOSS_COMPENSATION_
{ 
	UINT16 antennaID; 				/**< antenna ID*/
	FLOAT cableLengthInFt;			/**< cable length in ft*/
	FLOAT cableLossPer100Ft; 		/**< cable loss per 100 ft*/

}CABLE_LOSS_COMPENSATION, *LPCABLE_LOSS_COMPENSATION;

   
/** 
 * SLED_BATTERY_STATUS contains Sled Battery related information, battery level in percantage 
 * and status (charging\discharging or critical) 
 */ 
typedef struct _SLED_BATTERY_STATUS 
{ 
    UINT32 batteryLevel;        /**< Battery level in percentage (%) */ 
    BATTERY_STATUS status;      /**< status (charging\discharging or critical) */ 
    LPVOID lpReserved[2]; 
}SLED_BATTERY_STATUS,*LPSLED_BATTERY_STATUS;

/** 
 *  STANDARD_REGION_INFO contains given region regulatory
 *		related standard information
 */ 
typedef struct _STANDARD_REGION_INFOW
{
	WCHAR strRegionName[MAX_PATH];			/**< Region Name e.g. European Union*/
	WCHAR strStandardName[MAX_PATH];		/**< Region Standard name e.g. EU 302.208*/
	BOOLEAN bIsHoppingConfigurable;			/**< whether hopping configuration is allowed*/
	UINT32 iNumChannels;					/**< Number of frequency channels supported by region*/
	UINT32 *piChannelInfo;					/**< List of channels supported by region*/
	UINT32 *piChannelValueInfo;				/**< Value list of channels supported by region*/
}STANDARD_REGION_INFOW,*LPSTANDARD_REGION_INFOW;

/** 
 *  STANDARD_REGION_INFO contains given region regulatory
 *		related standard information
 */
typedef struct _STANDARD_REGION_INFOA
{
	CHAR strRegionName[MAX_PATH];			/**< Region Name e.g. European Union*/
	CHAR strStandardName[MAX_PATH];			/**< Region Standard name e.g. EU 302.208*/
	BOOLEAN bIsHoppingConfigurable;			/**< whether hopping configuration is allowed*/
	UINT32 iNumChannels;					/**< Number of frequency channels supported by region*/
	UINT32 *piChannelInfo;					/**< List of channels supported by region*/
	UINT32 *piChannelValueInfo;				/**< Value list of channels supported by region*/
}STANDARD_REGION_INFOA,*LPSTANDARD_REGION_INFOA;

/** 
 *  USER_INFO contains given user name, old and new password
 */
typedef struct _USER_INFOW
{
	WCHAR userName[MAX_PATH];
	WCHAR oldPassword[MAX_PATH];
	WCHAR newPassword[MAX_PATH];
	LPVOID lpReserved[4];
}USER_INFOW,*LPUSER_INFOW;

/** 
 *  USER_INFO contains given user name, old and new password
 */
typedef struct _USER_INFOA
{
	CHAR userName[MAX_PATH];
	CHAR oldPassword[MAX_PATH];
	CHAR newPassword[MAX_PATH];
	LPVOID lpReserved[4];
}USER_INFOA,*LPUSER_INFOA;

/** 
 *  ACTIVE_REGION_INFO contains currently active region regulatory
 *		related information
 */ 
typedef struct _ACTIVE_REGION_INFOW
{
	WCHAR strRegionName[MAX_PATH];			/**< Region Name e.g. European Union*/
	WCHAR strStandardName[MAX_PATH];		/**< Region Standard name e.g. EU 302.208*/
    BOOLEAN bIsHoppingOn;					/**< whether hopping is ON or OFF*/
	UINT32 iNumChannels;					/**< Number of frequency channels enabled in active region*/
	UINT32 *piChannelInfo;					/**< List of channels that are currently enabled in active region*/
}ACTIVE_REGION_INFOW,*LPACTIVE_REGION_INFOW;

/** 
 *  ACTIVE_REGION_INFO contains currently active region regulatory
 *		related information
 */ 
typedef struct _ACTIVE_REGION_INFOA
{
	CHAR strRegionName[MAX_PATH];			/**< Region Name e.g. European Union*/
	CHAR strStandardName[MAX_PATH];			/**< Region Standard name e.g. EU 302.208*/
    BOOLEAN bIsHoppingOn;					/**< whether hopping is ON or OFF*/
	UINT32 iNumChannels;					/**< Number of frequency channels enabled in active region*/
	UINT32 *piChannelInfo;					/**< List of channels that are currently enabled in active region*/
}ACTIVE_REGION_INFOA,*LPACTIVE_REGION_INFOA;

/** 
 *  REGION_LIST contains list of supported regions on reader
 * 
 */ 
typedef struct _REGION_LISTW
{
	UINT32 numRegions;			/**< Total number of region */
	WCHAR** RegionNamesList;	/**< Region names list*/
}REGION_LISTW,*LPREGION_LISTW;

/** 
 *  REGION_LIST contains list of supported regions on reader
 * 
 */ 
typedef struct _REGION_LISTA
{
	UINT32 numRegions;			/**< Total number of region */
	CHAR** RegionNamesList;		/**< Region names list*/
}REGION_LISTA,*LPREGION_LISTA;

/** 
 *  STANDARD_INFO_LIST contains list of standard supported by
 *		particular region e.g. for region Hong Kong, 1. Hong Kong A 2.Hong Kong B
 */ 
typedef struct _STANDARD_INFO_LISTW
{
	UINT32 numStds;						/**< Total number of standrad supported by region */
	STANDARD_REGION_INFOW *StdsList;	/**< List standrad supported by region */
}STANDARD_INFO_LISTW,*LPSTANDARD_INFO_LISTW;

/** 
 *  STANDARD_INFO_LIST contains list of standard supported by
 *		particular region e.g. for region Hong Kong, 1. Hong Kong A 2.Hong Kong B
 */
typedef struct _STANDARD_INFO_LISTA
{
	UINT32 numStds;						/**< Total number of standrad supported by region */
	STANDARD_REGION_INFOA *StdsList;	/**< List standrad supported by region */
}STANDARD_INFO_LISTA,*LPSTANDARD_INFO_LISTA;

/** 
 *  CHANNEL_LIST contains list of channels to be configured 
 *		for particular region
 */
typedef struct _CHANNEL_LIST
{ 
	UINT32 iNumChannels;	/**< Total number of channels */
	UINT32* ChannelList;	/**< List of channels to be used by reader */
}CHANNEL_LIST,*LPCHANNEL_LIST;

#ifdef UNICODE
typedef STANDARD_REGION_INFOW			STANDARD_REGION_INFO;
typedef LPSTANDARD_REGION_INFOW			LPSTANDARD_REGION_INFO;
typedef ACTIVE_REGION_INFOW				ACTIVE_REGION_INFO;
typedef LPACTIVE_REGION_INFOW			LPACTIVE_REGION_INFO;
typedef REGION_LISTW					REGION_LIST;
typedef LPREGION_LISTW					LPREGION_LIST;
typedef STANDARD_INFO_LISTW				STANDARD_INFO_LIST;
typedef LPSTANDARD_INFO_LISTW			LPSTANDARD_INFO_LIST;
typedef USER_INFOW						USER_INFO;
#else
typedef STANDARD_REGION_INFOA			STANDARD_REGION_INFO;
typedef LPSTANDARD_REGION_INFOA			LPSTANDARD_REGION_INFO;
typedef ACTIVE_REGION_INFOA				ACTIVE_REGION_INFO;
typedef LPACTIVE_REGION_INFOA			LPACTIVE_REGION_INFO;
typedef REGION_LISTA					REGION_LIST;
typedef LPREGION_LISTA					LPREGION_LIST;
typedef STANDARD_INFO_LISTA				STANDARD_INFO_LIST;
typedef LPSTANDARD_INFO_LISTA			LPSTANDARD_INFO_LIST;
typedef USER_INFOA						USER_INFO;
#endif

//RFIDAPI_STRUCT_H
#ifdef __cplusplus
}
#endif
#endif //RFIDAPI_STRUCT_H
/*                Copyrights 2010-2016 Symbol Technologies LLC
 *                          All rights reserved
 * 
 *  
 *****************************************************************************
 */

/**
 *****************************************************************************
 ** 
 ** @file  rfidapiTypes.h
 ** 
 ** @brief <b> Data types </b> 
 ** 
 ** 
 ****************************************************************************/
#ifndef RFIDAPI_TYPES_H
#define RFIDAPI_TYPES_H

#if defined(__cplusplus)

extern "C"
{
#endif
typedef signed   char       INT8;
typedef unsigned char       UINT8;
typedef signed   short      INT16;
typedef unsigned short      UINT16;
typedef signed   int	    INT32;
typedef unsigned int        UINT32;
typedef float               FLOAT;
typedef unsigned long       ULONG;

#ifdef WIN32
typedef signed   __int64    INT64;
typedef unsigned __int64    UINT64;
typedef unsigned __int64	RFID_HANDLE64;
typedef unsigned __int64	SOCKET_HANDLE;
#else
#include <inttypes.h> 
#include <wchar.h>
typedef wchar_t WCHAR;
#define MAX_PATH          260
typedef void *LPVOID;
typedef char CHAR;
typedef unsigned char       BYTE;
typedef unsigned short      WORD;
typedef BYTE				BOOLEAN;
#define WINAPI __attribute__((stdcall))
	typedef int64_t    INT64;
	typedef uint64_t	RFID_HANDLE64;
	typedef uint64_t    UINT64;
	typedef uint64_t	SOCKET_HANDLE;
		#ifndef FALSE
		#define FALSE               0
	#endif
	#ifndef TRUE
		#define TRUE                1
	#endif


	//Time related
	typedef struct _SYSTEMTIME {
		WORD wYear;
		WORD wMonth;
		WORD wDayOfWeek;
		WORD wDay;
		WORD wHour;
		WORD wMinute;
		WORD wSecond;
		WORD wMilliseconds;
	} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;


#endif
typedef void *				RFID_HANDLE32;
typedef void *				EVENT_HANDLE;
typedef void *				STRUCT_HANDLE;

#ifdef __cplusplus
}
#endif

#endif //RFIDAPI_TYPES_H
