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