Contactless card interface.h: Difference between revisions

From wizarPOS
(Created page with "→‎* contactless_card_interface.h * * Created on: 2012-7-11 * Author: yaomaobiao: #ifndef CONTACTLESS_CARD_INTERFACE_H_ #define CONTACTLESS_CARD_...")
 
No edit summary
Line 1: Line 1:
/*
  /*
   * contactless_card_interface.h
   * contactless_card_interface.h
   *
   *

Revision as of 09:05, 8 April 2018

 /*
  * contactless_card_interface.h
  *
  *  Created on: 2012-7-11
  *      Author: yaomaobiao
  */
 
 #ifndef CONTACTLESS_CARD_INTERFACE_H_
 #define CONTACTLESS_CARD_INTERFACE_H_
 
 #ifdef __cplusplus
 extern "C"
 {
 #endif
 
 #define CONTACTLESS_CARD_MODE_AUTO		0
 #define CONTACTLESS_CARD_MODE_TYPE_A	1
 #define CONTACTLESS_CARD_MODE_TYPE_B	2
 #define CONTACTLESS_CARD_MODE_TYPE_C	3
 
 #define CONTACTLESS_CARD_EVENT_FOUND_CARD		0
 #define CONTACTLESS_CARD_EVENT_TIME_OUT			1
 #define CONTACTLESS_CARD_EVENT_COMM_ERROR		2
 #define CONTACTLESS_CARD_EVENT_USER_CANCEL		3
 /*
  * this is an inner event, user will never receive this event.
  */
 #define CONTACTLESS_CARD_EVENT_NO_CARD			0xFF
 
 /*
  * When we found a card, the event data is ATR.
  */
 typedef void (*CONTACTLESS_CARD_NOTIFIER)(void* pUserData, int nEvent, unsigned char* pEventData, int nDataLength);
 
 /*
  * Initialize the contactless card reader
  * @param[in] : CONTACTLESS_CARD_NOTIFIER fNotifier : it is called when some events happen.
  * @param[in] : void* pUserData : user data, it is the first parameter of call back function
  * @param[out] : int* pErrorCode : error code if return value is equal to zero
  * return value : == 0, error
  * 				  != 0 , correct handle
  */
 typedef void* (*contactless_card_open)(CONTACTLESS_CARD_NOTIFIER fNotifier, void* pUserData, int* pErrorCode);
 /*
  * Close the contactless card reader
  * @param[in] : int nHandle : handle of this card reader
  * return vlaue : >= 0, success
  * 				  < 0, error code
  */
 typedef int (*contactless_card_close)(int nHandle);
 
 /*
  * Start searching the contactless card
  * If you set the nCardMode is auto, reader will try to activate card in type A, type B and type successively;
  * If you set the nCardMode is type A, type B, or type C, reader only try to activate card in the specified way.
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : int nCardMode : possible value :
  * 								CONTACTLESS_CARD_MODE_AUTO
  *								CONTACTLESS_CARD_MODE_TYPE_A
  *								CONTACTLESS_CARD_MODE_TYPE_B
  *								CONTACTLESS_CARD_MODE_TYPE_C
  * @param[in] : int nFlagSearchAll : 0 : signal user if we find one card in the field
  * 									 1 : signal user only we find all card in the field
  * @param[in] : nTimeout_MS : time out in milliseconds.
  * 							  if nTimeout_MS is less then zero, the searching process is infinite.
  * 							  You can terminate it using the function of contactless_card_search_target_end.
  * return value : >= 0, success in starting the process.
  * 				  < 0 , error code
  */
 typedef int (*contactless_card_search_target_begin)(int nHandle, int nCardMode, int nFlagSearchAll, int nTimeout_MS);
 /*
  * Stop the process of searching card.
  * @param[in] : int nHandle : handle of this card reader
  */
 typedef int (*contactless_card_search_target_end)(int nHandle);
 
 /*
  * Attach the target before transmitting apdu command
  * In this process, the target(card) is activated and return ATR
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned char* pATRBuffer : ATR buffer, if you set it null, you can not get the data.
  * @param[in] : unsigned int nATRBufferLength : length of ATR buffer.
  * return value : >= 0, success, length of ATR.
  * 				  < 0 , error code
  */
 
 typedef int (*contactless_card_attach_target)(int nHandle, unsigned char* pATRBuffer, unsigned int nATRBufferLength);
 /*
  * Detach the target. If you want to send APDU again, you should attach it.
  * @param[in] : int nHandle : handle of this card reader
  * return value : >= 0, success, length of ATR.
  * 				  < 0 , error code
  */
 typedef int (*contactless_card_detach_target)(int nHandle);
 /*
  * Transmit APDU command and get the response
  * @param[in] : int nHandle : handle of this card reader
  * @param[in]		: unsigned char* pAPDU : command of APDU
  * @param[in]		: unsigned int nAPDULength : length of command of APDU
  * @param[out]		: unsigned char* pResponse : response of command of APDU
  * @param[in][out]	: unsigned int* pResponseLength : [in], buffer length of response
  * 													  [out], length of response
  * return value : >= 0, success
  * 				  < 0 , error code
  */
 
 typedef int (*contactless_card_transmit)(int nHandle, unsigned char* pAPDU, unsigned int nAPDULength, unsigned char* pResponse, unsigned int *pResponseLength);
 
 /*
  * Send control command.
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nCmdID : id of command
  * @param[in][out] : unsigned char* pCmdData : data associated with command
  * 					[in] : data associated with command, if no data, you can set it NULL
  * 					[out]: response data
  *
  * @param[in] : unsigned int nDataLength : data length of command
  * return value : >= 0, success, response data length if any.
  * 				  < 0 , error code
  */
 typedef int (*contactless_card_send_control_command)(int nHandle, unsigned int nCmdID, unsigned char* pCmdData, unsigned int nDataLength);
 
 /*
  * Verify pin
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nPinType : 0 : A type
  * 										1 : B type
  * @param[in] : unsigned char* strPin : password of this pin
  * @param[in] : unsigned int nPinLength : length of password
  * return value : >= 0 : success
  * 				  < 0 : error code
  */
 typedef int (*contactless_card_mc_verify_pin)(int nHandle, unsigned int nSectorIndex, unsigned int nPinType, unsigned char* strPin, unsigned int nPinLength);
 
 /*
  * Read data
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  * @param[out] : unsigned char* pDataBuffer : data buffer
  * @param[in] : unsigned int nDataBufferLength : buffer length
  * return value : >= 0 : data length
  * 				  < 0 : error code
  */
 typedef int (*contactless_card_mc_read)(int nHandle, unsigned int nSectorIndex, unsigned int nBlockIndex, unsigned char* pDataBuffer, unsigned int nDataBufferLength);
 
 /*
  * Write data
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  * @param[in] : unsigned char* pData : data
  * @param[in] : unsigned int nDataLength : data length
  * return value : >= 0 : success
  *                < 0 : error code
  */
 
 typedef int (*contactless_card_mc_write)(int nHandle, unsigned int nSectorIndex, unsigned int nBlockIndex, unsigned char* pData, unsigned int nDataLength);
 
 /*
  * @param[in] : int nHandle : handle of this card reader
  * @param[out] : unsigned int* pHasMoreCards :
  *                              0 : only one PICC in the field
  *                              0x0A : more cards in the field(type A)
  *                              0x0B : more cards in the field(type B)
  *                              0xAB : more cards in the field(type A and type B)
            @param[out] : unsigned int * pCardType :
                                         CONTACTLESS_CARD_TYPE_A_CPU             0x0000
                                         CONTACTLESS_CARD_TYPE_B_CPU             0x0100
                                         CONTACTLESS_CARD_TYPE_A_CLASSIC_MINI    0x0001
                                         CONTACTLESS_CARD_TYPE_A_CLASSIC_1K      0x0002
                                         CONTACTLESS_CARD_TYPE_A_CLASSIC_4K      0x0003
                                         CONTACTLESS_CARD_TYPE_A_UL_64           0x0004
                                         CONTACTLESS_CARD_TYPE_A_UL_192          0x0005
                                         CONTACTLESS_CARD_TYPE_A_MP_2K_SL1       0x0006
                                         CONTACTLESS_CARD_TYPE_A_MP_4K_SL1       0x0007
                                         CONTACTLESS_CARD_TYPE_A_MP_2K_SL2       0x0008
                                         CONTACTLESS_CARD_TYPE_A_MP_4K_SL2       0x0009
                                         CONTACTLESS_CARD_UNKNOWN                0x00FF
  */
 typedef int (*contactless_card_query_info)(int nHandle, int* pHasMoreCards, int* pCardType);
 
 /*
  * Read value from a block
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  * @param[out] : unsigned char* pValue : buffer for saving value. LSB, 4bytes
  * @param[in] : unsigned int nValueBufLength : must be greater than 4
  * @param[out] : unsigned char* pAddrData : one byte, for saving a user data
  *
  * return value : >= 0 : success
  *                < 0 : error code
  */
 typedef int (*contactless_card_mc_read_value)(int nHandle, unsigned int nSectorIndex, unsigned int nBlockIndex, unsigned char* pValue, unsigned int nValueBufLength, unsigned char* pAddrData);
 /*
  * Write value to a block
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  * @param[in] : unsigned char* pValue : data for saving value. LSB, 4bytes
  * @param[in] : unsigned int nValueBufLength : must be 4
  * @param[in] : unsigned char* pAddrData : one byte, for saving a user data
  *
  * return value : >= 0 : success
  *                < 0 : error code
  */
 typedef int (*contactless_card_mc_write_value)(int nHandle, unsigned int nSectorIndex, unsigned int nBlockIndex, unsigned char* pValue, unsigned int nValueLength, unsigned char bAddrData);
 /*
  * Increment value to a block, using it with the API : hal_contactless_card_mc_restore and hal_contactless_card_mc_transfer
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  * @param[in] : unsigned char* pValue : buffer for saving value. LSB, 4bytes
  * @param[in] : unsigned int nValueBufLength : must be greater than 4
  *
  * return value : >= 0 : success
  *                < 0 : error code
  */
 typedef int (*contactless_card_mc_increment)(int nHandle, unsigned int nSectorIndex, unsigned int nBlockIndex, unsigned char* pValue, unsigned int nValueLength);
 /*
  * Decrement value to a block, using it with the API : hal_contactless_card_mc_restore and hal_contactless_card_mc_transfer
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  * @param[in] : unsigned char* pValue : buffer for saving value. LSB, 4bytes
  * @param[in] : unsigned int nValueBufLength : must be greater than 4
  *
  * return value : >= 0 : success
  *                < 0 : error code
  */
 typedef int (*contactless_card_mc_decrement)(int nHandle, unsigned int nSectorIndex, unsigned int nBlockIndex, unsigned char* pValue, unsigned int nValueLength);
 
 /*
  * Save the value to the block from temporary buffer
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  *
  * return value : >= 0 : success
  *                < 0 : error code
  */
 typedef int (*contactless_card_mc_transfer)(int nHandle, unsigned int nSectorIndex, unsigned int nBlockIndex);
 /*
  * Read the value to the temporary from the block
  * @param[in] : int nHandle : handle of this card reader
  * @param[in] : unsigned int nSectorIndex : sector index
  * @param[in] : unsigned int nBlockIndex : block index
  *
  * return value : >= 0 : success
  *                < 0 : error code
  */
 typedef int (*contactless_card_mc_restore)(int nHandle,unsigned int nSectorIndex, unsigned int nBlockIndex);
 
 /**
  * Check whether this is a card on the rfcard reader
  * return value : == 0 : no card
  * 				  >0 : find a card
  * 				  <0 : error code
  */
 typedef int (*contactless_card_final_touch_card)(int nHandle);
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif /* CONTACTLESS_CARD_INTERFACE_H_ */