> For the complete documentation index, see [llms.txt](https://sandbox-docs.verifone.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sandbox-docs.verifone.com/s-adk-5.1-programmers-guide/_e_m_v___c_t_l_s___interface_8h_source.md).

# EMV\_CTLS\_Interface.h

[Go to the documentation of this file.](/s-adk-5.1-programmers-guide/readme/files/dir_f2a776acea245b054b8e462971041f2d/dir_11dd2805a17b345163bcda0bbda50405/dir_47d451f83ac668365bf475eea7a5e317/dir_ba55f31769dc4aed085c5be441e39791/_e_m_v___c_t_l_s___interface_8h.md)

```cpp
 1 /****************************************************************************
 2 * Product: InFusion
 3 * Company: VeriFone
 4 * Author: GSS R&D Germany
 5 * Content: Interface definitions and functions
 6 ****************************************************************************/
 7 
 14 #ifndef _EMV_CTLS_INTERFACE_H_ /* avoid double interface-includes */
 15 #define _EMV_CTLS_INTERFACE_H_
 16 
 17 #ifdef __cplusplus
 18 extern "C" {
 19 #endif
 20 
 21 #include "emv/EMV_Common_Interface.h"
 22 #include "EMV_CTLS_Link.h"
 23 #include "EMV_CTLS_Version.h"
 24 
 25 #define DLL_CLC // no client shared libraries anymore
 26 
 27 
 28 // ========================================================================================================
 29 // === COMMON PART ===
 30 // ========================================================================================================
 31 
 32 
 35 typedef struct EMV_CTLS_APPLI_STRUCT
 36 {
 37  unsigned char aidlen;
 38  unsigned char AID[16];
 39 } EMV_CTLS_APPLI_TYPE;
 40 
 41 #define EMV_CTLS_APPLI_INITIALIZER {0, {0}}
 42 
 45 typedef struct EMV_CTLS_APPLI_KERNEL_STRUCT
 46 {
 47  unsigned char KernelID[3];
 48  unsigned char aidlen;
 49  unsigned char AID[16];
 50 } EMV_CTLS_APPLI_KERNEL_TYPE;
 51 
 52 typedef struct EMV_CTLS_DATA_STRUCT {
 53  unsigned short len;
 54  unsigned char *data;
 55 } EMV_CTLS_DATA_TYPE;
 56 
 59 typedef struct EMV_CTLS_DOL_STRUCT
 60 {
 61  unsigned char dollen;
 62  unsigned char DOL[EMV_ADK_MAX_LG_DDOL];
 63 } EMV_CTLS_DOL_TYPE;
 64 
 67 typedef struct EMV_CTLS_TRACK2_STRUCT
 68 {
 69  unsigned char tr2len;
 70  unsigned char tr2data[19];
 71 } EMV_CTLS_TRACK2_TYPE;
 72 
 75 typedef struct EMV_CTLS_CRDNAME_STRUCT
 76 {
 77  unsigned char crdNameLen;
 78  unsigned char crdName[26];
 79 } EMV_CTLS_CRDNAME_TYPE;
 80 
 83 typedef struct EMV_CTLS_ICCRND_STRUCT
 84 {
 85  unsigned char iccRNDLen;
 86  unsigned char iccRND[8];
 87 } EMV_CTLS_ICCRND_TYPE;
 88 
 91 typedef struct EMV_CTLS_ISSDATA_STRUCT
 92 {
 93  unsigned char issDataLen;
 94  unsigned char issData[32];
 95 } EMV_CTLS_ISSDATA_TYPE;
 96 
 97 
 98 // ========================================================================================================
 99 // === Transaction Information ===
 100 // ========================================================================================================
 101 
 106 
 123  #define EMV_CTLS_ADK_SETUP_START 0x80 
 124  #define EMV_CTLS_ADK_SETUP_NO_INIT 0x82 
 125  #define EMV_CTLS_ADK_SETUP_ABOVE_CEILING_EMV_ONLY 0x85 
 126  #define EMV_CTLS_ADK_SETUP_ABOVE_CEILING_NO_DOM 0x86 
 127  #define EMV_CTLS_ADK_SETUP_SET_PARAM_FAIL 0x89 
 128  #define EMV_CTLS_ADK_SETUP_OK 0x8A 
 129 
 130  #define EMV_CTLS_ADK_TXN_START 0xA0 
 131  #define EMV_CTLS_ADK_TXN_NO_ATR 0xA1 
 132  #define EMV_CTLS_ADK_TXN_2_CARDS 0xA2 
 133  #define EMV_CTLS_ADK_TXN_CAND_LIST_EMPTY 0xA3 
 134  #define EMV_CTLS_ADK_TXN_DOM_ONE_APP_SELECTED 0xA4 
 135  #define EMV_CTLS_ADK_TXN_DOM_ONE_APP_FAIL 0xA5 
 136  #define EMV_CTLS_ADK_TXN_L1_DIR_READING 0xA6 
 137  #define EMV_CTLS_ADK_TXN_L1_CAND_LIST 0xA7 
 138  #define EMV_CTLS_ADK_TXN_DOM_APP_SELECTED 0xA9 
 139  #define EMV_CTLS_ADK_TXN_NO_COMBO_EMPTY_LIST 0xAA 
 140  #define EMV_CTLS_ADK_TXN_NO_DOM_APP_SELECT_NO_FINAL 0xAB 
 141  #define EMV_CTLS_ADK_TXN_L1_FINAL_SELECT 0xAC 
 142  #define EMV_CTLS_ADK_TXN_AID_NOT_READ_EMPTY 0xAD 
 143  #define EMV_CTLS_ADK_TXN_DOM_FINAL_SEL_OK 0xB0 
 144  #define EMV_CTLS_ADK_TXN_UNKNOW_KERNEL 0xB1 
 145  #define EMV_CTLS_ADK_TXN_EP_INIT_FAILED 0xB2 
 146  #define EMV_CTLS_ADK_TXN_LIST_ITERATION_KO 0xB3 
 147  #define EMV_CTLS_ADK_TXN_CANDIDATE_EVAL 0xB4 
 148  #define EMV_CTLS_ADK_TXN_CANDIDATE_FINAL_SELECT 0xB5 
 149 
 150  #define EMV_CTLS_ADK_TXN_MK_START 0xC0 
 151  #define EMV_CTLS_ADK_TXN_MK_NEW_SEL 0xC1 
 152  #define EMV_CTLS_ADK_TXN_MK_RETAP_START 0xC2 
 153  #define EMV_CTLS_ADK_TXN_MK_MOBILE_START 0xC3 
 154  #define EMV_CTLS_ADK_TXN_MK_L1_START 0xC4 
 155  #define EMV_CTLS_ADK_TXN_MK_RETAP_MSD 0xC5 
 156  #define EMV_CTLS_ADK_TXN_MK_MOBILE_MSD 0xC6 
 157  #define EMV_CTLS_ADK_TXN_MK_L1_MSD 0xC7 
 158  #define EMV_CTLS_ADK_TXN_MK_NO_DATA_MSD 0xC8 
 159  #define EMV_CTLS_ADK_TXN_MK_DECLINE_MSD 0xC9 
 160  #define EMV_CTLS_ADK_TXN_MK_OK_MSD 0xCA 
 161  #define EMV_CTLS_ADK_TXN_MK_ONLINE_MSD 0xCB 
 162  #define EMV_CTLS_ADK_TXN_MK_OTHER_MSD 0xCC 
 163  #define EMV_CTLS_ADK_TXN_MK_RETAP_CHP 0xCD 
 164  #define EMV_CTLS_ADK_TXN_MK_MOBILE_CHP 0xCE 
 165  #define EMV_CTLS_ADK_TXN_MK_L1_CHP 0xCF 
 166  #define EMV_CTLS_ADK_TXN_MK_CARDREAD_CHP 0xD0 
 167  #define EMV_CTLS_ADK_TXN_MK_DECLINE_CHP 0xD1 
 168  #define EMV_CTLS_ADK_TXN_MK_ONLINE_CHP 0xD2 
 169  #define EMV_CTLS_ADK_TXN_MK_OK_CHP 0xD3 
 170  #define EMV_CTLS_ADK_TXN_MK_INTERFACE_CHP 0xD4 
 171  #define EMV_CTLS_ADK_TXN_MK_NEW_SEL_CHP 0xD5 
 172  #define EMV_CTLS_ADK_TXN_MK_OTHER_CHP 0xD6 
 173  #define EMV_CTLS_ADK_TXN_MK_DECLINE_BEFORE_GAC 0xD7 
 174  #define EMV_CTLS_ADK_TXN_MK_FALLBACK_START 0xD8 
 175  #define EMV_CTLS_ADK_TXN_MK_INIT_FAIL 0xD9 
 176  #define EMV_CTLS_ADK_TXN_MK_GPO_RR 0xDA 
 177  #define EMV_CTLS_ADK_TXN_MK_FALLBACK_OTHERCARD 0xDB 
 178 
 179  #define EMV_CTLS_ADK_TXN_VK_START 0x10 
 180  #define EMV_CTLS_ADK_TXN_VK_NEW_SEL 0x11 
 181  #define EMV_CTLS_ADK_TXN_VK_MOBILE_START 0x12 
 182  #define EMV_CTLS_ADK_TXN_VK_L1_START 0x13 
 183  #define EMV_CTLS_ADK_TXN_VK_L1_MSD 0x14 
 184  #define EMV_CTLS_ADK_TXN_VK_FALLBACK_MSD 0x15 
 185  #define EMV_CTLS_ADK_TXN_VK_DECLINE_MSD 0x16 
 186  #define EMV_CTLS_ADK_TXN_VK_OK_MSD 0x17 
 187  #define EMV_CTLS_ADK_TXN_VK_ONLINE_MSD 0x18 
 188  #define EMV_CTLS_ADK_TXN_VK_OTHER_MSD 0x19 
 189  #define EMV_CTLS_ADK_TXN_VK_L1_CHP 0x1A 
 190  #define EMV_CTLS_ADK_TXN_VK_READCARD_CHP 0x1B 
 191  #define EMV_CTLS_ADK_TXN_VK_DECLINE_CHP 0x1C 
 192  #define EMV_CTLS_ADK_TXN_VK_ONLINE_CHP 0x1D 
 193  #define EMV_CTLS_ADK_TXN_VK_OK_CHP 0x1E 
 194  #define EMV_CTLS_ADK_TXN_VK_FALLBACK_CHP 0x1F 
 195  #define EMV_CTLS_ADK_TXN_VK_OTHER_CHP 0x20 
 196  #define EMV_CTLS_ADK_TXN_VK_DECLINE_START 0x21 
 197  #define EMV_CTLS_ADK_TXN_VK_FALLBACK_START 0x22 
 198  #define EMV_CTLS_ADK_TXN_VK_OTHER_START 0x23 
 199  #define EMV_CTLS_ADK_TXN_VK_INIT_FAIL 0x24 
 200  #define EMV_CTLS_ADK_TXN_VK_GPO_RR 0x25 
 201  #define EMV_CTLS_ADK_TXN_VK_INCONS_TRACK2 0x26 
 202  #define EMV_CTLS_ADK_TXN_VK_READCARD_MSD 0x27 
 203  #define EMV_CTLS_ADK_TXN_VK_RETAP_START 0x28 
 204  #define EMV_CTLS_ADK_TXN_VK_FALLBACK_CARD_LOG 0x29 
 205 
 206  #define EMV_CTLS_ADK_TXN_KERNEL_START 0x30 
 207  #define EMV_CTLS_ADK_TXN_KERNEL_NEW_SEL 0x31 
 208  #define EMV_CTLS_ADK_TXN_KERNEL_RETAP_START 0x32 
 209  #define EMV_CTLS_ADK_TXN_KERNEL_MOBILE_START 0x33 
 210  #define EMV_CTLS_ADK_TXN_KERNEL_L1_START 0x34 
 211  #define EMV_CTLS_ADK_TXN_KERNEL_RETAP_MSD 0x35 
 212  #define EMV_CTLS_ADK_TXN_KERNEL_MOBILE_MSD 0x36 
 213  #define EMV_CTLS_ADK_TXN_KERNEL_L1_MSD 0x37 
 214  #define EMV_CTLS_ADK_TXN_KERNEL_NO_DATA_MSD 0x38 
 215  #define EMV_CTLS_ADK_TXN_KERNEL_DECLINE_MSD 0x39 
 216  #define EMV_CTLS_ADK_TXN_KERNEL_OK_MSD 0x3A 
 217  #define EMV_CTLS_ADK_TXN_KERNEL_ONLINE_MSD 0x3B 
 218  #define EMV_CTLS_ADK_TXN_KERNEL_OTHER_MSD 0x3C 
 219  #define EMV_CTLS_ADK_TXN_KERNEL_RETAP_CHP 0x3D 
 220  #define EMV_CTLS_ADK_TXN_KERNEL_MOBILE_CHP 0x3E 
 221  #define EMV_CTLS_ADK_TXN_KERNEL_L1_CHP 0x3F 
 222  #define EMV_CTLS_ADK_TXN_KERNEL_CARDREAD_CHP 0x40 
 223  #define EMV_CTLS_ADK_TXN_KERNEL_DECLINE_CHP 0x41 
 224  #define EMV_CTLS_ADK_TXN_KERNEL_ONLINE_CHP 0x42 
 225  #define EMV_CTLS_ADK_TXN_KERNEL_OK_CHP 0x43 
 226  #define EMV_CTLS_ADK_TXN_KERNEL_INTERFACE_CHP 0x44 
 227  #define EMV_CTLS_ADK_TXN_KERNEL_NEW_SEL_CHP 0x45 
 228  #define EMV_CTLS_ADK_TXN_KERNEL_OTHER_CHP 0x46 
 229  #define EMV_CTLS_ADK_TXN_KERNEL_DECLINE_BEFORE_GAC 0x47 
 230  #define EMV_CTLS_ADK_TXN_KERNEL_FALLBACK_START 0x48 
 231  #define EMV_CTLS_ADK_TXN_KERNEL_INIT_FAIL 0x49 
 232  #define EMV_CTLS_ADK_TXN_KERNEL_GPO_RR 0x4A 
 233  #define EMV_CTLS_ADK_TXN_KERNEL_FALLBACK_OTHERCARD 0x4B 
 234  #define EMV_CTLS_ADK_TXN_KERNEL_TRY_ZIP 0x4C 
 235  #define EMV_CTLS_ADK_TXN_KERNEL_FALLBACK_MSD 0x4D 
 236  #define EMV_CTLS_ADK_TXN_KERNEL_DECLINE_START 0x4E 
 237  #define EMV_CTLS_ADK_TXN_KERNEL_READCARD_MSD 0x4F 
 238  #define EMV_CTLS_ADK_TXN_KERNEL_FALLBACK_CHP 0x50 
 239  #define EMV_CTLS_ADK_TXN_KERNEL_START_FALLBACK_OTHERCARD 0x51 
 240  #define EMV_CTLS_ADK_TXN_KERNEL_OTHER_TERM_CHP 0x52 
 241  #define EMV_CTLS_ADK_TXN_KERNEL_TOO_MANY_TAPS 0x53 
 242  #define EMV_CTLS_ADK_TXN_KERNEL_BAD_FFI 0x54 
 243 
 244  #define EMV_CTLS_ADK_TXN_GK_GET_DATA_OKAY 0x70 
 245  #define EMV_CTLS_ADK_TXN_GK_GET_DATA_FAIL 0x71 
 246  #define EMV_CTLS_ADK_TXN_GK_PUT_DATA_OKAY 0x72 
 247  #define EMV_CTLS_ADK_TXN_GK_PUT_DATA_FAIL 0x73 
 248 
 249  #define EMV_CTLS_ADK_ONL_START 0xF0 
 250  #define EMV_CTLS_ADK_ONL_NO_CTLS_TXN 0xF1 
 251  #define EMV_CTLS_ADK_ONL_NO_HOST 0xF2 
 252  #define EMV_CTLS_ADK_ONL_HOST_OK 0xF3 
 253  #define EMV_CTLS_ADK_ONL_HOST_DECLINE 0xF4 
 254 #define EMV_CTLS_ADK_ONL_HOST_SWITCH_IF 0xF5 
 255 #define EMV_CTLS_ADK_ONL_HOST_ONLINE_PIN 0xF6 
 256 #define EMV_CTLS_ADK_END_TXN 0xFE 
 257 
 259 
 264  #define EMV_CTLS_ADK_STEP_01 1 
 265  #define EMV_CTLS_ADK_STEP_02 2 
 266  #define EMV_CTLS_ADK_STEP_03 3 
 267  #define EMV_CTLS_ADK_STEP_04 4 
 268  #define EMV_CTLS_ADK_STEP_05 5 
 269  #define EMV_CTLS_ADK_STEP_06 6 
 270  #define EMV_CTLS_ADK_STEP_07 7 
 271  #define EMV_CTLS_ADK_STEP_08 8 
 272  #define EMV_CTLS_ADK_STEP_09 9 
 273  #define EMV_CTLS_ADK_STEP_10 10 
 274  #define EMV_CTLS_ADK_STEP_11 11 
 275  #define EMV_CTLS_ADK_STEP_12 12 
 276  #define EMV_CTLS_ADK_STEP_13 13 
 277  #define EMV_CTLS_ADK_STEP_14 14 
 278  #define EMV_CTLS_ADK_STEP_15 15 
 279  #define EMV_CTLS_ADK_STEP_16 16 
 280  #define EMV_CTLS_ADK_STEP_17 17 
 281  #define EMV_CTLS_ADK_STEP_18 18 
 282  #define EMV_CTLS_ADK_STEP_19 19 
 283  #define EMV_CTLS_ADK_STEP_20 20 
 284 
 286 
 287 // ========================================================================================================
 288 // === TERMINAL CONFIGURATION ===
 289 // ========================================================================================================
 290 
 294 #define EMV_CTLS_KERNEL_VERSION_SIZE 255 
 295 
 297 typedef struct EMV_CTLS_TERMDATA_STRUCT /* === EMV_CTLS_TERMDATA_TYPE === */
 300 {
 301  unsigned char TermTyp;
 302  unsigned char CountryCodeTerm[2];
 304  unsigned char CurrencyTrans[2];
 305  unsigned char ExpTrans;
 307  unsigned char SuppLang[EMV_ADK_MAX_LANG];
 309  unsigned char IFDSerialNumber[8];
 310  unsigned char FlowOptions[10];
 315  unsigned char MaxCTLSTranslimit[4];
 316  unsigned short BeepVolume;
 319  unsigned short BeepFrequencySuccess;
 322  unsigned short BeepFrequencyAlert;
 325  const unsigned char* Hotlist;
 328  EMV_CTLS_DATA_TYPE poiInformation;
 337 
 338  char KernelVersion[EMV_CTLS_KERNEL_VERSION_SIZE];
 339  char FrameworkVersion[EMV_ADK_VERSION_ASCII_SIZE];
 340  char L1DriverVersion[EMV_ADK_VERSION_ASCII_SIZE];
 341 
 342  unsigned char Info_Included_Data[8];
 343 } EMV_CTLS_TERMDATA_TYPE;
 344 
 345 #define EMV_CTLS_TERMDATA_INITIALIZER {0,{0},{0},0,{0},{0},{0},{0},0,0,0,0,{0,0},{0},{0},{0},{0}}
 346 
 351 /* Byte 1 */
 352 #define INPUT_CTLS_TRM_TYPE 0x02 
 353 #define INPUT_CTLS_TRM_CURRENCY 0x04 
 354 #define INPUT_CTLS_TRM_EXP_CURRENCY 0x08 
 355 #define INPUT_CTLS_TRM_COUNTRY_CODE 0x10 
 356 #define INPUT_CTLS_TRM_FLOW_OPTIONS 0x20 
 357 #define INPUT_CTLS_TRM_MAXCTLS_TRANSLIMIT 0x40 
 358 #define INPUT_CTLS_TRM_BEEP_VOLUME 0x80 
 359 
 360 /* Byte 2 */
 361 #define INPUT_CTLS_TRM_LANGUAGES 0x01 
 362 #define INPUT_CTLS_TRM_IFD_SERIAL 0x02 
 363 #define INPUT_CTLS_TRM_KERNEL_VERSION 0x04 
 364 #define INPUT_CTLS_TRM_FRAMEWORK_VERSION 0x08 
 365 #define INPUT_CTLS_TRM_HOTLIST 0x10 
 366 #define INPUT_CTLS_TRM_BEEP_FREQ_SUCCESS 0x20 
 367 #define INPUT_CTLS_TRM_BEEP_FREQ_ALERT 0x40 
 368 #define INPUT_CTLS_TRM_L1DRIVER_VERSION 0x80 
 369 
 370 /* Byte 3 */
 371 #define INPUT_CTLS_TRM_POI_INFORMATION 0x04 
 372 
 374 
 379 /* Byte 1 */
 380 #define INPUT_CTLS_TRM_FLOWOPT_VISA_WAVE 0x01 
 381 #define INPUT_CTLS_CKO_AMEXEMV_OR_NONEMV_MARKET 0x02 
 382 #define INPUT_CTLS_TRM_IFD_SERIAL_USE_TID 0x08 
 383 #define INPUT_CTLS_TRM_FLOWOPT_LED_NON_VISA_EUROPE 0x10 
 384 #define INPUT_CTLS_TRM_FLOWOPT_LED_EP_OPTION_2 0x20 
 385 #define INPUT_CTLS_TRM_FLOWOPT_LED_INTERAC 0x40 
 386 
 387 /* Byte 2 */
 388 // RFU
 390 
 391 // ========================================================================================================
 392 // === APPLICATION CONFIGURATION ===
 393 // ========================================================================================================
 394 
 399 #define VISA_TTQ_MAGSTRIPE_SUPPORTED 0x80 
 400 #define VISA_TTQ_VSDC_SUPPORTED 0x40 
 401 #define VISA_TTQ_qVSDC_SUPPORTED 0x20 
 402 #define VISA_TTQ_CONTACT_VSDC_SUPPORTED 0x10 
 403 #define VISA_TTQ_OFFLINE_ONLY 0x08 
 404 #define VISA_TTQ_ONLINE_PIN_SUPPORTED 0x04 
 405 #define VISA_TTQ_SIGNATURE_SUPPORTED 0x02 
 406 #define VISA_TTQ_ODA_ONLINE_SUPPORTED 0x01 
 407 #define VISA_TTQ_ONLINE_FORCED 0x80 
 408 #define VISA_TTQ_CVM_FORCED 0x40 
 409 #define VISA_TTQ_CONTACT_PINOFFL 0x20 
 410 
 412 // Byte 1
 424 #define TTQ_MAGSTRIPE_MODE_SUPPORTED 0x80 
 425 #define TTQ_EMV_MODE_SUPPORTED 0x20 
 426 #define TTQ_CONTACT_CHIP_SUPPORTED 0x10 
 427 #define TTQ_OFFLINE_ONLY 0x08 
 428 #define TTQ_ONLINE_PIN_SUPPORTED 0x04 
 429 #define TTQ_SIGNATURE_SUPPORTED 0x02 
 430 #define TTQ_ODA_SUPPORTED 0x01 
 431 // Byte 2
 432 #define TTQ_ONLINE_CRYPTOGRAM_REQUIRED 0x80 
 433 #define TTQ_CVM_REQUIRED 0x40 
 434 #define TTQ_CONTACT_OFFLINE_PIN 0x20 
 435 // Byte 3
 436 #define TTQ_ISSUER_UPDATE_SUPPORTED 0x80 
 437 #define TTQ_CD_CVM_SUPPORTED 0x40 
 438 
 440 
 443 
 448 #define VISA_DRL_DISABLE_ZERO_AMOUNT_CHECK 0x01 
 449 #define VISA_DRL_ENABLE_STATUS_CHECK 0x02 
 450 
 451 #define VISA_AMEX_DRL_DISABLE_FLOOR_LIMIT_CHECK 0x20 
 452 #define VISA_AMEX_DRL_DISABLE_TRANS_LIMIT_CHECK 0x40 
 453 #define VISA_AMEX_DRL_DISABLE_CV_LIMIT_CHECK 0x80 
 454 
 456 #define EMV_ADK_DRL_ENTRIES_AMEX 16 
 461 
 463 #define EMV_CTLS_MAX_NO_OF_NON_EMVCO_TAGS 25 
 467 #define EMV_CTLS_BUFFER_FOR_NON_EMVCO_TAGS 1230 
 468 
 470 #define EMV_CTLS_MAX_TAGLIST_SIZE 20 
 471 #define EMV_CTLS_MAX_APP_VERS 10 
 472 
 473 typedef struct EMV_CTLS_TAGLIST_STRUCT
 476 {
 477  unsigned char anztag;
 478  unsigned short tags[EMV_CTLS_MAX_TAGLIST_SIZE];
 479 } EMV_CTLS_TAGLIST_TYPE;
 480 
 485 #define CTLS_APPLY_CFG_APPS 0x00000001 
 486 #define CTLS_APPLY_CFG_TERM 0x00000002 
 487 #define CTLS_APPLY_CFG_CAPK 0x00000004 
 488 #define CTLS_APPLY_CFG_ALL 0x00000007 
 489 #define CTLS_APPLY_CFG_FORCE 0x00000008 
 490 
 492 // ========================================================================
 493 // === APPLICATION CONFIGURATION (new scheme specific config interface) ===
 494 // ========================================================================
 495 
 496 
 510 // EMVCo standard
 511 #define EMV_CTLS_KERN_EP 0x00 
 512 #define EMV_CTLS_KERN_MK 0x02 
 513 #define EMV_CTLS_KERN_VK 0x03 
 514 #define EMV_CTLS_KERN_AK 0x04 
 515 #define EMV_CTLS_KERN_JK 0x05 
 516 #define EMV_CTLS_KERN_DK 0x06 
 517 #define EMV_CTLS_KERN_CK 0x07 
 518 #define EMV_CTLS_KERN_K8 0x08 
 519 
 520 // Verifone Internal
 521 #define EMV_CTLS_KERN_IK 0x10 
 522 #define EMV_CTLS_KERN_EK 0x11 
 523 #define EMV_CTLS_KERN_RK 0x12 
 524 #define EMV_CTLS_KERN_GK 0x13 
 525 #define EMV_CTLS_KERN_PB 0x14 
 526 // 0x15 VERTEX value for MIR, not used on ADK interface
 527 #define EMV_CTLS_KERN_WK 0x16 
 528 #define EMV_CTLS_KERN_BK 0x17 
 529 
 530 // EMVCo registered
 531 #define EMV_CTLS_KERN_GC 0x2A 
 532 #define EMV_CTLS_KERN_SAMA 0x2D 
 533 #define EMV_CTLS_KERN_CPACE 0x2E 
 534 #define EMV_CTLS_KERN_WLA 0x31 
 535 
 536 #define EMV_CTLS_KERN_DOM 0xF0 
 537 
 540 // Extended Kernel Ids
 541 #define EMV_CTLS_KERN_MR 0x810643 
 542 #define EMV_CTLS_KERN_SB 0xC14D42 
 543 
 544 
 546 #define KERNEL_ID_TO_BYTE_ARRAY(kernelId, byteArray)\
 547  if ((kernelId)<0xff)\
 548  {\
 549  byteArray[0] = (unsigned char) (kernelId);\
 550  byteArray[1] = 0;\
 551  byteArray[2] = 0;\
 552  }\
 553  else\
 554  {\
 555  byteArray[0] = (unsigned char) ((kernelId) >> 16);\
 556  byteArray[1] = (unsigned char) ((kernelId) >> 8);\
 557  byteArray[2] = (unsigned char) ((kernelId));\
 558  }
 559 
 560 #define KERNEL_ID_TO_INT(byteArray)\
 561  ((byteArray[0] >= EMV_CTLS_KERN_DOM && byteArray[1] == 0 && byteArray[2] == 0)\
 562  ? EMV_CTLS_KERN_DOM :\
 563  ((byteArray[0] & 0x80) ? ((unsigned) byteArray[0] << 16) | ((unsigned) byteArray[1] << 8) | byteArray[2] : byteArray[0]))
 564 
 573 #define EMV_CTLS_TEC_CHIP 0x01 
 574 #define EMV_CTLS_TEC_MSR 0x02 
 575 
 577 #define EMV_CTLS_MK_CFG_NOMSR 0x80 
 581 #define EMV_CTLS_MK_CFG_NOCHIP 0x40 
 582 #define EMV_CTLS_MK_CFG_ONDEVCVM 0x20 
 583 #define EMV_CTLS_MK_CFG_RRP 0x10 
 584 
 586 #define EMV_CTLS_RK_CFG_ONDEVCVM 0x20 
 590 
 592  /* Byte 1 */
 597 #define EMV_CTLS_FLOW_GLOB_DOM_NO_FINAL_SELECT_0 0x01 
 598 #define EMV_CTLS_FLOW_GLOB_LOA_ENABLE_0 0x02 
 599 #define EMV_CTLS_FLOW_GLOB_CASH_SUPPORT_0 0x04 
 600 #define EMV_CTLS_FLOW_GLOB_CASHBACK_SUPPORT_0 0x08 
 601 #define EMV_CTLS_FLOW_GLOB_OMIT_NOT_ALLOWED_SELECTION_0 0x10 
 602 #define EMV_CTLS_FLOW_GLOB_FORCE_ENTRY_POINT_0 0x20 
 603 #define EMV_CTLS_FLOW_GLOB_FORCE_KERNEL_USAGE_0 0x40 
 604 #define EMV_CTLS_FLOW_GLOB_LIST_OF_AIDS_IF_PPSE_MISSING_ONLY_0 0x80 
 605  /* Byte 2 */
 606 #define EMV_CTLS_FLOW_GLOB_CARD_READ_TXN_ZERO_AMOUNT_1 0x02 
 607 #define EMV_CTLS_FLOW_GLOB_SKIP_CARDSELECTION_APPS_1 0x04 
 608 #define EMV_CTLS_FLOW_GLOB_SKIP_TXN_LIMIT_CHECK_1 0x08 
 609 #define EMV_CTLS_FLOW_GLOB_FORCE_ONLINE_1 0x10 
 610 #define EMV_CTLS_FLOW_GLOB_WAIT_CARD_REMOVAL_END_1 0x20 
 611 #define EMV_CTLS_FLOW_GLOB_START_REMOVAL_DETECTION_1 0x40 
 612 #define EMV_CTLS_FLOW_GLOB_EP_EXTENDED_SELECTION_1 0x80 
 613 // byte3
 614 #define EMV_CTLS_FLOW_GLOB_MULTIPLE_AID_KERNEL_ID_2 0x01 
 615 #define EMV_CTLS_FLOW_GLOB_ENABLE_OFFLINE_CASHBACK_2 0x02 
 618 #define EMV_CTLS_FLOW_GLOB_RESET_TXN_TYPE_2 0x04 
 622 #define EMV_CTLS_FLOW_GLOB_CFG_APPL_NAME_2 0x08 
 624 #define EMV_CTLS_FLOW_GLOB_CARD_READ_SKIP_TXN_LIMIT_CHECK_2 0x10 
 625 
 627  /* Byte 1 */
 632 #define EMV_CTLS_FLOW_MK_READ_BALANCE_BEFORE_GAC_0 0x01 
 633 #define EMV_CTLS_FLOW_MK_READ_BALANCE_AFTER_GAC_0 0x02 
 634 #define EMV_CTLS_FLOW_MK_ENABLE_DATA_EXCHANGE_0 0x04 
 635 #define EMV_CTLS_FLOW_MK_TRANSACTION_TYPE_17_FOR_CASH_0 0x08 
 636 #define EMV_CTLS_FLOW_MK_CARD_READ_ACTION_ANALYSIS_0 0x10 
 639 
 641  /* Byte 1 */
 646 #define EMV_CTLS_FLOW_VK_STATUS_CHECK_ENABLE_0 0x01 
 647 #define EMV_CTLS_FLOW_VK_ZERO_CHECK_ENABLE_SKIP_0 0x02 
 648 #define EMV_CTLS_FLOW_VK_ZERO_CHECK_ENABLE_ONLINE_0 0x04 
 649 #define EMV_CTLS_FLOW_VK_CHECK_INCONS_TRACK2_PAN_0 0x08 
 650 #define EMV_CTLS_FLOW_VK_CASHBACK_NOT_FORCED_CVM_0 0x10 
 651 #define EMV_CTLS_FLOW_VK_ALERT_TONE_ON_DECLINE 0x40 
 652 #define EMV_CTLS_FLOW_VK_GET_DATA_9F68_0 0x80 
 655 
 656 // Byte 2, EMV_CTLS_APPLIDATA_VK_STRUCT::AppFlowCap_DFAB31[1]
 657 #define EMV_CTLS_FLOW_VK_ENABLE_TAGS_AT_GPO 0x01 
 658 #define EMV_CTLS_FLOW_VK_ZERO_CHECK_DISABLE_1 0x02 
 659 // B2b3 RFU
 660 #define EMV_CTLS_FLOW_VK_ODO_SUPPORT_1 0x08 
 661 #define EMV_CTLS_FLOW_VK_ODO_SDA_1 0x10 
 662 #define EMV_CTLS_FLOW_VK_ODO_DDA_1 0x20 
 663 #define EMV_CTLS_FLOW_VK_ODO_SDA_ERR_ONLINE_1 0x40 
 664 #define EMV_CTLS_FLOW_VK_ODO_DDA_ERR_ONLINE_1 0x80 
 665 
 666 // Byte 3, EMV_CTLS_APPLIDATA_VK_STRUCT::AppFlowCap_DFAB31[2]
 667 #define EMV_CTLS_FLOW_VK_OMIT_AUC_INT_CASH_2 0x01 
 668 #define EMV_CTLS_FLOW_VK_OMIT_AUC_INT_CASHBACK_2 0x02 
 669 #define EMV_CTLS_FLOW_VK_OMIT_AUC_DOM_CASH_2 0x04 
 670 #define EMV_CTLS_FLOW_VK_OMIT_AUC_DOM_CASHBACK_2 0x08 
 671 #define EMV_CTLS_FLOW_VK_ZERO_CASHBACK_AMOUNT_2 0x10 
 672 #define EMV_CTLS_FLOW_VK_CASHBACK_TRANS_TYPE_09_2 0x20 
 673 #define EMV_CTLS_FLOW_VK_QUASI_CASH_2 0x40 
 674 #define EMV_CTLS_FLOW_VK_DO_NOT_CFG_9F21_TIME_2 0x80 
 675 
 676 // Byte 4, EMV_CTLS_APPLIDATA_VK_STRUCT::AppFlowCap_DFAB31[3]
 677 #define EMV_CTLS_FLOW_VK_TRANSIT_ONLINE 0x01 
 678 
 680  /* Byte 1 */
 685 #define EMV_CTLS_FLOW_AK_CARDREAD_GENAC1_ARQC_0 0x01 
 686 #define EMV_CTLS_FLOW_AK_TRANSACTION_TYPE_30_FOR_PREAUTH_0 0x02 
 687 #define EMV_CTLS_FLOW_AK_STATUS_CHECK_ENABLE_0 0x04 
 691 #define EMV_CTLS_FLOW_AK_ZERO_CHECK_ENABLE_ONLINE_0 0x08 
 692 #define EMV_CTLS_FLOW_AK_DISABLE_9F6E_KERNEL_VERSION_0 0x10 
 693 
 694 
 700  /* Byte 1 */
 701 #define EMV_CTLS_FLOW_JK_MULTIPLE_RANDOM_NUMBERS_0 0x01 
 702 
 704  /* Byte 1 */
 709 #define EMV_CTLS_FLOW_DK_CASHBACK_NOT_FORCED_CVM_0 0x01 
 710 #define EMV_CTLS_FLOW_DK_DATA_STORAGE_0 0x02 
 711 #define EMV_CTLS_FLOW_DK_EXTENDED_LOGGGING_0 0x04 
 712 #define EMV_CTLS_FLOW_DK_TORN_TXN_RECOVERY_0 0x08 
 713 #define EMV_CTLS_FLOW_DK_DEFERRED_AUTHORISATION_0 0x10 
 714 #define EMV_CTLS_FLOW_DK_STATUS_CHECK_ENABLE_0 0x20 
 715 #define EMV_CTLS_FLOW_DK_ZERO_CHECK_ENABLE_SKIP_0 0x40 
 716 #define EMV_CTLS_FLOW_DK_ZERO_CHECK_ENABLE_ONLINE_0 0x80 
 717 
 718 
 724  /* Byte 1 */
 725 #define EMV_CTLS_FLOW_IK_REQUEST_CDA_WITH_ARQC_0 0x01 
 726 #define EMV_CTLS_FLOW_IK_REFUND_FLOW_INTERAC_0 0x02 
 727 
 729  /* Byte 1 */
 734 #define EMV_CTLS_FLOW_EK_READ_CARD_REFUND_0 0x01 
 735 
 737  /* Byte 1 */
 742 #define EMV_CTLS_FLOW_CK_STATUS_CHECK_ENABLE_0 0x01 
 743 #define EMV_CTLS_FLOW_CK_ZERO_CHECK_ENABLE_SKIP_0 0x02 
 744 #define EMV_CTLS_FLOW_CK_ZERO_CHECK_ENABLE_ONLINE_0 0x04 
 745 #define EMV_CTLS_FLOW_CK_CHECK_INCONS_TRACK2_PAN_0 0x08 
 746 #define EMV_CTLS_FLOW_CK_CASHBACK_NOT_FORCED_CVM_0 0x10 
 747 #define EMV_CTLS_FLOW_CK_ENABLE_FDDA_VERSION_0 0x20 
 748 #define EMV_CTLS_FLOW_CK_DISABLE_PIN_BELOW_CVM_0 0x40 
 749 
 751 /* Byte 1 (index 0) */
 756 #define EMV_CTLS_FLOW_GK_SUPPORT_APPLI_AUTHENTICATE_0 0x01 
 757 #define EMV_CTLS_FLOW_GK_SUPPORT_GETDATA_0 0x02 
 758 #define EMV_CTLS_FLOW_GK_SUPPORT_PUTDATA_0 0x04 
 759 #define EMV_CTLS_FLOW_GK_AMOUNT_MULTIPLY_100_0 0x08 
 760 
 762  /* Byte 1 */
 767 #define EMV_CTLS_FLOW_RK_SERVICE_FEATURE_ENABLE_0 0x01 
 768 #define EMV_CTLS_FLOW_RK_TORN_TRANSACTION_INDICATOR_0 0x02 
 769 #define EMV_CTLS_FLOW_RK_MULTIPLE_RANDOM_NUMBERS_0 0x08 
 770 #define EMV_CTLS_FLOW_RK_ONLINE_PIN_SUPPORTED_0 0x10 
 771 #define EMV_CTLS_FLOW_RK_SIGNATURE_SUPPORTED_0 0x20 
 772 #define EMV_CTLS_FLOW_RK_ON_DEVICE_CVM_SUPPORTED_0 0x40 
 773 #define EMV_CTLS_FLOW_RK_CVM_REQUIRED_0 0x80 
 774 
 775  /* Byte 2 */
 776 #define EMV_CTLS_FLOW_RK_ISSUER_UPDATE_SUPPORTED_1 0x01 
 777 
 779  /* Byte 1 */
 785 
 790  /* Byte 1 */
 792 
 797 #define EMV_CTLS_FLOW_WK_STATUS_CHECK_ENABLE_0 0x01 
 798 #define EMV_CTLS_FLOW_WK_ZERO_CHECK_ENABLE_SKIP_0 0x02 
 799 #define EMV_CTLS_FLOW_WK_ZERO_CHECK_ENABLE_ONLINE_0 0x04 
 800 #define EMV_CTLS_FLOW_WK_NO_CDCVM 0x08 
 801 
 803  /* Byte 1 */
 809 
 814  /* Byte 1 */
 816 
 817 
 819 // MasterCard //
 821 
 825 typedef struct EMV_CTLS_APPLIDATA_MK_STRUCT {
 826  unsigned char IncludedData[8];
 827  unsigned char TermIdent_9F1C[8];
 828  unsigned char TerminalCountryCode_9F1A[2];
 829  unsigned char TerminalType_9F35;
 830  unsigned char AdditionalTerminalCapabilities_9F40[5];
 831  unsigned char MagstripeCVM_aboveLimit_DF811E;
 832  unsigned char MagstripeCVM_belowLimit_DF812C;
 833  unsigned char ChipCVM_aboveLimit_DF8118;
 834  unsigned char ChipCVM_belowLimit_DF8119;
 835  unsigned char SecurityCapability_DF811F;
 836  unsigned char CardDataInputCapability_DF8117;
 837  unsigned char FloorLimit_DF8123[6];
 838  unsigned char TransactionLimitNoOnDevice_DF8124[6];
 839  unsigned char TransactionLimitOnDevice_DF8125[6];
 840  unsigned char CVMRequiredLimit_DF8126[6];
 841  unsigned char ChipVersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 842  unsigned char MSRVersionNumber_9F6D[2*EMV_CTLS_MAX_APP_VERS];
 843  unsigned char KernelConfiguration_DF811B;
 844  unsigned char TransactionCategoryCode_9F53;
 845  unsigned char TACDefault_DF8120[5];
 846  unsigned char TACDenial_DF8121[5];
 847  unsigned char TACOnline_DF8122[5];
 848  unsigned char KernelID_DF810C;
 849  unsigned char TerminalRiskManagementData_9F1D[8];
 850  unsigned char MerchantCategoryCode_9F15[2];
 851  char MerchantIdentifier_9F16[15+1];
 852  char MerchantNameAndLocation_9F4E[40+1];
 853  unsigned char AcquirerIdentifier_9F01[6];
 854  unsigned char HoldTimeValue_DF8130;
 855  unsigned char MessageHoldTime_DF812D[3];
 856  unsigned char TornTransactionLifetime_DF811C[2];
 857  unsigned char TornTransactionNumber_DF811D;
 858  EMV_CTLS_DATA_TYPE PhoneMessageTable_DF8131;
 859  EMV_CTLS_DATA_TYPE TagsToRead_DF8112;
 860  EMV_CTLS_DATA_TYPE TagsToWriteBeforeGenAC_FF8102;
 861  EMV_CTLS_DATA_TYPE TagsToWriteAfterGenAC_FF8103;
 862  unsigned char ProceedToFirstWriteFlag_DF8110;
 863  unsigned char DSRequestedOperatorID_9F5C[8];
 864  unsigned char DETimeoutValue_DF8127[2];
 865  unsigned char AppFlowCap_DFAB31[5];
 866  unsigned char RR_MinGracePeriod_DF8132[2];
 867  unsigned char RR_MaxGracePeriod_DF8133[2];
 868  unsigned char RR_ExpectedTransTime_CAPDU_DF8134[2];
 869  unsigned char RR_ExpectedTransTime_RAPDU_DF8135[2];
 870  unsigned char RR_AccuracyThreshold_DF8136[2];
 871  unsigned char RR_TransTimeMismatchThreshold_DF8137;
 872  unsigned char MerchantCustomData_9F7C[20];
 873 } EMV_CTLS_APPLIDATA_MK_TYPE;
 874 
 875 typedef EMV_CTLS_APPLIDATA_MK_TYPE EMV_CTLS_APPLIDATA_GC_TYPE; // Kernel 2a configuration is same as PayPass for instance
 876 
 881  /* Byte 1 */
 882 #define INPUT_CTLS_APL_MK_9F1C_0 0x01 
 883 #define INPUT_CTLS_APL_MK_9F1A_0 0x02 
 884 #define INPUT_CTLS_APL_MK_9F35_0 0x04 
 885 #define INPUT_CTLS_APL_MK_9F40_0 0x08 
 886 #define INPUT_CTLS_APL_MK_DF811E_0 0x10 
 887 #define INPUT_CTLS_APL_MK_DF812C_0 0x20 
 888 #define INPUT_CTLS_APL_MK_DF8118_0 0x40 
 889 #define INPUT_CTLS_APL_MK_DF8119_0 0x80 
 890  /* Byte 2 */
 891 #define INPUT_CTLS_APL_MK_DF811F_1 0x01 
 892 #define INPUT_CTLS_APL_MK_DF8117_1 0x02 
 893 #define INPUT_CTLS_APL_MK_DF8123_1 0x04 
 894 #define INPUT_CTLS_APL_MK_DF8124_1 0x08 
 895 #define INPUT_CTLS_APL_MK_DF8125_1 0x10 
 896 #define INPUT_CTLS_APL_MK_DF8126_1 0x20 
 897 #define INPUT_CTLS_APL_MK_9F09_1 0x40 
 898 #define INPUT_CTLS_APL_MK_9F6D_1 0x80 
 899  /* Byte 3 */
 900 #define INPUT_CTLS_APL_MK_DF811B_2 0x01 
 901 #define INPUT_CTLS_APL_MK_9F53_2 0x02 
 902 #define INPUT_CTLS_APL_MK_DF8120_2 0x04 
 903 #define INPUT_CTLS_APL_MK_DF8121_2 0x08 
 904 #define INPUT_CTLS_APL_MK_DF8122_2 0x10 
 905 #define INPUT_CTLS_APL_MK_DF810C_2 0x20 
 906 #define INPUT_CTLS_APL_MK_9F1D_2 0x40 
 907 #define INPUT_CTLS_APL_MK_9F15_2 0x80 
 908  /* Byte 4 */
 909 #define INPUT_CTLS_APL_MK_9F16_3 0x01 
 910 #define INPUT_CTLS_APL_MK_9F4E_3 0x02 
 911 #define INPUT_CTLS_APL_MK_9F01_3 0x04 
 912 #define INPUT_CTLS_APL_MK_DF8130_3 0x08 
 913 #define INPUT_CTLS_APL_MK_DF812D_3 0x10 
 914 #define INPUT_CTLS_APL_MK_DF811C_3 0x20 
 915 #define INPUT_CTLS_APL_MK_DF811D_3 0x40 
 916 #define INPUT_CTLS_APL_MK_DF8131_3 0x80 
 917  /* Byte 5 */
 918 #define INPUT_CTLS_APL_MK_DFAB31_4 0x01 
 919 #define INPUT_CTLS_APL_MK_DF8112_4 0x02 
 920 #define INPUT_CTLS_APL_MK_FF8102_4 0x04 
 921 #define INPUT_CTLS_APL_MK_FF8103_4 0x08 
 922 #define INPUT_CTLS_APL_MK_DF8110_4 0x10 
 923 #define INPUT_CTLS_APL_MK_9F5C_4 0x20 
 924 #define INPUT_CTLS_APL_MK_DF8127_4 0x40 
 925 
 926 // Byte 6
 927 #define INPUT_CTLS_APL_MK_DF8132_5 0x01 
 928 #define INPUT_CTLS_APL_MK_DF8133_5 0x02 
 929 #define INPUT_CTLS_APL_MK_DF8134_5 0x04 
 930 #define INPUT_CTLS_APL_MK_DF8135_5 0x08 
 931 #define INPUT_CTLS_APL_MK_DF8136_5 0x10 
 932 #define INPUT_CTLS_APL_MK_DF8137_5 0x20 
 933 #define INPUT_CTLS_APL_MK_9F7C_5 0x40 
 934 
 935 
 941 #define INPUT_CTLS_MK_PROCEED_TO_FIRST_WRITE_NO 0x00 
 942 #define INPUT_CTLS_MK_PROCEED_TO_FIRST_WRITE_YES 0x01 
 943 #define INPUT_CTLS_MK_PROCEED_TO_FIRST_WRITE_EMPTY 0xFF 
 944 #define INPUT_CTLS_MK_PROCEED_TO_FIRST_WRITE_ABSENT 0xFE 
 945 
 947 // Visa //
 950 
 954 typedef struct EMV_CTLS_VK_DRL_ENTRY_STRUCT {
 955  unsigned char AppProgramId_9F5A[16];
 956  unsigned char AppProgramIdLen;
 957  unsigned char ContactlessFloorLimit_DFAB40[6];
 958  unsigned char ContactlessTransactionLimit_DFAB41[6];
 959  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 960  unsigned char OnOffSwitch_DFAB49;
 961 } EMV_CTLS_VK_DRL_ENTRY_TYPE;
 962 
 966 typedef struct EMV_CTLS_VK_DRL_STRUCT {
 967  unsigned short cnt;
 968  EMV_CTLS_VK_DRL_ENTRY_TYPE *data;
 969 } EMV_CTLS_VK_DRL_TYPE;
 970 
 974 typedef struct EMV_CTLS_APPLIDATA_VK_STRUCT {
 975  unsigned char IncludedData[8];
 976  unsigned char TermIdent_9F1C[8];
 977  unsigned char TerminalCountryCode_9F1A[2];
 978  unsigned char TerminalType_9F35;
 979  unsigned char TerminalTransactionQualifier_9F66[4];
 980  unsigned char TerminalCapabilities_9F33[3];
 981  unsigned char AdditionalTerminalCapabilities_9F40[5];
 982  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 983  unsigned char MerchantCategoryCode_9F15[2];
 984  char MerchantIdentifier_9F16[15+1];
 985  char MerchantNameAndLocation_9F4E[40+1];
 986  unsigned char TecSupport_DFAB30;
 987  unsigned char AppFlowCap_DFAB31[5];
 988  unsigned char ContactlessFloorLimit_DFAB40[6];
 989  unsigned char ContactlessTransactionLimit_DFAB41[6];
 990  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 991  EMV_CTLS_VK_DRL_TYPE VisaDRLParams_FFAB01;
 992 } EMV_CTLS_APPLIDATA_VK_TYPE;
 993 
 998  /* Byte 1 */
 999 #define INPUT_CTLS_APL_VK_9F1C_0 0x01 
 1000 #define INPUT_CTLS_APL_VK_9F1A_0 0x02 
 1001 #define INPUT_CTLS_APL_VK_9F35_0 0x04 
 1002 #define INPUT_CTLS_APL_VK_9F66_0 0x08 
 1003 #define INPUT_CTLS_APL_VK_9F33_0 0x10 
 1004 #define INPUT_CTLS_APL_VK_9F40_0 0x20 
 1005 #define INPUT_CTLS_APL_VK_9F09_0 0x40 
 1006 #define INPUT_CTLS_APL_VK_9F15_0 0x80 
 1007  /* Byte 2 */
 1008 #define INPUT_CTLS_APL_VK_9F16_1 0x01 
 1009 #define INPUT_CTLS_APL_VK_9F4E_1 0x02 
 1010 #define INPUT_CTLS_APL_VK_DFAB30_1 0x04 
 1011 #define INPUT_CTLS_APL_VK_DFAB31_1 0x08 
 1012 #define INPUT_CTLS_APL_VK_DFAB40_1 0x10 
 1013 #define INPUT_CTLS_APL_VK_DFAB41_1 0x20 
 1014 #define INPUT_CTLS_APL_VK_DFAB42_1 0x40 
 1015 #define INPUT_CTLS_APL_VK_FFAB01_1 0x80 
 1016 
 1018 
 1020 // American Express //
 1022 
 1026 typedef struct EMV_CTLS_AK_DRL_ENTRY_STRUCT {
 1027  unsigned char ContactlessFloorLimit_DFAB40[6];
 1028  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1029  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1030  unsigned char OnOffSwitch_DFAB49;
 1031 } EMV_CTLS_AK_DRL_ENTRY_TYPE;
 1032 
 1036 typedef struct EMV_CTLS_AK_DRL_STRUCT {
 1037  unsigned short cnt;
 1038  EMV_CTLS_AK_DRL_ENTRY_TYPE *data;
 1039 } EMV_CTLS_AK_DRL_TYPE;
 1040 
 1044 typedef struct EMV_CTLS_APPLIDATA_AK_STRUCT {
 1045  unsigned char IncludedData[8];
 1046  unsigned char TermIdent_9F1C[8];
 1047  unsigned char TerminalCountryCode_9F1A[2];
 1048  unsigned char TerminalType_9F35;
 1049  unsigned char AmexContactlessReaderCapabilities_9F6D;
 1050  unsigned char AmexTerminalTransactionCapabilities_9F6E[4];
 1051  unsigned char TerminalCapabilities_9F33[3];
 1052  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1053  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1054  unsigned char MerchantCategoryCode_9F15[2];
 1055  char MerchantIdentifier_9F16[15+1];
 1056  char MerchantNameAndLocation_9F4E[40+1];
 1057  unsigned char AcquirerIdentifier_9F01[6];
 1058  unsigned char TecSupport_DFAB30;
 1059  unsigned char AppFlowCap_DFAB31[5];
 1060  unsigned char ContactlessFloorLimit_DFAB40[6];
 1061  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1062  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1063  unsigned char TACDefault_DFAB43[5];
 1064  unsigned char TACDenial_DFAB44[5];
 1065  unsigned char TACOnline_DFAB45[5];
 1066  EMV_CTLS_AK_DRL_TYPE AmexDRLParams_FFAB01;
 1067  unsigned char UnpredictableNumberRange_DFAB52;
 1068 } EMV_CTLS_APPLIDATA_AK_TYPE;
 1069 
 1074  /* Byte 1 */
 1075 #define INPUT_CTLS_APL_AK_9F1C_0 0x01 
 1076 #define INPUT_CTLS_APL_AK_9F1A_0 0x02 
 1077 #define INPUT_CTLS_APL_AK_9F35_0 0x04 
 1078 #define INPUT_CTLS_APL_AK_9F6D_0 0x08 
 1079 #define INPUT_CTLS_APL_AK_9F6E_0 0x10 
 1080 #define INPUT_CTLS_APL_AK_9F33_0 0x20 
 1081 #define INPUT_CTLS_APL_AK_9F40_0 0x40 
 1082 #define INPUT_CTLS_APL_AK_9F09_0 0x80 
 1083  /* Byte 2 */
 1084 #define INPUT_CTLS_APL_AK_9F15_1 0x01 
 1085 #define INPUT_CTLS_APL_AK_9F16_1 0x02 
 1086 #define INPUT_CTLS_APL_AK_9F4E_1 0x04 
 1087 #define INPUT_CTLS_APL_AK_9F01_1 0x08 
 1088 #define INPUT_CTLS_APL_AK_DFAB30_1 0x10 
 1089 #define INPUT_CTLS_APL_AK_DFAB31_1 0x20 
 1090 #define INPUT_CTLS_APL_AK_DFAB40_1 0x40 
 1091 #define INPUT_CTLS_APL_AK_DFAB41_1 0x80 
 1092  /* Byte 3 */
 1093 #define INPUT_CTLS_APL_AK_DFAB42_2 0x01 
 1094 #define INPUT_CTLS_APL_AK_DFAB43_2 0x02 
 1095 #define INPUT_CTLS_APL_AK_DFAB44_2 0x04 
 1096 #define INPUT_CTLS_APL_AK_DFAB45_2 0x08 
 1097 #define INPUT_CTLS_APL_AK_FFAB01_2 0x10 
 1098 #define INPUT_CTLS_APL_AK_DFAB52_2 0x20 
 1099 
 1101 
 1105 
 1109 typedef struct EMV_CTLS_APPLIDATA_JK_STRUCT {
 1110  unsigned char IncludedData[8];
 1111  unsigned char TermIdent_9F1C[8];
 1112  unsigned char TerminalCountryCode_9F1A[2];
 1113  unsigned char TerminalType_9F35;
 1114  unsigned char TerminalInterchangeProfile_9F53[3];
 1115  unsigned char MerchantCategoryCode_9F15[2];
 1116  char MerchantNameAndLocation_9F4E[40+1];
 1117  unsigned char AcquirerIdentifier_9F01[6];
 1118  unsigned char AppFlowCap_DFAB31[5];
 1119  unsigned char ContactlessFloorLimit_DFAB40[6];
 1120  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1121  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1122  unsigned char TACDefault_DFAB43[5];
 1123  unsigned char TACDenial_DFAB44[5];
 1124  unsigned char TACOnline_DFAB45[5];
 1125  unsigned char RiskManagementThreshold_DFAB46[6];
 1126  unsigned char RiskManagementTargetPercentage_DFAB47;
 1127  unsigned char RiskManagementMaximumTargetPercentage_DFAB48;
 1128  unsigned char CombinationOptions_DFAB4B[2];
 1129  unsigned char RemovalTimeout_DFAB4C[2];
 1130  unsigned char ContactlessTransactionLimit_ODCVM_DFAB5B[6];
 1131 } EMV_CTLS_APPLIDATA_JK_TYPE;
 1132 
 1137  /* Byte 1 */
 1138 #define INPUT_CTLS_APL_JK_9F1C_0 0x01 
 1139 #define INPUT_CTLS_APL_JK_9F1A_0 0x02 
 1140 #define INPUT_CTLS_APL_JK_9F35_0 0x04 
 1141 #define INPUT_CTLS_APL_JK_9F53_0 0x08 
 1142 #define INPUT_CTLS_APL_JK_9F15_0 0x10 
 1143 #define INPUT_CTLS_APL_JK_9F4E_0 0x20 
 1144 #define INPUT_CTLS_APL_JK_9F01_0 0x40 
 1145 #define INPUT_CTLS_APL_JK_DFAB31_0 0x80 
 1146  /* Byte 2 */
 1147 #define INPUT_CTLS_APL_JK_DFAB40_1 0x01 
 1148 #define INPUT_CTLS_APL_JK_DFAB41_1 0x02 
 1149 #define INPUT_CTLS_APL_JK_DFAB42_1 0x04 
 1150 #define INPUT_CTLS_APL_JK_DFAB43_1 0x08 
 1151 #define INPUT_CTLS_APL_JK_DFAB44_1 0x10 
 1152 #define INPUT_CTLS_APL_JK_DFAB45_1 0x20 
 1153 #define INPUT_CTLS_APL_JK_DFAB46_1 0x40 
 1154 #define INPUT_CTLS_APL_JK_DFAB47_1 0x80 
 1155  /* Byte 3 */
 1156 #define INPUT_CTLS_APL_JK_DFAB48_2 0x01 
 1157 #define INPUT_CTLS_APL_JK_DFAB4B_2 0x02 
 1158 #define INPUT_CTLS_APL_JK_DFAB4C_2 0x04 
 1159 #define INPUT_CTLS_APL_JK_DFAB5B_2 0x08 
 1160 
 1162 
 1164 // Discover //
 1166 
 1170 typedef struct EMV_CTLS_APPLIDATA_DK_STRUCT {
 1171  unsigned char IncludedData[8];
 1172  unsigned char TermIdent_9F1C[8];
 1173  unsigned char TerminalCountryCode_9F1A[2];
 1174  unsigned char TerminalType_9F35;
 1175  unsigned char TerminalTransactionQualifier_9F66[4];
 1176  unsigned char TerminalCapabilities_9F33[3];
 1177  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1178  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1179  unsigned char MerchantCategoryCode_9F15[2];
 1180  unsigned char TecSupport_DFAB30;
 1181  unsigned char AppFlowCap_DFAB31[5];
 1182  unsigned char ContactlessFloorLimit_DFAB40[6];
 1183  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1184  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1185  EMV_CTLS_DATA_TYPE DataContainerReadIds_DFAB58;
 1186  EMV_CTLS_DATA_TYPE DataContainerReadRanges_DFAB59;
 1187 } EMV_CTLS_APPLIDATA_DK_TYPE;
 1192  /* Byte 1 */
 1193 #define INPUT_CTLS_APL_DK_9F1C_0 0x01 
 1194 #define INPUT_CTLS_APL_DK_9F1A_0 0x02 
 1195 #define INPUT_CTLS_APL_DK_9F35_0 0x04 
 1196 #define INPUT_CTLS_APL_DK_9F66_0 0x08 
 1197 #define INPUT_CTLS_APL_DK_9F33_0 0x10 
 1198 #define INPUT_CTLS_APL_DK_9F40_0 0x20 
 1199 #define INPUT_CTLS_APL_DK_9F09_0 0x40 
 1200 #define INPUT_CTLS_APL_DK_9F15_0 0x80 
 1201  /* Byte 2 */
 1202 #define INPUT_CTLS_APL_DK_DFAB30_1 0x01 
 1203 #define INPUT_CTLS_APL_DK_DFAB31_1 0x02 
 1204 #define INPUT_CTLS_APL_DK_DFAB40_1 0x04 
 1205 #define INPUT_CTLS_APL_DK_DFAB41_1 0x08 
 1206 #define INPUT_CTLS_APL_DK_DFAB42_1 0x10 
 1207 #define INPUT_CTLS_APL_DK_DFAB58_1 0x20 
 1208 #define INPUT_CTLS_APL_DK_DFAB59_1 0x40 
 1209 
 1211 
 1213 // Interac //
 1215 
 1219 typedef struct EMV_CTLS_APPLIDATA_IK_STRUCT {
 1220  unsigned char IncludedData[8];
 1221  unsigned char TermIdent_9F1C[8];
 1222  unsigned char TerminalCountryCode_9F1A[2];
 1223  unsigned char TerminalType_9F35;
 1224  unsigned char TerminalCapabilities_9F33[3];
 1225  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1226  unsigned char ContactlessFloorLimit_9F5F[6];
 1227  unsigned char MerchantTypeIndicator_9F58;
 1228  unsigned char TerminalTransactionInformation_9F59[3];
 1229  unsigned char TerminalTransactionType_9F5A;
 1230  unsigned char TerminalOptionStatus_9F5E[2];
 1231  unsigned char ReceiptRequiredLimit_9F5D[6];
 1232  unsigned char TryAgainLimit_DF6D;
 1233  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1234  unsigned char MerchantCategoryCode_9F15[2];
 1235  char MerchantIdentifier_9F16[15+1];
 1236  char MerchantNameAndLocation_9F4E[40+1];
 1237  unsigned char AcquirerIdentifier_9F01[6];
 1238  unsigned char AppFlowCap_DFAB31[5];
 1239  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1240  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1241  unsigned char TACDefault_DFAB43[5];
 1242  unsigned char TACDenial_DFAB44[5];
 1243  unsigned char TACOnline_DFAB45[5];
 1244  unsigned char RiskManagementThreshold_DFAB46[6];
 1245  unsigned char RiskManagementTargetPercentage_DFAB47;
 1246  unsigned char RiskManagementMaximumTargetPercentage_DFAB48;
 1247 } EMV_CTLS_APPLIDATA_IK_TYPE;
 1248 
 1253  /* Byte 1 */
 1254 #define INPUT_CTLS_APL_IK_9F1C_0 0x01 
 1255 #define INPUT_CTLS_APL_IK_9F1A_0 0x02 
 1256 #define INPUT_CTLS_APL_IK_9F35_0 0x04 
 1257 #define INPUT_CTLS_APL_IK_9F33_0 0x08 
 1258 #define INPUT_CTLS_APL_IK_9F40_0 0x10 
 1259 #define INPUT_CTLS_APL_IK_9F5F_0 0x20 
 1260 #define INPUT_CTLS_APL_IK_9F58_0 0x40 
 1261 #define INPUT_CTLS_APL_IK_9F59_0 0x80 
 1262  /* Byte 2 */
 1263 #define INPUT_CTLS_APL_IK_9F5A_1 0x01 
 1264 #define INPUT_CTLS_APL_IK_9F5E_1 0x02 
 1265 #define INPUT_CTLS_APL_IK_9F5D_1 0x04 
 1266 #define INPUT_CTLS_APL_IK_DF6D_1 0x08 
 1267 #define INPUT_CTLS_APL_IK_9F09_1 0x10 
 1268 #define INPUT_CTLS_APL_IK_9F15_1 0x20 
 1269 #define INPUT_CTLS_APL_IK_9F16_1 0x40 
 1270 #define INPUT_CTLS_APL_IK_9F4E_1 0x80 
 1271  /* Byte 3 */
 1272 #define INPUT_CTLS_APL_IK_9F01_2 0x01 
 1273 #define INPUT_CTLS_APL_IK_DFAB31_2 0x02 
 1274 #define INPUT_CTLS_APL_IK_DFAB41_2 0x04 
 1275 #define INPUT_CTLS_APL_IK_DFAB42_2 0x08 
 1276 #define INPUT_CTLS_APL_IK_DFAB43_2 0x10 
 1277 #define INPUT_CTLS_APL_IK_DFAB44_2 0x20 
 1278 #define INPUT_CTLS_APL_IK_DFAB45_2 0x40 
 1279 #define INPUT_CTLS_APL_IK_DFAB46_2 0x80 
 1280  /* Byte 4 */
 1281 #define INPUT_CTLS_APL_IK_DFAB47_3 0x01 
 1282 #define INPUT_CTLS_APL_IK_DFAB48_3 0x02 
 1283 
 1285 
 1287 // EPAL //
 1289 
 1293 typedef struct EMV_CTLS_APPLIDATA_EK_STRUCT {
 1294  unsigned char IncludedData[8];
 1295  unsigned char TermIdent_9F1C[8];
 1296  unsigned char TerminalCountryCode_9F1A[2];
 1297  unsigned char TerminalType_9F35;
 1298  unsigned char TerminalCapabilities_9F33[3];
 1299  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1300  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1301  unsigned char MerchantCategoryCode_9F15[2];
 1302  char MerchantIdentifier_9F16[15+1];
 1303  char MerchantNameAndLocation_9F4E[40+1];
 1304  unsigned char AcquirerIdentifier_9F01[6];
 1305  unsigned char TerminalTransactionQualifier_9F66[4];
 1306  unsigned char AppFlowCap_DFAB31[5];
 1307  unsigned char ContactlessFloorLimit_DFAB40[6];
 1308  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1309  unsigned char TACDefault_DFAB43[5];
 1310  unsigned char TACDenial_DFAB44[5];
 1311  unsigned char TACOnline_DFAB45[5];
 1312  unsigned char CtlsTransactionLimitCash_DFAB4A[6];
 1313 } EMV_CTLS_APPLIDATA_EK_TYPE;
 1314 
 1319  /* Byte 1 */
 1320 #define INPUT_CTLS_APL_EK_9F1C_0 0x01 
 1321 #define INPUT_CTLS_APL_EK_9F1A_0 0x02 
 1322 #define INPUT_CTLS_APL_EK_9F35_0 0x04 
 1323 #define INPUT_CTLS_APL_EK_9F33_0 0x08 
 1324 #define INPUT_CTLS_APL_EK_9F40_0 0x10 
 1325 #define INPUT_CTLS_APL_EK_9F09_0 0x20 
 1326 #define INPUT_CTLS_APL_EK_9F15_0 0x40 
 1327 #define INPUT_CTLS_APL_EK_9F16_0 0x80 
 1328  /* Byte 2 */
 1329 #define INPUT_CTLS_APL_EK_9F4E_1 0x01 
 1330 #define INPUT_CTLS_APL_EK_9F01_1 0x02 
 1331 #define INPUT_CTLS_APL_EK_DFAB31_1 0x04 
 1332 #define INPUT_CTLS_APL_EK_DFAB40_1 0x08 
 1333 #define INPUT_CTLS_APL_EK_DFAB41_1 0x10 
 1334 #define INPUT_CTLS_APL_EK_DFAB43_1 0x20 
 1335 #define INPUT_CTLS_APL_EK_DFAB44_1 0x40 
 1336 #define INPUT_CTLS_APL_EK_DFAB45_1 0x80 
 1337  /* Byte 3 */
 1338 #define INPUT_CTLS_APL_EK_DFAB4A_2 0x01 
 1339 #define INPUT_CTLS_APL_EK_9F66_2 0x02 
 1340 
 1342 
 1344 // China Union PAY - qPBOC //
 1346 
 1350 typedef struct EMV_CTLS_APPLIDATA_CK_STRUCT {
 1351  unsigned char IncludedData[8];
 1352  unsigned char TermIdent_9F1C[8];
 1353  unsigned char TerminalCountryCode_9F1A[2];
 1354  unsigned char TerminalType_9F35;
 1355  unsigned char TerminalTransactionQualifier_9F66[4];
 1356  unsigned char TerminalCapabilities_9F33[3];
 1357  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1358  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1359  unsigned char MerchantCategoryCode_9F15[2];
 1360  char MerchantIdentifier_9F16[15+1];
 1361  char MerchantNameAndLocation_9F4E[40+1];
 1362  unsigned char TecSupport_DFAB30;
 1363  unsigned char AppFlowCap_DFAB31[5];
 1364  unsigned char ContactlessFloorLimit_DFAB40[6];
 1365  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1366  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1367 } EMV_CTLS_APPLIDATA_CK_TYPE;
 1368 
 1373  /* Byte 1 */
 1374 #define INPUT_CTLS_APL_CK_9F1C_0 0x01 
 1375 #define INPUT_CTLS_APL_CK_9F1A_0 0x02 
 1376 #define INPUT_CTLS_APL_CK_9F35_0 0x04 
 1377 #define INPUT_CTLS_APL_CK_9F66_0 0x08 
 1378 #define INPUT_CTLS_APL_CK_9F33_0 0x10 
 1379 #define INPUT_CTLS_APL_CK_9F40_0 0x20 
 1380 #define INPUT_CTLS_APL_CK_9F09_0 0x40 
 1381 #define INPUT_CTLS_APL_CK_9F15_0 0x80 
 1382  /* Byte 2 */
 1383 #define INPUT_CTLS_APL_CK_9F16_1 0x01 
 1384 #define INPUT_CTLS_APL_CK_9F4E_1 0x02 
 1385 #define INPUT_CTLS_APL_CK_DFAB30_1 0x04 
 1386 #define INPUT_CTLS_APL_CK_DFAB31_1 0x08 
 1387 #define INPUT_CTLS_APL_CK_DFAB40_1 0x10 
 1388 #define INPUT_CTLS_APL_CK_DFAB41_1 0x20 
 1389 #define INPUT_CTLS_APL_CK_DFAB42_1 0x40 
 1390 
 1392 
 1394 // Gemalto Pure //
 1396 
 1400 typedef struct EMV_CTLS_APPLIDATA_GK_STRUCT {
 1401  unsigned char IncludedData[8];
 1402  unsigned char TermIdent_9F1C[8];
 1403  unsigned char TerminalCountryCode_9F1A[2];
 1404  unsigned char TerminalType_9F35;
 1405  unsigned char TerminalCapabilities_9F33[3];
 1406  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1407  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1408  unsigned char MerchantCategoryCode_9F15[2];
 1409  char MerchantIdentifier_9F16[15+1];
 1410  char MerchantNameAndLocation_9F4E[40+1];
 1411  unsigned char AcquirerIdentifier_9F01[6];
 1412  unsigned char AppFlowCap_DFAB31[5];
 1413  unsigned char ContactlessFloorLimit_DFAB40[6];
 1414  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1415  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1416  unsigned char TACDefault_DFAB43[5];
 1417  unsigned char TACDenial_DFAB44[5];
 1418  unsigned char TACOnline_DFAB45[5];
 1419  unsigned char CtlsAppKernelCap_DFAB4F[5];
 1420  EMV_CTLS_DATA_TYPE MTOL_DFAB50;
 1421  EMV_CTLS_DATA_TYPE DefaultDDOL_DFAB51;
 1422  EMV_CTLS_DATA_TYPE TerminalTransactionData_9F76;
 1423  unsigned char AppliAuthTransType_DFAB5A;
 1424 } EMV_CTLS_APPLIDATA_GK_TYPE;
 1425 
 1430  /* Byte 1 */
 1431 #define INPUT_CTLS_APL_GK_9F1C_0 0x01 
 1432 #define INPUT_CTLS_APL_GK_9F1A_0 0x02 
 1433 #define INPUT_CTLS_APL_GK_9F35_0 0x04 
 1434 #define INPUT_CTLS_APL_GK_9F33_0 0x08 
 1435 #define INPUT_CTLS_APL_GK_9F40_0 0x10 
 1436 #define INPUT_CTLS_APL_GK_9F09_0 0x20 
 1437 #define INPUT_CTLS_APL_GK_9F15_0 0x40 
 1438 #define INPUT_CTLS_APL_GK_9F16_0 0x80 
 1439  /* Byte 2 */
 1440 #define INPUT_CTLS_APL_GK_9F4E_1 0x01 
 1441 #define INPUT_CTLS_APL_GK_9F01_1 0x02 
 1442 #define INPUT_CTLS_APL_GK_DFAB31_1 0x04 
 1443 #define INPUT_CTLS_APL_GK_DFAB40_1 0x08 
 1444 #define INPUT_CTLS_APL_GK_DFAB41_1 0x10 
 1445 #define INPUT_CTLS_APL_GK_DFAB42_1 0x20 
 1446 #define INPUT_CTLS_APL_GK_DFAB43_1 0x40 
 1447 #define INPUT_CTLS_APL_GK_DFAB44_1 0x80 
 1448  /* Byte 3 */
 1449 #define INPUT_CTLS_APL_GK_DFAB45_2 0x01 
 1450 #define INPUT_CTLS_APL_GK_DFAB4F_2 0x02 
 1451 #define INPUT_CTLS_APL_GK_DFAB50_2 0x04 
 1452 #define INPUT_CTLS_APL_GK_DFAB51_2 0x08 
 1453 #define INPUT_CTLS_APL_GK_9F76_2 0x10 
 1454 #define INPUT_CTLS_APL_GK_DFAB5A_2 0x20 
 1455 
 1457 
 1459 // RuPay //
 1461 
 1465 typedef struct EMV_CTLS_APPLIDATA_RK_STRUCT {
 1466  unsigned char IncludedData[8];
 1467  unsigned char TermIdent_9F1C[8];
 1468  unsigned char TerminalCountryCode_9F1A[2];
 1469  unsigned char TerminalType_9F35;
 1470  unsigned char TerminalCapabilities_9F33[3];
 1471  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1472  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1473  unsigned char MerchantCategoryCode_9F15[2];
 1474  unsigned char AppFlowCap_DFAB31[5];
 1475  unsigned char ContactlessFloorLimit_DFAB40[6];
 1476  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1477  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1478  unsigned char TACDefault_DFAB43[5];
 1479  unsigned char TACDenial_DFAB44[5];
 1480  unsigned char TACOnline_DFAB45[5];
 1481  unsigned char RiskManagementThreshold_DFAB46[6];
 1482  unsigned char RiskManagementTargetPercentage_DFAB47;
 1483  unsigned char RiskManagementMaximumTargetPercentage_DFAB48;
 1484  unsigned char CallbackTimeout_DFAB4D[2];
 1485  unsigned char TornTransactionInterval_DFAB4E[2];
 1486  unsigned char AdditionalTerminalCapabilitiesExt_DF3A[5];
 1487 } EMV_CTLS_APPLIDATA_RK_TYPE;
 1488 
 1493  /* Byte 1 */
 1494 #define INPUT_CTLS_APL_RK_9F1C_0 0x01 
 1495 #define INPUT_CTLS_APL_RK_9F1A_0 0x02 
 1496 #define INPUT_CTLS_APL_RK_9F35_0 0x04 
 1497 #define INPUT_CTLS_APL_RK_9F33_0 0x08 
 1498 #define INPUT_CTLS_APL_RK_9F40_0 0x10 
 1499 #define INPUT_CTLS_APL_RK_9F09_0 0x20 
 1500 #define INPUT_CTLS_APL_RK_9F15_0 0x40 
 1501 #define INPUT_CTLS_APL_RK_DFAB31_0 0x80 
 1502  /* Byte 2 */
 1503 #define INPUT_CTLS_APL_RK_DFAB40_1 0x01 
 1504 #define INPUT_CTLS_APL_RK_DFAB41_1 0x02 
 1505 #define INPUT_CTLS_APL_RK_DFAB42_1 0x04 
 1506 #define INPUT_CTLS_APL_RK_DFAB43_1 0x08 
 1507 #define INPUT_CTLS_APL_RK_DFAB44_1 0x10 
 1508 #define INPUT_CTLS_APL_RK_DFAB45_1 0x20 
 1509 #define INPUT_CTLS_APL_RK_DFAB46_1 0x40 
 1510 #define INPUT_CTLS_APL_RK_DFAB47_1 0x80 
 1511 /* Byte 3 */
 1512 #define INPUT_CTLS_APL_RK_DFAB48_2 0x01 
 1513 #define INPUT_CTLS_APL_RK_DFAB4D_2 0x02 
 1514 #define INPUT_CTLS_APL_RK_DFAB4E_2 0x04 
 1515 #define INPUT_CTLS_APL_RK_DF3A_2 0x08 
 1516 
 1518 
 1522 
 1526 typedef struct EMV_CTLS_APPLIDATA_SK_STRUCT {
 1527  unsigned char IncludedData[8];
 1528  unsigned char TermIdent_9F1C[8];
 1529  unsigned char TerminalCountryCode_9F1A[2];
 1530  unsigned char TerminalType_9F35;
 1531  unsigned char TerminalCapabilities_9F33[3];
 1532  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1533  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1534  unsigned char MerchantCategoryCode_9F15[2];
 1535  char MerchantNameAndLocation_9F4E[40+1];
 1536  unsigned char AppFlowCap_DFAB31[5];
 1537  unsigned char ContactlessFloorLimit_DFAB40[6];
 1538  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1539  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1540  unsigned char TACDefault_DFAB43[5];
 1541  unsigned char TACDenial_DFAB44[5];
 1542  unsigned char TACOnline_DFAB45[5];
 1543  unsigned char TermCap_aboveCVMLimit_DFAB53[3];
 1544  unsigned char TermCap_belowCVMLimit_DFAB54[3];
 1545 } EMV_CTLS_APPLIDATA_SK_TYPE;
 1546 
 1551  /* Byte 1 */
 1552 #define INPUT_CTLS_APL_SK_9F1C_0 0x01 
 1553 #define INPUT_CTLS_APL_SK_9F1A_0 0x02 
 1554 #define INPUT_CTLS_APL_SK_9F35_0 0x04 
 1555 #define INPUT_CTLS_APL_SK_9F33_0 0x08 
 1556 #define INPUT_CTLS_APL_SK_9F40_0 0x10 
 1557 #define INPUT_CTLS_APL_SK_9F09_0 0x20 
 1558 #define INPUT_CTLS_APL_SK_9F15_0 0x40 
 1559 #define INPUT_CTLS_APL_SK_9F4E_0 0x80 
 1560  /* Byte 2 */
 1561 #define INPUT_CTLS_APL_SK_DFAB31_1 0x01 
 1562 #define INPUT_CTLS_APL_SK_DFAB40_1 0x02 
 1563 #define INPUT_CTLS_APL_SK_DFAB41_1 0x04 
 1564 #define INPUT_CTLS_APL_SK_DFAB42_1 0x08 
 1565 #define INPUT_CTLS_APL_SK_DFAB43_1 0x10 
 1566 #define INPUT_CTLS_APL_SK_DFAB44_1 0x20 
 1567 #define INPUT_CTLS_APL_SK_DFAB45_1 0x40 
 1568 #define INPUT_CTLS_APL_SK_DFAB53_1 0x80 
 1569  /* Byte 3 */
 1570 #define INPUT_CTLS_APL_SK_DFAB54_2 0x01 
 1571 
 1573 
 1575 // PagoBancomat //
 1577 
 1581 typedef struct EMV_CTLS_APPLIDATA_PB_STRUCT {
 1582  unsigned char IncludedData[8];
 1583  unsigned char TermIdent_9F1C[8];
 1584  unsigned char TerminalCountryCode_9F1A[2];
 1586  unsigned char TerminalType_9F35;
 1588  unsigned char TerminalTransactionQualifier_9F66[4];
 1590  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1592  char MerchantNameAndLocation_9F4E[40+1];
 1594  unsigned char AppFlowCap_DFAB31[5];
 1596  unsigned char ContactlessFloorLimit_DFAB40[6];
 1598  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1600  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1603  unsigned char TACDefault_DFAB43[5];
 1606  unsigned char TACDenial_DFAB44[5];
 1608  unsigned char TACOnline_DFAB45[5];
 1610  unsigned char RiskManagementThreshold_DFAB46[6];
 1612  unsigned char RiskManagementTargetPercentage_DFAB47;
 1614  unsigned char RiskManagementMaximumTargetPercentage_DFAB48;
 1617  unsigned char TACSwitchInterface_DFAB55[5];
 1619  unsigned char IACSwitchInterface_DFAB56[5];
 1622 } EMV_CTLS_APPLIDATA_PB_TYPE;
 1625 
 1630  /* Byte 1 */
 1631 #define INPUT_CTLS_APL_PB_9F1C_0 0x01 
 1632 #define INPUT_CTLS_APL_PB_9F1A_0 0x02 
 1633 #define INPUT_CTLS_APL_PB_9F35_0 0x04 
 1634 #define INPUT_CTLS_APL_PB_9F66_0 0x08 
 1635 #define INPUT_CTLS_APL_PB_9F09_0 0x10 
 1636 #define INPUT_CTLS_APL_PB_9F4E_0 0x20 
 1637 #define INPUT_CTLS_APL_PB_DFAB31_0 0x40 
 1638 #define INPUT_CTLS_APL_PB_DFAB40_0 0x80 
 1639 /* Byte 2 */
 1640 #define INPUT_CTLS_APL_PB_DFAB41_1 0x01 
 1641 #define INPUT_CTLS_APL_PB_DFAB42_1 0x02 
 1642 #define INPUT_CTLS_APL_PB_DFAB43_1 0x04 
 1643 #define INPUT_CTLS_APL_PB_DFAB44_1 0x08 
 1644 #define INPUT_CTLS_APL_PB_DFAB45_1 0x10 
 1645 #define INPUT_CTLS_APL_PB_DFAB46_1 0x20 
 1646 #define INPUT_CTLS_APL_PB_DFAB47_1 0x40 
 1647 #define INPUT_CTLS_APL_PB_DFAB48_1 0x80 
 1648 /* Byte 3 */
 1649 #define INPUT_CTLS_APL_PB_DFAB55_2 0x01 
 1650 #define INPUT_CTLS_APL_PB_DFAB56_2 0x02 
 1651 
 1653 // WISE //
 1656 
 1670 typedef struct EMV_CTLS_APPLIDATA_WK_STRUCT {
 1671  unsigned char IncludedData[8];
 1672  unsigned char AcquirerIdentifier_9F01[6];
 1673  unsigned char TermIdent_9F1C[8];
 1674  unsigned char TerminalCountryCode_9F1A[2];
 1675  unsigned char TerminalType_9F35;
 1676  unsigned char TerminalCapabilities_9F33[3];
 1677  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1678  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1679  unsigned char MerchantCategoryCode_9F15[2];
 1680  char MerchantIdentifier_9F16[15+1];
 1681  char MerchantNameAndLocation_9F4E[40+1];
 1682  unsigned char TecSupport_DFAB30;
 1683  unsigned char AppFlowCap_DFAB31[5];
 1684  unsigned char ContactlessFloorLimit_DFAB40[6];
 1685  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1686  unsigned char ContactlessCVMRequiredLimit_DFAB42[6];
 1687 } EMV_CTLS_APPLIDATA_WK_TYPE;
 1688 
 1693 #define INPUT_CTLS_APL_WK_9F01_0 0x01 
 1694 #define INPUT_CTLS_APL_WK_9F1C_0 0x02 
 1695 #define INPUT_CTLS_APL_WK_9F1A_0 0x04 
 1696 #define INPUT_CTLS_APL_WK_9F35_0 0x08 
 1697 #define INPUT_CTLS_APL_WK_9F33_0 0x10 
 1698 #define INPUT_CTLS_APL_WK_9F40_0 0x20 
 1699 #define INPUT_CTLS_APL_WK_9F09_0 0x40 
 1700 #define INPUT_CTLS_APL_WK_9F15_0 0x80 
 1701 
 1702 #define INPUT_CTLS_APL_WK_9F16_1 0x01 
 1703 #define INPUT_CTLS_APL_WK_9F4E_1 0x02 
 1704 #define INPUT_CTLS_APL_WK_DFAB30_1 0x04 
 1705 #define INPUT_CTLS_APL_WK_DFAB31_1 0x08 
 1706 #define INPUT_CTLS_APL_WK_DFAB40_1 0x10 
 1707 #define INPUT_CTLS_APL_WK_DFAB41_1 0x20 
 1708 #define INPUT_CTLS_APL_WK_DFAB42_1 0x40 
 1709 
 1710 
 1713 // CPACE //
 1715 
 1718 typedef struct EMV_CTLS_APPLIDATA_BK_STRUCT {
 1719  unsigned char IncludedData[8];
 1720  unsigned char TermIdent_9F1C[8];
 1721  unsigned char TerminalCountryCode_9F1A[2];
 1722  unsigned char TerminalType_9F35;
 1723  unsigned char TerminalCapabilities_9F33[3];
 1724  unsigned char AdditionalTerminalCapabilities_9F40[5];
 1725  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1726  unsigned char MerchantCategoryCode_9F15[2];
 1727  char MerchantIdentifier_9F16[15+1];
 1728  char MerchantNameAndLocation_9F4E[40+1];
 1729  unsigned char AcquirerIdentifier_9F01[6];
 1730  unsigned char AppFlowCap_DFAB31[5];
 1731  unsigned char CVM_aboveLimit_DF8118;
 1732  unsigned char CVM_belowLimit_DF8119;
 1733  unsigned char KernelConfiguration_DF811B;
 1734  unsigned char TACDefault_DF8120[5];
 1735  unsigned char TACDenial_DF8121[5];
 1736  unsigned char TACOnline_DF8122[5];
 1737  unsigned char FloorLimit_DF8123[6];
 1738  unsigned char TransactionLimitNoCDCVM_DF8124[6];
 1739  unsigned char TransactionLimitCDCVM_DF8125[6];
 1740  unsigned char CVMRequiredLimit_DF8126[6];
 1741  unsigned char MessageHoldTime_DF812D[3];
 1742  EMV_CTLS_DATA_TYPE CHV_CS_MessageTable_DF8131;
 1743  unsigned char RR_TimeToleranceMin_DF8132[2];
 1744  unsigned char RR_TimeToleranceMax_DF8133[2];
 1745  unsigned char RR_TransmissionTime_CAPDU_DF8134[2];
 1746  unsigned char RR_TransmissionTime_RAPDU_DF8135[2];
 1747  unsigned char RR_MinTimeDifferenceLimit_DF8136[2];
 1748  unsigned char RR_TransTimeMismatchLimit_DF8137;
 1749 } EMV_CTLS_APPLIDATA_BK_TYPE;
 1750 
 1755 #define INPUT_CTLS_APL_BK_9F1C_0 0x01 
 1756 #define INPUT_CTLS_APL_BK_9F1A_0 0x02 
 1757 #define INPUT_CTLS_APL_BK_9F35_0 0x04 
 1758 #define INPUT_CTLS_APL_BK_9F33_0 0x08 
 1759 #define INPUT_CTLS_APL_BK_9F40_0 0x10 
 1760 #define INPUT_CTLS_APL_BK_9F09_0 0x20 
 1761 #define INPUT_CTLS_APL_BK_9F15_0 0x40 
 1762 #define INPUT_CTLS_APL_BK_9F16_0 0x80 
 1763 
 1764 #define INPUT_CTLS_APL_BK_9F4E_1 0x01 
 1765 #define INPUT_CTLS_APL_BK_9F01_1 0x02 
 1766 #define INPUT_CTLS_APL_BK_DFAB31_1 0x04 
 1767 #define INPUT_CTLS_APL_BK_DF8118_1 0x08 
 1768 #define INPUT_CTLS_APL_BK_DF8119_1 0x10 
 1769 #define INPUT_CTLS_APL_BK_DF811B_1 0x20 
 1770 #define INPUT_CTLS_APL_BK_DF8120_1 0x40 
 1771 #define INPUT_CTLS_APL_BK_DF8121_1 0x80 
 1772 
 1773 #define INPUT_CTLS_APL_BK_DF8122_2 0x01 
 1774 #define INPUT_CTLS_APL_BK_DF8123_2 0x02 
 1775 #define INPUT_CTLS_APL_BK_DF8124_2 0x04 
 1776 #define INPUT_CTLS_APL_BK_DF8125_2 0x08 
 1777 #define INPUT_CTLS_APL_BK_DF8126_2 0x10 
 1778 #define INPUT_CTLS_APL_BK_DF812D_2 0x20 
 1779 #define INPUT_CTLS_APL_BK_DF8131_2 0x40 
 1780 #define INPUT_CTLS_APL_BK_DF8132_2 0x80 
 1781 
 1782 #define INPUT_CTLS_APL_BK_DF8133_3 0x01 
 1783 #define INPUT_CTLS_APL_BK_DF8134_3 0x02 
 1784 #define INPUT_CTLS_APL_BK_DF8135_3 0x04 
 1785 #define INPUT_CTLS_APL_BK_DF8136_3 0x08 
 1786 #define INPUT_CTLS_APL_BK_DF8137_3 0x10 
 1787 
 1788 
 1791 // MIR //
 1793 
 1797 typedef struct EMV_CTLS_APPLIDATA_MR_STRUCT {
 1798  unsigned char IncludedData[8];
 1799  unsigned char TermIdent_9F1C[8];
 1800  unsigned char TerminalCountryCode_9F1A[2];
 1801  unsigned char TerminalType_9F35;
 1802  unsigned char VersionNumber_9F09[2*EMV_CTLS_MAX_APP_VERS];
 1803  unsigned char MerchantCategoryCode_9F15[2];
 1804  char MerchantNameAndLocation_9F4E[40+1];
 1805  unsigned char AcquirerIdentifier_9F01[6];
 1806  unsigned char TerminalFloorLimit_DF51[6];
 1807  unsigned char TerminalNoCVMLimit_DF52[6];
 1808  unsigned char TerminalContactlessLimitNonCDCVM_DF53[6];
 1809  unsigned char TerminalContactlessLimitCDCVM_DF54[6];
 1810  unsigned char TerminalTPMCapabilities_DF55[2];
 1811  unsigned char TransactionRecoveryLimit_DF56;
 1812  unsigned char AppFlowCap_DFAB31[5];
 1813  unsigned char TACDefault_DFAB43[5];
 1814  unsigned char TACDenial_DFAB44[5];
 1815  unsigned char TACOnline_DFAB45[5];
 1816  EMV_CTLS_DATA_TYPE DataExchangeTagList_DFAB57;
 1817 } EMV_CTLS_APPLIDATA_MR_TYPE;
 1818 
 1823  /* Byte 1 */
 1824 #define INPUT_CTLS_APL_MR_9F1C_0 0x01 
 1825 #define INPUT_CTLS_APL_MR_9F1A_0 0x02 
 1826 #define INPUT_CTLS_APL_MR_9F35_0 0x04 
 1827 #define INPUT_CTLS_APL_MR_9F09_0 0x08 
 1828 #define INPUT_CTLS_APL_MR_9F15_0 0x10 
 1829 #define INPUT_CTLS_APL_MR_9F4E_0 0x20 
 1830 #define INPUT_CTLS_APL_MR_9F01_0 0x40 
 1831 #define INPUT_CTLS_APL_MR_DF51_0 0x80 
 1832 /* Byte 2 */
 1833 #define INPUT_CTLS_APL_MR_DF52_1 0x01 
 1834 #define INPUT_CTLS_APL_MR_DF53_1 0x02 
 1835 #define INPUT_CTLS_APL_MR_DF54_1 0x04 
 1836 #define INPUT_CTLS_APL_MR_DF55_1 0x08 
 1837 #define INPUT_CTLS_APL_MR_DF56_1 0x10 
 1838 #define INPUT_CTLS_APL_MR_DFAB31_1 0x20 
 1839 #define INPUT_CTLS_APL_MR_DFAB43_1 0x40 
 1840 #define INPUT_CTLS_APL_MR_DFAB44_1 0x80 
 1841 /* Byte 3 */
 1842 #define INPUT_CTLS_APL_MR_DFAB45_2 0x01 
 1843 #define INPUT_CTLS_APL_MR_DFAB57_2 0x02 
 1844 
 1846 
 1848 // Domestic //
 1850 
 1854 typedef struct EMV_CTLS_APPLIDATA_DOM_STRUCT {
 1855  unsigned char IncludedData[8];
 1856  unsigned char AppFlowCap_DFAB31[5];
 1857  unsigned char ContactlessTransactionLimit_DFAB41[6];
 1858  } EMV_CTLS_APPLIDATA_DOM_TYPE;
 1859 
 1864 /* Byte 1 */
 1865 #define INPUT_CTLS_APL_DOM_DFAB31_0 0x01 
 1866 #define INPUT_CTLS_APL_DOM_DFAB41_0 0x02 
 1867 
 1869 
 1874 /* Byte 1 */
 1875 #define EMV_CTLS_FLOW_DOM_EXPLICIT_SELECT 0x01 
 1876 
 1878 // global //
 1881 
 1886 typedef struct EMV_CTLS_APPLIDATA_SCHEME_SPECIFIC_STRUCT {
 1887 
 1888  unsigned char IncludedData[8];
 1889 
 1890  // Global ADK related parameters
 1891  unsigned char ASI_DFAB02;
 1892  unsigned char AppFlowCap_DFAB03[5];
 1895  EMV_CTLS_APPLI_TYPE PriorityApplications_DFAB04[EMV_ADK_MAX_PRIO_APP];
 1897  unsigned char SpecialTRXConfig_DFAB05[8];
 1899  char ChksumEntryPoint_DFAB06[EMV_ADK_CHECKSUM_ASCII_SIZE];
 1901  char ChksumKernel_DFAB07[EMV_ADK_CHECKSUM_ASCII_SIZE];
 1903  unsigned char RetapFieldOff_DFAB08;
 1905 
 1908  // Global kernel related parameters. These are relevant for ADK AND kernel configuration and therefore are handled for each of the kernels (if applicable only)
 1909  EMV_CTLS_DATA_TYPE AdditionalTagsTRM_DFAB20;
 1910  EMV_CTLS_DATA_TYPE AdditionalTagsCRD_DFAB21;
 1914  char DefaultApplicationName_DFAB22[16+1];
 1920  unsigned InternalKernelId_DFAB23;
 1923 
 1928  union {
 1929  EMV_CTLS_APPLIDATA_MK_TYPE MK;
 1930  EMV_CTLS_APPLIDATA_GC_TYPE GC;
 1931  EMV_CTLS_APPLIDATA_VK_TYPE VK;
 1932  EMV_CTLS_APPLIDATA_AK_TYPE AK;
 1933  EMV_CTLS_APPLIDATA_JK_TYPE JK;
 1934  EMV_CTLS_APPLIDATA_DK_TYPE DK;
 1935  EMV_CTLS_APPLIDATA_IK_TYPE IK;
 1936  EMV_CTLS_APPLIDATA_EK_TYPE EK;
 1937  EMV_CTLS_APPLIDATA_CK_TYPE CK;
 1938  EMV_CTLS_APPLIDATA_GK_TYPE GK;
 1939  EMV_CTLS_APPLIDATA_RK_TYPE RK;
 1940  EMV_CTLS_APPLIDATA_WK_TYPE WK;
 1941  EMV_CTLS_APPLIDATA_BK_TYPE BK;
 1942  EMV_CTLS_APPLIDATA_SK_TYPE SK;
 1943  EMV_CTLS_APPLIDATA_PB_TYPE PB;
 1944  EMV_CTLS_APPLIDATA_MR_TYPE MR;
 1945  EMV_CTLS_APPLIDATA_DOM_TYPE DOM;
 1946  } Scheme;
 1947 
 1948 } EMV_CTLS_APPLIDATA_SCHEME_SPECIFIC_TYPE;
 1949 
 1954  /* Byte 1 */
 1955 #define INPUT_CTLS_APL_GLOB_DFAB02_0 0x01 
 1956 #define INPUT_CTLS_APL_GLOB_DFAB03_0 0x02 
 1957 #define INPUT_CTLS_APL_GLOB_DFAB04_0 0x04 
 1958 #define INPUT_CTLS_APL_GLOB_DFAB05_0 0x08 
 1959 #define INPUT_CTLS_APL_GLOB_DFAB06_0 0x10 
 1960 #define INPUT_CTLS_APL_GLOB_DFAB07_0 0x20 
 1961 #define INPUT_CTLS_APL_GLOB_DFAB08_0 0x40 
 1962  /* Byte 2 */
 1963 #define INPUT_CTLS_APL_GLOB_DFAB20_1 0x01 
 1964 #define INPUT_CTLS_APL_GLOB_DFAB21_1 0x02 
 1965 #define INPUT_CTLS_APL_GLOB_DFAB22_1 0x04 
 1966 #define INPUT_CTLS_APL_GLOB_DFAB23_1 0x08 
 1967 
 1969 // ========================================================================================================
 1970 // === EMV TRANSACTION DATA ===
 1971 // ========================================================================================================
 1972 
 1977 typedef struct EMV_CTLS_PAYMENT_STRUCT // EMV_CTLS_PAYMENT_TYPE
 1978 {
 1979  unsigned char Amount[6];
 1980  unsigned char CurrencyTrans[2];
 1981  unsigned char ExpTrans;
 1982  unsigned char Date[3];
 1983  unsigned char Time[3];
 1984  unsigned char TransCount[4];
 1985  unsigned char Cashback_Amount[6];
 1986  unsigned char Force_Online;
 1988  unsigned char Online_Switch;
 1989  unsigned char uc_AccountType;
 1990  EMV_CTLS_TAGLIST_TYPE Additional_Result_Tags;
 1992 } EMV_CTLS_PAYMENT_TYPE;
 1993 
 1994 
 1999 typedef struct EMV_CTLS_APPS_SELECT_STRUCT // EMV_CTLS_APPS_SELECT_TYPE
 2000 {
 2001  EMV_CTLS_APPLI_TYPE ExcludeEmvAIDs[3];
 2002  EMV_CTLS_APPLI_KERNEL_TYPE ExcludeCombos[3];
 2003 } EMV_CTLS_APPS_SELECT_TYPE;
 2004 
 2005 
 2006 // ========================================================================================================
 2007 // === APPLICATION SETUP ===
 2008 // ========================================================================================================
 2009 
 2014  // byte 1
 2015 #define CLTRXOP_SUPPRESS_ERRMSGBEEP 0x01 
 2016 #define CLTRXOP_REPEAT_L1 0x02 
 2017 #define CLTRXOP_NO_DOMESTIC_KERNEL 0x04 
 2018 #define CLTRXOP_NO_GLOBAL 0x08 
 2019 #define CLTRXOP_PP_TORNTXN_RESET 0x10 
 2020 #define CLTRXOP_AK_DELAYED_AUTH 0x20 
 2021 
 2022 #define CLTRXOP_REMOVEALL_BUT_EXCLUDED 0x80 
 2023 // byte 2
 2024 #define CLTRXOP_CANDLIST_CALLBACK 0x01 
 2025 #define CLTRXOP_APPSELECTED_CALLBACK 0x02 
 2026 #define CLTRXOP_NO_BUL12 0x04 
 2027 #define CLTRXOP_NO_LONGEST_AID_MATCH 0x10 
 2028 #define CLTRXOP_SPURIOUS_CARD_DETECT 0x20 
 2029 #define CLTRXOP_NO_PAN_RETRIEVE_DEF 0x40 
 2030 #define CLTRXOP_RND_CALLBACK 0x80 
 2032 //byte 3
 2033 #define CLTRXOP_NO_AMOUNT_PRECHECK 0x08 
 2034 #define CLTRXOP_L1_ERROR_CALLBACK 0x10 
 2036 #define CLTRXOP_WEEK_PRIORITY_APPS 0x40 
 2038 //byte 4
 2039 #define CLTRXOP_KEEP_MULTIPLE_KERNEL 0x01 
 2040 #define CLTRXOP_TIP_AMOUNT_ZERO 0x02 
 2041 #define CLTRXOP_SILENT_ON_EMPTY_LIST 0x04 
 2042 #define CLTRXOP_CVM_REQUIRED 0x08 
 2043 #define CLTRXOP_LONG_TAP_TIMER 0x10 
 2044 #define CLTRXOP_SEND_POI_INFORMATION 0x20 
 2047 #define CLTRXOP_BEEP_BY_BUZZER 0x40 
 2048 #define CLTRXOP_BEEP_OS_VOLUME 0x80 
 2049 //byte 5
 2050 #define CLTRXOP_LOGO_LED_AUTO_SWITCH 0x01 
 2051 
 2053 #define EMV_CTLS_TRAN_TYPE_PURE_GETDATA 0x78 
 2058 #define EMV_CTLS_TRAN_TYPE_PURE_PUTDATA 0x79 
 2059 #define EMV_CTLS_TRAN_TYPE_PURE_AUTHENTICATE 0x90 
 2060 
 2064 #define CLTRX_CARDTYPE_ISO 0x01 
 2069 #define CLTRX_CARDTYPE_MIFARE 0x02 
 2070 #define CLTRX_CARDTYPE_OTHER 0x03 
 2071 
 2073 typedef struct EMV_CTLS_START_STRUCT
 2076 {
 2077  unsigned char ServerPollTimeout;
 2078  unsigned char TransType;
 2082  EMV_CTLS_PAYMENT_TYPE TXN_Data;
 2084  EMV_CTLS_APPS_SELECT_TYPE SEL_Data;
 2086  unsigned char TxnOptions[5];
 2087  unsigned char Info_Included_Data[8];
 2088 } EMV_CTLS_START_TYPE;
 2089 
 2090 
 2095 /* Byte 1 */
 2096 #define INPUT_CTLS_SEL_AMOUNT 0x01 
 2097 #define INPUT_CTLS_SEL_AMOUNT_CURRENCY 0x02 
 2098 #define INPUT_CTLS_SEL_CUREXPONENT 0x04 
 2099 #define INPUT_CTLS_SEL_DATE 0x08 
 2100 #define INPUT_CTLS_SEL_TIME 0x10 
 2101 #define INPUT_CTLS_SEL_TTYPE 0x20 
 2102 #define INPUT_CTLS_SEL_EXCLUDE_AID 0x40 
 2103 #define INPUT_CTLS_SEL_FORCE_ONLINE 0x80 
 2104 /* Byte 2 */
 2105 #define INPUT_CTLS_SEL_ONLINE_SWITCH 0x01 
 2106 #define INPUT_CTLS_SEL_TXN_COUNTER 0x02 
 2107 #define INPUT_CTLS_SEL_CB_AMOUNT 0x04 
 2108 #define INPUT_CTLS_SEL_ACCOUNT_TYPE 0x08 
 2109 #define INPUT_CTLS_SEL_TXN_OPTIONS 0x10 
 2110 #define INPUT_CTLS_SEL_POLL_TIMEOUT 0x20 
 2111 #define INPUT_CTLS_SEL_ADD_TAGS 0x80 
 2112 
 2113 // Byte 3, Info_Included_Data[2]
 2114 #define INPUT_CTLS_SEL_EXCLUDE_COMBO 0x01 
 2115 
 2117 /* Byte 1 */
 2122 #define EMV_CTLS_SETUPTRX_RES_CHKSUM_DIFF 0x01 
 2123 
 2125 /* Byte 1 */
 2130 #define OUTPUT_CTLS_SEL_TXN_INFO 0x01 
 2131 
 2133 typedef struct EMV_CTLS_STARTRES_STRUCT
 2136 {
 2137  unsigned char TxnInformation[5];
 2138  unsigned char T_DF61_Info_Received_Data[8];
 2140 } EMV_CTLS_STARTRES_TYPE;
 2141 
 2142 
 2143 
 2144 // ========================================================================================================
 2145 // === TRANSACTION EXECUTION ===
 2146 // ========================================================================================================
 2147 
 2150 typedef struct EMV_CTLS_HOST_STRUCT
 2151 {
 2152  char OnlineResult;
 2153  unsigned char AuthResp[2];
 2157  unsigned char TxnOptions[5];
 2159  unsigned short LenScriptData;
 2160  const unsigned char* ScriptData;
 2161  unsigned char LenAuth;
 2163  const unsigned char* AuthData;
 2164  unsigned char AuthResp_Positive[2];
 2165  unsigned char AuthResp_SwitchInterface[2];
 2168  unsigned char AuthResp_OnlinePIN[2];
 2174  unsigned char amountUpd[EMV_ADK_BCD_AMOUNT_LEN];
 2178  unsigned char amountOthUpd[EMV_ADK_BCD_AMOUNT_LEN];
 2180  unsigned char Info_Included_Data[8];
 2181 } EMV_CTLS_HOST_TYPE;
 2182 
 2183 
 2188 /* Byte 1 */
 2189 #define INPUT_CTLS_ONL_ONLINE_RESP 0x01 
 2190 #define INPUT_CTLS_ONL_AUTH_RESP 0x02 
 2191 #define INPUT_CTLS_ONL_TXN_OPTIONS 0x04 
 2192 #define INPUT_CTLS_ONL_SCRIPT 0x08 
 2193 #define INPUT_CTLS_ONL_AUTHDATA 0x10 
 2194 #define INPUT_CTLS_ONL_ARC_POSITIVE 0x20 
 2195 #define INPUT_CTLS_ONL_ARC_SWITCH_IF 0x40 
 2196 #define INPUT_CTLS_ONL_ARC_ONLINE_PIN 0x80 
 2197 
 2198 #define INPUT_CTLS_ONL_AMOUNT 0x01 
 2199 #define INPUT_CTLS_ONL_AMOUNT_OTH 0x02 
 2200 
 2202 
 2203 #define EMV_ADK_CL_SCRIPTRES_LEN (EMV_ADK_SCRIPT_RESULT_MAX * EMV_ADK_SCRIPT_RESULT_LEN + 6) 
 2204 
 2205 typedef struct EMV_CTLS_CONT_OFFL_STRUCT
 2209 {
 2210  unsigned long options;
 2211  unsigned char Info_Included_Data[8];
 2212 } EMV_CTLS_CONT_OFFL_TYPE;
 2213 
 2214 #define EMV_CTLS_CONT_OFFL_INITIALIZER {0, {0}}
 2215 
 2218 // @brief Contents of the input in EMV_CTLS_CONT_OFFL_STRUCT::Info_Included_Data, EMV_CTLS_ContinueOfflineExt()
 2219 #define INPUT_CTLS_CONT_OFFL_OPTIONS 0x01 
 2220 
 2221 
 2226 #define INPUT_CTLS_CONT_OFFL_OPT_PIN 0x01 
 2227 #define INPUT_CTLS_CONT_OFFL_OPT_PIN_CANCELLED 0x02 
 2228 #define INPUT_CTLS_CONT_OFFL_OPT_PIN_BYPASSED 0x04 
 2229 #define INPUT_CTLS_CONT_OFFL_OPT_PIN_ERROR 0x06 
 2230 
 2232 typedef struct EMV_CTLS_TRANSRES_STRUCT // EMV_CTLS_TRANSRES_TYPE
 2237 {
 2238  unsigned long StatusInfo;
 2239  unsigned char T_9F27_CryptInfo;
 2240  unsigned char T_9F36_ATC[2];
 2241  unsigned char T_9F26_Cryptogramm[8];
 2242  unsigned char T_5A_PAN[10];
 2243  unsigned char T_9F39_POSEntryMode;
 2244  unsigned char T_5F24_AppExpDate[3];
 2245  unsigned char T_9F41_TransCount[4];
 2246  unsigned char T_5F34_PANSequenceNo[1];
 2248  EMV_CTLS_TRACK2_TYPE T_57_DataTrack2;
 2249  EMV_CTLS_ISSDATA_TYPE T_9F10_DataIssuer;
 2250  unsigned char T_9F37_RandomNumber[4];
 2251  unsigned char T_95_TVR[5];
 2252  unsigned char T_9A_Date[3];
 2253  unsigned char T_9F21_Time[3];
 2254  unsigned char T_9C_TransType;
 2255  unsigned char T_5F2A_CurrencyTrans[2];
 2260  unsigned char T_82_AIP[2];
 2261  unsigned char T_9F1A_TermCountryCode[2];
 2262  unsigned char T_9F34_CVM_Res[3];
 2263  unsigned char T_9F33_TermCap[3];
 2264  unsigned char T_9F35_TermTyp;
 2265  unsigned char T_9F1E_IFDSerialNumber[8];
 2266  EMV_CTLS_APPLI_TYPE T_84_DFName;
 2267  unsigned char T_9F09_VerNum[2];
 2268  unsigned char T_9B_TSI[2];
 2269  EMV_CTLS_APPLI_TYPE T_9F06_AID;
 2270  unsigned char Add_TXN_Tags[EMV_ADK_ADD_TAG_SIZE];
 2271  unsigned char T_9F02_TXNAmount[6];
 2272  unsigned char T_9F03_TXNAdditionalAmount[6];
 2273  unsigned char T_9F53_MC_CatCode[1];
 2274  unsigned char AppName[16+1];
 2275  unsigned char T_5F25_AppEffDate[3];
 2277  unsigned char T_5F28_IssCountryCode[2];
 2278  unsigned char T_9F45_DataAuthCode[2];
 2279  EMV_CTLS_ICCRND_TYPE T_9F4C_ICCDynNumber;
 2280  unsigned char TACDenial[5];
 2281  unsigned char TACOnline[5];
 2282  unsigned char TACDefault[5];
 2283  unsigned char T_9F0E_IACDenial[5];
 2284  unsigned char T_9F0F_IACOnline[5];
 2285  unsigned char T_9F0D_IACDefault[5];
 2286  unsigned char T_9F40_AddTermCap[5];
 2287  unsigned char T_9F16_MerchIdent[15];
 2288  EMV_CTLS_CRDNAME_TYPE T_5F20_Cardholder;
 2289  unsigned char T_5F2D_Lang_Pref[8+1];
 2290  unsigned char T_9F08_ICC_Appli_Vers_No[2];
 2291  unsigned char T_5F36_Trx_Currency_Exp;
 2292  unsigned char T_5F30_ServiceCode[2];
 2293  unsigned char T_9F66_CL_TTQ[4];
 2294  EMV_CTLS_TRACK2_TYPE T_DF5D_CL_MAGSTRIPE_T2;
 2295  unsigned char T_9F6C_CL_VISA_CTQ[2];
 2297  unsigned char T_9F5D_CL_VISA_AOSA[EMV_ADK_BCD_AMOUNT_LEN];
 2298  unsigned char T_DF8104_CL_MC_BALANCE[EMV_ADK_BCD_AMOUNT_LEN];
 2299  unsigned char T_DF8105_CL_MC_BALANCE[EMV_ADK_BCD_AMOUNT_LEN];
 2300  unsigned char T_DF64_KernelDebugData[32];
 2301  unsigned char ctlsCardType;
 2302  unsigned char ScriptResults[EMV_ADK_CL_SCRIPTRES_LEN];
 2305  unsigned short ScriptResultsLen;
 2306 
 2307  unsigned char T_DF61_Info_Received_Data[8];
 2308 } EMV_CTLS_TRANSRES_TYPE;
 2309 
 2310 
 2315 /* Byte 1 */
 2316 #define TRX_CTLS_STATUSINFO 0x01 
 2317 #define TRX_CTLS_9F27_CRYPTINFO 0x02 
 2318 #define TRX_CTLS_9F36_ATC 0x04 
 2319 #define TRX_CTLS_9F26_CRYPTOGRAMM 0x08 
 2320 #define TRX_CTLS_5A_PAN 0x10 
 2321 #define TRX_CTLS_9F39_POS_ENTRY_MODE 0x20 
 2322 #define TRX_CTLS_5F24_APPEXPDATE 0x40 
 2323 #define TRX_CTLS_9F41_TRANSCOUNT 0x80 
 2324 
 2325 /* Byte 2 */
 2326 #define TRX_CTLS_5F34_PAN_SEQ_NUMBER 0x01 
 2327 #define TRX_CTLS_57_DATA_TRACK2 0x02 
 2328 #define TRX_CTLS_9F10_DATAISSUER 0x04 
 2329 #define TRX_CTLS_9F37_RANDOM_NUMBER 0x08 
 2330 #define TRX_CTLS_95_TVR 0x10 
 2331 #define TRX_CTLS_9A_DATE 0x20 
 2332 #define TRX_CTLS_9F21_TIME 0x40 
 2333 #define TRX_CTLS_9C_TRANSTYPE 0x80 
 2334 
 2335 /* Byte 3 */
 2336 #define TRX_CTLS_5F2A_TRANS_CURRENCY 0x01 
 2337 #define TRX_CTLS_82_AIP 0x02 
 2338 #define TRX_CTLS_9F1A_TERM_COUNTRY_CODE 0x04 
 2339 #define TRX_CTLS_9F34_CVM_RES 0x08 
 2340 #define TRX_CTLS_9F33_TERMCAP 0x10 
 2341 #define TRX_CTLS_9F35_TERMTYP 0x20 
 2342 #define TRX_CTLS_9F1E_IFDSERIALNUMBER 0x40 
 2343 #define TRX_CTLS_84_DFNAME 0x80 
 2344 
 2345 /* Byte 4 */
 2346 #define TRX_CTLS_9F09_VERNUM 0x01 
 2347 #define TRX_CTLS_9B_TSI 0x02 
 2348 #define TRX_CTLS_9F06_AID 0x04 
 2349 #define TRX_CTLS_ADDITIONAL_TAGS 0x08 
 2350 #define TRX_CTLS_APPNAME 0x10 
 2351 #define TRX_CTLS_5F25_APPEFFDATE 0x20 
 2352 #define TRX_CTLS_5F28_ISSCOUNTRYCODE 0x40 
 2353 #define TRX_CTLS_9F45_DATAAUTHCODE 0x80 
 2354 
 2355 /* Byte 5 */
 2356 #define TRX_CTLS_9F4C_ICCDYNNUMBER 0x01 
 2357 #define TRX_CTLS_TAC_DENIAL 0x02 
 2358 #define TRX_CTLS_TAC_ONLINE 0x04 
 2359 #define TRX_CTLS_TAC_DEFAULT 0x08 
 2360 #define TRX_CTLS_9F0E_IAC_DENIAL 0x10 
 2361 #define TRX_CTLS_9F0F_IAC_ONLINE 0x20 
 2362 #define TRX_CTLS_9F0D_IAC_DEFAULT 0x40 
 2363 #define TRX_CTLS_9F40_TERMCAP 0x80 
 2364 
 2365 /* Byte 6 */
 2366 #define TRX_CTLS_RFU_B6B1 0x01 
 2367 #define TRX_CTLS_9F16_MERCHANT_ID 0x02 
 2368 #define TRX_CTLS_RFU_B6B3 0x04 
 2369 #define TRX_CTLS_5F20_CARDHOLDER 0x08 
 2370 #define TRX_CTLS_5F2D_LANG_PREFERENCE 0x10 
 2371 #define TRX_CTLS_9F08_ICC_APPLI_VERS_NO 0x20 
 2372 #define TRX_CTLS_5F36_TRX_CURRENCY_EXPO 0x40 
 2373 #define TRX_CTLS_5F30_SERVICE_CODE 0x80 
 2374 
 2375 /* Byte 7 */
 2376 #define TRX_CTLS_9F66_TTQ 0x02 
 2377 #define TRX_CTLS_DF5D_CL_MAGSTRIPE 0x04 
 2378 #define TRX_CTLS_9F6C_VISA_CTQ 0x08 
 2379 #define TRX_CTLS_9F5D_VISA_AOSA 0x10 
 2380 #define TRX_CTLS_DF8104_MC_BALANCE 0x20 
 2381 #define TRX_CTLS_DF8105_MC_BALANCE 0x40 
 2382 #define TRX_CTLS_DF64_KERNEL_DEBUG 0x80 
 2383 
 2384 /* Byte 8 */
 2385 #define TRX_CTLS_9F02_AMOUNT 0x01 
 2386 #define TRX_CTLS_9F03_CB_AMOUNT 0x02 
 2387 #define TRX_CTLS_9F53_MC_CATCODE 0x04 
 2388 #define TRX_CTLS_CARDTYPE 0x08 
 2389 #define TRX_CTLS_SCRIPTRESULTS 0x10 
 2390 
 2392 
 2397 #define EXIT_CTLS_BASE 0x00 
 2398 #define EXIT_CTLS_STOP_LEDS 0x01 
 2401 #define EXIT_CTLS_COMPLETE 0x02 
 2403 #define EXIT_CTLS_NO_LEDS_OFF 0x04 
 2407 
 2409 
 2414 #define END_TXN_CTLS_NO_LEDS_OFF 0x01 
 2415 
 2417 
 2418 // ========================================================================================================
 2419 // === MISCELLANEOUS ===
 2420 // ========================================================================================================
 2421 
 2424 
 2428 typedef struct EMV_CTLS_CAPKEY_STRUCT
 2429 {
 2430  unsigned char *RID;
 2431  unsigned char Index;
 2432  unsigned char *Key;
 2433  unsigned char KeyLen;
 2434  unsigned char Exponent;
 2435  unsigned char *Hash;
 2436  unsigned char noOfRevocEntries;
 2437  unsigned char* RevocEntries;
 2438 } EMV_CTLS_CAPKEY_TYPE;
 2439 
 2442 typedef struct EMV_CTLS_CAPREAD_STRUCT
 2443 {
 2444  unsigned char RID[5];
 2445  unsigned char Index;
 2446  unsigned char KeyLen;
 2447 } EMV_CTLS_CAPREAD_TYPE;
 2448 
 2453 #define EMV_CTLS_DE_REQ_DEK 0x00 
 2454 #define EMV_CTLS_DE_REQ_DET 0x01 
 2455 
 2457 #define EMV_CTLS_DE_STATE_0 0x00 
 2462 #define EMV_CTLS_DE_STATE_1 0x01 
 2463 #define EMV_CTLS_DE_STATE_2 0x02 
 2464 #define EMV_CTLS_DE_STATE_3 0x03 
 2465 #define EMV_CTLS_DE_STATE_4 0x04 
 2466 #define EMV_CTLS_DE_STATE_5 0x05 
 2467 #define EMV_CTLS_DE_STATE_6 0x06 
 2468 #define EMV_CTLS_DE_STATE_7 0x07 
 2469 #define EMV_CTLS_DE_STATE_8 0x08 
 2470 
 2472 #define EMV_CTLS_DE_MODE_STOP 0x00 
 2477 #define EMV_CTLS_DE_MODE_CONT 0x01 
 2478 #define EMV_CTLS_DE_MODE_MORE 0x02 
 2479 
 2481 // ========================================================================================================
 2482 // === CALLBACK FUNCTION for additional features and apps interaction during the transaction ===
 2483 // === (PIN, Application Selection, DCC, ...) ===
 2484 // ========================================================================================================
 2485 
 2496 #define TAG_BF0B_INIT_CALLBACK_THREAD 0xBF0B 
 2497 #define TAG_BF0C_CTLS_CBK_APP_SELECTED 0xBF0C 
 2502 #define TAG_BF0E_CBK_DATA_EXCHANGE 0xBF0E 
 2514 #define TAG_BF0F_EXIT_CALLBACK_THREAD 0xBF0F 
 2518 #define TAG_BF10_CTLS_CBK_LEDS 0xBF10 
 2522 #define TAG_BF12_CBK_MODIFY_CAND 0xBF12 
 2530 #define TAG_BF13_CBK_RND 0xBF13 
 2549 #define TAG_BF14_CBK_TEXT_DISPLAY 0xBF14 
 2554 #define TAG_BF15_CBK_CARD_TAPPED 0xBF15 
 2565 #define TAG_BF16_CBK_SERVICE_SHORTLIST 0xBF16 
 2570 #define TAG_BF17_CBK_SERVICE_FOR_GENAC 0xBF17 
 2575 #define TAG_BF18_CBK_PURE_GET_PUT_DATA 0xBF18 
 2579 #define TAG_BF19_CTLS_CBK_BEEP 0xBF19 
 2584 #define TAG_BF7F_CTLS_CBK_TRACE 0xBF7F 
 2588 
 2595 
 2596 // ========================================================================================================
 2597 // === SERIALIZED FUNCTIONAL CONTACTLESS INTERFACE
 2598 // ========================================================================================================
 2599 
 2600 
 2601 #define EMV_CTLS_SER_Init_Framework(dataIn, dataInLen, dataOut, dataOutLen) EMV_CTLS_SER_Init_Framework_Client(EMV_CTLS_FRAMEWORK_VERSION, (dataIn), (dataInLen), (dataOut), (dataOutLen))
 2602 
 2603 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_Init_Framework_Client(const char *version, const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2604 
 2605 DLL_CLC void EMV_CTLS_SER_Exit_Framework(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2606 
 2607 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_MapVirtualTerminal(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2608 
 2609 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_StoreCAPKey(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2610 
 2611 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_ReadCAPKeys(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2612 
 2613 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_SetTermData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2614 
 2615 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_GetTermData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2616 
 2617 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_SetAppliDataSchemeSpecific(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2618 
 2619 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_GetAppliDataSchemeSpecific(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2620 
 2621 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_SetupTransaction(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2622 
 2623 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_ContinueOffline(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2624 
 2625 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_ContinueOnline(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2626 
 2627 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_fetchTxnTags(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2628 
 2629 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_EndTransaction(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2630 
 2631 DLL_CLC unsigned char EMV_CTLS_SER_SmartISO(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2632 
 2633 DLL_CLC unsigned char EMV_CTLS_SER_SmartReset(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2634 
 2635 DLL_CLC unsigned char EMV_CTLS_SER_SmartPowerOff(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2636 
 2637 DLL_CLC unsigned char EMV_CTLS_SER_CardRemoval(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2638 
 2639 DLL_CLC unsigned char EMV_CTLS_SER_LED_SetMode(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2640 
 2641 DLL_CLC unsigned char EMV_CTLS_SER_LED(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2642 
 2643 DLL_CLC unsigned char EMV_CTLS_SER_LED_ConfigDesign(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2644 
 2645 DLL_CLC unsigned char EMV_CTLS_SER_Break(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2646 
 2647 DLL_CLC EMV_ADK_INFO EMV_CTLS_SER_GetCandidateData(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 2648 
 2649 // ========================================================================================================
 2650 // === FUNCTIONAL CONTACTLESS INTERFACE ===
 2651 // ========================================================================================================
 2652 
 2653 
 2658 #define EMV_CTLS_INIT_OPT_BASE_INIT 0x00000001 
 2659 #define EMV_CTLS_INIT_OPT_AUTO_RETAP 0x00000004 
 2660 #define EMV_CTLS_INIT_OPT_CONFIG_MODE 0x00000008 
 2661 #define EMV_CTLS_INIT_OPT_USE_DEF_VT_CAPK 0x00000010 
 2664 #define EMV_CTLS_INIT_OPT_DELETE_ALL 0x00000020 
 2665 #define EMV_CTLS_INIT_OPT_TRACE 0x00000100 
 2666 #define EMV_CTLS_INIT_OPT_TRACE_CLT 0x00000200 
 2667 #define EMV_CTLS_INIT_OPT_LED_CBK_EXT 0x00000400 
 2668 #define EMV_CTLS_INIT_OPT_TRACE_SYSLOG 0x00000800 
 2671 #define EMV_CTLS_INIT_OPT_BEEP_CBK_EXT 0x00040000 
 2672 #define EMV_CTLS_INIT_OPT_TRACE_ADK_LOG 0x00080000 
 2673 #define EMV_CTLS_INIT_OPT_TIMINGS 0x00100000 
 2674 #define EMV_CTLS_INIT_OPT_SHARED_CONFIG 0x00200000 
 2675 #define EMV_CTLS_INIT_OPT_EPP_MASTER 0x00400000 
 2678 
 2682 #define EMV_CTLS_INIT_VIRT_1 0x01000000 
 2683 #define EMV_CTLS_INIT_VIRT_2 0x02000000 
 2684 #define EMV_CTLS_INIT_VIRT_3 0x03000000 
 2685 #define EMV_CTLS_INIT_VIRT_4 0x04000000 
 2686 #define EMV_CTLS_INIT_VIRT_5 0x05000000 
 2687 #define EMV_CTLS_INIT_VIRT_6 0x06000000 
 2688 #define EMV_CTLS_INIT_VIRT_7 0x07000000 
 2689 #define EMV_CTLS_INIT_VIRT_8 0x08000000 
 2690 #define EMV_CTLS_INIT_VIRT_9 0x09000000 
 2691 #define EMV_CTLS_INIT_VIRT_10 0x0A000000 
 2692 #define EMV_CTLS_INIT_VIRT_11 0x0B000000 
 2693 #define EMV_CTLS_INIT_VIRT_12 0x0C000000 
 2694 #define EMV_CTLS_INIT_VIRT_13 0x0D000000 
 2695 #define EMV_CTLS_INIT_VIRT_14 0x0E000000 
 2696 #define EMV_CTLS_INIT_VIRT_15 0x0F000000 
 2697 #define EMV_CTLS_INIT_VIRT_16 0x10000000 
 2698 #define EMV_CTLS_INIT_VIRT_17 0x11000000 
 2699 #define EMV_CTLS_INIT_VIRT_18 0x12000000 
 2700 #define EMV_CTLS_INIT_VIRT_19 0x13000000 
 2701 #define EMV_CTLS_INIT_VIRT_20 0x14000000 
 2702 
 2704 
 2705 #define EMV_CTLS_Init_Framework(numberOfAIDs, EMV_Callback, externalData, options,ulResult) EMV_CTLS_Init_Framework_Client(EMV_CTLS_FRAMEWORK_VERSION, (numberOfAIDs), (EMV_Callback), (externalData), (options),(ulResult))
 2706 
 2732 /*****************************************************************************
 2733 * EMV_CTLS_Init_Framework_Client
 2734 *****************************************************************************/
 2739 DLL_CLC EMV_ADK_INFO EMV_CTLS_Init_Framework_Client(const char *version, unsigned char numberOfAIDs, EMV_CTLS_CALLBACK_FnT EMV_Callback, void* externalData, unsigned long options,unsigned long *ulResult);
 2740 
 2741 /*****************************************************************************
 2742 * EMV_CTLS_Exit_Framework
 2743 *****************************************************************************/
 2755 DLL_CLC void EMV_CTLS_Exit_Framework(void);
 2756 
 2757 /*****************************************************************************
 2758 * EMV_CTLS_Exit_Framework_extended
 2759 *****************************************************************************/
 2769 DLL_CLC void EMV_CTLS_Exit_Framework_extended(unsigned char options);
 2770 
 2771 
 2772 /*****************************************************************************
 2773 * EMV_CTLS_CLIENT_GetVersion
 2774 *****************************************************************************/
 2782 DLL_CLC const char* EMV_CTLS_CLIENT_GetVersion(void);
 2783 
 2784 
 2785 /*****************************************************************************
 2786 * EMV_CTLS_FRAMEWORK_GetVersion
 2787 *****************************************************************************/
 2799 DLL_CLC const char* EMV_CTLS_FRAMEWORK_GetVersion(void);
 2800 
 2801 
 2802 /*****************************************************************************
 2803 * EMV_CTLS_MapVirtualTerminal
 2804 *****************************************************************************/
 2828 DLL_CLC EMV_ADK_INFO EMV_CTLS_MapVirtualTerminal(EMV_ADK_VIRTUALTERMMAP_TYPE VirtualTermMapType, unsigned char *TLVSwitchValue, unsigned int TLVBufLen, unsigned char VirtualTerminal);
 2829 
 2830 
 2831 /*****************************************************************************
 2832 * EMV_CTLS_StoreCAPKey
 2833 *****************************************************************************/
 2857 DLL_CLC EMV_ADK_INFO EMV_CTLS_StoreCAPKey(EMV_ADK_HANDLE_RECORD_TYPE eHandleCAPKeyType, const EMV_CTLS_CAPKEY_TYPE *pxKeyData);
 2858 
 2859 
 2860 /*****************************************************************************
 2861 * EMV_CTLS_ReadCAPKeys
 2862 *****************************************************************************/
 2889 DLL_CLC EMV_ADK_INFO EMV_CTLS_ReadCAPKeys(EMV_CTLS_CAPREAD_TYPE *pxKeyData, unsigned char *pucMaxnum);
 2890 
 2891 /*****************************************************************************
 2892 * EMV_CTLS_ReadCAPKeyInfo
 2893 *****************************************************************************/
 2930 DLL_CLC EMV_ADK_INFO EMV_CTLS_GetCAPKeyInfo(EMV_CTLS_CAPREAD_TYPE *pxKeyData, unsigned capacity, unsigned offset, unsigned* numberRead, unsigned* numberConfigured);
 2931 
 2932 /*****************************************************************************
 2933 * EMV_CTLS_SetTermData
 2934 *****************************************************************************/
 2956 DLL_CLC EMV_ADK_INFO EMV_CTLS_SetTermData(EMV_CTLS_TERMDATA_TYPE* pxTermData);
 2957 
 2958 /*****************************************************************************
 2959 * EMV_CTLS_GetTermData
 2960 *****************************************************************************/
 2980 DLL_CLC EMV_ADK_INFO EMV_CTLS_GetTermData(EMV_CTLS_TERMDATA_TYPE* pxTermData);
 2981 
 2982 /*****************************************************************************
 2983 * EMV_CTLS_SetAppliDataSchemeSpecific
 2984 *****************************************************************************/
 3010 DLL_CLC EMV_ADK_INFO EMV_CTLS_SetAppliDataSchemeSpecific(EMV_ADK_HANDLE_RECORD_TYPE eHandleAppliType, EMV_CTLS_APPLI_KERNEL_TYPE* pxAID, EMV_CTLS_APPLIDATA_SCHEME_SPECIFIC_TYPE* pxAppliData);
 3011 
 3012 /*****************************************************************************
 3013 * EMV_CTLS_GetAppliDataSchemeSpecific
 3014 *****************************************************************************/
 3042 DLL_CLC EMV_ADK_INFO EMV_CTLS_GetAppliDataSchemeSpecific(EMV_ADK_READAPPLI_TYPE eReadAppliType, EMV_CTLS_APPLI_KERNEL_TYPE* pxAID, EMV_CTLS_APPLIDATA_SCHEME_SPECIFIC_TYPE* pxAppliData);
 3043 
 3044 /*****************************************************************************
 3045 * EMV_CTLS_ApplyConfiguration
 3046 *****************************************************************************/
 3069 DLL_CLC EMV_ADK_INFO EMV_CTLS_ApplyConfiguration(unsigned long options);
 3070 
 3071 /*****************************************************************************
 3072 * EMV_CTLS_SetupTransaction
 3073 *****************************************************************************/
 3101 DLL_CLC EMV_ADK_INFO EMV_CTLS_SetupTransaction( EMV_CTLS_START_TYPE *pxStartInput, EMV_CTLS_STARTRES_TYPE* pxStartRes);
 3102 
 3103 /*****************************************************************************
 3104 * EMV_CTLS_ContinueOffline
 3105 *****************************************************************************/
 3159 DLL_CLC EMV_ADK_INFO EMV_CTLS_ContinueOffline(EMV_CTLS_TRANSRES_TYPE *pxTransRes);
 3160 
 3161 /*****************************************************************************
 3162 * EMV_CTLS_ContinueOfflineExt
 3163 *****************************************************************************/
 3214 DLL_CLC EMV_ADK_INFO EMV_CTLS_ContinueOfflineExt(EMV_CTLS_CONT_OFFL_TYPE *pxContOfflInput, EMV_CTLS_TRANSRES_TYPE *pxTransRes);
 3215 
 3216 /*****************************************************************************
 3217 * EMV_CTLS_ContinueOnline
 3218 *****************************************************************************/
 3252 DLL_CLC EMV_ADK_INFO EMV_CTLS_ContinueOnline(EMV_CTLS_HOST_TYPE *pxOnlineInput, EMV_CTLS_TRANSRES_TYPE *pxTransRes);
 3253 
 3254 /*****************************************************************************
 3255 * EMV_CTLS_fetchTxnTags
 3256 *****************************************************************************/
 3291 DLL_CLC EMV_ADK_INFO EMV_CTLS_fetchTxnTags(unsigned long options, unsigned long* requestedTags, unsigned short noOfRequestedTags, unsigned char* tlvBuffer, unsigned short bufferLength, unsigned short* tlvDataLength );
 3292 
 3293 /*****************************************************************************
 3294 * EMV_CTLS_fetchTxnDOL
 3295 *****************************************************************************/
 3331 DLL_CLC EMV_ADK_INFO EMV_CTLS_fetchTxnDOL(unsigned long options, const unsigned char* DOL, unsigned dolLen, unsigned char* buffer, unsigned bufferSize, unsigned* dataLength);
 3332 
 3333 /*****************************************************************************
 3334 * EMV_CTLS_EndTransaction
 3335 *****************************************************************************/
 3353 DLL_CLC EMV_ADK_INFO EMV_CTLS_EndTransaction(unsigned long options);
 3354 
 3355 
 3356 // ========================================================================================================
 3357 // === CONTACTLESS FUNCTIONS to be implemented in entity in which framework is running ===
 3358 // ========================================================================================================
 3359 
 3364 # define CONTACTLESS_LED_FIRST 0x01 
 3365 # define CONTACTLESS_LED_SECOND 0x02 
 3366 # define CONTACTLESS_LED_THIRD 0x04 
 3367 # define CONTACTLESS_LED_FOURTH 0x08 
 3368 // and a second list for those who like colours according Book A, Architecture and General Requirements, 9.3.3 Option 2 for Card Read Successfully/Processing Error
 3369 # define CONTACTLESS_LED_BLUE CONTACTLESS_LED_FIRST 
 3370 # define CONTACTLESS_LED_YELLOW CONTACTLESS_LED_SECOND 
 3371 # define CONTACTLESS_LED_GREEN CONTACTLESS_LED_THIRD 
 3372 # define CONTACTLESS_LED_RED CONTACTLESS_LED_FOURTH 
 3373 // the original and deprecated list.
 3374 # define CONTACTLESS_LED_0 CONTACTLESS_LED_FIRST 
 3375 # define CONTACTLESS_LED_1 CONTACTLESS_LED_SECOND 
 3376 # define CONTACTLESS_LED_2 CONTACTLESS_LED_THIRD 
 3377 # define CONTACTLESS_LED_3 CONTACTLESS_LED_FOURTH 
 3378 
 3379 # define CONTACTLESS_LED_ALL 0x0F 
 3380 # define CONTACTLESS_LED_LOGO 0x80 
 3381 
 3383 #define CONTACTLESS_LED_OFF 0x00 
 3388 #define CONTACTLESS_LED_ON 0x01 
 3389 #define CONTACTLESS_LED_IDLE_BLINK 0x02 
 3390 #define CONTACTLESS_LED_ONLINE_BLINK 0x03 
 3391 #define CONTACTLESS_LED_HANDLE_EOT_SILENT 0x04 
 3392 #define CONTACTLESS_LED_HANDLE_EOT_SUCCESS 0x05 
 3393 #define CONTACTLESS_LED_HANDLE_EOT_FAIL 0x06 
 3394 #define CONTACTLESS_LED_HANDLE_EOT_FAIL_BLINK 0x07 
 3395 #define CONTACTLESS_LED_HANDLE_EOT_FAIL_BLINK_3 0x08 
 3396 
 3398 #define CONTACTLESS_LED_MODE_OFF 0x00 
 3403 #define CONTACTLESS_LED_MODE_API 0x01 
 3404 #define CONTACTLESS_LED_MODE_EMV 0x02 
 3405 
 3407 #define EMV_CTLS_BEEP_SUCCESS 1 
 3412 #define EMV_CTLS_BEEP_ALERT 2 
 3413 
 3415 #define EMV_CTLS_RFU_1 0x01 
 3420 #define EMV_CTLS_RESET_KEEP_FIELD_ON 0x02 
 3421 #define EMV_CTLS_SPURIOUS_DETECT 0x04 
 3422 #define EMV_CTLS_EMV_COMPLIANT 0x08 
 3423 #define EMV_CTLS_RESET_NO_EMV 0x10 
 3424 #define EMV_CTLS_RESET_PICC_OPEN_ONLY 0x20 
 3425 #define EMV_CTLS_RESET_PLUS_PPSE 0x40 
 3426 
 3429 #define EMV_CTLS_OPEN_READER EMV_CTLS_RESET_PICC_OPEN_ONLY 
 3430 #define EMV_CTLS_CLOSE_READER 0x40 
 3431 #define EMV_CTLS_DETECT_REMOVAL 0x80 
 3432 
 3433 
 3435 /*****************************************************************************
 3436 * EMV_CTLS_SmartISO
 3437 *****************************************************************************/
 3459 DLL_CLC unsigned char EMV_CTLS_SmartISO (unsigned char ucOptions, unsigned short usInDataLen, unsigned char *pucDataIn, unsigned short *pusOutDataLen, unsigned char *pucDataOut, unsigned short usOutBufferLength);
 3460 
 3461 /*****************************************************************************
 3462 * EMV_CTLS_SmartReset
 3463 *****************************************************************************/
 3484 DLL_CLC unsigned char EMV_CTLS_SmartReset(unsigned char ucOptions, unsigned char* pucCardInfo, unsigned long* pnInfoLength);
 3485 
 3486 /*****************************************************************************
 3487 * EMV_CTLS_SmartPowerOff
 3488 *****************************************************************************/
 3506 DLL_CLC unsigned char EMV_CTLS_SmartPowerOff(unsigned char ucOptions);
 3507 
 3508 
 3509 /*****************************************************************************
 3510  * EMV_CTLS_CardRemoval
 3511  *****************************************************************************/
 3532 DLL_CLC unsigned char EMV_CTLS_CardRemoval(long timeoutMillis);
 3533 
 3534 /*****************************************************************************
 3535 * EMV_CTLS_LED_SetMode
 3536 *****************************************************************************/
 3557 DLL_CLC unsigned char EMV_CTLS_LED_SetMode(unsigned char ucLedMode);
 3558 
 3559 /*****************************************************************************
 3560 * EMV_CTLS_LED
 3561 *****************************************************************************/
 3588 DLL_CLC unsigned char EMV_CTLS_LED(unsigned char ucLedId, unsigned char ucLedState);
 3589 
 3590 /*****************************************************************************
 3591 * EMV_CTLS_LED_ConfigDesign
 3592 *****************************************************************************/
 3618 DLL_CLC unsigned char EMV_CTLS_LED_ConfigDesign(unsigned short width, unsigned short height, unsigned char* color_off, unsigned char* color_on,
 3619  unsigned short xRegion, unsigned short yRegion, unsigned short wRegion, unsigned short hRegion)
 3620 __attribute ((deprecated));
 3621 
 3622 
 3625 #define EMV_CTLS_LED_SHAPE_RECTANGLE 0 
 3626 #define EMV_CTLS_LED_SHAPE_CIRCLE 1 
 3627 
 3628 typedef struct EMV_CTLS_LED_COLORS_STRUCT
 3631 {
 3632  unsigned char num_colors;
 3633  unsigned char *colors;
 3634 } EMV_CTLS_LED_COLORS;
 3635 
 3638 typedef struct EMV_CTLS_LED_CONFIG_STRUCT
 3639 {
 3640  unsigned short region_x;
 3641  unsigned short region_y;
 3642  unsigned short region_width;
 3643  unsigned short region_height;
 3644  EMV_CTLS_LED_COLORS colors_off;
 3645  EMV_CTLS_LED_COLORS colors_on;
 3646  unsigned char *bg_color;
 3647  unsigned char shape;
 3648  unsigned short *shape_params;
 3649  unsigned char *options;
 3650 } EMV_CTLS_LED_CONFIG;
 3651 
 3652 /*****************************************************************************
 3653 * EMV_CTLS_LED_ConfigDesign_Extended
 3654 *****************************************************************************/
 3670 DLL_CLC unsigned char EMV_CTLS_LED_ConfigDesign_Extended(const EMV_CTLS_LED_CONFIG *led_config) __attribute ((deprecated));
 3671 
 3672 /*****************************************************************************
 3673 * EMV_CTLS_Break
 3674 *****************************************************************************/
 3688 DLL_CLC unsigned char EMV_CTLS_Break(void);
 3689 
 3690 #define EMV_CTLS_SUPPORTED_SIZE_9F0A 50 
 3691 #define EMV_CTLS_SUPPORTED_SIZE_DISC 50 
 3692 
 3693 typedef struct EMV_CTLS_CANDIDATE_DATA_STRUCT
 3699 {
 3700  unsigned char API;
 3701  unsigned char IIN[4];
 3702  unsigned char IBAN[35];
 3703  unsigned char BIC[12];
 3704  unsigned char country2[2];
 3705  unsigned char country3[3];
 3706  unsigned char len9F06;
 3707  unsigned char selData[1+EMV_CTLS_SUPPORTED_SIZE_9F0A];
 3708  unsigned char disc[1+50];
 3709 } EMV_CTLS_CANDIDATE_DATA_TYPE;
 3710 
 3711 #define EMV_CTLS_ADDTAG_COMBOS 6 
 3712 
 3713 /*****************************************************************************
 3714 * EMV_CTLS_GetCandidateData
 3715 *****************************************************************************/
 3743 DLL_CLC EMV_ADK_INFO EMV_CTLS_GetCandidateData(EMV_CTLS_CANDIDATE_DATA_TYPE *candidateData);
 3744 
 3745 /*****************************************************************************
 3746 * EMV_CTLS_GetCandidateDataMax
 3747 *****************************************************************************/
 3767 DLL_CLC EMV_ADK_INFO EMV_CTLS_GetCandidateDataMax(EMV_CTLS_CANDIDATE_DATA_TYPE *candidateData, unsigned maxCandidates);
 3768 
 3769 #ifdef __cplusplus
 3770 } // extern "C"
 3771 #endif
 3772 
 3773 #endif // #ifndef _EMV_CTLS_INTERFACE_H_
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://sandbox-docs.verifone.com/s-adk-5.1-programmers-guide/_e_m_v___c_t_l_s___interface_8h_source.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
