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