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
55typedef 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;
67typedef 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
84typedef 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    /*LLCP service discovery*/
138    pphLibNfc_RspCb_t              pClientLlcpDiscoveryCb;
139    void                           *pClientLlcpDiscoveryCntx;
140
141}phLibNfc_Hal_CB_Info_t;
142
143typedef struct phLibNfc_NdefInfo
144{
145    bool_t                       NdefContinueRead;
146    uint32_t                     NdefActualSize,
147                                 AppWrLength;
148    phFriNfc_NdefMap_t           *psNdefMap;
149    uint16_t                     NdefSendRecvLen;
150    uint16_t                     NdefDataCount;
151    phNfc_sData_t                *psUpperNdefMsg;
152    uint32_t                     NdefReadTimerId,
153                                 NdefLength;
154    uint8_t                      is_ndef ;
155    phFriNfc_sNdefSmtCrdFmt_t    *ndef_fmt ;
156    phLibNfc_Last_Call_t         eLast_Call;
157    uint32_t                     Chk_Ndef_Timer_Id;
158
159
160    /*Format Ndef Call back & it's context*/
161    pphLibNfc_RspCb_t            pClientNdefFmtCb;
162    void                        *pClientNdefFmtCntx;
163    phLibNfc_Ndef_SrchType_t    *pNdef_NtfSrch_Type;
164
165}phLibNfc_NdefInfo_t;
166
167typedef struct phLibNfc_NdefRecInfo
168{
169    phFriNfc_NdefReg_CbParam_t  CbParam;
170    phFriNfc_NdefReg_t          NdefReg;
171    uint8_t                     *NdefTypes_array[100];
172    phFriNfc_NdefRecord_t       RecordsExtracted;
173    uint8_t                     ChunkedRecordsarray[MAX_NO_OF_RECORDS];
174    uint32_t                    NumberOfRecords;
175    uint8_t                     IsChunked[MAX_NO_OF_RECORDS];
176    uint32_t                    NumberOfRawRecords;
177    uint8_t                     *RawRecords[MAX_NO_OF_RECORDS];
178    phFriNfc_NdefReg_Cb_t       *NdefCb;
179    phNfc_sData_t               ndef_message;
180}phLibNfc_NdefRecInfo_t;
181
182typedef struct phLibNfc_LlcpInfo
183{
184   /* Local parameters for LLC, given upon config
185    * and used upon detection.
186    */
187   phLibNfc_Llcp_sLinkParameters_t sLocalParams;
188
189   /* LLCP compliance flag */
190   bool_t bIsLlcp;
191
192   /* Monitor structure for LLCP Transport */
193   phFriNfc_LlcpTransport_t sLlcpTransportContext;
194
195   /* Monitor structure for LLCP LLC */
196   phFriNfc_Llcp_t sLlcpContext;
197
198   /* LLC Rx buffer */
199   uint8_t pRxBuffer[PHFRINFC_LLCP_PDU_HEADER_MAX + PHFRINFC_LLCP_MIU_DEFAULT + PHFRINFC_LLCP_MIUX_MAX];
200
201   /* LLC Tx buffer */
202   uint8_t pTxBuffer[PHFRINFC_LLCP_PDU_HEADER_MAX + PHFRINFC_LLCP_MIU_DEFAULT + PHFRINFC_LLCP_MIUX_MAX];
203
204} phLibNfc_LlcpInfo_t;
205
206typedef struct phLibNfc_LibContext
207{
208    phHal_sHwReference_t         *psHwReference;
209    Status_t                     status;
210    phHal_sEmulationCfg_t        sCardEmulCfg;
211    phLibNfc_SeCtxt_t            sSeContext;
212    phNfc_sState_t               LibNfcState;
213
214    phHal_sDevInputParam_t       *psDevInputParam;
215
216    phLibNfc_NdefInfo_t          ndef_cntx;
217    phLibNfc_NfcIpInfo_t         sNfcIp_Context;
218
219    phFriNfc_OvrHal_t            *psOverHalCtxt;
220    phLibNfc_Registry_Info_t     RegNtfType;
221    uint8_t                      dev_cnt;
222
223    /*To re configure the discovery wheel*/
224    phLibNfc_sADD_Cfg_t          sADDconfig;
225    uint32_t                     Connected_handle,
226                                 Discov_handle[MAX_REMOTE_DEVICES];
227
228    /* To store the previous connected handle in case of Multiple protocol tags */
229    uint32_t Prev_Connected_handle;
230
231    /*Call back function pointers */
232
233    phLibNfc_eDiscoveryConfigMode_t        eLibNfcCfgMode;
234
235    phHal4Nfc_DiscoveryInfo_t      *psDiscInfo;
236
237    phLibNfc_eReleaseType_t        ReleaseType;
238    /**Transaction Related Info */
239    phLibNfc_sTransceiveInfo_t     *psTransInfo;
240    phLibNfc_sTransceiveInfo_t     *psBufferedAuth;
241    uint8_t                        LastTrancvSuccess;
242    phLibNfc_RemoteDevList_t       psRemoteDevList[MAX_REMOTE_DEVICES];
243    /*To Call back function pointers & Client context*/
244    phLibNfc_Hal_CB_Info_t           CBInfo;
245
246    /*Ndef RTD search Info*/
247    phLibNfc_NdefRecInfo_t    phLib_NdefRecCntx;
248
249    /*LLCP Info*/
250    phLibNfc_LlcpInfo_t          llcp_cntx;
251
252    /* Pointer to Lib context */
253} phLibNfc_LibContext_t,*pphLibNfc_LibContext_t;
254
255extern void phLibNfc_Pending_Shutdown(void);
256extern pphLibNfc_LibContext_t gpphLibContext;
257extern NFCSTATUS
258phLibNfc_UpdateNextState(
259                         pphLibNfc_LibContext_t psNfcHalCtxt,
260                         phLibNfc_State_t        next_state
261                         );
262
263extern void
264phLibNfc_UpdateCurState(
265                        NFCSTATUS      status,
266                        pphLibNfc_LibContext_t psNfcHalCtxt
267                        );
268
269extern void
270phLibNfc_Reconnect_Mifare_Cb (
271                    void                            *pContext,
272                    phHal_sRemoteDevInformation_t   *psRemoteDevInfo,
273                    NFCSTATUS                       status);
274
275
276#endif
277
278
279