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 * =========================================================================== *
19 *                                                                             *
20 *                                                                             *
21 * \file  phHciNfc_SWP .h                                                          *
22 * \brief HCI wired interface gate Management Routines.                        *
23 *                                                                             *
24 *                                                                             *
25 * Project: NFC-FRI-1.1                                                        *
26 *                                                                             *
27 * $Date: Fri Aug 14 17:01:28 2009 $                                                                   *
28 * $Author: ing04880 $                                                                 *
29 * $Revision: 1.15 $                                                               *
30 * $Aliases: NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $                                                                *
31 *                                                                             *
32 * =========================================================================== *
33 */
34 #ifndef PHHCINFC_SWP_H
35 #define PHHCINFC_SWP_H
36 /*@}*/
37 /**
38  *  \name HCI
39  *
40  * File: \ref phHciNfc_SWP.h
41  *
42  */
43 /*@{*/
44 #define PHHCINFC_SWPRED_FILEREVISION "$Revision: 1.15 $" /**< \ingroup grp_file_attributes */
45 #define PHHCINFC_SWPREDINTERFACE_FILEALIASES  "$Aliases: NFC_FRI1.1_WK934_R31_1,NFC_FRI1.1_WK941_PREP1,NFC_FRI1.1_WK941_PREP2,NFC_FRI1.1_WK941_1,NFC_FRI1.1_WK943_R32_1,NFC_FRI1.1_WK949_PREP1,NFC_FRI1.1_WK943_R32_10,NFC_FRI1.1_WK943_R32_13,NFC_FRI1.1_WK943_R32_14,NFC_FRI1.1_WK1007_R33_1,NFC_FRI1.1_WK1007_R33_4,NFC_FRI1.1_WK1017_PREP1,NFC_FRI1.1_WK1017_R34_1,NFC_FRI1.1_WK1017_R34_2,NFC_FRI1.1_WK1023_R35_1 $"   /**< \ingroup grp_file_attributes */
46 /*@}*/
47 
48 /****************************** Header File Inclusion *****************************/
49 #include <phHciNfc_Generic.h>
50 
51 /******************************* Macro Definitions ********************************/
52 
53 /* Kb/sec */
54 #define UICC_REF_BITRATE            (106U)
55 #define UICC_MAX_CONNECT_RETRY      (0x02U)
56 
57 /* SWP switch mode event parameters */
58 #define UICC_SWITCH_MODE_OFF        (0x00U)
59 #define UICC_SWITCH_MODE_DEFAULT    (0x01U)
60 #define UICC_SWITCH_MODE_ON         (0x02U)
61 
62 /******************** Enumeration and Structure Definition ***********************/
63 
64 typedef enum phHciNfc_SWP_Seq{
65     SWP_INVALID_SEQUENCE = 0x00U,
66     SWP_MODE_SEQ,
67     SWP_STATUS_SEQ,
68     SWP_END_SEQ
69 }phHciNfc_SWP_Seq_t;
70 
71 typedef enum phHciNfc_SWP_Status{
72     UICC_NOT_CONNECTED          =   0x00U,
73     UICC_CONNECTION_ONGOING,
74     UICC_CONNECTED,
75     UICC_CONNECTION_LOST,
76     UICC_DISCONNECTION_ONGOING,
77     UICC_CONNECTION_FAILED
78 }phHciNfc_SWP_Status_t;
79 
80 
81 /* Information structure for  SWP  Gate */
82 typedef struct phHciNfc_SWP_Info{
83 
84     /* Pointer to SWP gate pipe information */
85     phHciNfc_Pipe_Info_t            *p_pipe_info;
86     /* SWP gate pipe Identified             */
87     uint8_t                         pipe_id;
88     /*Current internal Sequence type        */
89     phHciNfc_SWP_Seq_t              current_seq;
90     /*Current next Sequence ID          */
91     phHciNfc_SWP_Seq_t              next_seq;
92 
93     phHciNfc_SWP_Status_t           uicc_status;
94 
95     uint8_t                         uicc_bitrate;
96 
97 } phHciNfc_SWP_Info_t;
98 
99 /************************ Function Prototype Declaration *************************/
100 /*!
101  * \brief Allocates the resources required for  SWP gate management.
102  *
103  * This function Allocates necessary resources as requiered by SWP gate management
104  *
105  * \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
106  *
107  * \retval NFCSTATUS_SUCCESS           Function execution is successful
108  *
109  * \retval NFCSTATUS_INVALID_PARAMETER One or more of the given inputs are not valid
110  */
111 extern
112 NFCSTATUS
113 phHciNfc_SWP_Init_Resources(phHciNfc_sContext_t  *psHciContext);
114 
115 /**
116 * \ingroup grp_hci_nfc
117 *
118 * \brief Allocates the resources required for  SWP gate management.
119 *
120 * This function Allocates necessary resources as requiered by SWP gate management
121 *
122 * \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
123 *
124 * \retval NFCSTATUS_SUCCESS           Function execution is successful
125 *
126 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the given inputs are not valid
127 */
128 
129 extern
130 NFCSTATUS
131 phHciNfc_SWPMgmt_Initialise(
132                                 phHciNfc_sContext_t     *psHciContext,
133                                 void                    *pHwRef
134                          );
135 
136 /**
137 * \ingroup grp_hci_nfc
138 *
139 * \brief updates SWP gate specific pipe information .
140 *
141 * This function  intialises gate specific informations like pipe id,
142 * event handler and response handler etc.
143 *
144 * \param[in]  psHciContext          psHciContext is the pointer to HCI Layer
145 * \param[in]  pipeID                pipeID of the SWP management Gate
146 * \param[in]  pPipeInfo             Update the pipe Information of the SWP
147 *                                   Management Gate.
148 *
149 * \retval NFCSTATUS_SUCCESS           Function execution is successful
150 *
151 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the given inputs are not valid
152 */
153 extern
154 NFCSTATUS
155 phHciNfc_SWP_Update_PipeInfo(
156                                   phHciNfc_sContext_t     *psHciContext,
157                                   uint8_t                 pipeID,
158                                   phHciNfc_Pipe_Info_t    *pPipeInfo
159                                   );
160 /**
161 * \ingroup grp_hci_nfc
162 *
163 * \brief updates SWP gate specific pipe information .
164 *
165 * This function  intialises gate specific informations like pipe id,
166 * event handler and response handler etc.
167 *
168 * \param[in]  psHciContext            psHciContext is the pointer to HCI Layer
169 *
170 * \retval NFCSTATUS_SUCCESS           Function execution is successful
171 *
172 * \retval NFCSTATUS_INVALID_PARAMETER One or more of the given inputs are not valid
173 */
174 
175 extern
176 NFCSTATUS
177 phHciNfc_SWP_Get_PipeID(
178                        phHciNfc_sContext_t        *psHciContext,
179                        uint8_t                    *ppipe_id
180                        );
181 
182 /**
183 * \ingroup grp_hci_nfc
184 *
185 * \brief Enables /disables SWP mode .
186 *
187 * This function  enables/disables SWP link associated with UICC.
188 *
189 *
190 * \param[in]  psHciContext              psHciContext is pointer to HCI Layer
191 *
192 * \param[in]  pHwRef                    pHwRef is underlying Hardware context.
193 *
194 * \param[in]  enable_type               0 means disable ,1 means enable SWP link.
195 * \retval NFCSTATUS_SUCCESS             Function execution is successful
196 *
197 * \retval NFCSTATUS_INVALID_PARAMETER   One or more of the given inputs are not valid
198 */
199 extern
200 NFCSTATUS
201 phHciNfc_SWP_Configure_Default(
202                             void        *psHciHandle,
203                             void        *pHwRef,
204                             uint8_t     enable_type
205                         );
206 
207 /**
208 * \ingroup grp_hci_nfc
209 *
210 * \brief Enables /disables SWP mode .
211 *
212 * This function  enables/disables SWP link associated with UICC.
213 *
214 *
215 * \param[in]  psHciContext              psHciContext is pointer to HCI Layer
216 *
217 * \param[in]  pHwRef                    pHwRef is underlying Hardware context.
218 *
219 * \param[in]  mode                      TRUE Enable Protection.
220 * \retval NFCSTATUS_SUCCESS             Function execution is successful
221 *
222 * \retval NFCSTATUS_INVALID_PARAMETER   One or more of the given inputs are not valid
223 */
224 extern
225 NFCSTATUS
226 phHciNfc_SWP_Protection(
227                             void        *psHciHandle,
228                             void        *pHwRef,
229                             uint8_t     mode
230                         );
231 
232 
233 /**
234 * \ingroup grp_hci_nfc
235 *
236 * \brief To send the switch mode event
237 *
238 * This function send an event to change the switch mode.
239 *
240 *
241 * \param[in]  psHciContext              psHciContext is pointer to HCI Layer
242 *
243 * \param[in]  pHwRef                    pHwRef is underlying Hardware context.
244 *
245 * \param[in]  uicc_mode                 UICC_SWITCH_MODE_OFF
246 *                                       UICC_SWITCH_MODE_DEFAULT
247 *                                       UICC_SWITCH_MODE_ON
248 * \retval NFCSTATUS_SUCCESS             Function execution is successful
249 *
250 * \retval NFCSTATUS_INVALID_PARAMETER   One or more of the given inputs are not valid
251 */
252 extern
253 NFCSTATUS
254 phHciNfc_SWP_Configure_Mode(
255                               void              *psHciHandle,
256                               void              *pHwRef,
257                               uint8_t           uicc_mode
258                           );
259 
260 /**
261 * \ingroup grp_hci_nfc
262 *
263 * \brief To get the status of the UICC
264 *
265 * This function reads the status of the UICC. The status value can be any
266 * of the values present in the \ref phHciNfc_SWP_Status_t
267 *
268 *
269 * \param[in]  psHciContext              psHciContext is pointer to HCI Layer
270 *
271 * \param[in]  pHwRef                    pHwRef is underlying Hardware context.
272 * \retval NFCSTATUS_SUCCESS             Function execution is successful
273 *
274 * \retval NFCSTATUS_INVALID_PARAMETER   One or more of the given inputs are not valid
275 */
276 extern
277 NFCSTATUS
278 phHciNfc_SWP_Get_Status(
279                             void        *psHciHandle,
280                             void        *pHwRef
281                         );
282 
283 /**
284 * \ingroup grp_hci_nfc
285 *
286 * \brief To get the bitrate
287 *
288 * This function reads the bitrate
289 *
290 *
291 * \param[in]  psHciContext              psHciContext is pointer to HCI Layer
292 *
293 * \param[in]  pHwRef                    pHwRef is underlying Hardware context.
294 * \retval NFCSTATUS_SUCCESS             Function execution is successful
295 *
296 * \retval NFCSTATUS_INVALID_PARAMETER   One or more of the given inputs are not valid
297 */
298 extern
299 NFCSTATUS
300 phHciNfc_SWP_Get_Bitrate(
301                             void        *psHciHandle,
302                             void        *pHwRef
303                         );
304 
305 /**
306 * \ingroup grp_hci_nfc
307 *
308 * \brief To update the sequence
309 *
310 * This function reads the bitrate
311 *
312 *
313 * \param[in]  psHciContext              psHciContext is pointer to HCI Layer
314 *
315 * \param[in]  SWP_seq                   SWP sequence.
316 *
317 * \retval NFCSTATUS_SUCCESS             Function execution is successful
318 * \retval NFCSTATUS_INVALID_PARAMETER   One or more of the given inputs are not valid
319 */
320 extern
321 NFCSTATUS
322 phHciNfc_SWP_Update_Sequence(
323                                 phHciNfc_sContext_t     *psHciContext,
324                                 phHciNfc_eSeqType_t     SWP_seq
325                              );
326 
327 /**
328 * \ingroup grp_hci_nfc
329 *
330 * \brief To configure default mode and the default status.
331 *
332 * This function configures default status and default mode.
333 *
334 *
335 * \param[in]  psHciContext              psHciContext is pointer to HCI Layer
336 * \param[in]  pHwRef                    pHwRef is underlying Hardware context.
337 * \param[in]  ps_emulation_cfg          emulation configuration info.
338 *
339 *
340 * \retval NFCSTATUS_SUCCESS             Function execution is successful
341 *
342 * \retval NFCSTATUS_INVALID_PARAMETER   One or more of the given inputs are not valid
343 */
344 extern
345 NFCSTATUS
346 phHciNfc_SWP_Config_Sequence(
347                             phHciNfc_sContext_t     *psHciContext,
348                             void                    *pHwRef,
349                             phHal_sEmulationCfg_t   *ps_emulation_cfg
350                         );
351 
352 
353 #endif /* #ifndef PHHCINFC_SWP_H */
354 
355 
356