> 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/adk-5.0-programmers-guide/_e_m_v___c_t_l_s___link_8h_source.md).

# EMV\_CTLS\_Link.h

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

```cpp
 1 #ifndef _EMV_CTLS_LINK_H_
 2 #define _EMV_CTLS_LINK_H_
 3 
 4 #include "emv/btlv.h"
 5 #include "emv/EMV_Common_Interface.h"
 6 
 7 #define DLL_CLL // NOTE: Do not set visibility("default") because export.map is used
 8 
 9 #ifdef __cplusplus
 10 extern "C" {
 11 #endif
 12 
 13 /*****************************************************************************
 14 * EMV_CTLS_CallbackFunction
 15 *****************************************************************************/
 35 typedef void (EMV_CTLS_CALLBACK_Func) (unsigned char *pucSend, unsigned short sSendSize, unsigned char *pucReceive, unsigned short *psReceiveSize, void *externalData);
 36 
 41 typedef EMV_CTLS_CALLBACK_Func* EMV_CTLS_CALLBACK_FnT;
 42 
 47 #define EMV_CTLS_CALLBACK_STACK_SIZE 0xC000
 48 
 49 #define FS_CALLBACK_CTLS_DATA_RECORD 0xFF // currently max. 201 bytes (5 candidates in cbk_reduceCandidateList())
 50 
 51 
 52 /*****************************************************************************
 53 * EMV_CTLS_Interface
 54 *****************************************************************************/
 65 EMV_ADK_INFO EMV_CTLS_Interface(const unsigned char *dataIn, unsigned short dataInLen, unsigned char *dataOut, unsigned short *dataOutLen);
 66 
 67 /*****************************************************************************
 68 * EMV_CTLS_IF_Header
 69 *****************************************************************************/
 81 EMV_ADK_INFO EMV_CTLS_IF_Header(const unsigned char* header, const unsigned char *dataIn, unsigned short dataInLen, unsigned char *response, unsigned short *responseLen);
 82 
 83 /*****************************************************************************
 84 * EMV_CTLS_IF_BERTLV
 85 *****************************************************************************/
 95 EMV_ADK_INFO EMV_CTLS_IF_BERTLV(const unsigned char* header, const struct BTLVNode* dataIn, struct BTLVNode* dataOut);
 96 
 97 /*****************************************************************************
 98 * EMV_CTLS_Disconnect
 99 *****************************************************************************/
 113 void EMV_CTLS_Disconnect(unsigned char options);
 114 
 115 /*****************************************************************************
 116 * EMV_CTLS_SetClientMode
 117 *****************************************************************************/
 130 void EMV_CTLS_SetClientMode(enum EMV_CLIENT_MODE mode);
 131 
 132 /*****************************************************************************
 133 * EMV_CTLS_GetClientMode
 134 *****************************************************************************/
 145 enum EMV_CLIENT_MODE EMV_CTLS_GetClientMode();
 146 
 147 /*****************************************************************************
 148 * EMV_CTLS_SetSmartISOMode
 149 *****************************************************************************/
 168 DLL_CLL EMV_ADK_INFO EMV_CTLS_SetSmartISOMode(int mode);
 169 
 170 /*****************************************************************************
 171 * EMV_CTLS_GetSmartISOMode
 172 *****************************************************************************/
 183 DLL_CLL int EMV_CTLS_GetSmartISOMode(void);
 184 
 185 /*****************************************************************************
 186 * EMV_CTLS_SetCallback
 187 *****************************************************************************/
 196 void EMV_CTLS_SetCallback(EMV_CTLS_CALLBACK_FnT EMV_Callback, void* context);
 197 
 198 /*****************************************************************************
 199 * EMV_CTLS_SetCallback
 200 *****************************************************************************/
 208 unsigned long EMV_CTLS_GetInitOptions(void);
 209 
 210 /*****************************************************************************
 211 * EMV_CTLS_getSdiSW12
 212 *****************************************************************************/
 221 unsigned EMV_CTLS_GetSdiSW12();
 222 
 223 #ifdef __cplusplus
 224 } // extern "C"
 225 #endif
 226 
 227 #endif // _EMV_CTLS_LINK_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/adk-5.0-programmers-guide/_e_m_v___c_t_l_s___link_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.
