• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /******************************************************************************
2  *
3  *  Copyright (C) 2010-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  *  This is the public interface file for NFA Connection Handover,
23  *  Broadcom's NFC application layer for mobile phones.
24  *
25  ******************************************************************************/
26 #ifndef NFA_CHO_API_H
27 #define NFA_CHO_API_H
28 
29 #include "nfa_api.h"
30 #include "ndef_utils.h"
31 
32 /*****************************************************************************
33 **  Constants and data types
34 *****************************************************************************/
35 
36 /* Handover version */
37 #define NFA_CHO_VERSION             0x12    /* version 1.2 */
38 #define NFA_CHO_GET_MAJOR_VERSION(x) ((UINT8)(x) >> 4)
39 #define NFA_CHO_GET_MINOR_VERSION(x) ((UINT8)(x) & 0x0F)
40 
41 /*
42 ** NFA Connection Handover callback events
43 */
44 #define NFA_CHO_REG_EVT             0x00    /* Registered                       */
45 #define NFA_CHO_ACTIVATED_EVT       0x01    /* LLCP link activated              */
46 #define NFA_CHO_DEACTIVATED_EVT     0x02    /* LLCP link deactivated            */
47 #define NFA_CHO_CONNECTED_EVT       0x03    /* data link connected              */
48 #define NFA_CHO_DISCONNECTED_EVT    0x04    /* data link disconnected           */
49 #define NFA_CHO_REQUEST_EVT         0x05    /* AC information in "Hr" record    */
50 #define NFA_CHO_SELECT_EVT          0x06    /* AC information in "Hs" record    */
51 #define NFA_CHO_SEL_ERR_EVT         0x07    /* Received select with error       */
52 #define NFA_CHO_TX_FAIL_EVT         0x08    /* Cannot send message to peer      */
53 
54 typedef UINT8 tNFA_CHO_EVT;
55 
56 /*
57 ** Data for NFA_CHO_ACTIVATED_EVT
58 */
59 typedef struct
60 {
61     BOOLEAN         is_initiator;   /* TRUE if local LLCP is initiator */
62 } tNFA_CHO_ACTIVATED;
63 
64 /* NFA Connection Handover Carrier Power State */
65 #define NFA_CHO_CPS_INACTIVE        0x00    /* Carrier is currently off         */
66 #define NFA_CHO_CPS_ACTIVE          0x01    /* Carrier is currently on          */
67 #define NFA_CHO_CPS_ACTIVATING      0x02    /* Activating carrier               */
68 #define NFA_CHO_CPS_UNKNOWN         0x03    /* Unknown                          */
69 
70 typedef UINT8 tNFA_CHO_CPS;
71 
72 /* Data for Alternative Carrier Information */
73 typedef struct
74 {
75     tNFA_CHO_CPS        cps;            /* carrier power state                      */
76     UINT8               num_aux_data;   /* number of Auxiliary NDEF records         */
77 } tNFA_CHO_AC_INFO;
78 
79 /* Device Role of Handover */
80 #define NFA_CHO_ROLE_REQUESTER  0
81 #define NFA_CHO_ROLE_SELECTOR   1
82 #define NFA_CHO_ROLE_UNDECIDED  2
83 
84 typedef UINT8 tNFA_CHO_ROLE_TYPE;
85 
86 /*
87 ** Data for NFA_CHO_CONNECTED_EVT
88 */
89 typedef struct
90 {
91     tNFA_CHO_ROLE_TYPE  initial_role;   /* NFA_CHO_ROLE_REQUESTER if local initiated */
92                                         /* NFA_CHO_ROLE_SELECTOR if remote initiated */
93 } tNFA_CHO_CONNECTED;
94 
95 /* Disconnected reason */
96 #define NFA_CHO_DISC_REASON_API_REQUEST         0
97 #define NFA_CHO_DISC_REASON_ALEADY_CONNECTED    1
98 #define NFA_CHO_DISC_REASON_CONNECTION_FAIL     2
99 #define NFA_CHO_DISC_REASON_PEER_REQUEST        3
100 #define NFA_CHO_DISC_REASON_LINK_DEACTIVATED    4
101 #define NFA_CHO_DISC_REASON_TIMEOUT             5
102 #define NFA_CHO_DISC_REASON_UNKNOWN_MSG         6
103 #define NFA_CHO_DISC_REASON_INVALID_MSG         7
104 #define NFA_CHO_DISC_REASON_SEMANTIC_ERROR      8
105 #define NFA_CHO_DISC_REASON_INTERNAL_ERROR      9
106 
107 typedef UINT8 tNFA_CHO_DISC_REASON;
108 
109 /*
110 ** Data for NFA_CHO_DISCONNECTED_EVT
111 */
112 typedef struct
113 {
114     tNFA_CHO_DISC_REASON    reason;     /* disconnected reason */
115 } tNFA_CHO_DISCONNECTED;
116 
117 /* Reference ID */
118 typedef struct
119 {
120     UINT8               ref_len;
121     UINT8               ref_name[NFA_CHO_MAX_REF_NAME_LEN];
122 } tNFA_CHO_REF_ID;
123 
124 /* Alternative Carrier records including carrier power state, carrier data reference and aux data reference */
125 typedef struct
126 {
127     tNFA_CHO_CPS        cps;                                      /* carrier power state    */
128     tNFA_CHO_REF_ID     carrier_data_ref;                         /* carrier data reference */
129     UINT8               aux_data_ref_count;                       /* number of aux data     */
130     tNFA_CHO_REF_ID     aux_data_ref[NFA_CHO_MAX_AUX_DATA_COUNT]; /* aux data reference     */
131 } tNFA_CHO_AC_REC;
132 
133 /*
134 ** Data for NFA_CHO_REQUEST_EVT
135 ** Application may receive it while waiting for NFA_CHO_SELECT_EVT because of handover collision.
136 */
137 typedef struct
138 {
139     tNFA_STATUS         status;
140     UINT8               num_ac_rec;                     /* number of Alternative Carrier records*/
141     tNFA_CHO_AC_REC     ac_rec[NFA_CHO_MAX_AC_INFO];    /* Alternative Carrier records          */
142     UINT8               *p_ref_ndef;                    /* pointer of NDEF including AC records */
143     UINT32              ref_ndef_len;                   /* length of NDEF                       */
144 } tNFA_CHO_REQUEST;
145 
146 /*
147 ** Data for NFA_CHO_SELECT_EVT
148 */
149 typedef struct
150 {
151     tNFA_STATUS         status;
152     UINT8               num_ac_rec;                     /* number of Alternative Carrier records*/
153     tNFA_CHO_AC_REC     ac_rec[NFA_CHO_MAX_AC_INFO];    /* Alternative Carrier records          */
154     UINT8               *p_ref_ndef;                    /* pointer of NDEF including AC records */
155     UINT32              ref_ndef_len;                   /* length of NDEF                       */
156 } tNFA_CHO_SELECT;
157 
158 /* Error reason */
159 #define NFA_CHO_ERROR_TEMP_MEM  0x01
160 #define NFA_CHO_ERROR_PERM_MEM  0x02
161 #define NFA_CHO_ERROR_CARRIER   0x03
162 
163 /*
164 ** Data for NFA_CHO_SEL_ERR_EVT
165 */
166 typedef struct
167 {
168     UINT8               error_reason;   /* Error reason          */
169     UINT32              error_data;     /* Error Data per reason */
170 } tNFA_CHO_SEL_ERR;
171 
172 /* Union of all Connection Handover callback structures */
173 typedef union
174 {
175     tNFA_STATUS             status;         /* NFA_CHO_REG_EVT          */
176                                             /* NFA_CHO_DEACTIVATED_EVT  */
177                                             /* NFA_CHO_TX_FAIL_EVT      */
178     tNFA_CHO_ACTIVATED      activated;      /* NFA_CHO_ACTIVATED_EVT    */
179     tNFA_CHO_CONNECTED      connected;      /* NFA_CHO_CONNECTED_EVT    */
180     tNFA_CHO_DISCONNECTED   disconnected;   /* NFA_CHO_DISCONNECTED_EVT */
181     tNFA_CHO_SELECT         select;         /* NFA_CHO_SELECT_EVT       */
182     tNFA_CHO_REQUEST        request;        /* NFA_CHO_REQUEST_EVT      */
183     tNFA_CHO_SEL_ERR        sel_err;        /* NFA_CHO_SEL_ERR_EVT      */
184 } tNFA_CHO_EVT_DATA;
185 
186 /* NFA Connection Handover callback */
187 typedef void (tNFA_CHO_CBACK) (tNFA_CHO_EVT event, tNFA_CHO_EVT_DATA *p_data);
188 
189 /*****************************************************************************
190 **  External Function Declarations
191 *****************************************************************************/
192 #ifdef __cplusplus
193 extern "C"
194 {
195 #endif
196 
197 /*******************************************************************************
198 **
199 ** Function         NFA_ChoRegister
200 **
201 ** Description      This function is called to register callback function to receive
202 **                  connection handover events.
203 **
204 **                  On this registration, "urn:nfc:sn:handover" server will be
205 **                  registered on LLCP if enable_server is TRUE.
206 **
207 **                  The result of the registration is reported with NFA_CHO_REG_EVT.
208 **
209 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
210 **                  should happen before calling this function
211 **
212 ** Returns          NFA_STATUS_OK if successfully initiated
213 **                  NFA_STATUS_FAILED otherwise
214 **
215 *******************************************************************************/
216 NFC_API extern tNFA_STATUS NFA_ChoRegister (BOOLEAN        enable_server,
217                                             tNFA_CHO_CBACK *p_cback);
218 
219 /*******************************************************************************
220 **
221 ** Function         NFA_ChoDeregister
222 **
223 ** Description      This function is called to deregister callback function from NFA
224 **                  Connection Handover Application.
225 **
226 **                  If this is the valid deregistration, NFA Connection Handover
227 **                  Application will close the service with "urn:nfc:sn:handover"
228 **                  on LLCP and deregister NDEF type handler if any.
229 **
230 ** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
231 **                  should happen before calling this function
232 **
233 ** Returns          NFA_STATUS_OK if successfully initiated
234 **                  NFA_STATUS_FAILED otherwise
235 **
236 *******************************************************************************/
237 NFC_API extern tNFA_STATUS NFA_ChoDeregister (void);
238 
239 /*******************************************************************************
240 **
241 ** Function         NFA_ChoConnect
242 **
243 ** Description      This function is called to create data link connection to
244 **                  Connection Handover server on peer device.
245 **
246 **                  It must be called after receiving NFA_CHO_ACTIVATED_EVT.
247 **                  NFA_CHO_CONNECTED_EVT will be returned if successful.
248 **                  Otherwise, NFA_CHO_DISCONNECTED_EVT will be returned.
249 **
250 ** Returns          NFA_STATUS_OK if successfully initiated
251 **                  NFA_STATUS_FAILED otherwise
252 **
253 *******************************************************************************/
254 NFC_API extern tNFA_STATUS NFA_ChoConnect (void);
255 
256 /*******************************************************************************
257 **
258 ** Function         NFA_ChoDisconnect
259 **
260 ** Description      This function is called to disconnect data link connection with
261 **                  Connection Handover server on peer device.
262 **
263 **                  NFA_CHO_DISCONNECTED_EVT will be returned.
264 **
265 ** Returns          NFA_STATUS_OK if successfully initiated
266 **                  NFA_STATUS_FAILED otherwise
267 **
268 *******************************************************************************/
269 NFC_API extern tNFA_STATUS NFA_ChoDisconnect (void);
270 
271 /*******************************************************************************
272 **
273 ** Function         NFA_ChoSendHr
274 **
275 ** Description      This function is called to send Handover Request Message with
276 **                  Handover Carrier records or Alternative Carrier records.
277 **
278 **                  It must be called after receiving NFA_CHO_CONNECTED_EVT.
279 **
280 **                  NDEF may include one or more Handover Carrier records or Alternative
281 **                  Carrier records with auxiliary data.
282 **                  The records in NDEF must be matched with tNFA_CHO_AC_INFO in order.
283 **                  Payload ID must be unique and Payload ID length must be less than
284 **                  or equal to NFA_CHO_MAX_REF_NAME_LEN.
285 **
286 **                  The alternative carrier information of Handover Select record
287 **                  will be sent to application by NFA_CHO_SELECT_EVT. Application
288 **                  may receive NFA_CHO_REQUEST_EVT because of handover collision.
289 **
290 ** Returns          NFA_STATUS_OK if successfully initiated
291 **                  NFA_STATUS_FAILED otherwise
292 **
293 *******************************************************************************/
294 NFC_API extern tNFA_STATUS NFA_ChoSendHr (UINT8             num_ac_info,
295                                           tNFA_CHO_AC_INFO *p_ac_info,
296                                           UINT8            *p_ndef,
297                                           UINT32            ndef_len);
298 
299 /*******************************************************************************
300 **
301 ** Function         NFA_ChoSendHs
302 **
303 ** Description      This function is called to send Handover Select message with
304 **                  Alternative Carrier records as response to Handover Request
305 **                  message.
306 **
307 **                  NDEF may include one or more Alternative Carrier records with
308 **                  auxiliary data.
309 **                  The records in NDEF must be matched with tNFA_CHO_AC_INFO in order.
310 **                  Payload ID must be unique and Payload ID length must be less than
311 **                  or equal to NFA_CHO_MAX_REF_NAME_LEN.
312 **
313 ** Returns          NFA_STATUS_OK if successfully initiated
314 **                  NFA_STATUS_FAILED otherwise
315 **
316 *******************************************************************************/
317 NFC_API extern tNFA_STATUS NFA_ChoSendHs (UINT8             num_ac_info,
318                                           tNFA_CHO_AC_INFO *p_ac_info,
319                                           UINT8            *p_ndef,
320                                           UINT32            ndef_len);
321 
322 /*******************************************************************************
323 **
324 ** Function         NFA_ChoSendSelectError
325 **
326 ** Description      This function is called to send Error record to indicate failure
327 **                  to process the most recently received Handover Request message.
328 **
329 **                  error_reason : NFA_CHO_ERROR_TEMP_MEM
330 **                                 NFA_CHO_ERROR_PERM_MEM
331 **                                 NFA_CHO_ERROR_CARRIER
332 **
333 ** Returns          NFA_STATUS_OK if successfully initiated
334 **                  NFA_STATUS_FAILED otherwise
335 **
336 *******************************************************************************/
337 NFC_API extern tNFA_STATUS NFA_ChoSendSelectError (UINT8  error_reason,
338                                                    UINT32 error_data);
339 
340 /*******************************************************************************
341 **
342 ** Function         NFA_ChoSetTraceLevel
343 **
344 ** Description      This function sets the trace level for CHO.  If called with
345 **                  a value of 0xFF, it simply returns the current trace level.
346 **
347 ** Returns          The new or current trace level
348 **
349 *******************************************************************************/
350 NFC_API extern UINT8 NFA_ChoSetTraceLevel (UINT8 new_level);
351 
352 #if (defined (NFA_CHO_TEST_INCLUDED) && (NFA_CHO_TEST_INCLUDED == TRUE))
353 
354 #define NFA_CHO_TEST_VERSION    0x01
355 #define NFA_CHO_TEST_RANDOM     0x02
356 /*******************************************************************************
357 **
358 ** Function         NFA_ChoSetTestParam
359 **
360 ** Description      This function is called to set test parameters.
361 **
362 *******************************************************************************/
363 NFC_API extern void NFA_ChoSetTestParam (UINT8  test_enable,
364                                          UINT8  test_version,
365                                          UINT16 test_random_number);
366 #endif
367 
368 #ifdef __cplusplus
369 }
370 #endif
371 
372 #endif /* NFA_CHO_API_H */
373 
374