Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2010-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  *  NFA interface to NFCEE
     23  *
     24  ******************************************************************************/
     25 #ifndef NFA_EE_API_H
     26 #define NFA_EE_API_H
     27 
     28 #include "nfc_target.h"
     29 #include "nfa_api.h"
     30 #include "nfc_api.h"
     31 
     32 /*****************************************************************************
     33 **  Constants and data types
     34 *****************************************************************************/
     35 #define NFA_MAX_AID_LEN             NFC_MAX_AID_LEN /* 16 per ISO 7816 specification    */
     36 #define NFA_EE_HANDLE_DH            (NFA_HANDLE_GROUP_EE|NFC_DH_ID)
     37 
     38 /* NFA EE callback events */
     39 enum
     40 {
     41     NFA_EE_DISCOVER_EVT,        /* The status for NFA_EeDiscover ()                      */
     42     NFA_EE_REGISTER_EVT,        /* The status for NFA_EeRegister ()                      */
     43     NFA_EE_DEREGISTER_EVT,      /* The status for NFA_EeDeregister ()                    */
     44     NFA_EE_MODE_SET_EVT,        /* The status for activating or deactivating an NFCEE    */
     45     NFA_EE_ADD_AID_EVT,         /* The status for adding an AID to a routing table entry */
     46     NFA_EE_REMOVE_AID_EVT,      /* The status for removing an AID from a routing table   */
     47     NFA_EE_SET_TECH_CFG_EVT,    /* The status for setting the routing based on RF tech.  */
     48     NFA_EE_SET_PROTO_CFG_EVT,   /* The status for setting the routing based on protocols */
     49     NFA_EE_CONNECT_EVT,         /* Result of NFA_EeConnect                               */
     50     NFA_EE_DATA_EVT,            /* Received data from NFCEE.                             */
     51     NFA_EE_DISCONNECT_EVT,      /* NFCEE connection closed.                              */
     52     NFA_EE_NEW_EE_EVT,          /* A new NFCEE is discovered                             */
     53     NFA_EE_ACTION_EVT,          /* An action happened in NFCEE                           */
     54     NFA_EE_DISCOVER_REQ_EVT,    /* NFCEE Discover Request Notification                   */
     55     NFA_EE_ROUT_ERR_EVT,        /* Error - exceed NFCC CE Routing size                   */
     56     NFA_EE_NO_MEM_ERR_EVT,      /* Error - out of GKI buffers                            */
     57     NFA_EE_NO_CB_ERR_EVT        /* Error - Can not find control block or wrong state     */
     58 };
     59 typedef UINT8 tNFA_EE_EVT;
     60 
     61 /* tNFA_NFCEE_INTERFACE values */
     62 #define NFA_EE_INTERFACE_APDU         NFC_NFCEE_INTERFACE_APDU          /* APDU Interface       */
     63 #define NFA_EE_INTERFACE_HCI_ACCESS   NFC_NFCEE_INTERFACE_HCI_ACCESS    /* HCI Access Interface*/
     64 #define NFA_EE_INTERFACE_T3T          NFC_NFCEE_INTERFACE_T3T           /* T3T Command Interface*/
     65 #define NFA_EE_INTERFACE_TRANSPARENT  NFC_NFCEE_INTERFACE_TRANSPARENT   /* Transparent Interface*/
     66 #define NFA_EE_INTERFACE_PROPRIETARY  NFC_NFCEE_INTERFACE_PROPRIETARY   /* Proprietary          */
     67 typedef UINT8 tNFA_EE_INTERFACE;
     68 
     69 #define NFA_EE_TAG_HW_ID             NFC_NFCEE_TAG_HW_ID                /* HW/Registration ID   */
     70 #define NFA_EE_TAG_ATR_BYTES         NFC_NFCEE_TAG_ATR_BYTES            /* ATR Bytes            */
     71 #define NFA_EE_TAG_T3T_INFO          NFC_NFCEE_TAG_T3T_INFO             /* T3T Supplement. Info */
     72 #define NFA_EE_TAG_HCI_HOST_ID       NFC_NFCEE_TAG_HCI_HOST_ID          /* Broadcom Proprietary */
     73 typedef UINT8 tNFA_EE_TAG;
     74 
     75 /* for NFA_EeModeSet () */
     76 #define NFA_EE_MD_ACTIVATE          NFC_MODE_ACTIVATE
     77 #define NFA_EE_MD_DEACTIVATE        NFC_MODE_DEACTIVATE
     78 typedef UINT8 tNFA_EE_MD;
     79 
     80 #define NFA_EE_PWR_STATE_ON         0x01    /* The device is on                 */
     81 #define NFA_EE_PWR_STATE_SWITCH_OFF 0x02    /* The device is switched off       */
     82 #define NFA_EE_PWR_STATE_BATT_OFF   0x04    /* The device's battery is removed  */
     83 #define NFA_EE_PWR_STATE_NONE       0       /* used to remove a particular technology or protocol based routing cfg of a handle from the routing table. */
     84 typedef UINT8 tNFA_EE_PWR_STATE;
     85 
     86 
     87 #define NFA_EE_STATUS_INACTIVE          NFC_NFCEE_STATUS_INACTIVE /* NFCEE connected and inactive */
     88 #define NFA_EE_STATUS_ACTIVE            NFC_NFCEE_STATUS_ACTIVE   /* NFCEE connected and active   */
     89 #define NFA_EE_STATUS_REMOVED           NFC_NFCEE_STATUS_REMOVED  /* NFCEE removed                */
     90 #define NFA_EE_STATUS_PENDING           0x10                      /* waiting for response from NFCC */
     91 #define NFA_EE_STATUS_ACTIVATING        (NFA_EE_STATUS_PENDING+NFC_NFCEE_STATUS_ACTIVE)
     92 #define NFA_EE_STATUS_DEACTIVATING      (NFA_EE_STATUS_PENDING+NFC_NFCEE_STATUS_INACTIVE)
     93 typedef UINT8 tNFA_EE_STATUS;
     94 
     95 
     96 
     97 /* additional NFCEE Info */
     98 typedef struct
     99 {
    100     tNFA_EE_TAG             tag;
    101     UINT8                   len;
    102     UINT8                   info[NFC_MAX_EE_INFO];
    103 } tNFA_EE_TLV;
    104 
    105 typedef struct
    106 {
    107     tNFA_HANDLE         ee_handle;              /* handle for NFCEE oe DH   */
    108     tNFA_EE_STATUS      ee_status;              /* The NFCEE status         */
    109     UINT8               num_interface;          /* number of NFCEE interface*/
    110     tNFA_EE_INTERFACE   ee_interface[NFC_MAX_EE_INTERFACE];/* NFCEE supported interface */
    111     UINT8               num_tlvs;               /* number of TLVs           */
    112     tNFA_EE_TLV         ee_tlv[NFC_MAX_EE_TLVS];/* the TLV                  */
    113 } tNFA_EE_INFO;
    114 
    115 
    116 
    117 typedef struct
    118 {
    119     tNFA_STATUS         status;                         /* NFA_STATUS_OK is successful      */
    120     UINT8               num_ee;                         /* number of NFCEEs found           */
    121     tNFA_EE_INFO        ee_info[NFA_EE_MAX_EE_SUPPORTED];/*NFCEE information                */
    122 } tNFA_EE_DISCOVER;
    123 
    124 typedef struct
    125 {
    126     tNFA_HANDLE         ee_handle;      /* Handle of NFCEE                                  */
    127     tNFA_STATUS         status;         /* NFA_STATUS_OK is successful                      */
    128     tNFA_EE_INTERFACE   ee_interface;   /* NFCEE interface associated with this connection  */
    129 } tNFA_EE_CONNECT;
    130 
    131 #define NFA_EE_TRGR_SELECT              NFC_EE_TRIG_7816_SELECT  /* ISO 7816-4 SELECT command */
    132 #define NFA_EE_TRGR_RF_PROTOCOL         NFC_EE_TRIG_RF_PROTOCOL  /* RF Protocol changed       */
    133 #define NFA_EE_TRGR_RF_TECHNOLOGY       NFC_EE_TRIG_RF_TECHNOLOGY/* RF Technology changed     */
    134 #define NFA_EE_TRGR_APP_INIT            NFC_EE_TRIG_APP_INIT     /* Application initiation    */
    135 typedef tNFC_EE_TRIGGER tNFA_EE_TRIGGER;
    136 
    137 /* Union of NFCEE action parameter depending on the associated trigger */
    138 typedef union
    139 {
    140     tNFA_NFC_PROTOCOL   protocol;   /* NFA_EE_TRGR_RF_PROTOCOL: the protocol that triggers this event */
    141     tNFC_RF_TECH        technology; /* NFA_EE_TRGR_RF_TECHNOLOGY:the technology that triggers this event */
    142     tNFC_AID            aid;        /* NFA_EE_TRGR_SELECT      : the AID in the received SELECT AID command */
    143     tNFC_APP_INIT       app_init;   /* NFA_EE_TRGR_APP_INIT:     The information for the application initiated trigger */
    144 } tNFA_EE_ACTION_PARAM;
    145 
    146 typedef struct
    147 {
    148     tNFA_HANDLE             ee_handle;      /* Handle of NFCEE                  */
    149     tNFA_EE_TRIGGER         trigger;        /* the trigger of this event        */
    150     tNFA_EE_ACTION_PARAM    param;
    151 } tNFA_EE_ACTION;
    152 
    153 typedef struct
    154 {
    155     tNFA_HANDLE         ee_handle;  /* Handle of NFCEE              */
    156     tNFA_STATUS         status;     /* NFA_STATUS_OK is successful  */
    157     tNFA_EE_STATUS      ee_status;  /* The NFCEE status             */
    158 } tNFA_EE_MODE_SET;
    159 
    160 typedef struct
    161 {
    162     tNFA_HANDLE         ee_handle;          /* Handle of MFCEE      */
    163     tNFA_NFC_PROTOCOL   la_protocol;        /* Listen A protocol    */
    164     tNFA_NFC_PROTOCOL   lb_protocol;        /* Listen B protocol    */
    165     tNFA_NFC_PROTOCOL   lf_protocol;        /* Listen F protocol    */
    166     tNFA_NFC_PROTOCOL   lbp_protocol;       /* Listen B' protocol   */
    167 } tNFA_EE_DISCOVER_INFO;
    168 
    169 /* Data for NFA_EE_DISCOVER_REQ_EVT */
    170 typedef struct
    171 {
    172     UINT8                   status;                         /* NFA_STATUS_OK if successful   */
    173     UINT8                   num_ee;                         /* number of MFCEE information   */
    174     tNFA_EE_DISCOVER_INFO   ee_disc_info[NFA_DM_MAX_UICC];  /* MFCEE DISCOVER Request info   */
    175 } tNFA_EE_DISCOVER_REQ;
    176 
    177 /* Data for NFA_EE_DATA_EVT */
    178 typedef struct
    179 {
    180     tNFA_HANDLE handle;     /* Connection handle */
    181     UINT16      len;        /* Length of data    */
    182     UINT8       *p_buf;     /* Data buffer       */
    183 } tNFA_EE_DATA;
    184 
    185 /* Union of all EE callback structures */
    186 typedef union
    187 {
    188     tNFA_STATUS             status;             /* NFA_STATUS_OK is successful; otherwise NFA_STATUS_FAILED */
    189     tNFA_EE_DATA            data;
    190     tNFA_HANDLE             handle;
    191     tNFA_EE_DISCOVER        ee_discover;
    192     tNFA_STATUS             ee_register;
    193     tNFA_STATUS             deregister;
    194     tNFA_STATUS             add_aid;
    195     tNFA_STATUS             remove_aid;
    196     tNFA_STATUS             set_tech;
    197     tNFA_STATUS             set_proto;
    198     tNFA_EE_CONNECT         connect;
    199     tNFA_EE_ACTION          action;
    200     tNFA_EE_MODE_SET        mode_set;
    201     tNFA_EE_INFO            new_ee;
    202     tNFA_EE_DISCOVER_REQ    discover_req;
    203 } tNFA_EE_CBACK_DATA;
    204 
    205 
    206 /* EE callback */
    207 typedef void (tNFA_EE_CBACK) (tNFA_EE_EVT event, tNFA_EE_CBACK_DATA *p_data);
    208 
    209 /*****************************************************************************
    210 **  External Function Declarations
    211 *****************************************************************************/
    212 #ifdef __cplusplus
    213 extern "C"
    214 {
    215 #endif
    216 
    217 /*******************************************************************************
    218 **
    219 ** Function         NFA_EeDiscover
    220 **
    221 ** Description      This function retrieves the NFCEE information from NFCC.
    222 **                  The NFCEE information is reported in NFA_EE_DISCOVER_EVT.
    223 **
    224 **                  This function may be called when a system supports removable
    225 **                  NFCEEs,
    226 **
    227 ** Returns          NFA_STATUS_OK if information is retrieved successfully
    228 **                  NFA_STATUS_FAILED If wrong state (retry later)
    229 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    230 **
    231 *******************************************************************************/
    232 NFC_API extern tNFA_STATUS NFA_EeDiscover (tNFA_EE_CBACK *p_cback);
    233 
    234 /*******************************************************************************
    235 **
    236 ** Function         NFA_EeGetInfo
    237 **
    238 ** Description      This function retrieves the NFCEE information from NFA.
    239 **                  The actual number of NFCEE is returned in p_num_nfcee
    240 **                  and NFCEE information is returned in p_info
    241 **
    242 ** Returns          NFA_STATUS_OK if information is retrieved successfully
    243 **                  NFA_STATUS_FAILED If wrong state (retry later)
    244 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    245 **
    246 *******************************************************************************/
    247 NFC_API extern tNFA_STATUS NFA_EeGetInfo (UINT8        *p_num_nfcee,
    248                                           tNFA_EE_INFO *p_info);
    249 
    250 /*******************************************************************************
    251 **
    252 ** Function         NFA_EeRegister
    253 **
    254 ** Description      This function registers a callback function to receive the
    255 **                  events from NFA-EE module.
    256 **
    257 ** Returns          NFA_STATUS_OK if successfully initiated
    258 **                  NFA_STATUS_FAILED otherwise
    259 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    260 **
    261 *******************************************************************************/
    262 NFC_API extern tNFA_STATUS NFA_EeRegister (tNFA_EE_CBACK *p_cback);
    263 
    264 /*******************************************************************************
    265 **
    266 ** Function         NFA_EeDeregister
    267 **
    268 ** Description      This function de-registers the callback function
    269 **
    270 ** Returns          NFA_STATUS_OK if successfully initiated
    271 **                  NFA_STATUS_FAILED otherwise
    272 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    273 **
    274 *******************************************************************************/
    275 NFC_API extern tNFA_STATUS NFA_EeDeregister (tNFA_EE_CBACK *p_cback);
    276 
    277 /*******************************************************************************
    278 **
    279 ** Function         NFA_EeModeSet
    280 **
    281 ** Description      This function is called to activate (mode = NFA_EE_MD_ACTIVATE)
    282 **                  or deactivate (mode = NFA_EE_MD_DEACTIVATE) the NFCEE
    283 **                  identified by the given ee_handle. The result of this
    284 **                  operation is reported with the NFA_EE_MODE_SET_EVT.
    285 **
    286 ** Returns          NFA_STATUS_OK if successfully initiated
    287 **                  NFA_STATUS_FAILED otherwise
    288 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    289 **
    290 *******************************************************************************/
    291 NFC_API extern tNFA_STATUS NFA_EeModeSet (tNFA_HANDLE    ee_handle,
    292                                           tNFA_EE_MD     mode);
    293 
    294 
    295 /*******************************************************************************
    296 **
    297 ** Function         NFA_EeSetDefaultTechRouting
    298 **
    299 ** Description      This function is called to add, change or remove the
    300 **                  default routing based on RF technology in the listen mode
    301 **                  routing table for the given ee_handle. The status of this
    302 **                  operation is reported as the NFA_EE_SET_TECH_CFG_EVT.
    303 **
    304 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    305 **                  should happen before calling this function
    306 **
    307 ** Note:            NFA_EeUpdateNow() should be called after last NFA-EE function
    308 **                  to change the listen mode routing is called.
    309 **
    310 ** Returns          NFA_STATUS_OK if successfully initiated
    311 **                  NFA_STATUS_FAILED otherwise
    312 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    313 **
    314 *******************************************************************************/
    315 NFC_API extern tNFA_STATUS NFA_EeSetDefaultTechRouting (tNFA_HANDLE          ee_handle,
    316                                                         tNFA_TECHNOLOGY_MASK technologies_switch_on,
    317                                                         tNFA_TECHNOLOGY_MASK technologies_switch_off,
    318                                                         tNFA_TECHNOLOGY_MASK technologies_battery_off);
    319 
    320 /*******************************************************************************
    321 **
    322 ** Function         NFA_EeSetDefaultProtoRouting
    323 **
    324 ** Description      This function is called to add, change or remove the
    325 **                  default routing based on Protocol in the listen mode routing
    326 **                  table for the given ee_handle. The status of this
    327 **                  operation is reported as the NFA_EE_SET_PROTO_CFG_EVT.
    328 **
    329 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    330 **                  should happen before calling this function
    331 **
    332 ** Note:            NFA_EeUpdateNow() should be called after last NFA-EE function
    333 **                  to change the listen mode routing is called.
    334 **
    335 ** Returns          NFA_STATUS_OK if successfully initiated
    336 **                  NFA_STATUS_FAILED otherwise
    337 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    338 **
    339 *******************************************************************************/
    340 NFC_API extern tNFA_STATUS NFA_EeSetDefaultProtoRouting (tNFA_HANDLE         ee_handle,
    341                                                          tNFA_PROTOCOL_MASK  protocols_switch_on,
    342                                                          tNFA_PROTOCOL_MASK  protocols_switch_off,
    343                                                          tNFA_PROTOCOL_MASK  protocols_battery_off);
    344 
    345 /*******************************************************************************
    346 **
    347 ** Function         NFA_EeAddAidRouting
    348 **
    349 ** Description      This function is called to add an AID entry in the
    350 **                  listen mode routing table in NFCC. The status of this
    351 **                  operation is reported as the NFA_EE_ADD_AID_EVT.
    352 **
    353 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    354 **                  should happen before calling this function
    355 **
    356 ** Note:            NFA_EeUpdateNow() should be called after last NFA-EE function
    357 **                  to change the listen mode routing is called.
    358 **
    359 ** Returns          NFA_STATUS_OK if successfully initiated
    360 **                  NFA_STATUS_FAILED otherwise
    361 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    362 **
    363 *******************************************************************************/
    364 NFC_API extern tNFA_STATUS NFA_EeAddAidRouting (tNFA_HANDLE          ee_handle,
    365                                                 UINT8                aid_len,
    366                                                 UINT8               *p_aid,
    367                                                 tNFA_EE_PWR_STATE    power_state);
    368 
    369 /*******************************************************************************
    370 **
    371 ** Function         NFA_EeRemoveAidRouting
    372 **
    373 ** Description      This function is called to remove the given AID entry from the
    374 **                  listen mode routing table. If the entry configures VS,
    375 **                  it is also removed. The status of this operation is reported
    376 **                  as the NFA_EE_REMOVE_AID_EVT.
    377 **
    378 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
    379 **                  should happen before calling this function
    380 **
    381 ** Note:            NFA_EeUpdateNow() should be called after last NFA-EE function
    382 **                  to change the listen mode routing is called.
    383 **
    384 ** Returns          NFA_STATUS_OK if successfully initiated
    385 **                  NFA_STATUS_FAILED otherwise
    386 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    387 **
    388 *******************************************************************************/
    389 NFC_API extern tNFA_STATUS NFA_EeRemoveAidRouting (UINT8     aid_len,
    390                                                    UINT8    *p_aid);
    391 
    392 /*******************************************************************************
    393 **
    394 ** Function         NFA_EeUpdateNow
    395 **
    396 ** Description      This function is called to send the current listen mode
    397 **                  routing table and VS configuration to the NFCC
    398 **
    399 ** Returns          NFA_STATUS_OK if successfully initiated
    400 **                  NFA_STATUS_FAILED otherwise
    401 **
    402 *******************************************************************************/
    403 NFC_API extern tNFA_STATUS NFA_EeUpdateNow (void);
    404 
    405 /*******************************************************************************
    406 **
    407 ** Function         NFA_EeConnect
    408 **
    409 ** Description      Open connection to an NFCEE attached to the NFCC
    410 **
    411 **                  The status of this operation is
    412 **                  reported with the NFA_EE_CONNECT_EVT.
    413 **
    414 ** Returns          NFA_STATUS_OK if successfully initiated
    415 **                  NFA_STATUS_FAILED otherwise
    416 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    417 **
    418 *******************************************************************************/
    419 NFC_API extern tNFA_STATUS NFA_EeConnect (tNFA_HANDLE    ee_handle,
    420                                           UINT8          ee_interface,
    421                                           tNFA_EE_CBACK *p_cback);
    422 
    423 /*******************************************************************************
    424 **
    425 ** Function         NFA_EeSendData
    426 **
    427 ** Description      Send data to the given NFCEE.
    428 **                  This function shall be called after NFA_EE_CONNECT_EVT is reported
    429 **                  and before NFA_EeDisconnect is called on the given ee_handle.
    430 **
    431 ** Returns          NFA_STATUS_OK if successfully initiated
    432 **                  NFA_STATUS_FAILED otherwise
    433 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    434 **
    435 *******************************************************************************/
    436 NFC_API extern tNFA_STATUS NFA_EeSendData (tNFA_HANDLE  ee_handle,
    437                                            UINT16       data_len,
    438                                            UINT8       *p_data);
    439 
    440 /*******************************************************************************
    441 **
    442 ** Function         NFA_EeDisconnect
    443 **
    444 ** Description      Disconnect (if a connection is currently open) from an
    445 **                  NFCEE interface. The result of this operation is reported
    446 **                  with the NFA_EE_DISCONNECT_EVT.
    447 **
    448 ** Returns          NFA_STATUS_OK if successfully initiated
    449 **                  NFA_STATUS_FAILED otherwise
    450 **                  NFA_STATUS_INVALID_PARAM If bad parameter
    451 **
    452 *******************************************************************************/
    453 NFC_API extern tNFA_STATUS NFA_EeDisconnect (tNFA_HANDLE ee_handle);
    454 
    455 
    456 #ifdef __cplusplus
    457 }
    458 #endif
    459 
    460 #endif /* NFA_EE_API_H */
    461 
    462