1 /****************************************************************************** 2 * 3 * Copyright (C) 2003-2014 Broadcom Corporation 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at: 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 * 17 ******************************************************************************/ 18 19 /****************************************************************************** 20 * 21 * This is the private interface file for the NFA device manager. 22 * 23 ******************************************************************************/ 24 #ifndef NFA_DM_INT_H 25 #define NFA_DM_INT_H 26 27 #include "nfa_api.h" 28 #include "nfa_sys.h" 29 #include "nfc_api.h" 30 31 /***************************************************************************** 32 ** Constants and data types 33 *****************************************************************************/ 34 35 /* DM events */ 36 enum { 37 /* device manager local device API events */ 38 NFA_DM_API_ENABLE_EVT = NFA_SYS_EVT_START(NFA_ID_DM), 39 NFA_DM_API_DISABLE_EVT, 40 NFA_DM_API_SET_CONFIG_EVT, 41 NFA_DM_API_GET_CONFIG_EVT, 42 NFA_DM_API_REQUEST_EXCL_RF_CTRL_EVT, 43 NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT, 44 NFA_DM_API_ENABLE_POLLING_EVT, 45 NFA_DM_API_DISABLE_POLLING_EVT, 46 NFA_DM_API_ENABLE_LISTENING_EVT, 47 NFA_DM_API_DISABLE_LISTENING_EVT, 48 NFA_DM_API_PAUSE_P2P_EVT, 49 NFA_DM_API_RESUME_P2P_EVT, 50 NFA_DM_API_RAW_FRAME_EVT, 51 NFA_DM_API_SET_P2P_LISTEN_TECH_EVT, 52 NFA_DM_API_START_RF_DISCOVERY_EVT, 53 NFA_DM_API_STOP_RF_DISCOVERY_EVT, 54 NFA_DM_API_SET_RF_DISC_DURATION_EVT, 55 NFA_DM_API_SELECT_EVT, 56 NFA_DM_API_UPDATE_RF_PARAMS_EVT, 57 NFA_DM_API_DEACTIVATE_EVT, 58 NFA_DM_API_POWER_OFF_SLEEP_EVT, 59 NFA_DM_API_REG_NDEF_HDLR_EVT, 60 NFA_DM_API_DEREG_NDEF_HDLR_EVT, 61 NFA_DM_API_REG_VSC_EVT, 62 NFA_DM_API_SEND_VSC_EVT, 63 NFA_DM_TIMEOUT_DISABLE_EVT, 64 NFA_DM_MAX_EVT 65 }; 66 67 /* data type for NFA_DM_API_ENABLE_EVT */ 68 typedef struct { 69 NFC_HDR hdr; 70 tNFA_DM_CBACK* p_dm_cback; 71 tNFA_CONN_CBACK* p_conn_cback; 72 } tNFA_DM_API_ENABLE; 73 74 /* data type for NFA_DM_API_DISABLE_EVT */ 75 typedef struct { 76 NFC_HDR hdr; 77 bool graceful; 78 } tNFA_DM_API_DISABLE; 79 80 /* data type for NFA_DM_API_SET_CONFIG_EVT */ 81 typedef struct { 82 NFC_HDR hdr; 83 tNFA_PMID param_id; 84 uint8_t length; 85 uint8_t* p_data; 86 } tNFA_DM_API_SET_CONFIG; 87 88 /* data type for NFA_DM_API_GET_CONFIG_EVT */ 89 typedef struct { 90 NFC_HDR hdr; 91 uint8_t num_ids; 92 tNFA_PMID* p_pmids; 93 } tNFA_DM_API_GET_CONFIG; 94 95 /* data type for NFA_DM_API_REQ_EXCL_RF_CTRL_EVT */ 96 typedef struct { 97 NFC_HDR hdr; 98 tNFA_TECHNOLOGY_MASK poll_mask; 99 tNFA_LISTEN_CFG listen_cfg; 100 tNFA_CONN_CBACK* p_conn_cback; 101 tNFA_NDEF_CBACK* p_ndef_cback; 102 } tNFA_DM_API_REQ_EXCL_RF_CTRL; 103 104 /* data type for NFA_DM_API_ENABLE_POLLING_EVT */ 105 typedef struct { 106 NFC_HDR hdr; 107 tNFA_TECHNOLOGY_MASK poll_mask; 108 } tNFA_DM_API_ENABLE_POLL; 109 110 /* data type for NFA_DM_API_SET_P2P_LISTEN_TECH_EVT */ 111 typedef struct { 112 NFC_HDR hdr; 113 tNFA_TECHNOLOGY_MASK tech_mask; 114 } tNFA_DM_API_SET_P2P_LISTEN_TECH; 115 116 /* data type for NFA_DM_API_SELECT_EVT */ 117 typedef struct { 118 NFC_HDR hdr; 119 uint8_t rf_disc_id; 120 tNFA_NFC_PROTOCOL protocol; 121 tNFA_INTF_TYPE rf_interface; 122 } tNFA_DM_API_SELECT; 123 124 /* data type for NFA_DM_API_UPDATE_RF_PARAMS_EVT */ 125 typedef struct { 126 NFC_HDR hdr; 127 tNFA_RF_COMM_PARAMS params; 128 } tNFA_DM_API_UPDATE_RF_PARAMS; 129 130 /* data type for NFA_DM_API_DEACTIVATE_EVT */ 131 typedef struct { 132 NFC_HDR hdr; 133 bool sleep_mode; 134 } tNFA_DM_API_DEACTIVATE; 135 136 /* data type for NFA_DM_API_SET_RF_DISC_DURATION_EVT */ 137 typedef struct { 138 NFC_HDR hdr; 139 uint16_t rf_disc_dur_ms; 140 } tNFA_DM_API_SET_RF_DISC_DUR; 141 #define NFA_RF_DISC_DURATION_MAX 0xFFFF 142 143 /* data type for NFA_DM_API_REG_NDEF_HDLR_EVT */ 144 #define NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE 0x01 145 #define NFA_NDEF_FLAGS_WKT_URI 0x02 146 #define NFA_NDEF_FLAGS_WHOLE_MESSAGE_NOTIFIED 0x04 147 148 typedef struct { 149 NFC_HDR hdr; 150 tNFA_HANDLE ndef_type_handle; 151 uint8_t flags; 152 tNFA_NDEF_CBACK* p_ndef_cback; 153 tNFA_TNF tnf; /* Type-name field of record-type that was registered. */ 154 tNFA_NDEF_URI_ID 155 uri_id; /* URI prefix abrieviation (for NFA_RegisterNDefUriHandler) */ 156 uint8_t name_len; /* Length of type name or absolute URI */ 157 uint8_t name[1]; /* Type name or absolute URI of record-type that got was 158 registered. */ 159 } tNFA_DM_API_REG_NDEF_HDLR; 160 161 /* data type for NFA_DM_API_DEREG_NDEF_HDLR_EVT */ 162 typedef struct { 163 NFC_HDR hdr; 164 tNFA_HANDLE ndef_type_handle; 165 } tNFA_DM_API_DEREG_NDEF_HDLR; 166 167 /* data type for NFA_DM_API_REG_VSC_EVT */ 168 typedef struct { 169 NFC_HDR hdr; 170 tNFA_VSC_CBACK* p_cback; 171 bool is_register; 172 } tNFA_DM_API_REG_VSC; 173 174 /* data type for NFA_DM_API_SEND_VSC_EVT */ 175 typedef struct { 176 NFC_HDR hdr; 177 tNFA_VSC_CBACK* p_cback; 178 uint8_t oid; 179 uint8_t cmd_params_len; 180 uint16_t pad; /* add padding to ensure the size is big enough for 181 offset=NCI_VSC_MSG_HDR_SIZE */ 182 uint8_t* p_cmd_params; 183 } tNFA_DM_API_SEND_VSC; 184 185 /* union of all data types */ 186 typedef union { 187 /* GKI event buffer header */ 188 NFC_HDR hdr; /* NFA_DM_API_RAW_FRAME_EVT */ 189 /* NFA_DM_API_MULTI_TECH_RSP_EVT */ 190 /* NFA_DM_API_RELEASE_EXCL_RF_CTRL */ 191 /* NFA_DM_API_DISABLE_POLLING_EVT */ 192 /* NFA_DM_API_START_RF_DISCOVERY_EVT */ 193 /* NFA_DM_API_STOP_RF_DISCOVERY_EVT */ 194 tNFA_DM_API_ENABLE enable; /* NFA_DM_API_ENABLE_EVT */ 195 tNFA_DM_API_DISABLE disable; /* NFA_DM_API_DISABLE_EVT */ 196 tNFA_DM_API_SET_CONFIG setconfig; /* NFA_DM_API_SET_CONFIG_EVT */ 197 tNFA_DM_API_GET_CONFIG getconfig; /* NFA_DM_API_GET_CONFIG_EVT */ 198 tNFA_DM_API_SET_RF_DISC_DUR 199 disc_duration; /* NFA_DM_API_SET_RF_DISC_DURATION_EVT */ 200 tNFA_DM_API_REG_NDEF_HDLR reg_ndef_hdlr; /* NFA_DM_API_REG_NDEF_HDLR_EVT */ 201 tNFA_DM_API_DEREG_NDEF_HDLR 202 dereg_ndef_hdlr; /* NFA_DM_API_DEREG_NDEF_HDLR_EVT */ 203 tNFA_DM_API_REQ_EXCL_RF_CTRL 204 req_excl_rf_ctrl; /* NFA_DM_API_REQUEST_EXCL_RF_CTRL */ 205 tNFA_DM_API_ENABLE_POLL enable_poll; /* NFA_DM_API_ENABLE_POLLING_EVT */ 206 tNFA_DM_API_SET_P2P_LISTEN_TECH 207 set_p2p_listen_tech; /* NFA_DM_API_SET_P2P_LISTEN_TECH_EVT */ 208 tNFA_DM_API_SELECT select; /* NFA_DM_API_SELECT_EVT */ 209 tNFA_DM_API_UPDATE_RF_PARAMS 210 update_rf_params; /* NFA_DM_API_UPDATE_RF_PARAMS_EVT */ 211 tNFA_DM_API_DEACTIVATE deactivate; /* NFA_DM_API_DEACTIVATE_EVT */ 212 tNFA_DM_API_SEND_VSC send_vsc; /* NFA_DM_API_SEND_VSC_EVT */ 213 tNFA_DM_API_REG_VSC reg_vsc; /* NFA_DM_API_REG_VSC_EVT */ 214 } tNFA_DM_MSG; 215 216 /* DM RF discovery state */ 217 enum { 218 NFA_DM_RFST_IDLE, /* idle state */ 219 NFA_DM_RFST_DISCOVERY, /* discovery state */ 220 NFA_DM_RFST_W4_ALL_DISCOVERIES, /* wait for all discoveries state */ 221 NFA_DM_RFST_W4_HOST_SELECT, /* wait for host selection state */ 222 NFA_DM_RFST_POLL_ACTIVE, /* poll mode activated state */ 223 NFA_DM_RFST_LISTEN_ACTIVE, /* listen mode activated state */ 224 NFA_DM_RFST_LISTEN_SLEEP, /* listen mode sleep state */ 225 NFA_DM_RFST_LP_LISTEN, /* Listening in Low Power mode */ 226 NFA_DM_RFST_LP_ACTIVE /* Activated in Low Power mode */ 227 }; 228 typedef uint8_t tNFA_DM_RF_DISC_STATE; 229 230 /* DM RF discovery state machine event */ 231 enum { 232 NFA_DM_RF_DISCOVER_CMD, /* start RF discovery */ 233 NFA_DM_RF_DISCOVER_RSP, /* discover response from NFCC */ 234 NFA_DM_RF_DISCOVER_NTF, /* RF discovery NTF from NFCC */ 235 NFA_DM_RF_DISCOVER_SELECT_CMD, /* select discovered target */ 236 NFA_DM_RF_DISCOVER_SELECT_RSP, /* select response from NFCC */ 237 NFA_DM_RF_INTF_ACTIVATED_NTF, /* RF interface activation NTF from NFCC */ 238 NFA_DM_RF_DEACTIVATE_CMD, /* deactivate RF interface */ 239 NFA_DM_RF_DEACTIVATE_RSP, /* deactivate response from NFCC */ 240 NFA_DM_RF_DEACTIVATE_NTF, /* deactivate RF interface NTF from NFCC */ 241 NFA_DM_LP_LISTEN_CMD, /* NFCC is listening in low power mode */ 242 NFA_DM_CORE_INTF_ERROR_NTF, /* RF interface error NTF from NFCC */ 243 NFA_DM_DISC_SM_MAX_EVENT 244 }; 245 typedef uint8_t tNFA_DM_RF_DISC_SM_EVENT; 246 247 /* DM RF discovery state machine data */ 248 typedef struct { 249 uint8_t rf_disc_id; 250 tNFA_NFC_PROTOCOL protocol; 251 tNFA_INTF_TYPE rf_interface; 252 } tNFA_DM_DISC_SELECT_PARAMS; 253 254 typedef union { 255 tNFC_DISCOVER nfc_discover; /* discovery data from NFCC */ 256 tNFC_DEACT_TYPE deactivate_type; /* deactivation type */ 257 tNFA_DM_DISC_SELECT_PARAMS select; /* selected target information */ 258 } tNFA_DM_RF_DISC_DATA; 259 260 /* Callback event from NFA DM RF Discovery to other NFA sub-modules */ 261 enum { 262 NFA_DM_RF_DISC_START_EVT, /* discovery started with protocol, technology and 263 mode */ 264 NFA_DM_RF_DISC_ACTIVATED_EVT, /* activated with configured protocol, 265 technology and mode */ 266 NFA_DM_RF_DISC_DEACTIVATED_EVT /* deactivated sleep or idle */ 267 }; 268 typedef uint8_t tNFA_DM_RF_DISC_EVT; 269 270 /* Combined NFC Technology and protocol bit mask */ 271 #define NFA_DM_DISC_MASK_PA_T1T 0x00000001 272 #define NFA_DM_DISC_MASK_PA_T2T 0x00000002 273 #define NFA_DM_DISC_MASK_PA_ISO_DEP 0x00000004 274 #define NFA_DM_DISC_MASK_PA_NFC_DEP 0x00000008 275 #define NFA_DM_DISC_MASK_PB_ISO_DEP 0x00000010 276 #define NFA_DM_DISC_MASK_PF_T3T 0x00000020 277 #define NFA_DM_DISC_MASK_PF_NFC_DEP 0x00000040 278 #define NFA_DM_DISC_MASK_P_ISO15693 0x00000100 279 #define NFA_DM_DISC_MASK_P_B_PRIME 0x00000200 280 #define NFA_DM_DISC_MASK_P_KOVIO 0x00000400 281 #define NFA_DM_DISC_MASK_PAA_NFC_DEP 0x00000800 282 #define NFA_DM_DISC_MASK_PFA_NFC_DEP 0x00001000 283 /* Legacy/proprietary/non-NFC Forum protocol (e.g Shanghai transit card) */ 284 #define NFA_DM_DISC_MASK_P_LEGACY 0x00002000 285 #define NFA_DM_DISC_MASK_POLL 0x0000FFFF 286 287 #define NFA_DM_DISC_MASK_LA_T1T 0x00010000 288 #define NFA_DM_DISC_MASK_LA_T2T 0x00020000 289 #define NFA_DM_DISC_MASK_LA_ISO_DEP 0x00040000 290 #define NFA_DM_DISC_MASK_LA_NFC_DEP 0x00080000 291 #define NFA_DM_DISC_MASK_LB_ISO_DEP 0x00100000 292 #define NFA_DM_DISC_MASK_LF_T3T 0x00200000 293 #define NFA_DM_DISC_MASK_LF_NFC_DEP 0x00400000 294 #define NFA_DM_DISC_MASK_L_ISO15693 0x01000000 295 #define NFA_DM_DISC_MASK_L_B_PRIME 0x02000000 296 #define NFA_DM_DISC_MASK_LAA_NFC_DEP 0x04000000 297 #define NFA_DM_DISC_MASK_LFA_NFC_DEP 0x08000000 298 #define NFA_DM_DISC_MASK_L_LEGACY 0x10000000 299 #define NFA_DM_DISC_MASK_LISTEN 0xFFFF0000 300 301 #define NFA_DM_DISC_MASK_NFC_DEP 0x0C481848 302 303 typedef uint32_t tNFA_DM_DISC_TECH_PROTO_MASK; 304 305 /* DM RF discovery host ID */ 306 #define NFA_DM_DISC_HOST_ID_DH NFC_DH_ID 307 typedef uint8_t tNFA_DM_DISC_HOST_ID; 308 309 /* DM deactivation callback type */ 310 typedef void(tNFA_DISCOVER_CBACK)(tNFA_DM_RF_DISC_EVT event, 311 tNFC_DISCOVER* p_data); 312 313 /* DM RF discovery action flags */ 314 /* RF discovery process has been started */ 315 #define NFA_DM_DISC_FLAGS_ENABLED 0x0001 316 /* Stop RF discovery is pending */ 317 #define NFA_DM_DISC_FLAGS_STOPPING 0x0002 318 /* Disable NFA is pending */ 319 #define NFA_DM_DISC_FLAGS_DISABLING 0x0004 320 /* Sleep wakeup in progress */ 321 #define NFA_DM_DISC_FLAGS_CHECKING 0x0008 322 /* Notify sub-module that discovery is starting */ 323 #define NFA_DM_DISC_FLAGS_NOTIFY 0x0010 324 /* command has been sent to NFCC in the state */ 325 #define NFA_DM_DISC_FLAGS_W4_RSP 0x0020 326 /* wait for NTF before changing discovery state */ 327 #define NFA_DM_DISC_FLAGS_W4_NTF 0x0040 328 329 typedef uint16_t tNFA_DM_DISC_FLAGS; 330 331 /* DM Discovery control block */ 332 typedef struct { 333 bool in_use; /* TRUE if used */ 334 tNFA_DISCOVER_CBACK* p_disc_cback; /* discovery callback */ 335 336 tNFA_DM_DISC_FLAGS disc_flags; /* specific action flags */ 337 tNFA_DM_DISC_HOST_ID host_id; /* DH or UICC1/UICC2 */ 338 tNFA_DM_DISC_TECH_PROTO_MASK 339 requested_disc_mask; /* technology and protocol requested */ 340 tNFA_DM_DISC_TECH_PROTO_MASK 341 selected_disc_mask; /* technology and protocol waiting for activation */ 342 } tNFA_DM_DISC_ENTRY; 343 344 /* polling, raw listen, P2P listen, NDEF CE, 2xVSE, 2xUICC */ 345 #define NFA_DM_DISC_NUM_ENTRIES 8 346 347 /* max discovery technology parameters */ 348 #define NFA_DM_MAX_DISC_PARAMS 16 349 350 /* index of listen mode routing table for technologies */ 351 enum { 352 NFA_DM_DISC_LRT_NFC_A, 353 NFA_DM_DISC_LRT_NFC_B, 354 NFA_DM_DISC_LRT_NFC_F, 355 NFA_DM_DISC_LRT_NFC_BP 356 }; 357 358 /* SLP_REQ (HLTA) command */ 359 #define SLP_REQ_CMD 0x5000 360 /* NFA_EE_MAX_TECH_ROUTE. only A, B, F, Bprime are supported by UICC now */ 361 #define NFA_DM_MAX_TECH_ROUTE 4 362 363 /* timeout for waiting deactivation NTF, 364 ** possible delay to send deactivate CMD if all credit wasn't returned 365 ** transport delay (1sec) and max RWT (5sec) 366 */ 367 #define NFA_DM_DISC_TIMEOUT_W4_DEACT_NTF (NFC_DEACTIVATE_TIMEOUT * 1000 + 6000) 368 369 typedef struct { 370 uint16_t disc_duration; /* Disc duration */ 371 tNFA_DM_DISC_FLAGS disc_flags; /* specific action flags */ 372 tNFA_DM_RF_DISC_STATE disc_state; /* RF discovery state */ 373 374 tNFC_RF_TECH_N_MODE activated_tech_mode; /* activated technology and mode */ 375 uint8_t activated_rf_disc_id; /* activated RF discovery ID */ 376 tNFA_INTF_TYPE activated_rf_interface; /* activated RF interface */ 377 tNFA_NFC_PROTOCOL activated_protocol; /* activated protocol */ 378 tNFA_HANDLE activated_handle; /* handle of activated sub-module */ 379 uint8_t activated_sel_res; /* activated tag's SEL_RES response */ 380 381 tNFA_DM_DISC_ENTRY entry[NFA_DM_DISC_NUM_ENTRIES]; 382 383 tNFA_DM_DISC_ENTRY excl_disc_entry; /* exclusive RF discovery */ 384 tNFA_LISTEN_CFG excl_listen_config; /* listen cfg for exclusive-rf mode */ 385 386 uint8_t listen_RT[NFA_DM_MAX_TECH_ROUTE]; /* Host ID for A, B, F, B' 387 technology routing*/ 388 tNFA_DM_DISC_TECH_PROTO_MASK 389 dm_disc_mask; /* technology and protocol waiting for activation */ 390 391 TIMER_LIST_ENT tle; /* timer for waiting deactivation NTF */ 392 TIMER_LIST_ENT kovio_tle; /* timer for Kovio bar code tag presence check */ 393 394 bool deact_pending; /* TRUE if deactivate while checking presence */ 395 bool deact_notify_pending; /* TRUE if notify DEACTIVATED EVT while Stop rf 396 discovery*/ 397 tNFA_DEACTIVATE_TYPE pending_deact_type; /* pending deactivate type */ 398 399 } tNFA_DM_DISC_CB; 400 401 /* NDEF Type Handler Definitions */ 402 /* Default handler entry in ndef_handler table */ 403 #define NFA_NDEF_DEFAULT_HANDLER_IDX 0 404 405 #define NFA_PARAM_ID_INVALID 0xFF 406 407 /* Maximum number of pending SetConfigs */ 408 #define NFA_DM_SETCONFIG_PENDING_MAX 32 409 410 /* NFA_DM flags */ 411 /* DM is enabled */ 412 #define NFA_DM_FLAGS_DM_IS_ACTIVE 0x00000001 413 /* Exclusive RF mode is active */ 414 #define NFA_DM_FLAGS_EXCL_RF_ACTIVE 0x00000002 415 /* Polling is enabled (while not in exclusive RF mode */ 416 #define NFA_DM_FLAGS_POLLING_ENABLED 0x00000004 417 /* send poll stop event */ 418 #define NFA_DM_FLAGS_SEND_POLL_STOP_EVT 0x00000008 419 /* auto reading of NDEF in progress */ 420 #define NFA_DM_FLAGS_AUTO_READING_NDEF 0x00000010 421 /* NFA_DM_ENABLE_EVT is not reported yet */ 422 #define NFA_DM_FLAGS_ENABLE_EVT_PEND 0x00000020 423 /* Send NFA_DEACTIVATED_EVT when deactivated */ 424 #define NFA_DM_FLAGS_SEND_DEACTIVATED_EVT 0x00000040 425 /* NFCC is restoring after back to full power mode */ 426 #define NFA_DM_FLAGS_NFCC_IS_RESTORING 0x00000100 427 /* NFCC power mode is updating */ 428 #define NFA_DM_FLAGS_SETTING_PWR_MODE 0x00000200 429 /* NFA DM is disabling NFC */ 430 #define NFA_DM_FLAGS_DM_DISABLING_NFC 0x00000400 431 /* NFA_SendRawFrame() is called since RF activation */ 432 #define NFA_DM_FLAGS_RAW_FRAME 0x00000800 433 /* NFA_DisableListening() is called and engaged */ 434 #define NFA_DM_FLAGS_LISTEN_DISABLED 0x00001000 435 /* NFA_PauseP2p() is called and engaged */ 436 #define NFA_DM_FLAGS_P2P_PAUSED 0x00002000 437 /* Power Off Sleep */ 438 #define NFA_DM_FLAGS_POWER_OFF_SLEEP 0x00008000 439 /* stored parameters */ 440 typedef struct { 441 uint8_t total_duration[NCI_PARAM_LEN_TOTAL_DURATION]; 442 443 uint8_t la_bit_frame_sdd[NCI_PARAM_LEN_LA_BIT_FRAME_SDD]; 444 uint8_t la_bit_frame_sdd_len; 445 uint8_t la_platform_config[NCI_PARAM_LEN_LA_PLATFORM_CONFIG]; 446 uint8_t la_platform_config_len; 447 uint8_t la_sel_info[NCI_PARAM_LEN_LA_SEL_INFO]; 448 uint8_t la_sel_info_len; 449 uint8_t la_nfcid1[NCI_NFCID1_MAX_LEN]; 450 uint8_t la_nfcid1_len; 451 uint8_t la_hist_by[NCI_MAX_HIS_BYTES_LEN]; 452 uint8_t la_hist_by_len; 453 454 uint8_t lb_sensb_info[NCI_PARAM_LEN_LB_SENSB_INFO]; 455 uint8_t lb_sensb_info_len; 456 uint8_t lb_nfcid0[NCI_PARAM_LEN_LB_NFCID0]; 457 uint8_t lb_nfcid0_len; 458 uint8_t lb_appdata[NCI_PARAM_LEN_LB_APPDATA]; 459 uint8_t lb_appdata_len; 460 uint8_t lb_adc_fo[NCI_PARAM_LEN_LB_ADC_FO]; 461 uint8_t lb_adc_fo_len; 462 uint8_t lb_h_info[NCI_MAX_ATTRIB_LEN]; 463 uint8_t lb_h_info_len; 464 465 uint8_t lf_protocol[NCI_PARAM_LEN_LF_PROTOCOL]; 466 uint8_t lf_protocol_len; 467 uint8_t lf_t3t_flags2[NCI_PARAM_LEN_LF_T3T_FLAGS2]; 468 uint8_t lf_t3t_flags2_len; 469 uint8_t lf_t3t_pmm[NCI_PARAM_LEN_LF_T3T_PMM]; 470 uint8_t lf_t3t_id[NFA_CE_LISTEN_INFO_MAX][NCI_PARAM_LEN_LF_T3T_ID]; 471 472 uint8_t fwi[NCI_PARAM_LEN_FWI]; 473 uint8_t wt[NCI_PARAM_LEN_WT]; 474 uint8_t atr_req_gen_bytes[NCI_MAX_GEN_BYTES_LEN]; 475 uint8_t atr_req_gen_bytes_len; 476 uint8_t atr_res_gen_bytes[NCI_MAX_GEN_BYTES_LEN]; 477 uint8_t atr_res_gen_bytes_len; 478 479 uint8_t pf_rc[NCI_PARAM_LEN_PF_RC]; 480 } tNFA_DM_PARAMS; 481 482 /* 483 ** NFA_NDEF CHO callback 484 ** It returns TRUE if NDEF is handled by connection handover module. 485 */ 486 typedef bool(tNFA_NDEF_CHO_CBACK)(uint32_t ndef_len, uint8_t* p_ndef_data); 487 488 /* DM control block */ 489 typedef struct { 490 uint32_t flags; /* NFA_DM flags (see definitions for NFA_DM_FLAGS_*) */ 491 tNFA_DM_CBACK* p_dm_cback; /* NFA DM callback */ 492 TIMER_LIST_ENT tle; 493 494 /* NFC link connection management */ 495 tNFA_CONN_CBACK* p_conn_cback; /* callback for connection events */ 496 tNFA_TECHNOLOGY_MASK poll_mask; /* technologies being polled */ 497 498 tNFA_CONN_CBACK* p_excl_conn_cback; /* exclusive RF mode callback */ 499 tNFA_NDEF_CBACK* p_excl_ndef_cback; /* ndef callback for exclusive RF mdoe */ 500 501 tNFA_NDEF_CHO_CBACK* 502 p_ndef_cho_cback; /* NDEF callback for static connection handover */ 503 504 tNFA_HANDLE poll_disc_handle; /* discovery handle for polling */ 505 506 uint8_t* p_activate_ntf; /* temp holding activation notfication */ 507 tHAL_API_GET_MAX_NFCEE* get_max_ee; 508 509 tNFC_RF_TECH_N_MODE 510 activated_tech_mode; /* previous activated technology and mode */ 511 uint8_t activated_nfcid[NFC_KOVIO_MAX_LEN]; /* NFCID 0/1/2 or UID of 512 ISO15694/Kovio */ 513 uint8_t activated_nfcid_len; /* length of NFCID or UID */ 514 515 /* NFC link discovery management */ 516 tNFA_DM_DISC_CB disc_cb; 517 518 /* NDEF Type handler */ 519 tNFA_DM_API_REG_NDEF_HDLR* 520 p_ndef_handler[NFA_NDEF_MAX_HANDLERS]; /* ndef handler table */ 521 522 /* stored parameters */ 523 tNFA_DM_PARAMS params; 524 525 /* SetConfig management */ 526 uint32_t setcfg_pending_mask; /* Mask of to indicate whether pending 527 SET_CONFIGs require NFA_DM_SET_CONFIG_EVT. 528 LSB=oldest pending */ 529 uint8_t setcfg_pending_num; /* Number of setconfigs pending */ 530 531 /* NFCC power mode */ 532 uint8_t nfcc_pwr_mode; /* NFA_DM_PWR_MODE_FULL or NFA_DM_PWR_MODE_OFF_SLEEP */ 533 } tNFA_DM_CB; 534 535 /* Internal function prototypes */ 536 void nfa_dm_ndef_handle_message(tNFA_STATUS status, uint8_t* p_msg_buf, 537 uint32_t len); 538 void nfa_dm_ndef_dereg_all(void); 539 void nfa_dm_act_conn_cback_notify(uint8_t event, tNFA_CONN_EVT_DATA* p_data); 540 void nfa_dm_notify_activation_status(tNFA_STATUS status, 541 tNFA_TAG_PARAMS* p_params); 542 void nfa_dm_disable_complete(void); 543 544 /* Internal functions from nfa_rw */ 545 void nfa_rw_init(void); 546 void nfa_rw_proc_disc_evt(tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER* p_data, 547 bool excl_rf_not_active); 548 tNFA_STATUS nfa_rw_send_raw_frame(NFC_HDR* p_data); 549 550 /* Internal functions from nfa_ce */ 551 void nfa_ce_init(void); 552 553 /* Pointer to compile-time configuration structure */ 554 extern tNFA_DM_DISC_FREQ_CFG* p_nfa_dm_rf_disc_freq_cfg; 555 extern tNFA_HCI_CFG* p_nfa_hci_cfg; 556 extern tNFA_DM_CFG* p_nfa_dm_cfg; 557 extern uint8_t* p_nfa_dm_ce_cfg; 558 extern uint8_t* p_nfa_dm_gen_cfg; 559 extern uint8_t nfa_ee_max_ee_cfg; 560 extern tNCI_DISCOVER_MAPS* p_nfa_dm_interface_mapping; 561 extern uint8_t nfa_dm_num_dm_interface_mapping; 562 extern bool nfa_poll_bail_out_mode; 563 564 /* NFA device manager control block */ 565 extern tNFA_DM_CB nfa_dm_cb; 566 567 void nfa_dm_init(void); 568 void nfa_p2p_init(void); 569 #if (NFA_SNEP_INCLUDED == TRUE) 570 void nfa_snep_init(bool is_dta_mode); 571 #else 572 #define nfa_snep_init(is_dta_mode) 573 #endif 574 575 void nfa_dta_init(void); 576 #if (NFC_NFCEE_INCLUDED == TRUE) 577 void nfa_ee_init(void); 578 void nfa_hci_init(void); 579 #else 580 #define nfa_ee_init() 581 #define nfa_hci_init() 582 #endif 583 584 /* Action function prototypes */ 585 bool nfa_dm_enable(tNFA_DM_MSG* p_data); 586 bool nfa_dm_disable(tNFA_DM_MSG* p_data); 587 bool nfa_dm_set_config(tNFA_DM_MSG* p_data); 588 bool nfa_dm_get_config(tNFA_DM_MSG* p_data); 589 bool nfa_dm_act_request_excl_rf_ctrl(tNFA_DM_MSG* p_data); 590 bool nfa_dm_act_release_excl_rf_ctrl(tNFA_DM_MSG* p_data); 591 bool nfa_dm_act_enable_polling(tNFA_DM_MSG* p_data); 592 bool nfa_dm_act_disable_polling(tNFA_DM_MSG* p_data); 593 bool nfa_dm_act_enable_listening(tNFA_DM_MSG* p_data); 594 bool nfa_dm_act_disable_listening(tNFA_DM_MSG* p_data); 595 bool nfa_dm_act_pause_p2p(tNFA_DM_MSG* p_data); 596 bool nfa_dm_act_resume_p2p(tNFA_DM_MSG* p_data); 597 bool nfa_dm_act_send_raw_frame(tNFA_DM_MSG* p_data); 598 bool nfa_dm_set_p2p_listen_tech(tNFA_DM_MSG* p_data); 599 bool nfa_dm_act_start_rf_discovery(tNFA_DM_MSG* p_data); 600 bool nfa_dm_act_stop_rf_discovery(tNFA_DM_MSG* p_data); 601 bool nfa_dm_act_set_rf_disc_duration(tNFA_DM_MSG* p_data); 602 bool nfa_dm_act_select(tNFA_DM_MSG* p_data); 603 bool nfa_dm_act_update_rf_params(tNFA_DM_MSG* p_data); 604 bool nfa_dm_act_deactivate(tNFA_DM_MSG* p_data); 605 bool nfa_dm_act_power_off_sleep(tNFA_DM_MSG* p_data); 606 bool nfa_dm_ndef_reg_hdlr(tNFA_DM_MSG* p_data); 607 bool nfa_dm_ndef_dereg_hdlr(tNFA_DM_MSG* p_data); 608 bool nfa_dm_tout(tNFA_DM_MSG* p_data); 609 bool nfa_dm_act_reg_vsc(tNFA_DM_MSG* p_data); 610 bool nfa_dm_act_send_vsc(tNFA_DM_MSG* p_data); 611 uint16_t nfa_dm_act_get_rf_disc_duration(); 612 bool nfa_dm_act_disable_timeout(tNFA_DM_MSG* p_data); 613 bool nfa_dm_act_nfc_cback_data(tNFA_DM_MSG* p_data); 614 615 void nfa_dm_proc_nfcc_power_mode(uint8_t nfcc_power_mode); 616 617 /* Main function prototypes */ 618 bool nfa_dm_evt_hdlr(NFC_HDR* p_msg); 619 void nfa_dm_sys_enable(void); 620 void nfa_dm_sys_disable(void); 621 tNFA_STATUS nfa_dm_check_set_config(uint8_t tlv_list_len, uint8_t* p_tlv_list, 622 bool app_init); 623 624 void nfa_dm_conn_cback_event_notify(uint8_t event, tNFA_CONN_EVT_DATA* p_data); 625 626 /* Discovery function prototypes */ 627 void nfa_dm_disc_sm_execute(tNFA_DM_RF_DISC_SM_EVENT event, 628 tNFA_DM_RF_DISC_DATA* p_data); 629 tNFA_HANDLE nfa_dm_add_rf_discover(tNFA_DM_DISC_TECH_PROTO_MASK disc_mask, 630 tNFA_DM_DISC_HOST_ID host_id, 631 tNFA_DISCOVER_CBACK* p_disc_cback); 632 void nfa_dm_delete_rf_discover(tNFA_HANDLE handle); 633 void nfa_dm_start_excl_discovery(tNFA_TECHNOLOGY_MASK poll_tech_mask, 634 tNFA_LISTEN_CFG* p_listen_cfg, 635 tNFA_DISCOVER_CBACK* p_disc_cback); 636 void nfa_dm_rel_excl_rf_control_and_notify(void); 637 void nfa_dm_stop_excl_discovery(void); 638 void nfa_dm_disc_new_state(tNFA_DM_RF_DISC_STATE new_state); 639 640 void nfa_dm_start_rf_discover(void); 641 void nfa_dm_rf_discover_select(uint8_t rf_disc_id, tNFA_NFC_PROTOCOL protocol, 642 tNFA_INTF_TYPE rf_interface); 643 tNFA_STATUS nfa_dm_rf_deactivate(tNFA_DEACTIVATE_TYPE deactivate_type); 644 bool nfa_dm_is_protocol_supported(tNFA_NFC_PROTOCOL protocol, uint8_t sel_res); 645 bool nfa_dm_is_active(void); 646 tNFC_STATUS nfa_dm_disc_sleep_wakeup(void); 647 tNFC_STATUS nfa_dm_disc_start_kovio_presence_check(void); 648 bool nfa_dm_is_raw_frame_session(void); 649 bool nfa_dm_is_p2p_paused(void); 650 651 #if (NFC_NFCEE_INCLUDED == FALSE) 652 #define nfa_ee_get_tech_route(ps, ha) \ 653 memset(ha, NFC_DH_ID, NFA_DM_MAX_TECH_ROUTE); 654 #endif 655 656 #if (BT_TRACE_VERBOSE == TRUE) 657 char* nfa_dm_nfc_revt_2_str(tNFC_RESPONSE_EVT event); 658 #endif 659 660 #endif /* NFA_DM_INT_H */ 661