EMV API: Difference between revisions

From wizarPOS
No edit summary
Line 2: Line 2:
The EMV.
The EMV.
=== open reader and wait card ===
=== open reader and wait card ===
  int open_reader(int reader)
  <syntaxhighlight lang="java">int open_reader(int reader)</syntaxhighlight >
Open the card reader of the POS.
Open the card reader of the POS.
If select open all of readers, any open success return success.
If select open all of readers, any open success return success.
Line 12: Line 12:
|}
|}


'''Returns'''
{|
 
|-
The result code, >= 0, success; <0 [[Error_code|error code]].
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, success; <0 [[Error_code|error code]].
|}
=== close reader ===
=== close reader ===
   void close_reader(int reader)
   <syntaxhighlight lang="java">void close_reader(int reader)</syntaxhighlight >
Close the card reader of the POS.
Close the card reader of the POS.


Line 26: Line 32:
|}
|}


'''Returns'''
{|
 
|-
The result code, >= 0, success; <0 [[Error_code|error code]].
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, success; <0 [[Error_code|error code]].
|}
=== get current card type ===
=== get current card type ===
   int get_card_type(void)
   <syntaxhighlight lang="java">int get_card_type(void)</syntaxhighlight >


'''Parameters'''
'''Parameters'''


'''Returns'''
{|
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , 1:contact card; 2:contactless card; -1: no card.
|}
 


The result , 1:contact card; 2:contactless card; -1: no card.
   
   
=== get card ATR ===
=== get card ATR ===
   int get_card_atr(unsigned char *pATR)
   <syntaxhighlight lang="java">int get_card_atr(unsigned char *pATR)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 47: Line 68:
| ''pATR'' || unsigned char * || the value of ATR.
| ''pATR'' || unsigned char * || the value of ATR.
|}
|}
'''Returns'''
{|
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, the length of ATR; <0 [[Error_code|error code]].
|}
 


The result code, >= 0, the length of ATR; <0 [[Error_code|error code]].


===  APDU command ===
===  APDU command ===
   int transmit_card( unsigned char *cmd,int cmdLength,unsigned char *respData,int respDataLength)
   <syntaxhighlight lang="java">int transmit_card( unsigned char *cmd,int cmdLength,unsigned char *respData,int respDataLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 65: Line 95:
| ''respDataLength'' || int|| accepted max length of card reasponse.
| ''respDataLength'' || int|| accepted max length of card reasponse.
|}
|}
'''Returns'''
{|
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >=0,the length of card response; <0 [[Error_code|error code]].
|}
 


The result code, >=0,the length of card response; <0 [[Error_code|error code]].


== store and set EMV data ==
== store and set EMV data ==
=== check the existence of data for the tag ===
=== check the existence of data for the tag ===
   int emv_is_tag_present(int tag)
   <syntaxhighlight lang="java">int emv_is_tag_present(int tag)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 78: Line 117:
| ''tag'' || int || tag name.
| ''tag'' || int || tag name.
|}
|}
'''Returns'''
{|
The result code, >= 0, the length of data; <0 the data not exist.
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, the length of data; <0 the data not exist.
|}
 


=== get the data for the tag ===
=== get the data for the tag ===
   int emv_get_tag_data(int tag, unsigned char *data, int dataLength)
   <syntaxhighlight lang="java">int emv_get_tag_data(int tag, unsigned char *data, int dataLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 93: Line 141:
| ''int'' || int || accepted max length of the data.
| ''int'' || int || accepted max length of the data.
|}
|}
'''Returns'''
{|
The result code, >= 0, the length of the data; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, the length of the data; <0 [[Error_code|error code]].
|}
 


=== get the data for the tag list ===
=== get the data for the tag list ===
   int emv_get_tag_list_data(int *tagNames, int tagCount,unsigned char *pTagsValue,int pTagsValueLength)
   <syntaxhighlight lang="java">int emv_get_tag_list_data(int *tagNames, int tagCount,unsigned char *pTagsValue,int pTagsValueLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 110: Line 167:
| ''pTagsValueLength'' || int || accepted max length of the data.
| ''pTagsValueLength'' || int || accepted max length of the data.
|}
|}
'''Returns'''
{|
The result code, >= 0, the length of the data; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, the length of the data; <0 [[Error_code|error code]].
|}
 


=== set the data for the tag ===
=== set the data for the tag ===
   int emv_set_tag_data(int tag, unsigned char *data, int length)
   <syntaxhighlight lang="java">int emv_set_tag_data(int tag, unsigned char *data, int length)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 125: Line 191:
| ''length'' || int || the length of the data.
| ''length'' || int || the length of the data.
|}
|}
'''Returns'''
{|
The result code, >= 0, the length of the data; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, the length of the data; <0 [[Error_code|error code]].
|}
 
 


== EMV transaction processing ==
== EMV transaction processing ==
=== EMVKernel initialize ===
=== EMVKernel initialize ===
   void emv_kernel_initialize(unsigned char *pInitData)
   <syntaxhighlight lang="java">void emv_kernel_initialize(unsigned char *pInitData)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 206: Line 282:


=== Initialize EMV transaction data ===
=== Initialize EMV transaction data ===
   void emv_trans_initialize(void)
   <syntaxhighlight lang="java">void emv_trans_initialize(void)</syntaxhighlight >
=== EMV processing function ===
=== EMV processing function ===
   int emv_process_next(void)
   <syntaxhighlight lang="java">int emv_process_next(void)</syntaxhighlight >


'''Parameters'''
{|
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, success; <0 [[Error_code|error code]].
|}


'''Returns'''
The result code, >= 0, success; <0 [[Error_code|error code]].


== Others functions ==
== Others functions ==
=== Get EMV Kernel version ===
=== Get EMV Kernel version ===
   int emv_get_version_string(unsigned char *buffer, int bufferLength)
   <syntaxhighlight lang="java">int emv_get_version_string(unsigned char *buffer, int bufferLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 226: Line 309:
| ''bufferLength'' || int || accepted max length of emv kernel version.
| ''bufferLength'' || int || accepted max length of emv kernel version.
|}
|}
'''Returns'''
{|
The result code, >= 0, the length of emv kernel verion; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, the length of emv kernel verion; <0 [[Error_code|error code]].
|}
 


=== Set transaction amount ===
=== Set transaction amount ===
   int emv_set_trans_amount(unsigned char *amount)
   <syntaxhighlight lang="java">int emv_set_trans_amount(unsigned char *amount)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 237: Line 329:
| ''amount'' || unsigned char * || '\0' as ending mark.
| ''amount'' || unsigned char * || '\0' as ending mark.
|}
|}
'''Returns'''
{|
The result code, >= 0, success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, success; <0 [[Error_code|error code]].
|}
 


=== Set other amount ===
=== Set other amount ===
   int emv_set_other_amount(unsigned char *amount)
   <syntaxhighlight lang="java">int emv_set_other_amount(unsigned char *amount)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 248: Line 349:
| ''amount'' || unsigned char * || '\0' as ending mark.
| ''amount'' || unsigned char * || '\0' as ending mark.
|}
|}
'''Returns'''
{|
The result code, >= 0, success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, success; <0 [[Error_code|error code]].
|}
 


=== Set transaction type ===
=== Set transaction type ===
   int emv_set_trans_type(unsigned char transType)
   <syntaxhighlight lang="java">int emv_set_trans_type(unsigned char transType)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 270: Line 380:
</syntaxhighlight >
</syntaxhighlight >


'''Returns'''
{|
The result code, >= 0, success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, success; <0 [[Error_code|error code]].
|}


=== set emv kernel type ===
=== set emv kernel type ===
   int emv_set_kernel_type(unsigned char kernelType)
   <syntaxhighlight lang="java">int emv_set_kernel_type(unsigned char kernelType)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 292: Line 410:
</syntaxhighlight >
</syntaxhighlight >


'''Returns'''
{|
The result code, >= 0, success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result code, >= 0, success; <0 [[Error_code|error code]].
|}


=== Is needed advice the transaction ===
=== Is needed advice the transaction ===
   int emv_is_need_advice(void)
   <syntaxhighlight lang="java">int emv_is_need_advice(void)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
{|
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , = 1, need advice; =0 not need advice.
|}


'''Returns'''
The result , = 1, need advice; =0 not need advice.


=== Is needed sign the transaction ===
=== Is needed sign the transaction ===
   int emv_is_need_signature(void)
   <syntaxhighlight lang="java">int emv_is_need_signature(void)</syntaxhighlight >


'''Parameters'''
'''Parameters'''


'''Returns'''
{|
The result , = 1, need sign; =0 not need sign.
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , = 1, need sign; =0 not need sign.
|}
 


=== Set the parameter for force online ===
=== Set the parameter for force online ===
   int emv_set_force_online(int flag)
   <syntaxhighlight lang="java">int emv_set_force_online(int flag)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 319: Line 462:
| ''flag'' || int  || 1:Yes;0:No.
| ''flag'' || int  || 1:Yes;0:No.
|}
|}
'''Returns'''
{|
The result , = 1, force online; =0 not force online.
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , = 1, force online; =0 not force online.
|}
 


=== Read transaction record from the card ===
=== Read transaction record from the card ===
   int emv_get_card_record(uint8_t *data, int dataLength)
   <syntaxhighlight lang="java">int emv_get_card_record(uint8_t *data, int dataLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 332: Line 484:
| ''dataLength'' || int|| accepted max length for the transaction record.
| ''dataLength'' || int|| accepted max length for the transaction record.
|}
|}
'''Returns'''
{|
The result , >= 0, record count; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0, record count; <0 [[Error_code|error code]].
|}
 


=== Get application list ===
=== Get application list ===
   int emv_get_candidate_list(uint8_t *data, int dataLength)
   <syntaxhighlight lang="java">int emv_get_candidate_list(uint8_t *data, int dataLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 345: Line 506:
| ''dataLength'' || int|| accepted max length for application list.
| ''dataLength'' || int|| accepted max length for application list.
|}
|}
'''Returns'''
{|
The result , >= 0, application count; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0, application count; <0 [[Error_code|error code]].
|}
 
===  Set the selected index for application selection===
===  Set the selected index for application selection===
   int emv_set_candidate_list_result(int index)
   <syntaxhighlight lang="java">int emv_set_candidate_list_result(int index)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 355: Line 525:
| ''index'' || int|| the selected index (started by 0).
| ''index'' || int|| the selected index (started by 0).
|}
|}
'''Returns'''
{|
The result , >= 0,success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0,success; <0 [[Error_code|error code]].
|}
 


===  Set the result for cardholder ID check===
===  Set the result for cardholder ID check===
   int emv_set_id_check_result(int result)
   <syntaxhighlight lang="java">int emv_set_id_check_result(int result)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 366: Line 545:
| ''result'' || int|| ID Type(9F62)、 ID Number(9F61) 0: check Fail, 1:check success.
| ''result'' || int|| ID Type(9F62)、 ID Number(9F61) 0: check Fail, 1:check success.
|}
|}
'''Returns'''
{|
The result , >= 0,success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0,success; <0 [[Error_code|error code]].
|}




=== Set the result for Online PIN ===
=== Set the result for Online PIN ===
   int emv_set_online_pin_entered(int result)
   <syntaxhighlight lang="java">int emv_set_online_pin_entered(int result)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 378: Line 565:
| ''result'' || int|| 0: Online PIN not input, 1:Online PIN inputted.
| ''result'' || int|| 0: Online PIN not input, 1:Online PIN inputted.
|}
|}
'''Returns'''
{|
The result , >= 0,success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0,success; <0 [[Error_code|error code]].
|}


=== Set acceptance for Bypass PIN ===
=== Set acceptance for Bypass PIN ===
   int emv_set_pin_bypass_confirmed(int result)
   <syntaxhighlight lang="java">int emv_set_pin_bypass_confirmed(int result)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 389: Line 584:
| ''result'' || int|| 0: refused bypass pin, 1: accepted bypass pin.
| ''result'' || int|| 0: refused bypass pin, 1: accepted bypass pin.
|}
|}
'''Returns'''
{|
The result , >= 0,success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0,success; <0 [[Error_code|error code]].
|}


=== Set the result for online certification ===
=== Set the result for online certification ===
   int emv_set_online_result(int result,unsigned char *respCode,unsigned char *issuerRespData,int issuerRespDataLength)
   <syntaxhighlight lang="java">int emv_set_online_result(int result,unsigned char *respCode,unsigned char *issuerRespData,int issuerRespDataLength)</syntaxhighlight >




Line 407: Line 610:
| ''issuerRespDataLength'' || int||  the length of the emv data from the host.
| ''issuerRespDataLength'' || int||  the length of the emv data from the host.
|}
|}
'''Returns'''
{|
The result , >= 0,success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0,success; <0 [[Error_code|error code]].
|}
== Setup EMVparameters ==
== Setup EMVparameters ==
=== Clear AID info ===
=== Clear AID info ===
   int emv_aidparam_clear(void)
   <syntaxhighlight lang="java">int emv_aidparam_clear(void)</syntaxhighlight >


'''Parameters'''
'''Parameters'''


'''Returns'''
{|
The result , >= 0,success; <0 [[Error_code|error code]].
|-
|}
{|class="wizarpostable"
|-
!  scope="row" colspan="2" | Returns
|-
|  int || The result , >= 0,success; <0 [[Error_code|error code]].
|}


=== Add AID info ===
=== Add AID info ===
   int emv_aidparam_add( uint8_t *data, int dataLength)
   <syntaxhighlight lang="java">int emv_aidparam_add( uint8_t *data, int dataLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 481: Line 700:


=== Clear CAPK info ===
=== Clear CAPK info ===
   int emv_capkparam_clear(void)
   <syntaxhighlight lang="java">int emv_capkparam_clear(void)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 489: Line 708:


=== Add CAPK info ===
=== Add CAPK info ===
   int emv_capkparam_add( uint8_t *data, int dataLength)
   <syntaxhighlight lang="java">int emv_capkparam_add( uint8_t *data, int dataLength)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 523: Line 742:


=== Set EMV terminal parameters ===
=== Set EMV terminal parameters ===
   int emv_terminal_param_set( uint8_t *TerminalParam)
   <syntaxhighlight lang="java">int emv_terminal_param_set( uint8_t *TerminalParam)


'''Parameters'''
'''Parameters'''
Line 550: Line 769:


=== Clear Exception File ===
=== Clear Exception File ===
   int emv_exception_file_clear(void)
   <syntaxhighlight lang="java">int emv_exception_file_clear(void)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 558: Line 777:


=== Add Exception File ===
=== Add Exception File ===
   int emv_exception_file_add( unsigned char *exceptFile)
   <syntaxhighlight lang="java">int emv_exception_file_add( unsigned char *exceptFile)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 576: Line 795:


=== Clear Revoked Certicates ===
=== Clear Revoked Certicates ===
   int emv_revoked_cert_clear(void)
   <syntaxhighlight lang="java">int emv_revoked_cert_clear(void)</syntaxhighlight >


'''Parameters'''
'''Parameters'''
Line 584: Line 803:


=== Add revoked Certificate ===
=== Add revoked Certificate ===
   int emv_revoked_cert_add( uint8_t *revokedCert)
   <syntaxhighlight lang="java">int emv_revoked_cert_add( uint8_t *revokedCert)</syntaxhighlight >


'''Parameters'''
'''Parameters'''

Revision as of 03:45, 3 May 2018

Card Reader

The EMV.

open reader and wait card

int open_reader(int reader)

Open the card reader of the POS. If select open all of readers, any open success return success.

Parameters

reader int 0: all of readers,1: only contact reader,2: only contactless reader.
Returns
int The result code, >= 0, success; <0 error code.

close reader

void close_reader(int reader)

Close the card reader of the POS.

Parameters

reader int 0: all of readers,1: only contact reader,2: only contactless reader.
Returns
int The result code, >= 0, success; <0 error code.

get current card type

int get_card_type(void)

Parameters

Returns
int The result , 1:contact card; 2:contactless card; -1: no card.


get card ATR

int get_card_atr(unsigned char *pATR)

Parameters

pATR unsigned char * the value of ATR.
Returns
int The result code, >= 0, the length of ATR; <0 error code.


APDU command

int transmit_card( unsigned char *cmd,int cmdLength,unsigned char *respData,int respDataLength)

Parameters

cmd unsigned char * APDU command.
cmdLength int the length of APDU command.
respData unsigned char * the value of card response.
respDataLength int accepted max length of card reasponse.
Returns
int The result code, >=0,the length of card response; <0 error code.


store and set EMV data

check the existence of data for the tag

int emv_is_tag_present(int tag)

Parameters

tag int tag name.
Returns
int The result code, >= 0, the length of data; <0 the data not exist.


get the data for the tag

int emv_get_tag_data(int tag, unsigned char *data, int dataLength)

Parameters

tag int tag name.
data unsigned char * the value of the data.
int int accepted max length of the data.
Returns
int The result code, >= 0, the length of the data; <0 error code.


get the data for the tag list

int emv_get_tag_list_data(int *tagNames, int tagCount,unsigned char *pTagsValue,int pTagsValueLength)

Parameters

tagNames int * the list of the tags.
tagCount int the count of the tags.
pTagsValue unsigned char * the values of the data(TLV format).
pTagsValueLength int accepted max length of the data.
Returns
int The result code, >= 0, the length of the data; <0 error code.


set the data for the tag

int emv_set_tag_data(int tag, unsigned char *data, int length)

Parameters

tag int tag name.
data unsigned char * the value of the data.
length int the length of the data.
Returns
int The result code, >= 0, the length of the data; <0 error code.


EMV transaction processing

EMVKernel initialize

void emv_kernel_initialize(unsigned char *pInitData)

Parameters

pInitData unsigned char * See from follows
typedef struct
{
// callback function for card event
CARD_EVENT_OCCURED pCafdEventOccured;
// callback function for EVM processing
EMV_PROCESS_CALLBACK pEVMProcessCallback;
}EMV_INIT_DATA;

1 typedef void (*CARD_EVENT_OCCURED) (int eventType)
// any card event occured, this function will be revoked
// @param[in] eventType : SMART_CARD_EVENT_INSERT_CARD = 0;
// : SMART_CARD_EVENT_REMOVE_CARD = 1;
// : SMART_CARD_EVENT_POWERON_ERROR = 9;
// :SMART_CARD_EVENT_CONTALESS_HAVE_MORE_CARD = 10;
2 typedef void (*EMV_PROCESS_CALLBACK)(unsigned char *pData);
// callback function for EVM processing, pData have 2 bytes
// unsigned char status = pData[0];
// unsigned char desc = pData[1];
* status
* STATUS_ERROR = 0; //ERROR
* STATUS_CONTINUE = 1; // not completed, need to continue
* STATUS_COMPLETION = 2; // completed
* desc
* when status = STATUS_COMPLETION desc means
* APPROVE_OFFLINE = 1; //Transaction approved Offline
* APPROVE_ONLINE = 2; //Transaction approved Online
* DECLINE_OFFLINE = 3; //Transaction declined Offline
* DECLINE_ONLINE = 4; //Transaction declined Onlin
* *
when status = STATUS_ERROR desc means
* SUCCESS = 0; //SUCCESS
* ERROR_NO_APP = 1; //No Application Selected when Application Select
* ERROR_APP_BLOCKED = 2; //card return 6A81 when Application Select
* ERROR_APP_SELECT = 3; //Error when Application Select
* ERROR_INIT_APP = 4; //Error when Initialize Application Data
* ERROR_EXPIRED_CARD = 5; // Card Expired
* ERROR_APP_DATA = 6; //Error when Read Application Data
* ERROR_DATA_INVALID = 7; // have invalid data
* ERROR_DATA_AUTH = 8; // Fail in offline authentication
* ERROR_GEN_AC = 9; //Generate AC error when Transaction Process
* ERROR_PROCESS_CMD = 10; //Process Command ERROR
* ERROR_SERVICE_NOT_ALLOWED = 11; //Service not Allowed
* ERROR_PINENTERY_TIMEOUT = 12; //PIN Entry timeout
* ERROR_OFFLINE_VERIFY = 13; //Check Offline PIN Error when Cardholder Verify
* ERROR_NEED_ADVICE = 14; //Communication Error with Host, but the card need
advice, halted the transaction
* ERROR_USER_CANCELLED = 15;
* ERROR_AMOUNT_OVER_LIMIT = 16; // amount over limit
* ERROR_AMOUNT_ZERO = 17; // amount can not be zero
* ERROR_OTHER_CARD = 18 // Please try other card
* *
when status = STATUS_CONTINUE desc means
* EMV_CANDIDATE_LIST = 1; //notify Application show Application Candidate List
* EMV_APP_SELECTED = 2; //Application Select Completed
* EMV_READ_APP_DATA = 3; //Read Application Data Completed
* EMV_DATA_AUTH = 4; //Data Authentication Completed
* EMV_OFFLINE_PIN = 5; // notify Application prompt Caldholder enter offline PIN,
* EMV_ONLINE_ENC_PIN = 6; //notify Application prompt Caldholder enter Online
PIN
* EMV_PIN_BYPASS_CONFIRM = 7; //notify Application confirm to Accepted PIN
Bypass or not
* EMV_PROCESS_ONLINE = 8; //notify Application to Process Online
* EMV_ID_CHECK = 9; //notify Application Check Cardholder's Identification
*/

Initialize EMV transaction data

void emv_trans_initialize(void)

EMV processing function

int emv_process_next(void)
Returns
int The result code, >= 0, success; <0 error code.


Others functions

Get EMV Kernel version

int emv_get_version_string(unsigned char *buffer, int bufferLength)

Parameters

buffer unsigned char * the value of emv kernel version.
bufferLength int accepted max length of emv kernel version.
Returns
int The result code, >= 0, the length of emv kernel verion; <0 error code.


Set transaction amount

int emv_set_trans_amount(unsigned char *amount)

Parameters

amount unsigned char * '\0' as ending mark.
Returns
int The result code, >= 0, success; <0 error code.


Set other amount

int emv_set_other_amount(unsigned char *amount)

Parameters

amount unsigned char * '\0' as ending mark.
Returns
int The result code, >= 0, success; <0 error code.


Set transaction type

int emv_set_trans_type(unsigned char transType)

Parameters

transType unsigned char transaction type.
#define TRANS_GOODS_SERVICE 0x00
#define TRANS_CASH 0x01
#define TRANS_INQUIRY 0x04
#define TRANS_TRANSFER 0x05
#define TRANS_PAYMENT 0x06
#define TRANS_ADMIN 0x07
#define TRANS_CASHBACK 0x09
#define TRANS_CARD_RECORD 0x0A
Returns
int The result code, >= 0, success; <0 error code.

set emv kernel type

int emv_set_kernel_type(unsigned char kernelType)

Parameters

kernelType unsigned char kernel type, 1:EMV KERNAL; 2:QPBOC KERNAL for China; 3:UPCASH_KERNAL for China.
#define TRANS_GOODS_SERVICE 0x00
#define TRANS_CASH 0x01
#define TRANS_INQUIRY 0x04
#define TRANS_TRANSFER 0x05
#define TRANS_PAYMENT 0x06
#define TRANS_ADMIN 0x07
#define TRANS_CASHBACK 0x09
#define TRANS_CARD_RECORD 0x0A
Returns
int The result code, >= 0, success; <0 error code.

Is needed advice the transaction

int emv_is_need_advice(void)

Parameters

Returns
int The result , = 1, need advice; =0 not need advice.


Is needed sign the transaction

int emv_is_need_signature(void)

Parameters

Returns
int The result , = 1, need sign; =0 not need sign.


Set the parameter for force online

int emv_set_force_online(int flag)

Parameters

flag int 1:Yes;0:No.
Returns
int The result , = 1, force online; =0 not force online.


Read transaction record from the card

int emv_get_card_record(uint8_t *data, int dataLength)

Parameters

data uint8_t * transaction record.
dataLength int accepted max length for the transaction record.
Returns
int The result , >= 0, record count; <0 error code.


Get application list

int emv_get_candidate_list(uint8_t *data, int dataLength)

Parameters

data uint8_t * application list as "LV" format.
dataLength int accepted max length for application list.
Returns
int The result , >= 0, application count; <0 error code.

Set the selected index for application selection

int emv_set_candidate_list_result(int index)

Parameters

index int the selected index (started by 0).
Returns
int The result , >= 0,success; <0 error code.


Set the result for cardholder ID check

int emv_set_id_check_result(int result)

Parameters

result int ID Type(9F62)、 ID Number(9F61) 0: check Fail, 1:check success.
Returns
int The result , >= 0,success; <0 error code.


Set the result for Online PIN

int emv_set_online_pin_entered(int result)

Parameters

result int 0: Online PIN not input, 1:Online PIN inputted.
Returns
int The result , >= 0,success; <0 error code.

Set acceptance for Bypass PIN

int emv_set_pin_bypass_confirmed(int result)

Parameters

result int 0: refused bypass pin, 1: accepted bypass pin.
Returns
int The result , >= 0,success; <0 error code.

Set the result for online certification

int emv_set_online_result(int result,unsigned char *respCode,unsigned char *issuerRespData,int issuerRespDataLength)


Parameters

result int -1:communication failed; 0: host refused; 1: host accepted.
respCode unsigned char * 2 bytes response code from the host.
issuerRespData unsigned char * the emv data from the host.
issuerRespDataLength int the length of the emv data from the host.
Returns
int The result , >= 0,success; <0 error code.

Setup EMVparameters

Clear AID info

int emv_aidparam_clear(void)

Parameters

Returns
int The result , >= 0,success; <0 error code.

Add AID info

int emv_aidparam_add( uint8_t *data, int dataLength)

Parameters

data uint8_t * see form below, format is TLV.
dataLength int the length of the data.
Name Format Length(byte) tag
AID b 5-16 9F06
Application selection Indicator(ASI) b 1 DF01
Application version number b 2 9F08
TAC-Default b 5 DF11
TAC-Online b 5 DF12
TAC-Denial b 5 DF13
Terminal floor limit b 4 9F1B
Threshold value for Biased Random Selection b 4 DF15
Maximum Target Percentage to be used for Biased Random Selection b 1 DF16
Target Percentage to be used for Random Selection b 1 DF17
Default DDOL b Var. DF14
Ability for Online PIN b 1 DF18
Application Label b 1-16 50
Application Preferred Name b 1-16 9F12
Application Priority Indicator b 1 87
Merchant Identifier b 15 9F16
Acquirer Identifier b 6-11 9F01
MCC b 4 9F15
POS Entry Mode b 2 9F39
Transaction Reference Currency Code b 3 9F3C
Transaction Reference Currency Exponent b 1 9F3D
Default TDOL b Var. DF22

Returns The result , >= 0,success; <0 error code.

Clear CAPK info

int emv_capkparam_clear(void)

Parameters

Returns The result , >= 0,success; <0 error code.

Add CAPK info

int emv_capkparam_add( uint8_t *data, int dataLength)

Parameters

data uint8_t * see form below, format is TLV.
dataLength int the length of the data.
Name Format Length(byte) tag
RID b 5 9F06
Certification Authority Public Key Index b 1 9F22
Certification Authority Public Key Expiration Date n8 8 DF05
Certification Authority Public Key hash Algorithm Indicator b 1 DF06
Certification Authority Public Key Algorithm Indicator b 1 DF07
Certification Authority Public Key Modulus b Var. DF02
Certification Authority Public Key Exponent b 1 or 3 DF04
Certification Authority Public Key Checksum b Var. DF03

Returns The result , >= 0,success; <0 error code.

Set EMV terminal parameters

int emv_terminal_param_set( uint8_t *TerminalParam)

'''Parameters'''
{|
|-
| ''TerminalParam'' || uint8_t * || see form below.
|}
<syntaxhighlight lang="c">
typedef struct{
unsigned char terminal_country_code[2]; // 9F1A [BCD] : Terminal Country Code
unsigned char TID[8]; // 9F1C [ASC]
unsigned char IFD[8]; // 9F1E [ASC] : IFD Serial Number
unsigned char transaction_currency_code[2]; // 5F2A [BCD]
unsigned char terminal_capabilities[3]; // 9F33 [BIN]
unsigned char terminal_type[1]; // 9F35 [BCD]
unsigned char transaction_currency_exponent[1]; // 5F36 [BCD]
unsigned char additional_terminal_capabilities[5]; // 9F40 [BIN]
unsigned char merchantNameLength;
unsigned char merchantName[20]; // 9F4E [ASC]
unsigned char rev[2];
}TERMINAL_INFO;

Returns The result , >= 0,success; <0 error code.

Clear Exception File

int emv_exception_file_clear(void)

Parameters

Returns The result , >= 0,success; <0 error code.

Add Exception File

int emv_exception_file_add( unsigned char *exceptFile)

Parameters

exceptFile uint8_t * see form below.
Typedef struct{
unsigned char cardNo[19]; // PAN
unsigned char panSequence; // PAN Sequence Number
}ExceptionFile

Returns The result , >= 0,success; <0 error code.

Clear Revoked Certicates

int emv_revoked_cert_clear(void)

Parameters

Returns The result , >= 0,success; <0 error code.

Add revoked Certificate

int emv_revoked_cert_add( uint8_t *revokedCert)

Parameters

revokedCert uint8_t * see form below.
Typedef struct{
unsigned char rid[5];
unsigned char capki;
}RevokedCert

Returns The result , >= 0,success; <0 error code.