Home | History | Annotate | Download | only in int
      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 DTA
     23  *
     24  ******************************************************************************/
     25 #ifndef NFA_DTA_INT_H
     26 #define NFA_DTA_INT_H
     27 
     28 #include "nfa_dta_api.h"
     29 #include "nfa_sys.h"
     30 #include "nfa_sys_int.h"
     31 #include "nfc_api.h"
     32 #include "rw_api.h"
     33 #include "ce_api.h"
     34 
     35 #if (NFA_DTA_INCLUDED == TRUE)
     36 
     37 /*****************************************************************************
     38 **  DTA definitions
     39 *****************************************************************************/
     40 #define NFA_DTA_PATTERN_NUMBER_INVALID              0xFFFF
     41 
     42 #define NFA_DTA_DISCOVER_PARAMS_MAX     6
     43 
     44 #define NDEF_WKT_TEXT_HDR_LEN   7               /* Header length for long NDEF text message */
     45 #define NFA_DTA_T3T_WRITE_NDEF_SIZE     192     /* Size of NDEF message for T3T write-tests ([DTA] $5.5.6) */
     46 #define NFA_DTA_T3T_LISTEN_SYSTEMCODE   0xBABE  /* System code to use for T3T Listen mode tests */
     47 
     48 #define NFA_PROTOCOL_RANK_INVALID       0xFF    /* Maximum protocol preference rank */
     49 
     50 #define NFA_DTA_SCRATCH_BUF_SIZE        T3T_MSG_BLOCKSIZE
     51 
     52 #ifndef NFA_DTA_DEFAULT_CO_OUT_DSAP
     53 #define NFA_DTA_DEFAULT_CO_OUT_DSAP     0x10    /* Default SAP[LT,CO-OUT-DEST] if SDP was not performed to get SAP from the LT */
     54 #endif
     55 
     56 /*****************************************************************************
     57 * DTA state machine definitions
     58 *****************************************************************************/
     59 
     60 typedef struct {
     61     BOOLEAN tp_continue;                    /* NFA_DTA_CFG_TP_CONTINUE    */
     62     tNFA_DTA_FL_POLL_LISTEN poll_listen;    /* NFA_DTA_CFG_POLL_LISTEN    */
     63     BOOLEAN t4at_nfcdep_priority;           /* NFA_DTA_CFG_T4AT_NFCDEP_PRIORITY */
     64     BOOLEAN reactivation;                   /* NFA_DTA_CFG_REACTIVATION   */
     65     UINT16  total_duration;                 /* NFA_DTA_CFG_TOTAL_DURATION */
     66     BOOLEAN enable_dta_llcp;                /* NFA_DTA_CFG_LLCP */
     67     tNFA_DTA_SNEP_MODE dta_snep_mode;       /* NFA_DTA_CFG_SNEP */
     68     tNFA_DTA_EMVCO_PCD_MODE emvco_pcd_mode; /* NFA_DTA_CFG_EMVCO_PCD */
     69 } tNFA_DTA_CONFIG;
     70 
     71 /*****************************************************************************
     72 * DTA state machine definitions
     73 *****************************************************************************/
     74 /* DTA events */
     75 enum
     76 {
     77     /* device manager local device API events */
     78     NFA_DTA_API_ENABLE_EVT = NFA_SYS_EVT_START (NFA_ID_DTA),
     79     NFA_DTA_API_DISABLE_EVT,
     80     NFA_DTA_API_CONFIG_EVT,
     81     NFA_DTA_API_START_EVT,
     82     NFA_DTA_API_STOP_EVT,
     83     NFA_DTA_ACTIVATE_EVT,
     84     NFA_DTA_DEACTIVATE_EVT,
     85     NFA_DTA_DATA_CBACK_EVT,
     86 
     87     NFA_DTA_MAX_EVT
     88 };
     89 
     90 
     91 /* data type for NFA_DTA_API_ENABLE_EVT */
     92 typedef struct
     93 {
     94     BT_HDR          hdr;
     95     BOOLEAN         auto_start;
     96     tNFA_DTA_CBACK  *p_cback;
     97 } tNFA_DTA_API_ENABLE;
     98 
     99 /* data type for NFA_DTA_API_START_EVT  */
    100 typedef struct
    101 {
    102     BT_HDR                  hdr;
    103     UINT8                   pattern_number;
    104     UINT8                   tlv_len;
    105     UINT8                   *p_tlv_params;
    106 } tNFA_DTA_API_START;
    107 
    108 /* data type for NFA_DTA_API_CONFIG  */
    109 typedef struct
    110 {
    111     BT_HDR                  hdr;
    112     tNFA_DTA_CFG_ITEM       item;
    113     tNFA_DTA_CFG            cfg_data;
    114 } tNFA_DTA_API_CONFIG;
    115 
    116 /* data type for NFA_DTA_DATA_CBACK_EVT */
    117 typedef struct
    118 {
    119     UINT8                   event;
    120     tRW_DATA                data;
    121 } tNFA_DTA_RW_DATA;
    122 
    123 typedef struct
    124 {
    125     UINT8                   event;
    126     tCE_DATA                data;
    127 } tNFA_DTA_CE_DATA;
    128 
    129 typedef struct
    130 {
    131     tNFC_CONN_EVT           event;
    132     tNFC_CONN               data;
    133 } tNFA_DTA_NFCDEP_DATA;
    134 
    135 
    136 enum
    137 {
    138     NFA_DTA_LLCP_CONNECT_CO_ECHO_OUT,
    139     NFA_DTA_LLCP_DISCONNECT_CO_ECHO_OUT
    140 };
    141 typedef UINT8 tNFA_DTA_LLCP_EVT;
    142 
    143 enum
    144 {
    145     NFA_DTA_RW_DATA,
    146     NFA_DTA_CE_DATA,
    147     NFA_DTA_NFCDEP_DATA,
    148     NFA_DTA_LLCP_DATA
    149 };
    150 
    151 typedef UINT8 tNFA_DTA_DATA_TYPE;
    152 
    153 typedef struct
    154 {
    155     BT_HDR                  hdr;
    156     tNFA_DTA_DATA_TYPE      type;
    157     union
    158     {
    159         tNFA_DTA_RW_DATA        rw;
    160         tNFA_DTA_CE_DATA        ce;
    161         tNFA_DTA_NFCDEP_DATA    nfcdep;
    162         tNFA_DTA_LLCP_EVT       llcp_evt;
    163     } data;
    164 } tNFA_DTA_DATA_CBACK;
    165 
    166 /* All API message type */
    167 typedef union
    168 {
    169     BT_HDR              hdr;
    170     tNFA_DTA_API_ENABLE enable;
    171     tNFA_DTA_API_CONFIG cfg;
    172     tNFA_DTA_API_START  start;
    173     tNFA_DTA_DATA_CBACK data_cback;
    174 }tNFA_DTA_MSG;
    175 
    176 
    177 
    178 /* DTA states */
    179 enum
    180 {
    181     NFA_DTA_ST_IDLE,
    182     NFA_DTA_ST_DISCOVER,        /* Polling/Listening */
    183     NFA_DTA_ST_ACTIVATED        /* Activated, listen mode */
    184 };
    185 typedef UINT8 tNFA_DTA_STATE;
    186 
    187 /* DTA Substates (while in ACTIVATED state) - substate enumerations are found in protocol-specific files (nfa_dta_XXX.c) */
    188 #define NFA_DTA_SST_IDLE    0
    189 typedef UINT8 tNFA_DTA_SUBSTATE;
    190 
    191 /* DTA discovery states */
    192 enum
    193 {
    194     NFA_DTA_DISC_STATE_IDLE,
    195     NFA_DTA_DISC_STATE_DISCOVERY,
    196     NFA_DTA_DISC_STATE_POLL_ACTIVE,
    197     NFA_DTA_DISC_STATE_W4_ALL_DISCOVERIES,
    198     NFA_DTA_DISC_STATE_W4_HOST_SELECT,
    199     NFA_DTA_DISC_STATE_LISTEN_ACTIVE,
    200     NFA_DTA_DISC_STATE_LISTEN_SLEEP,
    201     NFA_DTA_DISC_STATE_MAX
    202 };
    203 
    204 /*****************************************************************************
    205 * DTA control block definitions
    206 *****************************************************************************/
    207 
    208 /* NDEF buffer definitions */
    209 enum {
    210     NFA_DTA_BUF_READ,               /* Buffer for RW Read requests */
    211     NFA_DTA_BUF_WRITE,              /* Buffer for RW Write requests */
    212     NFA_DTA_BUF_MAX
    213 };
    214 
    215 typedef struct {
    216     UINT8   *p_data;
    217     UINT32  max_size;
    218     UINT32  cur_size;
    219     UINT32  offset;     /* current read/write offset */
    220 } tNFA_DTA_BUF_CB;
    221 
    222 
    223 /* T4T listen mode test application */
    224 enum {
    225     NFA_DTA_T4T_CE_APP_NONE,        /* Not selected */
    226     NFA_DTA_T4T_CE_APP_LOOPBACK,    /* loopback test applicaiton */
    227     NFA_DTA_T4T_CE_APP_PROP         /* propretary test application */
    228 };
    229 
    230 /* DTA test step command */
    231 typedef tNFC_STATUS (*tNFA_DTA_CMD_FCN) (void *);
    232 
    233 /* dta control block flags */
    234 #define NFA_DTA_FL_ENABLED                      0x00000001  /* DTA is enabled */
    235 #define NFA_DTA_FL_AUTOSTART                    0x00000002  /* Automatically start discovery when NFC is enabled */
    236 #define NFA_DTA_FL_STOPPING                     0x00000004  /* DTA is stopping (NFA_DtaStop called) */
    237 #define NFA_DTA_FL_DISABLING                    0x00000008  /* DTA is being disabled (NFA_DtaDisable called) */
    238 #define NFA_DTA_FL_T4T_DESELECT_DEACT           0x00000010  /* T4T/NFCDEP is deactivating to IDLE (need to DESELECT first) */
    239 
    240 /* DTA control block */
    241 typedef struct {
    242     UINT32                  dta_flags;      /* dta_flags must be first item in structure (statically intialized to 0 on startup) */
    243 
    244     /* Configuration */
    245     tNFA_DTA_CONFIG         cfg;
    246 
    247     /* DTA State Machine */
    248     tNFA_DTA_STATE          state;
    249     tNFA_DTA_SUBSTATE       substate;       /* Current protocol-specific sub-state */
    250     tNFA_DTA_CBACK          *p_cback;       /* Applicatation for DTA event notification */
    251 
    252     /* DTA test parameters */
    253     UINT32                  pattern_number;
    254     UINT32                  pattern_number_old;
    255 
    256     /* Discovery Parameters */
    257     UINT8                   disc_state;
    258     UINT8                   disc_params_num;
    259     tNFC_DISCOVER_PARAMS    disc_params[NFA_DTA_DISCOVER_PARAMS_MAX];
    260 
    261     /* Activation parameters */
    262     tNFC_ACTIVATE_DEVT      activate_params;
    263     UINT8                   cur_protocol_rank;  /* perference ranking of currently discovered protocol */
    264 
    265     tRW_CBACK              *p_rw_cback;
    266     tCE_CBACK              *p_ce_cback;
    267 
    268     TIMER_LIST_ENT          protocol_timer;     /* timer for the activated protocol if needed */
    269 
    270     UINT8                   t4t_ce_app;         /* T4T listen mode test application */
    271     tCE_T4T_AID_HANDLE      t4t_dta_aid_hdl;    /* T4T registration handle for proprietary dta aid */
    272     tCE_T4T_AID_HANDLE      t4t_prop_aid_hdl;   /* T4T registration handle for proprietary aid */
    273     UINT8                   nfc_dep_wt;
    274 
    275     BOOLEAN                 llcp_cl_more_to_read;    /* TRUE if there is more to read in llcp cl link*/
    276     BOOLEAN                 llcp_co_more_to_read;    /* TRUE if there is more to read in llcp recieve window*/
    277     BOOLEAN                 llcp_is_initiator;      /* TURE if IUT is LLCP initiator */
    278     UINT16                  llcp_local_link_miu;    /* link MIU of IUT               */
    279     UINT16                  llcp_remote_link_miu;   /* link MIU of LT                */
    280 
    281     UINT8                   llcp_cl_in_local_sap;   /* SAP of IUT-CL-IN-DEST */
    282     UINT8                   llcp_cl_out_local_sap;  /* SAP of IUT-CL-OUT-SRC */
    283     UINT8                   llcp_cl_out_remote_sap; /* SAP of LT-CL-OUT-DEST */
    284 
    285     UINT8                   llcp_co_in_local_sap;   /* SAP of IUT-CO-IN-DEST */
    286     UINT8                   llcp_co_in_remote_sap;  /* SAP of LT-CO-IN-SRC   */
    287     UINT8                   llcp_co_out_local_sap;  /* SAP of IUT-CO-OUT-SRC */
    288     UINT8                   llcp_co_out_remote_sap; /* SAP of LT-CO-OUT-DEST */
    289 
    290     UINT16                  llcp_co_out_remote_miu; /* MIU of LT-CO-OUT-DEST */
    291     UINT8                   llcp_co_out_remote_rw;  /* RW of LT-CO-OUT-DEST  */
    292 
    293 #define NFA_DTA_LLCP_FLAGS_CO_OUT_CONNECTING    0x01    /* establishing outbound on connection-oriented */
    294 #define NFA_DTA_LLCP_FLAGS_CO_OUT_CONNECTED     0x02    /* established outbound on connection-oriented  */
    295 
    296     UINT8                   llcp_flags;             /* internal flags for LLCP echo test */
    297     UINT8                   llcp_sdp_tid;           /* transaction ID for SDP */
    298 
    299     TIMER_LIST_ENT          llcp_cl_echo_timer;     /* timer for the connectionless echo test application      */
    300     TIMER_LIST_ENT          llcp_co_echo_timer;     /* timer for the connection-oriented echo test application */
    301     BUFFER_Q                llcp_cl_buffer;         /* buffer for the connectionless echo test application     */
    302     BUFFER_Q                llcp_co_buffer;         /* buffer for the connection-oriented echo test application*/
    303 
    304     tNFA_HANDLE             snep_server_handle;
    305     tNFA_HANDLE             snep_server_conn_handle;
    306     tNFA_HANDLE             snep_client_handle;
    307 
    308 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_DEFAULT_SERVER    0x01
    309 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_EXTENDED_SERVER   0x02
    310 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_PUT_SHORT_NDEF    0x04
    311 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_PUT_LONG_NDEF     0x08
    312 #define NFA_DTA_SNEP_CLIENT_TEST_FLAGS_GET               0x10
    313 
    314     UINT8                   snep_client_test_flags;
    315 
    316     UINT8                   *p_snep_short_ndef;
    317     UINT32                  snep_short_ndef_size;
    318     UINT8                   *p_snep_long_ndef;
    319     UINT32                  snep_long_ndef_size;
    320 
    321     /* DTA buffer for NDEF read/write */
    322     tNFA_DTA_BUF_CB buf_cb[NFA_DTA_BUF_MAX];
    323     UINT32              ndef_size;      /* Size of NDEF message from NDEF detection */
    324 
    325     /* Scratch buffer for miscelaneous use */
    326     UINT8               scratch_buf[NFA_DTA_SCRATCH_BUF_SIZE];
    327 
    328     /* DTA Test command table */
    329     tNFA_DTA_CMD_FCN    *p_cur_cmd_tbl; /* Current table of commands for current test */
    330     UINT8               cur_cmd_idx;
    331 } tNFA_DTA_CB;
    332 extern tNFA_DTA_CB nfa_dta_cb;
    333 
    334 /* NFA_SYS info for DTA */
    335 extern const tNFA_SYS_REG nfa_dta_sys_reg;
    336 
    337 /* DTA startup setconfig parameters */
    338 extern UINT8 *p_nfa_dta_start_up_cfg;
    339 extern UINT8 nfa_dta_start_up_cfg_len;
    340 
    341 /*****************************************************************************
    342 * DTA internal funciton protoytpes
    343 *****************************************************************************/
    344 /* Internal function prototypes */
    345 void nfa_dta_deactivate (UINT8 deactivate_type);
    346 void nfa_dta_shutdown (void);
    347 void nfa_dta_discover_start (void);
    348 
    349 /* nfa_sys handler for DTA */
    350 BOOLEAN nfa_dta_evt_hdlr (BT_HDR *p_msg);
    351 void nfa_dta_sys_disable (void);
    352 
    353 /* State machine action functions */
    354 BOOLEAN nfa_dta_enable (tNFA_DTA_MSG *p_data);
    355 BOOLEAN nfa_dta_disable (tNFA_DTA_MSG *p_data);
    356 BOOLEAN nfa_dta_config (tNFA_DTA_MSG *p_data);
    357 BOOLEAN nfa_dta_start (tNFA_DTA_MSG *p_data);
    358 BOOLEAN nfa_dta_handle_deact (tNFA_DTA_MSG *p_data);
    359 BOOLEAN nfa_dta_stop (tNFA_DTA_MSG *p_data);
    360 BOOLEAN nfa_dta_run_test (tNFA_DTA_MSG *p_data);
    361 BOOLEAN nfa_dta_proc_data (tNFA_DTA_MSG *p_msg_data);
    362 
    363 /* Utility functions */
    364 void nfa_dta_test_set_state (tNFA_DTA_STATE state);
    365 void nfa_dta_test_set_substate (tNFA_DTA_SUBSTATE substate);
    366 void nfa_dta_free_ndef_buf (UINT8 ndef_idx);
    367 UINT8 *nfa_dta_realloc_buf (UINT8 ndef_idx, UINT32 size);
    368 void nfa_dta_t3t_nfcid_rand (UINT8 nfcid2[NCI_RF_F_UID_LEN]);
    369 
    370 /* Test function entry points (in nfa_dta_XXX.c) */
    371 void nfa_dta_nfcdep_poll_test_start (void);
    372 void nfa_dta_nfcdep_proc_data (tNFC_CONN_EVT event, tNFC_CONN *p_data);
    373 void nfa_dta_t1t_poll_test_start (void);
    374 void nfa_dta_t2t_poll_test_start (void);
    375 void nfa_dta_t3t_poll_test_start (void);
    376 void nfa_dta_t4t_poll_test_start (void);
    377 
    378 void nfa_dta_nfcdep_listen_test_start (void);
    379 void nfa_dta_t3t_listen_test_start (void);
    380 void nfa_dta_t4t_listen_test_start (void);
    381 
    382 void nfa_dta_t1t_rw_cback (UINT8 event, tRW_DATA *p_data);
    383 void nfa_dta_t2t_rw_cback (UINT8 event, tRW_DATA *p_data);
    384 void nfa_dta_t3t_rw_cback (UINT8 event, tRW_DATA *p_data);
    385 void nfa_dta_t4t_rw_cback (UINT8 event, tRW_DATA *p_data);
    386 
    387 void nfa_dta_t3t_ce_cback (UINT8 event, tCE_DATA *p_data);
    388 void nfa_dta_t4t_ce_cback (UINT8 event, tCE_DATA *p_data);
    389 
    390 void nfa_dta_ce_cback (UINT8 event, tCE_DATA *p_ce_data);
    391 
    392 void nfa_dta_t4t_register_apps (void);
    393 void nfa_dta_t4t_deregister_apps (void);
    394 
    395 void nfa_dta_llcp_register_echo (void);
    396 void nfa_dta_llcp_deregister_echo (void);
    397 void nfa_dta_llcp_activate_link (void);
    398 void nfa_dta_llcp_connect_co_echo_out (void);
    399 void nfa_dta_llcp_disconnect_co_echo_out (void);
    400 
    401 void nfa_dta_snep_register (void);
    402 void nfa_dta_snep_deregister (void);
    403 void nfa_dta_snep_mode (tNFA_DTA_SNEP_MODE mode);
    404 
    405 void nfa_dta_emvco_pcd_config_nfcc (BOOLEAN enable);
    406 void nfa_dta_emvco_pcd_start (void);
    407 void nfa_dta_emvco_pcd_cback (UINT8 event, tRW_DATA *p_data);
    408 
    409 extern UINT8 *p_nfa_dta_brcm_start_up_cfg;
    410 extern UINT8 nfa_dta_brcm_start_up_cfg_len;
    411 extern UINT8 *p_nfa_dta_start_up_vsc_cfg;
    412 
    413 #endif /* (NFA_DTA_INCLUDED == TRUE) */
    414 #endif /* NFA_DTA_INT_H */
    415 
    416