Home | History | Annotate | Download | only in include
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2012-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  *  NFC Hardware Abstraction Layer API
     23  *
     24  ******************************************************************************/
     25 #ifndef NFC_HAL_API_H
     26 #define NFC_HAL_API_H
     27 #include <hardware/nfc.h>
     28 #include "data_types.h"
     29 
     30 /****************************************************************************
     31 ** NFC_HDR header definition for NFC messages
     32 *****************************************************************************/
     33 typedef struct
     34 {
     35     UINT16          event;
     36     UINT16          len;
     37     UINT16          offset;
     38     UINT16          layer_specific;
     39 } NFC_HDR;
     40 #define NFC_HDR_SIZE (sizeof (NFC_HDR))
     41 
     42 /*******************************************************************************
     43 ** tHAL_STATUS Definitions
     44 *******************************************************************************/
     45 #define HAL_NFC_STATUS_OK               0
     46 #define HAL_NFC_STATUS_FAILED           1
     47 #define HAL_NFC_STATUS_ERR_TRANSPORT    2
     48 #define HAL_NFC_STATUS_ERR_CMD_TIMEOUT  3
     49 #define HAL_NFC_STATUS_REFUSED          4
     50 
     51 typedef UINT8 tHAL_NFC_STATUS;
     52 
     53 /*******************************************************************************
     54 ** tHAL_HCI_NETWK_CMD Definitions
     55 *******************************************************************************/
     56 #define HAL_NFC_HCI_NO_UICC_HOST    0x00
     57 #define HAL_NFC_HCI_UICC0_HOST      0x01
     58 #define HAL_NFC_HCI_UICC1_HOST      0x02
     59 #define HAL_NFC_HCI_UICC2_HOST      0x04
     60 
     61 /*******************************************************************************
     62 ** tHAL_NFC_CBACK Definitions
     63 *******************************************************************************/
     64 
     65 /* tHAL_NFC_CBACK events */
     66 #define HAL_NFC_OPEN_CPLT_EVT           0x00
     67 #define HAL_NFC_CLOSE_CPLT_EVT          0x01
     68 #define HAL_NFC_POST_INIT_CPLT_EVT      0x02
     69 #define HAL_NFC_PRE_DISCOVER_CPLT_EVT   0x03
     70 #define HAL_NFC_REQUEST_CONTROL_EVT     0x04
     71 #define HAL_NFC_RELEASE_CONTROL_EVT     0x05
     72 #define HAL_NFC_ERROR_EVT               0x06
     73 
     74 
     75 typedef void (tHAL_NFC_STATUS_CBACK) (tHAL_NFC_STATUS status);
     76 typedef void (tHAL_NFC_CBACK) (UINT8 event, tHAL_NFC_STATUS status);
     77 typedef void (tHAL_NFC_DATA_CBACK) (UINT16 data_len, UINT8   *p_data);
     78 
     79 /*******************************************************************************
     80 ** tHAL_NFC_ENTRY HAL entry-point lookup table
     81 *******************************************************************************/
     82 
     83 typedef void (tHAL_API_INITIALIZE) (void);
     84 typedef void (tHAL_API_TERMINATE) (void);
     85 typedef void (tHAL_API_OPEN) (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
     86 typedef void (tHAL_API_CLOSE) (void);
     87 typedef void (tHAL_API_CORE_INITIALIZED) (UINT8 *p_core_init_rsp_params);
     88 typedef void (tHAL_API_WRITE) (UINT16 data_len, UINT8 *p_data);
     89 typedef BOOLEAN (tHAL_API_PREDISCOVER) (void);
     90 typedef void (tHAL_API_CONTROL_GRANTED) (void);
     91 typedef void (tHAL_API_POWER_CYCLE) (void);
     92 typedef UINT8 (tHAL_API_GET_MAX_NFCEE) (void);
     93 
     94 
     95 #define NFC_HAL_DM_PRE_SET_MEM_LEN  5
     96 typedef struct
     97 {
     98     UINT32          addr;
     99     UINT32          data;
    100 } tNFC_HAL_DM_PRE_SET_MEM;
    101 
    102 /* data members for NFC_HAL-HCI */
    103 typedef struct
    104 {
    105     BOOLEAN nfc_hal_prm_nvm_required;       /* set nfc_hal_prm_nvm_required to TRUE, if the platform wants to abort PRM process without NVM */
    106     UINT16  nfc_hal_nfcc_enable_timeout;    /* max time to wait for RESET NTF after setting REG_PU to high */
    107     UINT16  nfc_hal_post_xtal_timeout;      /* max time to wait for RESET NTF after setting Xtal frequency */
    108 #if (defined(NFC_HAL_HCI_INCLUDED) && (NFC_HAL_HCI_INCLUDED == TRUE))
    109     BOOLEAN nfc_hal_first_boot;             /* set nfc_hal_first_boot to TRUE, if platform enables NFC for the first time after bootup */
    110     UINT8   nfc_hal_hci_uicc_support;       /* set nfc_hal_hci_uicc_support to Zero, if no UICC is supported otherwise set corresponding bit(s) for every supported UICC(s) */
    111 #endif
    112 } tNFC_HAL_CFG;
    113 
    114 typedef struct
    115 {
    116     tHAL_API_INITIALIZE *initialize;
    117     tHAL_API_TERMINATE *terminate;
    118     tHAL_API_OPEN *open;
    119     tHAL_API_CLOSE *close;
    120     tHAL_API_CORE_INITIALIZED *core_initialized;
    121     tHAL_API_WRITE *write;
    122     tHAL_API_PREDISCOVER *prediscover;
    123     tHAL_API_CONTROL_GRANTED *control_granted;
    124     tHAL_API_POWER_CYCLE *power_cycle;
    125     tHAL_API_GET_MAX_NFCEE *get_max_ee;
    126 
    127 
    128 } tHAL_NFC_ENTRY;
    129 
    130 
    131 /*******************************************************************************
    132 ** HAL API Function Prototypes
    133 *******************************************************************************/
    134 #ifdef __cplusplus
    135 extern "C"
    136 {
    137 #endif
    138 
    139 /* Toolset-specific macro for exporting API funcitons */
    140 #if (defined(NFC_HAL_TARGET) && (NFC_HAL_TARGET == TRUE)) && (defined(_WINDLL))
    141 #define EXPORT_HAL_API  __declspec(dllexport)
    142 #else
    143 #define EXPORT_HAL_API
    144 #endif
    145 
    146 /*******************************************************************************
    147 **
    148 ** Function         HAL_NfcInitialize
    149 **
    150 ** Description      Called when HAL library is loaded.
    151 **
    152 **                  Initialize GKI and start the HCIT task
    153 **
    154 ** Returns          void
    155 **
    156 *******************************************************************************/
    157 EXPORT_HAL_API void HAL_NfcInitialize(void);
    158 
    159 /*******************************************************************************
    160 **
    161 ** Function         HAL_NfcTerminate
    162 **
    163 ** Description      Called to terminate NFC HAL
    164 **
    165 ** Returns          void
    166 **
    167 *******************************************************************************/
    168 EXPORT_HAL_API void HAL_NfcTerminate(void);
    169 
    170 /*******************************************************************************
    171 **
    172 ** Function         HAL_NfcOpen
    173 **
    174 ** Description      Open transport and intialize the NFCC, and
    175 **                  Register callback for HAL event notifications,
    176 **
    177 **                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
    178 **
    179 ** Returns          void
    180 **
    181 *******************************************************************************/
    182 EXPORT_HAL_API void HAL_NfcOpen (tHAL_NFC_CBACK *p_hal_cback, tHAL_NFC_DATA_CBACK *p_data_cback);
    183 
    184 /*******************************************************************************
    185 **
    186 ** Function         HAL_NfcClose
    187 **
    188 ** Description      Prepare for shutdown. A HAL_CLOSE_CPLT_EVT will be
    189 **                  reported when complete.
    190 **
    191 ** Returns          void
    192 **
    193 *******************************************************************************/
    194 EXPORT_HAL_API void HAL_NfcClose (void);
    195 
    196 /*******************************************************************************
    197 **
    198 ** Function         HAL_NfcCoreInitialized
    199 **
    200 ** Description      Called after the CORE_INIT_RSP is received from the NFCC.
    201 **                  At this time, the HAL can do any chip-specific configuration,
    202 **                  and when finished signal the libnfc-nci with event
    203 **                  HAL_POST_INIT_CPLT_EVT.
    204 **
    205 ** Returns          void
    206 **
    207 *******************************************************************************/
    208 EXPORT_HAL_API void HAL_NfcCoreInitialized (UINT8 *p_core_init_rsp_params);
    209 
    210 /*******************************************************************************
    211 **
    212 ** Function         HAL_NfcWrite
    213 **
    214 ** Description      Send an NCI control message or data packet to the
    215 **                  transport. If an NCI command message exceeds the transport
    216 **                  size, HAL is responsible for fragmenting it, Data packets
    217 **                  must be of the correct size.
    218 **
    219 ** Returns          void
    220 **
    221 *******************************************************************************/
    222 EXPORT_HAL_API void HAL_NfcWrite (UINT16 data_len, UINT8 *p_data);
    223 
    224 /*******************************************************************************
    225 **
    226 ** Function         HAL_NfcPreDiscover
    227 **
    228 ** Description      Perform any vendor-specific pre-discovery actions (if needed)
    229 **                  If any actions were performed TRUE will be returned, and
    230 **                  HAL_PRE_DISCOVER_CPLT_EVT will notify when actions are
    231 **                  completed.
    232 **
    233 ** Returns          TRUE if vendor-specific pre-discovery actions initialized
    234 **                  FALSE if no vendor-specific pre-discovery actions are needed.
    235 **
    236 *******************************************************************************/
    237 EXPORT_HAL_API BOOLEAN HAL_NfcPreDiscover (void);
    238 
    239 /*******************************************************************************
    240 **
    241 ** Function         HAL_NfcControlGranted
    242 **
    243 ** Description      Grant control to HAL control for sending NCI commands.
    244 **
    245 **                  Call in response to HAL_REQUEST_CONTROL_EVT.
    246 **
    247 **                  Must only be called when there are no NCI commands pending.
    248 **
    249 **                  HAL_RELEASE_CONTROL_EVT will notify when HAL no longer
    250 **                  needs control of NCI.
    251 **
    252 **
    253 ** Returns          void
    254 **
    255 *******************************************************************************/
    256 EXPORT_HAL_API void HAL_NfcControlGranted (void);
    257 
    258 /*******************************************************************************
    259 **
    260 ** Function         HAL_NfcPowerCycle
    261 **
    262 ** Description      Restart NFCC by power cyle
    263 **
    264 **                  HAL_OPEN_CPLT_EVT will notify when operation is complete.
    265 **
    266 ** Returns          void
    267 **
    268 *******************************************************************************/
    269 EXPORT_HAL_API void HAL_NfcPowerCycle (void);
    270 
    271 /*******************************************************************************
    272 **
    273 ** Function         HAL_NfcGetMaxNfcee
    274 **
    275 ** Description      Retrieve the maximum number of NFCEEs supported by NFCC
    276 **
    277 ** Returns          the maximum number of NFCEEs supported by NFCC
    278 **
    279 *******************************************************************************/
    280 EXPORT_HAL_API UINT8 HAL_NfcGetMaxNfcee (void);
    281 
    282 
    283 #ifdef __cplusplus
    284 }
    285 #endif
    286 
    287 #endif /* NFC_HAL_API_H  */
    288