Home | History | Annotate | Download | only in src
      1 /*
      2  * Copyright (C) 2010 NXP Semiconductors
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 /*!
     18  * \file  phLibNfc_Internal.h
     19  *
     20  * Project: NFC-FRI 1.1
     21  *
     22  * $Workfile:: phLibNfc_Internal.h  $
     23  * $Modtime::         $
     24  * $Author: ing07385 $
     25  * $Revision: 1.26 $
     26  *
     27  */
     28 #ifndef PHLIBNFC_IN_H
     29 #define PHLIBNFC_IN_H
     30 #include <phNfcStatus.h>
     31 #include <phNfcCompId.h>
     32 #include <phNfcHalTypes.h>
     33 #include <phNfcInterface.h>
     34 #include <phNfcConfig.h>
     35 #include <phDbgTrace.h>
     36 #include <phHal4Nfc.h>
     37 #include <phFriNfc_NdefMap.h>
     38 #include <phFriNfc_OvrHal.h>
     39 #include <phFriNfc_SmtCrdFmt.h>
     40 #include <phFriNfc_Llcp.h>
     41 #include <phFriNfc_LlcpTransport.h>
     42 #include <phOsalNfc_Timer.h>
     43 #include <phLibNfc_SE.h>
     44 #include <phFriNfc_NdefReg.h>
     45 #include <phLibNfc.h>
     46 #include <phLibNfc_initiator.h>
     47 #include <phLibNfc_ndef_raw.h>
     48 #include <phNfcLlcpTypes.h>
     49 
     50 /**Maximum number of Records.Presently set to a realistic value of 128
     51    Configurable upto 1K*/
     52 #define    MAX_NO_OF_RECORDS    128U
     53 #define    CHK_NDEF_NOT_DONE   0x02U
     54 
     55 typedef struct phLibNfc_status
     56 {
     57     unsigned                    RlsCb_status : 1;
     58     unsigned                    DiscEnbl_status : 1;
     59     unsigned                    Connect_status : 1;
     60     unsigned                    TransProg_status : 1;
     61     unsigned                    RelsProg_status : 1;
     62     unsigned                    GenCb_pending_status : 1;
     63     unsigned                    Shutdown_pending_status : 1;
     64     unsigned                    Discovery_pending_status : 1;
     65 
     66 }Status_t;
     67 typedef enum phLibNfc_State{
     68     eLibNfcHalStateShutdown   = 0x00,  /**< closed*/
     69     eLibNfcHalInitInProgress,
     70     eLibNfcHalInited,
     71     eLibNfcHalShutdownInProgress,
     72     eLibNfcHalStateInitandIdle,
     73     eLibNfcHalStateConfigReady ,
     74     eLibNfcHalStateConnect,
     75     eLibNfcHalStateTransaction,
     76     eLibNfcHalStatePresenceChk,
     77     eLibNfcHalStateRelease,
     78     eLibNfcHalStateInvalid
     79 } phLibNfc_State_t;
     80 
     81 
     82 
     83 
     84 typedef struct phLibNfc_Hal_CB_Info
     85 {
     86     /*Init call back & its context*/
     87     pphLibNfc_RspCb_t              pClientInitCb;
     88     void                           *pClientInitCntx;
     89     /*Shutdown call back & its context*/
     90     pphLibNfc_RspCb_t              pClientShutdownCb;
     91     void                           *pClientShtdwnCntx;
     92     /*Connect call back & its context*/
     93     pphLibNfc_ConnectCallback_t    pClientConnectCb;
     94     void                           *pClientConCntx;
     95     /*DisConnect call back & its context*/
     96     pphLibNfc_DisconnectCallback_t pClientDisConnectCb;
     97     void                           *pClientDConCntx;
     98 
     99     /*Transceive Call back & it's context*/
    100     pphLibNfc_TransceiveCallback_t pClientTransceiveCb;
    101     void                           *pClientTranseCntx;
    102     /*Check Ndef Call back & it's context*/
    103     pphLibNfc_ChkNdefRspCb_t       pClientCkNdefCb;
    104     void                           *pClientCkNdefCntx;
    105     /*Read Ndef Call back & it's context*/
    106     pphLibNfc_RspCb_t              pClientRdNdefCb;
    107     void                           *pClientRdNdefCntx;
    108     /*Write Ndef Call back & it's context*/
    109     pphLibNfc_RspCb_t              pClientWrNdefCb;
    110     void                           *pClientWrNdefCntx;
    111 
    112 
    113     /*Discover Call back & it's context*/
    114     pphLibNfc_RspCb_t              pClientDisConfigCb;
    115     void                           *pClientDisCfgCntx;
    116 
    117     /*Presence check Call back & it's context*/
    118     pphLibNfc_RspCb_t              pClientPresChkCb;
    119     void                           *pClientPresChkCntx;
    120 
    121     /*Register notification Call back & it's context*/
    122     phLibNfc_NtfRegister_RspCb_t   pClientNtfRegRespCB;
    123     void                           *pClientNtfRegRespCntx;
    124 
    125     /*Ndef Notification CB*/
    126     pphLibNfc_Ndef_Search_RspCb_t   pClientNdefNtfRespCb;
    127     void                           *pClientNdefNtfRespCntx;
    128 
    129     /*LLCP Check CB*/
    130     pphLibNfc_ChkLlcpRspCb_t       pClientLlcpCheckRespCb;
    131     void                           *pClientLlcpCheckRespCntx;
    132 
    133     /*LLCP Link CB*/
    134     pphLibNfc_LlcpLinkStatusCb_t   pClientLlcpLinkCb;
    135     void                           *pClientLlcpLinkCntx;
    136 
    137 }phLibNfc_Hal_CB_Info_t;
    138 
    139 typedef struct phLibNfc_NdefInfo
    140 {
    141     bool_t                       NdefContinueRead;
    142     uint32_t                     NdefActualSize,
    143                                  AppWrLength;
    144     phFriNfc_NdefMap_t           *psNdefMap;
    145     uint16_t                     NdefSendRecvLen;
    146     uint16_t                     NdefDataCount;
    147     phNfc_sData_t                *psUpperNdefMsg;
    148     uint32_t                     NdefReadTimerId,
    149                                  NdefLength;
    150     uint8_t                      is_ndef ;
    151     phFriNfc_sNdefSmtCrdFmt_t    *ndef_fmt ;
    152     phLibNfc_Last_Call_t         eLast_Call;
    153     uint32_t                     Chk_Ndef_Timer_Id;
    154 
    155 
    156     /*Format Ndef Call back & it's context*/
    157     pphLibNfc_RspCb_t            pClientNdefFmtCb;
    158     void                        *pClientNdefFmtCntx;
    159     phLibNfc_Ndef_SrchType_t    *pNdef_NtfSrch_Type;
    160 
    161 }phLibNfc_NdefInfo_t;
    162 
    163 typedef struct phLibNfc_NdefRecInfo
    164 {
    165     phFriNfc_NdefReg_CbParam_t  CbParam;
    166     phFriNfc_NdefReg_t          NdefReg;
    167     uint8_t                     *NdefTypes_array[100];
    168     phFriNfc_NdefRecord_t       RecordsExtracted;
    169     uint8_t                     ChunkedRecordsarray[MAX_NO_OF_RECORDS];
    170     uint32_t                    NumberOfRecords;
    171     uint8_t                     IsChunked[MAX_NO_OF_RECORDS];
    172     uint32_t                    NumberOfRawRecords;
    173     uint8_t                     *RawRecords[MAX_NO_OF_RECORDS];
    174     phFriNfc_NdefReg_Cb_t       *NdefCb;
    175     phNfc_sData_t               ndef_message;
    176 }phLibNfc_NdefRecInfo_t;
    177 
    178 typedef struct phLibNfc_LlcpInfo
    179 {
    180    /* Local parameters for LLC, given upon config
    181     * and used upon detection.
    182     */
    183    phLibNfc_Llcp_sLinkParameters_t sLocalParams;
    184 
    185    /* LLCP compliance flag */
    186    bool_t bIsLlcp;
    187 
    188    /* Monitor structure for LLCP Transport */
    189    phFriNfc_LlcpTransport_t sLlcpTransportContext;
    190 
    191    /* Monitor structure for LLCP LLC */
    192    phFriNfc_Llcp_t sLlcpContext;
    193 
    194    /* LLC Rx buffer */
    195    uint8_t pRxBuffer[1024];
    196 
    197    /* LLC Tx buffer */
    198    uint8_t pTxBuffer[1024];
    199 
    200 } phLibNfc_LlcpInfo_t;
    201 
    202 typedef struct phLibNfc_LibContext
    203 {
    204     phHal_sHwReference_t         *psHwReference;
    205     Status_t                     status;
    206     phHal_sEmulationCfg_t        sCardEmulCfg;
    207     phLibNfc_SeCtxt_t            sSeContext;
    208     phNfc_sState_t               LibNfcState;
    209 
    210     phHal_sDevInputParam_t       *psDevInputParam;
    211 
    212     phLibNfc_NdefInfo_t          ndef_cntx;
    213     phLibNfc_NfcIpInfo_t         sNfcIp_Context;
    214 
    215     phFriNfc_OvrHal_t            *psOverHalCtxt;
    216     phLibNfc_Registry_Info_t     RegNtfType;
    217     uint8_t                      dev_cnt;
    218 
    219     /*To re configure the discovery wheel*/
    220     phLibNfc_sADD_Cfg_t          sADDconfig;
    221     uint32_t                     Connected_handle,
    222                                  Discov_handle[MAX_REMOTE_DEVICES];
    223 
    224     /* To store the previous connected handle in case of Multiple protocol tags */
    225     uint32_t Prev_Connected_handle;
    226 
    227     /*Call back function pointers */
    228 
    229     phLibNfc_eDiscoveryConfigMode_t        eLibNfcCfgMode;
    230 
    231     phHal4Nfc_DiscoveryInfo_t      *psDiscInfo;
    232 
    233     phLibNfc_eReleaseType_t        ReleaseType;
    234     /**Transaction Related Info */
    235     phLibNfc_sTransceiveInfo_t     *psTransInfo;
    236     phLibNfc_sTransceiveInfo_t     *psBufferedAuth;
    237     uint8_t                        LastTrancvSuccess;
    238     phLibNfc_RemoteDevList_t       psRemoteDevList[MAX_REMOTE_DEVICES];
    239     /*To Call back function pointers & Client context*/
    240     phLibNfc_Hal_CB_Info_t           CBInfo;
    241 
    242     /*Ndef RTD search Info*/
    243     phLibNfc_NdefRecInfo_t    phLib_NdefRecCntx;
    244 
    245     /*LLCP Info*/
    246     phLibNfc_LlcpInfo_t          llcp_cntx;
    247 
    248     /* Pointer to Lib context */
    249 } phLibNfc_LibContext_t,*pphLibNfc_LibContext_t;
    250 
    251 extern void phLibNfc_Pending_Shutdown(void);
    252 extern pphLibNfc_LibContext_t gpphLibContext;
    253 extern NFCSTATUS
    254 phLibNfc_UpdateNextState(
    255                          pphLibNfc_LibContext_t psNfcHalCtxt,
    256                          phLibNfc_State_t        next_state
    257                          );
    258 
    259 extern void
    260 phLibNfc_UpdateCurState(
    261                         NFCSTATUS      status,
    262                         pphLibNfc_LibContext_t psNfcHalCtxt
    263                         );
    264 
    265 extern void
    266 phLibNfc_Reconnect_Mifare_Cb (
    267                     void                            *pContext,
    268                     phHal_sRemoteDevInformation_t   *psRemoteDevInfo,
    269                     NFCSTATUS                       status);
    270 
    271 
    272 #endif
    273 
    274 
    275