Home | History | Annotate | Download | only in int
      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