blob: fdae2ed214dbc128334d19da3cab001e91436189 [file] [log] [blame]
Nick Pelly5d9927b2010-09-23 12:47:58 -07001/*
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* \file phNfcInterface.h
21* \brief Generic Interface Layer Function Definitions.
22*
23* Project: NFC-FRI-1.1
24*
25* $Date: Thu Feb 11 19:01:36 2010 $
26* $Author: ing04880 $
27* $Revision: 1.42 $
28* $Aliases: 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 $
29*
30* =============================================================================
31*/
32
33#ifndef PHNFCINTERFACE_H /* */
34#define PHNFCINTERFACE_H /* */
35
36/**
37* \name NFC Inteface
38*
39* File: \ref phNfcInterface.h
40*
41*/
42
43/*@{*/
44#define PHNFCINTERFACE_FILEREVISION "$Revision: 1.42 $" /**< \ingroup grp_file_attributes */
45#define PHNFCINTERFACE_FILEALIASES "$Aliases: 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/*
49################################################################################
50***************************** Header File Inclusion ****************************
51################################################################################
52*/
53
54#include <phNfcTypes.h>
55#include <phNfcHalTypes.h>
56
57
58/*
59################################################################################
60****************************** Macro Definitions *******************************
61################################################################################
62*/
63
64#define NFC_FSM_IN_PROGRESS 0x01U
65#define NFC_FSM_COMPLETE 0x00U
66
67#define NFC_FSM_CURRENT 0x00U
68#define NFC_FSM_NEXT 0x01U
69
70/* NFC Notification Types */
71
72#define NFC_NOTIFY_INIT_COMPLETED 0x01
73#define NFC_NOTIFY_INIT_FAILED 0xF1
74
75#define NFC_NOTIFY_DEINIT_COMPLETED 0x02
76#define NFC_NOTIFY_DEINIT_FAILED 0xF2
77
78#define NFC_NOTIFY_EVENT 0x70
79
80#define NFC_NOTIFY_DEVICE_ACTIVATED 0x82
81#define NFC_NOTIFY_DEVICE_DEACTIVATED 0x83
82
83#define NFC_NOTIFY_SEND_COMPLETED 0x03
84#define NFC_NOTIFY_SEND_ERROR 0xF3
85
86#define NFC_NOTIFY_RECV_COMPLETED 0x04
87#define NFC_NOTIFY_RECV_ERROR 0xF4
88#define NFC_NOTIFY_RECV_EVENT 0x74
89#define NFC_NOTIFY_RECV_CANCELLED 0x34
90
91#define NFC_NOTIFY_TRANSCEIVE_COMPLETED 0x05
92#define NFC_NOTIFY_TRANSCEIVE_ERROR 0xF5
93
94#define NFC_NOTIFY_POLL_ENABLED 0x06
95#define NFC_NOTIFY_POLL_RESTARTED 0x16
96#define NFC_NOTIFY_POLL_DISABLED 0x26
97#define NFC_NOTIFY_CONFIG_SUCCESS 0x36
98#define NFC_NOTIFY_CONFIG_ERROR 0xF6
99
100#define NFC_NOTIFY_TARGET_DISCOVERED 0x10
101#define NFC_NOTIFY_DISCOVERY_ERROR 0xFA
102#define NFC_NOTIFY_TARGET_RELEASED 0x11
103#define NFC_NOTIFY_TARGET_CONNECTED 0x12
104#define NFC_NOTIFY_TARGET_PRESENT 0x13
105#define NFC_NOTIFY_TARGET_REACTIVATED 0x14
106#define NFC_NOTIFY_CONNECT_FAILED 0xFC
107#define NFC_NOTIFY_TARGET_DISCONNECTED 0x15
108#define NFC_NOTIFY_DISCONNECT_FAILED 0xFD
109
110#define NFC_NOTIFY_TRANSACTION 0x07
111
112#define NFC_NOTIFY_RESULT 0x08
113
114#define NFC_NOTIFY_DEVICE_ERROR 0xFEU
115#define NFC_NOTIFY_ERROR 0xFFU
116
117
118#define BYTE_SIZE 0x08U
119#define BYTE_MASK 0xFFU
120/* HCI GET and SET BITS Macros */
121#define MASK_BITS8(p,l) \
122 ( ( (((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE )? \
123 (~(0xFFU<<((p)+(l))) & (0xFFU<<(p))):(0U) )
124#ifdef MASK_BITS
125#define GET_BITS8(num,p,l) \
126 ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \
127 (((num)& (MASK_BITS8(p,l)))>>(p)):(0U) )
128#else
129#define GET_BITS8(num,p,l) \
130 ( ((((p)+(l))<=BYTE_SIZE))? \
131 (((num)>>(p))& (~(0xFFU<<(l)))):(0U) )
132#endif
133#define SET_BITS8(num,p,l,val) \
134 ( ((((uint8_t)(p))+((uint8_t)(l)))<=BYTE_SIZE)? \
135 (((num)& (~MASK_BITS8(p,l)))|((val)<<(p))):(0U))
136
137/*
138################################################################################
139******************** Enumeration and Structure Definition **********************
140################################################################################
141*/
142
143
144enum phNfcIF_eExecution{
145 NFC_EXEC_NORMAL = 0x00, /**< Normal Execution Sequence */
146 NFC_EXEC_CALLBACK = 0x01, /**< Callback Execution Sequence */
147 NFC_EXEC_UNKNOWN = 0xFF /**< Callback Execution Sequence */
148};
149
150
151typedef enum phNfc_eModeType{
152 MODE_ON = 0x00U, /**< Switches the particular feature ON*/
153 MODE_OFF /**< Switches the particular feature OFF*/
154}phNfc_eModeType_t;
155
156/**
157 * State Structure to hold the State Information
158 *
159 * This structure holds the state Information of a specified
160 * Layer .
161 *
162 */
163
164typedef struct phNfc_sState
165{
166 uint8_t cur_state;
167 uint8_t transition;
168 uint8_t next_state;
169 /* uint8_t event; */
170
171}phNfc_sState_t;
172
173
174
175/**
176 * Transaction Completion Information Structure
177 *
178 * This structure holds the completion callback information of the
179 * transaction passed from the lower layer to the upper layer
180 * along with the completion callback.
181 */
182
183typedef struct phNfc_sTransactionInfo
184{
185 /* Returns the status of the Transaction Completion routine */
186 NFCSTATUS status;
187 /* Indicates the Type of the Transaction */
188 uint8_t type;
189 /* To contain more Transaction Notification specific info */
190 void *info;
191 /* The data response from the Transaction */
192 uint8_t *buffer;
193 /* The size of the data response from the Transaction */
194 uint16_t length;
195}phNfc_sTransactionInfo_t;
196
197/**
198 * Notification Information Structure
199 *
200 * This structure holds the notification callback information passed from
201 * the lower layer to the upper layer along with the notification callback.
202 */
203
204typedef struct phNfc_sCompletionInfo
205{
206 /* Returns the status of the completion routine */
207 NFCSTATUS status;
208
209 /* Indicates the Type of the Information
210 * associated with the completion
211 */
212 uint8_t type;
213
214 /* To contain more completion specific info */
215 void *info;
216
217}phNfc_sCompletionInfo_t;
218
219
220/**
221 * Notification Information
222 *
223 */
224typedef struct phNfc_sNotificationInfo
225{
226 /* Returns the status of the Notification routine */
227 NFCSTATUS status;
228 /* Indicates the Type of the Notification */
229 phHal_eNotificationType_t type;
230 /* To contain more Notification specific info */
231 void *info;
232
233}phNfc_sNotificationInfo_t;
234
235
236/*
237################################################################################
238********************* Callback Function Type Definition ************************
239################################################################################
240*/
241
242/**
243* Interface Notification Callback
244*
245* This callback notifies the occurrance of an event in the Lower Interface.
246*
247* \param [in] pContext Context for the Callback Function
248* \param [in] pHwRef Pointer to the Hardware Reference
249* \param [in] type Type of the Notification sent
250* \param [out] pInfo Pointer to the Transaction Information Structure
251* which contains the Status of the operation, data
252* obtained or sent and size of the data sent or received
253*/
254
255typedef void (*pphNfcIF_Notification_CB_t) (
256 void *pContext,
257 void *pHwRef,
258 uint8_t type,
259 void *pInfo
260 );
261
262/**
263* asynchronous Interface Transaction Completion callback
264*
265* This callback signals the completion of the asynchronous send or receive
266* operation. The number of bytes sent or recieved is returned back.
267*
268* \param [in] pContext Context for the Callback Function
269* \param [in] pHwRef Pointer to the Hardware Reference
270* \param [out] pInfo Pointer to the Transaction Information Structure
271* which contains the Status of the operation, data
272* obtained or sent and size of the data sent or received
273*/
274
275typedef void (*pphNfcIF_Transact_Completion_CB_t) (
276 void *pContext,
277 void *pHwRef,
278 phNfc_sTransactionInfo_t *pInfo
279 );
280
281/*
282################################################################################
283********************** Generic Interface Function Prototype ********************
284################################################################################
285*/
286
287/**
288 * Generic NFC Interface Function Type .
289 *
290 * \param [in] pContext Context pointer for the Generic Interface.
291 * \param [in] pHwRef pointer for the device interface link information.
292 */
293
294typedef NFCSTATUS (*pphNfcIF_Interface_t) (
295 void *pContext,
296 void *pHwRef
297 );
298/**
299 * Data Transaction between the lower layer interface
300 *
301 * Sends or Receives the given amount of data to the lower layer.
302 * The call returns immediately and the registered callback is
303 * called when all data has been written.
304 * <p>
305 *
306 * @note If the interface is not initialized the function does nothing.
307 *
308 * \param [in] pContext Context pointer for sending the data.
309 * \param [in] pHwRef pointer for the device interface link information.
310 * \param[in] data pointer to data buffer containing the data to be sent or
311 * to be received. The data pointer is valid at least until
312 * the registered callback is called.
313 * \param[in] length length of the data to be sent or to be received.
314 */
315
316typedef NFCSTATUS (*pphNfcIF_Transact_t) (
317 void *pContext,
318 void *pHwRef,
319 uint8_t *data,
320 uint16_t length
321 );
322
323
324/**
325 * Generic Interface structure with the Lower Layer
326 *
327 * This structure holds the context and function pointers of all functions
328 * required to interface with the Lower Layers.
329 */
330
331typedef struct phNfc_sLowerIF
332{
333 void *pcontext;
334 pphNfcIF_Interface_t init;
335 pphNfcIF_Interface_t release;
336 pphNfcIF_Transact_t send;
337 pphNfcIF_Transact_t receive;
338 pphNfcIF_Transact_t receive_wait;
339 pphNfcIF_Interface_t transact_abort;
340 pphNfcIF_Interface_t unregister;
341} phNfc_sLowerIF_t,*pphNfc_sLowerIF_t;
342
343
344/**
345 * Generic Callback interface structure for the Lower layer.
346 *
347 * This structure holds the callback function pointers of the functions that
348 * performs the completion of a particular operation. These functions are used
349 * by the Lower Layer interface to convey the completion of an operation.
350 */
351
352typedef struct phNfcIF_sCallBack
353{
354 /**<Holds context info to be sent to lower layer*/
355 void *pif_ctxt;
356 /**<Callback notifies occurrance of event in Lower Interface*/
357 pphNfcIF_Notification_CB_t notify;
358 /**<asynchronous Interface Transaction Completion callback*/
359 pphNfcIF_Transact_Completion_CB_t send_complete;
360 pphNfcIF_Transact_Completion_CB_t receive_complete;
361
362} phNfcIF_sCallBack_t ,*pphNfcIF_sCallBack_t ;
363
364
365/**
366 * Interface Reference structure.
367 *
368 * This structure holds the reference parameters, callback function pointers and
369 * lower interface functions .
370 */
371
372typedef struct phNfcIF_sReference
373{
374 /**<Generic Interface structure with the Lower Layer*/
375 phNfc_sLowerIF_t *plower_if;
376 /**<pointer to the data to be sent*/
377 uint8_t *tx_data;
378 /**<pointer to the data to be received*/
379 uint8_t *rx_data;
380}phNfcIF_sReference_t, *pphNfcIF_sReference_t;
381
382
383/*
384################################################################################
385********************** Register Function Type Definition ***********************
386################################################################################
387*/
388
389/**
390* Registers the interface functions and passes the callback functions to the
391* lower layer.
392*
393* This function passes the callback functions of the interface to the
394* lower interface and the lower interface registers its functions.
395*/
396
397typedef NFCSTATUS ( *pphNfcIF_Register_t) (
398 phNfcIF_sReference_t *psReference,
399 phNfcIF_sCallBack_t if_callback,
400 void *psIFConfig
401 );
402
403
404/**
405 * Layer Specific Configuration structure.
406 *
407 * This structure holds the Lower Layer Name and the registry function for registering
408 * the lower layer interface functions .
409 */
410
411
412typedef struct phNfcLayer_sCfg
413{
414 uint8_t layer_index;
415 uint8_t *layer_name;
416 pphNfcIF_Register_t layer_registry;
417 struct phNfcLayer_sCfg *layer_next;
418}phNfcLayer_sCfg_t, *pphNfcLayer_sCfg_t;
419
420
421#endif /* PHNFCINTERFACE_H */
422