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