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  *
     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 */
     37 enum
     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 */
     71 typedef 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 */
     79 typedef 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 */
     86 typedef 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 */
     95 typedef 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 */
    103 typedef 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 */
    113 typedef 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 */
    120 typedef 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 */
    127 typedef 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 */
    136 typedef 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 */
    143 typedef 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 */
    150 typedef 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 
    162 typedef 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 */
    175 typedef 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 */
    182 typedef 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 */
    190 typedef 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 */
    202 typedef 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 */
    229 enum
    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 };
    241 typedef UINT8 tNFA_DM_RF_DISC_STATE;
    242 
    243 /* DM RF discovery state machine event */
    244 enum
    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 };
    259 typedef UINT8 tNFA_DM_RF_DISC_SM_EVENT;
    260 
    261 /* DM RF discovery state machine data */
    262 typedef 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 
    269 typedef 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 */
    277 enum
    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 };
    283 typedef 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 
    318 typedef 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
    323 typedef UINT8 tNFA_DM_DISC_HOST_ID;
    324 
    325 /* DM deactivation callback type */
    326 typedef 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 
    337 typedef UINT16 tNFA_DM_DISC_FLAGS;
    338 
    339 /* DM Discovery control block */
    340 typedef 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 */
    356 enum {
    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 
    373 typedef 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 */
    427 typedef 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 } tNFA_DM_PARAMS;
    467 
    468 /*
    469 **  NFA_NDEF CHO callback
    470 **  It returns TRUE if NDEF is handled by connection handover module.
    471 */
    472 typedef BOOLEAN (tNFA_NDEF_CHO_CBACK) (UINT32 ndef_len, UINT8 *p_ndef_data);
    473 
    474 /* DM control block */
    475 typedef struct
    476 {
    477     UINT32                      flags;              /* NFA_DM flags (see definitions for NFA_DM_FLAGS_*)    */
    478     tNFA_DM_CBACK              *p_dm_cback;         /* NFA DM callback                                      */
    479     TIMER_LIST_ENT              tle;
    480 
    481     /* NFC link connection management */
    482     tNFA_CONN_CBACK            *p_conn_cback;       /* callback for connection events       */
    483     tNFA_TECHNOLOGY_MASK        poll_mask;          /* technologies being polled            */
    484 
    485     tNFA_CONN_CBACK            *p_excl_conn_cback;  /* exclusive RF mode callback           */
    486     tNFA_NDEF_CBACK            *p_excl_ndef_cback;  /* ndef callback for exclusive RF mdoe  */
    487 
    488     tNFA_NDEF_CHO_CBACK        *p_ndef_cho_cback;   /* NDEF callback for static connection handover */
    489 
    490     tNFA_HANDLE                 poll_disc_handle;   /* discovery handle for polling         */
    491 
    492     UINT8                      *p_activate_ntf;     /* temp holding activation notfication  */
    493     tHAL_API_GET_MAX_NFCEE     *get_max_ee;
    494 
    495     tNFC_RF_TECH_N_MODE         activated_tech_mode;/* previous activated technology and mode */
    496     UINT8                       activated_nfcid[NFC_KOVIO_MAX_LEN]; /* NFCID 0/1/2 or UID of ISO15694/Kovio  */
    497     UINT8                       activated_nfcid_len;/* length of NFCID or UID               */
    498 
    499     /* NFC link discovery management */
    500     tNFA_DM_DISC_CB             disc_cb;
    501 
    502     /* NDEF Type handler */
    503     tNFA_DM_API_REG_NDEF_HDLR   *p_ndef_handler[NFA_NDEF_MAX_HANDLERS];    /* ndef handler table */
    504 
    505     /* stored parameters */
    506     tNFA_DM_PARAMS              params;
    507 
    508     /* SetConfig management */
    509     UINT32                      setcfg_pending_mask;    /* Mask of to indicate whether pending SET_CONFIGs require NFA_DM_SET_CONFIG_EVT. LSB=oldest pending */
    510     UINT8                       setcfg_pending_num;     /* Number of setconfigs pending */
    511 
    512     /* NFCC power mode */
    513     UINT8                       nfcc_pwr_mode;          /* NFA_DM_PWR_MODE_FULL or NFA_DM_PWR_MODE_OFF_SLEEP */
    514 } tNFA_DM_CB;
    515 
    516 /* Internal function prototypes */
    517 void nfa_dm_ndef_register_cho (tNFA_NDEF_CHO_CBACK *p_cback);
    518 void nfa_dm_ndef_deregister_cho (void);
    519 void nfa_dm_ndef_handle_message (tNFA_STATUS status, UINT8 *p_msg_buf, UINT32 len);
    520 void nfa_dm_ndef_dereg_all (void);
    521 void nfa_dm_act_conn_cback_notify (UINT8 event, tNFA_CONN_EVT_DATA *p_data);
    522 void nfa_dm_notify_activation_status (tNFA_STATUS status, tNFA_TAG_PARAMS *p_params);
    523 void nfa_dm_disable_complete (void);
    524 
    525 /* Internal functions from nfa_rw */
    526 void nfa_rw_init (void);
    527 void nfa_rw_proc_disc_evt (tNFA_DM_RF_DISC_EVT event, tNFC_DISCOVER *p_data, BOOLEAN excl_rf_not_active);
    528 tNFA_STATUS nfa_rw_send_raw_frame (BT_HDR *p_data);
    529 
    530 /* Internal functions from nfa_ce */
    531 void nfa_ce_init (void);
    532 
    533 /* Pointer to compile-time configuration structure */
    534 extern tNFA_DM_DISC_FREQ_CFG *p_nfa_dm_rf_disc_freq_cfg;
    535 extern tNFA_HCI_CFG *p_nfa_hci_cfg;
    536 extern tNFA_DM_CFG *p_nfa_dm_cfg;
    537 extern UINT8 *p_nfa_dm_ce_cfg;
    538 extern UINT8 *p_nfa_dm_gen_cfg;
    539 extern UINT8 nfa_ee_max_ee_cfg;
    540 extern tNCI_DISCOVER_MAPS *p_nfa_dm_interface_mapping;
    541 extern UINT8 nfa_dm_num_dm_interface_mapping;
    542 
    543 /* NFA device manager control block */
    544 #if NFA_DYNAMIC_MEMORY == FALSE
    545 extern tNFA_DM_CB nfa_dm_cb;
    546 #else
    547 extern tNFA_DM_CB *nfa_dm_cb_ptr;
    548 #define nfa_dm_cb (*nfa_dm_cb_ptr)
    549 #endif
    550 
    551 void nfa_dm_init (void);
    552 void nfa_p2p_init (void);
    553 #if (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE))
    554 void nfa_cho_init (void);
    555 #else
    556 #define nfa_cho_init()
    557 #endif /* (defined (NFA_CHO_INCLUDED) && (NFA_CHO_INCLUDED==TRUE)) */
    558 #if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE))
    559 void nfa_snep_init (BOOLEAN is_dta_mode);
    560 #else
    561 #define nfa_snep_init(is_dta_mode)
    562 #endif
    563 
    564 void nfa_dta_init (void);
    565 #if (NFC_NFCEE_INCLUDED == TRUE)
    566 void nfa_ee_init (void);
    567 void nfa_hci_init (void);
    568 #else
    569 #define nfa_ee_init()
    570 #define nfa_hci_init()
    571 #endif
    572 
    573 /* Action function prototypes */
    574 BOOLEAN nfa_dm_enable (tNFA_DM_MSG *p_data);
    575 BOOLEAN nfa_dm_disable (tNFA_DM_MSG *p_data);
    576 BOOLEAN nfa_dm_set_config (tNFA_DM_MSG *p_data);
    577 BOOLEAN nfa_dm_get_config (tNFA_DM_MSG *p_data);
    578 BOOLEAN nfa_dm_act_request_excl_rf_ctrl (tNFA_DM_MSG *p_data);
    579 BOOLEAN nfa_dm_act_release_excl_rf_ctrl (tNFA_DM_MSG *p_data);
    580 BOOLEAN nfa_dm_act_enable_polling (tNFA_DM_MSG *p_data);
    581 BOOLEAN nfa_dm_act_disable_polling (tNFA_DM_MSG *p_data);
    582 BOOLEAN nfa_dm_act_enable_listening (tNFA_DM_MSG *p_data);
    583 BOOLEAN nfa_dm_act_disable_listening (tNFA_DM_MSG *p_data);
    584 BOOLEAN nfa_dm_act_pause_p2p (tNFA_DM_MSG *p_data);
    585 BOOLEAN nfa_dm_act_resume_p2p (tNFA_DM_MSG *p_data);
    586 BOOLEAN nfa_dm_act_send_raw_frame (tNFA_DM_MSG *p_data);
    587 BOOLEAN nfa_dm_set_p2p_listen_tech (tNFA_DM_MSG *p_data);
    588 BOOLEAN nfa_dm_act_start_rf_discovery (tNFA_DM_MSG *p_data);
    589 BOOLEAN nfa_dm_act_stop_rf_discovery (tNFA_DM_MSG *p_data);
    590 BOOLEAN nfa_dm_act_set_rf_disc_duration (tNFA_DM_MSG *p_data);
    591 BOOLEAN nfa_dm_act_select (tNFA_DM_MSG *p_data);
    592 BOOLEAN nfa_dm_act_update_rf_params (tNFA_DM_MSG *p_data);
    593 BOOLEAN nfa_dm_act_deactivate (tNFA_DM_MSG *p_data);
    594 BOOLEAN nfa_dm_act_power_off_sleep (tNFA_DM_MSG *p_data);
    595 BOOLEAN nfa_dm_ndef_reg_hdlr (tNFA_DM_MSG *p_data);
    596 BOOLEAN nfa_dm_ndef_dereg_hdlr (tNFA_DM_MSG *p_data);
    597 BOOLEAN nfa_dm_tout (tNFA_DM_MSG *p_data);
    598 BOOLEAN nfa_dm_act_reg_vsc (tNFA_DM_MSG *p_data);
    599 BOOLEAN nfa_dm_act_send_vsc (tNFA_DM_MSG *p_data);
    600 BOOLEAN nfa_dm_act_disable_timeout (tNFA_DM_MSG *p_data);
    601 BOOLEAN nfa_dm_act_nfc_cback_data (tNFA_DM_MSG *p_data);
    602 
    603 void nfa_dm_proc_nfcc_power_mode (UINT8 nfcc_power_mode);
    604 
    605 /* Main function prototypes */
    606 BOOLEAN nfa_dm_evt_hdlr (BT_HDR *p_msg);
    607 void nfa_dm_sys_enable (void);
    608 void nfa_dm_sys_disable (void);
    609 tNFA_STATUS nfa_dm_check_set_config (UINT8 tlv_list_len, UINT8 *p_tlv_list, BOOLEAN app_init);
    610 
    611 void nfa_dm_conn_cback_event_notify (UINT8 event, tNFA_CONN_EVT_DATA *p_data);
    612 
    613 /* Discovery function prototypes */
    614 void nfa_dm_disc_sm_execute (tNFA_DM_RF_DISC_SM_EVENT event, tNFA_DM_RF_DISC_DATA *p_data);
    615 tNFA_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);
    616 void nfa_dm_delete_rf_discover (tNFA_HANDLE handle);
    617 void nfa_dm_start_excl_discovery (tNFA_TECHNOLOGY_MASK poll_tech_mask,
    618                                   tNFA_LISTEN_CFG *p_listen_cfg,
    619                                   tNFA_DISCOVER_CBACK  *p_disc_cback);
    620 void nfa_dm_rel_excl_rf_control_and_notify (void);
    621 void nfa_dm_stop_excl_discovery (void);
    622 void nfa_dm_disc_new_state (tNFA_DM_RF_DISC_STATE new_state);
    623 
    624 void nfa_dm_start_rf_discover (void);
    625 void nfa_dm_rf_discover_select (UINT8 rf_disc_id, tNFA_NFC_PROTOCOL protocol, tNFA_INTF_TYPE rf_interface);
    626 tNFA_STATUS nfa_dm_rf_deactivate (tNFA_DEACTIVATE_TYPE deactivate_type);
    627 BOOLEAN nfa_dm_is_protocol_supported (tNFA_NFC_PROTOCOL protocol, UINT8 sel_res);
    628 BOOLEAN nfa_dm_is_active (void);
    629 tNFC_STATUS nfa_dm_disc_sleep_wakeup (void);
    630 tNFC_STATUS nfa_dm_disc_start_kovio_presence_check (void);
    631 BOOLEAN nfa_dm_is_raw_frame_session (void);
    632 BOOLEAN nfa_dm_is_p2p_paused (void);
    633 
    634 
    635 #if (NFC_NFCEE_INCLUDED == FALSE)
    636 #define nfa_ee_get_tech_route(ps, ha) memset(ha, NFC_DH_ID, NFA_DM_MAX_TECH_ROUTE);
    637 #endif
    638 
    639 #if (BT_TRACE_VERBOSE == TRUE)
    640 char *nfa_dm_nfc_revt_2_str (tNFC_RESPONSE_EVT event);
    641 #endif
    642 
    643 
    644 #endif /* NFA_DM_INT_H */
    645 
    646