/****************************************************************************** * * Copyright (C) 2010-2014 Broadcom Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ /****************************************************************************** * * NFA interface to NFCEE * ******************************************************************************/ #ifndef NFA_EE_API_H #define NFA_EE_API_H #include "nfa_api.h" #include "nfc_api.h" #include "nfc_target.h" /***************************************************************************** ** Constants and data types *****************************************************************************/ /* 16 per ISO 7816 specification */ #define NFA_MAX_AID_LEN NFC_MAX_AID_LEN #define NFA_EE_HANDLE_DH (NFA_HANDLE_GROUP_EE | NFC_DH_ID) /* NFA EE callback events */ enum { NFA_EE_DISCOVER_EVT, /* The status for NFA_EeDiscover () */ NFA_EE_REGISTER_EVT, /* The status for NFA_EeRegister () */ NFA_EE_DEREGISTER_EVT, /* The status for NFA_EeDeregister () */ NFA_EE_MODE_SET_EVT, /* The status for activating or deactivating an NFCEE */ NFA_EE_ADD_AID_EVT, /* The status for adding an AID to a routing table entry */ NFA_EE_REMOVE_AID_EVT, /* The status for removing an AID from a routing table */ NFA_EE_REMAINING_SIZE_EVT, /* The remaining size of the Listen Mode Routing Table */ NFA_EE_SET_TECH_CFG_EVT, /* The status for setting the routing based on RF tech. */ NFA_EE_SET_PROTO_CFG_EVT, /* The status for setting the routing based on protocols */ NFA_EE_UPDATED_EVT, /* The status for NFA_EeUpdateNow */ NFA_EE_CONNECT_EVT, /* Result of NFA_EeConnect */ NFA_EE_DATA_EVT, /* Received data from NFCEE. */ NFA_EE_DISCONNECT_EVT, /* NFCEE connection closed. */ NFA_EE_NEW_EE_EVT, /* A new NFCEE is discovered */ NFA_EE_ACTION_EVT, /* An action happened in NFCEE */ NFA_EE_DISCOVER_REQ_EVT, /* NFCEE Discover Request Notification */ NFA_EE_ROUT_ERR_EVT, /* Error - exceed NFCC CE Routing size */ NFA_EE_NO_MEM_ERR_EVT, /* Error - out of GKI buffers */ NFA_EE_NO_CB_ERR_EVT /* Error - Can not find control block or wrong state */ }; typedef uint8_t tNFA_EE_EVT; /* tNFA_NFCEE_INTERFACE values */ /* APDU Interface */ #define NFA_EE_INTERFACE_APDU NFC_NFCEE_INTERFACE_APDU /* HCI Access Interface*/ #define NFA_EE_INTERFACE_HCI_ACCESS NFC_NFCEE_INTERFACE_HCI_ACCESS /* T3T Command Interface*/ #define NFA_EE_INTERFACE_T3T NFC_NFCEE_INTERFACE_T3T /* Transparent Interface*/ #define NFA_EE_INTERFACE_TRANSPARENT NFC_NFCEE_INTERFACE_TRANSPARENT /* Proprietary */ #define NFA_EE_INTERFACE_PROPRIETARY NFC_NFCEE_INTERFACE_PROPRIETARY typedef uint8_t tNFA_EE_INTERFACE; /* HW/Registration ID */ #define NFA_EE_TAG_HW_ID NFC_NFCEE_TAG_HW_ID /* ATR Bytes */ #define NFA_EE_TAG_ATR_BYTES NFC_NFCEE_TAG_ATR_BYTES /* T3T Supplement. Info */ #define NFA_EE_TAG_T3T_INFO NFC_NFCEE_TAG_T3T_INFO /* Broadcom Proprietary */ #define NFA_EE_TAG_HCI_HOST_ID NFC_NFCEE_TAG_HCI_HOST_ID typedef uint8_t tNFA_EE_TAG; /* for NFA_EeModeSet () */ #define NFA_EE_MD_ACTIVATE NFC_MODE_ACTIVATE #define NFA_EE_MD_DEACTIVATE NFC_MODE_DEACTIVATE typedef uint8_t tNFA_EE_MD; /* The device is on */ #define NFA_EE_PWR_STATE_ON 0x01 /* The device is switched off */ #define NFA_EE_PWR_STATE_SWITCH_OFF 0x02 /* The device's battery is removed */ #define NFA_EE_PWR_STATE_BATT_OFF 0x04 /* used to remove a particular technology or protocol based routing cfg of a * handle from the routing table. */ #define NFA_EE_PWR_STATE_NONE 0 typedef uint8_t tNFA_EE_PWR_STATE; /* NFCEE connected and inactive */ #define NFA_EE_STATUS_INACTIVE NFC_NFCEE_STATUS_INACTIVE /* NFCEE connected and active */ #define NFA_EE_STATUS_ACTIVE NFC_NFCEE_STATUS_ACTIVE /* NFCEE removed */ #define NFA_EE_STATUS_REMOVED NFC_NFCEE_STATUS_REMOVED /* waiting for response from NFCC */ #define NFA_EE_STATUS_PENDING 0x10 #define NFA_EE_STATUS_ACTIVATING \ (NFA_EE_STATUS_PENDING + NFC_NFCEE_STATUS_ACTIVE) #define NFA_EE_STATUS_DEACTIVATING \ (NFA_EE_STATUS_PENDING + NFC_NFCEE_STATUS_INACTIVE) typedef uint8_t tNFA_EE_STATUS; /* additional NFCEE Info */ typedef struct { tNFA_EE_TAG tag; uint8_t len; uint8_t info[NFC_MAX_EE_INFO]; } tNFA_EE_TLV; typedef struct { tNFA_HANDLE ee_handle; /* handle for NFCEE oe DH */ tNFA_EE_STATUS ee_status; /* The NFCEE status */ uint8_t num_interface; /* number of NFCEE interface*/ tNFA_EE_INTERFACE ee_interface[NFC_MAX_EE_INTERFACE]; /* NFCEE supported interface */ uint8_t num_tlvs; /* number of TLVs */ tNFA_EE_TLV ee_tlv[NFC_MAX_EE_TLVS]; /* the TLV */ } tNFA_EE_INFO; typedef struct { tNFA_STATUS status; /* NFA_STATUS_OK is successful */ uint8_t num_ee; /* number of NFCEEs found */ tNFA_EE_INFO ee_info[NFA_EE_MAX_EE_SUPPORTED]; /*NFCEE information */ } tNFA_EE_DISCOVER; typedef struct { tNFA_HANDLE ee_handle; /* Handle of NFCEE */ tNFA_STATUS status; /* NFA_STATUS_OK is successful */ tNFA_EE_INTERFACE ee_interface; /* NFCEE interface associated with this connection */ } tNFA_EE_CONNECT; /* ISO 7816-4 SELECT command */ #define NFA_EE_TRGR_SELECT NFC_EE_TRIG_SELECT /* RF Protocol changed */ #define NFA_EE_TRGR_RF_PROTOCOL NFC_EE_TRIG_RF_PROTOCOL /* RF Technology changed */ #define NFA_EE_TRGR_RF_TECHNOLOGY NFC_EE_TRIG_RF_TECHNOLOGY /* Application initiation */ #define NFA_EE_TRGR_APP_INIT NFC_EE_TRIG_APP_INIT typedef tNFC_EE_TRIGGER tNFA_EE_TRIGGER; /* Union of NFCEE action parameter depending on the associated trigger */ typedef union { tNFA_NFC_PROTOCOL protocol; /* NFA_EE_TRGR_RF_PROTOCOL: the protocol that triggers this event */ tNFC_RF_TECH technology; /* NFA_EE_TRGR_RF_TECHNOLOGY:the technology that triggers this event */ tNFC_AID aid; /* NFA_EE_TRGR_SELECT : the AID in the received SELECT AID command */ tNFC_APP_INIT app_init; /* NFA_EE_TRGR_APP_INIT: The information for the application initiated trigger */ } tNFA_EE_ACTION_PARAM; typedef struct { tNFA_HANDLE ee_handle; /* Handle of NFCEE */ tNFA_EE_TRIGGER trigger; /* the trigger of this event */ tNFA_EE_ACTION_PARAM param; } tNFA_EE_ACTION; typedef struct { tNFA_HANDLE ee_handle; /* Handle of NFCEE */ tNFA_STATUS status; /* NFA_STATUS_OK is successful */ tNFA_EE_STATUS ee_status; /* The NFCEE status */ } tNFA_EE_MODE_SET; typedef struct { tNFA_HANDLE ee_handle; /* Handle of MFCEE */ tNFA_NFC_PROTOCOL la_protocol; /* Listen A protocol */ tNFA_NFC_PROTOCOL lb_protocol; /* Listen B protocol */ tNFA_NFC_PROTOCOL lf_protocol; /* Listen F protocol */ tNFA_NFC_PROTOCOL lbp_protocol; /* Listen B' protocol */ } tNFA_EE_DISCOVER_INFO; /* Data for NFA_EE_DISCOVER_REQ_EVT */ typedef struct { uint8_t status; /* NFA_STATUS_OK if successful */ uint8_t num_ee; /* number of MFCEE information */ tNFA_EE_DISCOVER_INFO ee_disc_info[NFA_EE_MAX_EE_SUPPORTED - 1]; /* NFCEE DISCOVER Request info */ } tNFA_EE_DISCOVER_REQ; /* Data for NFA_EE_DATA_EVT */ typedef struct { tNFA_HANDLE handle; /* Connection handle */ uint16_t len; /* Length of data */ uint8_t* p_buf; /* Data buffer */ } tNFA_EE_DATA; /* Union of all EE callback structures */ typedef union { tNFA_STATUS status; /* NFA_STATUS_OK is successful; otherwise NFA_STATUS_FAILED */ tNFA_EE_DATA data; tNFA_HANDLE handle; tNFA_EE_DISCOVER ee_discover; tNFA_STATUS ee_register; tNFA_STATUS deregister; tNFA_STATUS add_aid; tNFA_STATUS remove_aid; tNFA_STATUS set_tech; tNFA_STATUS set_proto; uint16_t size; tNFA_EE_CONNECT connect; tNFA_EE_ACTION action; tNFA_EE_MODE_SET mode_set; tNFA_EE_INFO new_ee; tNFA_EE_DISCOVER_REQ discover_req; } tNFA_EE_CBACK_DATA; /* EE callback */ typedef void(tNFA_EE_CBACK)(tNFA_EE_EVT event, tNFA_EE_CBACK_DATA* p_data); /***************************************************************************** ** External Function Declarations *****************************************************************************/ #ifdef __cplusplus extern "C" { #endif /******************************************************************************* ** ** Function NFA_EeDiscover ** ** Description This function retrieves the NFCEE information from NFCC. ** The NFCEE information is reported in NFA_EE_DISCOVER_EVT. ** ** This function may be called when a system supports removable ** NFCEEs, ** ** Returns NFA_STATUS_OK if information is retrieved successfully ** NFA_STATUS_FAILED If wrong state (retry later) ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeDiscover(tNFA_EE_CBACK* p_cback); /******************************************************************************* ** ** Function NFA_EeGetInfo ** ** Description This function retrieves the NFCEE information from NFA. ** The actual number of NFCEE is returned in p_num_nfcee ** and NFCEE information is returned in p_info ** ** Returns NFA_STATUS_OK if information is retrieved successfully ** NFA_STATUS_FAILED If wrong state (retry later) ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeGetInfo(uint8_t* p_num_nfcee, tNFA_EE_INFO* p_info); /******************************************************************************* ** ** Function NFA_EeRegister ** ** Description This function registers a callback function to receive the ** events from NFA-EE module. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeRegister(tNFA_EE_CBACK* p_cback); /******************************************************************************* ** ** Function NFA_EeDeregister ** ** Description This function de-registers the callback function ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeDeregister(tNFA_EE_CBACK* p_cback); /******************************************************************************* ** ** Function NFA_EeModeSet ** ** Description This function is called to activate ** (mode = NFA_EE_MD_ACTIVATE) or deactivate ** (mode = NFA_EE_MD_DEACTIVATE) the NFCEE identified by the ** given ee_handle. The result of this operation is reported ** with the NFA_EE_MODE_SET_EVT. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeModeSet(tNFA_HANDLE ee_handle, tNFA_EE_MD mode); /******************************************************************************* ** ** Function NFA_EeSetDefaultTechRouting ** ** Description This function is called to add, change or remove the ** default routing based on RF technology in the listen mode ** routing table for the given ee_handle. The status of this ** operation is reported as the NFA_EE_SET_TECH_CFG_EVT. ** ** Note: If RF discovery is started, ** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should ** happen before calling this function ** ** Note: NFA_EeUpdateNow() should be called after last NFA-EE ** function to change the listen mode routing is called. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeSetDefaultTechRouting( tNFA_HANDLE ee_handle, tNFA_TECHNOLOGY_MASK technologies_switch_on, tNFA_TECHNOLOGY_MASK technologies_switch_off, tNFA_TECHNOLOGY_MASK technologies_battery_off); /******************************************************************************* ** ** Function NFA_EeSetDefaultProtoRouting ** ** Description This function is called to add, change or remove the ** default routing based on Protocol in the listen mode routing ** table for the given ee_handle. The status of this ** operation is reported as the NFA_EE_SET_PROTO_CFG_EVT. ** ** Note: If RF discovery is started, ** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should ** happen before calling this function ** ** Note: NFA_EeUpdateNow() should be called after last NFA-EE ** function to change the listen mode routing is called. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeSetDefaultProtoRouting( tNFA_HANDLE ee_handle, tNFA_PROTOCOL_MASK protocols_switch_on, tNFA_PROTOCOL_MASK protocols_switch_off, tNFA_PROTOCOL_MASK protocols_battery_off); /******************************************************************************* ** ** Function NFA_EeAddAidRouting ** ** Description This function is called to add an AID entry in the ** listen mode routing table in NFCC. The status of this ** operation is reported as the NFA_EE_ADD_AID_EVT. ** ** Note: If RF discovery is started, ** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should ** happen before calling this function ** ** Note: NFA_EeUpdateNow() should be called after last NFA-EE ** function to change the listen mode routing is called. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeAddAidRouting(tNFA_HANDLE ee_handle, uint8_t aid_len, uint8_t* p_aid, tNFA_EE_PWR_STATE power_state); /******************************************************************************* ** ** Function NFA_EeRemoveAidRouting ** ** Description This function is called to remove the given AID entry from ** the listen mode routing table. If the entry configures VS, ** it is also removed. The status of this operation is reported ** as the NFA_EE_REMOVE_AID_EVT. ** ** Note: If RF discovery is started, ** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should ** happen before calling this function ** ** Note: NFA_EeUpdateNow() should be called after last NFA-EE ** function to change the listen mode routing is called. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeRemoveAidRouting(uint8_t aid_len, uint8_t* p_aid); /******************************************************************************* ** ** Function NFA_EeGetLmrtRemainingSize ** ** Description This function is called to get remaining size of the ** Listen Mode Routing Table. ** The remaining size is reported in NFA_EE_REMAINING_SIZE_EVT ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** *******************************************************************************/ extern tNFA_STATUS NFA_EeGetLmrtRemainingSize(void); /******************************************************************************* ** ** Function NFA_EeUpdateNow ** ** Description This function is called to send the current listen mode ** routing table and VS configuration to the NFCC (without ** waiting for NFA_EE_ROUT_TIMEOUT_VAL). ** ** The status of this operation is ** reported with the NFA_EE_UPDATED_EVT. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_SEMANTIC_ERROR is update is currently in progress ** NFA_STATUS_FAILED otherwise ** *******************************************************************************/ extern tNFA_STATUS NFA_EeUpdateNow(void); /******************************************************************************* ** ** Function NFA_EeConnect ** ** Description Open connection to an NFCEE attached to the NFCC ** ** The status of this operation is ** reported with the NFA_EE_CONNECT_EVT. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeConnect(tNFA_HANDLE ee_handle, uint8_t ee_interface, tNFA_EE_CBACK* p_cback); /******************************************************************************* ** ** Function NFA_EeSendData ** ** Description Send data to the given NFCEE. ** This function shall be called after NFA_EE_CONNECT_EVT is ** reported and before NFA_EeDisconnect is called on the given ** ee_handle. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeSendData(tNFA_HANDLE ee_handle, uint16_t data_len, uint8_t* p_data); /******************************************************************************* ** ** Function NFA_EeDisconnect ** ** Description Disconnect (if a connection is currently open) from an ** NFCEE interface. The result of this operation is reported ** with the NFA_EE_DISCONNECT_EVT. ** ** Returns NFA_STATUS_OK if successfully initiated ** NFA_STATUS_FAILED otherwise ** NFA_STATUS_INVALID_PARAM If bad parameter ** *******************************************************************************/ extern tNFA_STATUS NFA_EeDisconnect(tNFA_HANDLE ee_handle); #ifdef __cplusplus } #endif #endif /* NFA_EE_API_H */