1/******************************************************************************
2 *
3 *  Copyright (C) 2010-2012 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 *  This is the public interface file for NFA P2P, Broadcom's NFC
22 *  application layer for mobile phones.
23 *
24 ******************************************************************************/
25#ifndef NFA_P2P_API_H
26#define NFA_P2P_API_H
27
28#include "llcp_api.h"
29#include "nfa_api.h"
30
31/*****************************************************************************
32**  Constants and data types
33*****************************************************************************/
34
35/* NFA P2P Reason of disconnection */
36#define NFA_P2P_DISC_REASON_REMOTE_INITIATE	    0x00    /* remote initiated to disconnect  */
37#define NFA_P2P_DISC_REASON_LOCAL_INITITATE	    0x01    /* local initiated to disconnect   */
38#define NFA_P2P_DISC_REASON_NO_SERVICE	        0x02    /* no service bound in remote      */
39#define NFA_P2P_DISC_REASON_REMOTE_REJECT	    0x03    /* remote rejected connection      */
40#define NFA_P2P_DISC_REASON_FRAME_ERROR	        0x04    /* sending or receiving FRMR PDU   */
41#define NFA_P2P_DISC_REASON_LLCP_DEACTIVATED	0x05    /* LLCP link deactivated           */
42#define NFA_P2P_DISC_REASON_NO_RESOURCE	        0x06    /* Out of resource in local device */
43#define NFA_P2P_DISC_REASON_NO_INFORMATION	    0x80    /* Without information             */
44
45/* NFA P2P callback events */
46#define NFA_P2P_REG_SERVER_EVT      0x00    /* Server is registered                         */
47#define NFA_P2P_REG_CLIENT_EVT      0x01    /* Client is registered                         */
48#define NFA_P2P_ACTIVATED_EVT       0x02    /* LLCP Link has been activated                 */
49#define NFA_P2P_DEACTIVATED_EVT	    0x03    /* LLCP Link has been deactivated               */
50#define NFA_P2P_CONN_REQ_EVT        0x04    /* Data link connection request from peer       */
51#define NFA_P2P_CONNECTED_EVT       0x05    /* Data link connection has been established    */
52#define NFA_P2P_DISC_EVT            0x06    /* Data link connection has been disconnected   */
53#define NFA_P2P_DATA_EVT            0x07    /* Data received from peer                      */
54#define NFA_P2P_CONGEST_EVT         0x08    /* Status indication of outgoing data           */
55#define NFA_P2P_LINK_INFO_EVT       0x09    /* link MIU and Well-Known Service list         */
56#define NFA_P2P_SDP_EVT	            0x0A    /* Remote SAP of SDP result                     */
57
58typedef UINT8 tNFA_P2P_EVT;
59
60/* NFA allocates a SAP for server */
61#define NFA_P2P_ANY_SAP         LLCP_INVALID_SAP
62#define NFA_P2P_INVALID_SAP     LLCP_INVALID_SAP
63
64/* Recommanded MIU's for connection-oriented */
65#define NFA_P2P_MIU_1           (NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
66#define NFA_P2P_MIU_2           (2*NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
67#define NFA_P2P_MIU_3           (3*NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
68#define NFA_P2P_MIU_8           (8*NCI_NFC_DEP_MAX_DATA - LLCP_PDU_HEADER_SIZE - LLCP_SEQUENCE_SIZE)
69
70#define NFA_P2P_LLINK_TYPE      LLCP_LINK_TYPE_LOGICAL_DATA_LINK
71#define NFA_P2P_DLINK_TYPE      LLCP_LINK_TYPE_DATA_LINK_CONNECTION
72typedef UINT8 tNFA_P2P_LINK_TYPE;
73
74/* Data for NFA_P2P_REG_SERVER_EVT */
75typedef struct
76{
77    tNFA_HANDLE     server_handle;     /* NFA_HANDLE_INVALID if failed */
78    char            service_name[LLCP_MAX_SN_LEN + 1];
79    UINT8           server_sap;
80} tNFA_P2P_REG_SERVER;
81
82/* Data for NFA_P2P_REG_CLIENT_EVT */
83typedef struct
84{
85    tNFA_HANDLE     client_handle;     /* NFA_HANDLE_INVALID if failed */
86} tNFA_P2P_REG_CLIENT;
87
88/* Data for NFA_P2P_ACTIVATED_EVT */
89typedef struct
90{
91    tNFA_HANDLE     handle;
92    UINT16          local_link_miu;
93    UINT16          remote_link_miu;
94} tNFA_P2P_ACTIVATED;
95
96/* Data for NFA_P2P_DEACTIVATED_EVT */
97typedef struct
98{
99    tNFA_HANDLE     handle;
100} tNFA_P2P_DEACTIVATED;
101
102/* Data for NFA_P2P_CONN_REQ_EVT */
103typedef struct
104{
105    tNFA_HANDLE     server_handle;
106    tNFA_HANDLE     conn_handle;
107    UINT8           remote_sap;
108    UINT16          remote_miu;
109    UINT8           remote_rw;
110} tNFA_P2P_CONN_REQ;
111
112/* Data for NFA_P2P_CONNECTED_EVT */
113typedef struct
114{
115    tNFA_HANDLE     client_handle;
116    tNFA_HANDLE     conn_handle;
117    UINT8           remote_sap;
118    UINT16          remote_miu;
119    UINT8           remote_rw;
120} tNFA_P2P_CONN;
121
122/* Data for NFA_P2P_DISC_EVT */
123typedef struct
124{
125    tNFA_HANDLE     handle;
126    UINT8           reason;
127} tNFA_P2P_DISC;
128
129/* Data for NFA_P2P_DATA_EVT */
130typedef struct
131{
132    tNFA_HANDLE     handle;
133    UINT8           remote_sap;
134    tNFA_P2P_LINK_TYPE link_type;
135} tNFA_P2P_DATA;
136
137/* Data for NFA_P2P_CONGEST_EVT */
138typedef struct
139{
140    tNFA_HANDLE     handle;
141    BOOLEAN         is_congested;
142    tNFA_P2P_LINK_TYPE link_type;
143} tNFA_P2P_CONGEST;
144
145/* Data for NFA_P2P_LINK_INFO_EVT */
146typedef struct
147{
148    tNFA_HANDLE     handle;
149    UINT16          wks;            /* well-known service */
150    UINT16          local_link_miu;
151    UINT16          remote_link_miu;
152} tNFA_P2P_LINK_INFO;
153
154/* Data for NFA_P2P_SDP_EVT */
155typedef struct
156{
157    tNFA_HANDLE     handle;
158    UINT8           remote_sap;     /* 0x00 if failed */
159} tNFA_P2P_SDP;
160
161/* Union of all P2P callback structures */
162typedef union
163{
164    tNFA_P2P_REG_SERVER     reg_server;     /* NFA_P2P_REG_SERVER_EVT   */
165    tNFA_P2P_REG_CLIENT     reg_client;     /* NFA_P2P_REG_CLIENT_EVT   */
166    tNFA_P2P_ACTIVATED      activated;      /* NFA_P2P_ACTIVATED_EVT    */
167    tNFA_P2P_DEACTIVATED    deactivated;    /* NFA_P2P_DEACTIVATED_EVT  */
168    tNFA_P2P_CONN_REQ       conn_req;       /* NFA_P2P_CONN_REQ_EVT     */
169    tNFA_P2P_CONN           connected;      /* NFA_P2P_CONNECTED_EVT    */
170    tNFA_P2P_DISC           disc;           /* NFA_P2P_DISC_EVT         */
171    tNFA_P2P_DATA           data;           /* NFA_P2P_DATA_EVT         */
172    tNFA_P2P_CONGEST        congest;        /* NFA_P2P_CONGEST_EVT      */
173    tNFA_P2P_LINK_INFO      link_info;      /* NFA_P2P_LINK_INFO_EVT    */
174    tNFA_P2P_SDP            sdp;            /* NFA_P2P_SDP_EVT          */
175} tNFA_P2P_EVT_DATA;
176
177/* NFA P2P callback */
178typedef void (tNFA_P2P_CBACK)(tNFA_P2P_EVT event, tNFA_P2P_EVT_DATA *p_data);
179
180/*****************************************************************************
181**  External Function Declarations
182*****************************************************************************/
183#ifdef __cplusplus
184extern "C"
185{
186#endif
187
188/*******************************************************************************
189**
190** Function         NFA_P2pRegisterServer
191**
192** Description      This function is called to listen to a SAP as server on LLCP.
193**
194**                  NFA_P2P_REG_SERVER_EVT will be returned with status and handle.
195**
196**                  If server_sap is set to NFA_P2P_ANY_SAP, then NFA will allocate
197**                  a SAP between LLCP_LOWER_BOUND_SDP_SAP and LLCP_UPPER_BOUND_SDP_SAP
198**                  Otherwise, server_sap must be between (LLCP_SDP_SAP + 1) and
199**                  LLCP_UPPER_BOUND_SDP_SAP
200**
201**                  link_type : NFA_P2P_LLINK_TYPE and/or NFA_P2P_DLINK_TYPE
202**
203** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
204**                  should happen before calling this function
205**
206** Returns          NFA_STATUS_OK if successfully initiated
207**                  NFA_STATUS_FAILED otherwise
208**
209*******************************************************************************/
210NFC_API extern tNFA_STATUS NFA_P2pRegisterServer (UINT8              server_sap,
211                                                  tNFA_P2P_LINK_TYPE link_type,
212                                                  char              *p_service_name,
213                                                  tNFA_P2P_CBACK    *p_cback);
214
215/*******************************************************************************
216**
217** Function         NFA_P2pRegisterClient
218**
219** Description      This function is called to register a client service on LLCP.
220**
221**                  NFA_P2P_REG_CLIENT_EVT will be returned with status and handle.
222**
223**                  link_type : NFA_P2P_LLINK_TYPE and/or NFA_P2P_DLINK_TYPE
224**
225** Returns          NFA_STATUS_OK if successfully initiated
226**                  NFA_STATUS_FAILED otherwise
227**
228*******************************************************************************/
229NFC_API extern tNFA_STATUS NFA_P2pRegisterClient (tNFA_P2P_LINK_TYPE link_type,
230                                                  tNFA_P2P_CBACK *p_cback);
231
232/*******************************************************************************
233**
234** Function         NFA_P2pDeregister
235**
236** Description      This function is called to stop listening to a SAP as server
237**                  or stop client service on LLCP.
238**
239** Note:            If this function is called to de-register a server and RF discovery
240**                  is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
241**                  should happen before calling this function
242**
243** Returns          NFA_STATUS_OK if successfully initiated
244**                  NFA_STATUS_BAD_HANDLE if handle is not valid
245**                  NFA_STATUS_FAILED otherwise
246**
247*******************************************************************************/
248NFC_API extern tNFA_STATUS NFA_P2pDeregister (tNFA_HANDLE handle);
249
250/*******************************************************************************
251**
252** Function         NFA_P2pAcceptConn
253**
254** Description      This function is called to accept a request of data link
255**                  connection to a listening SAP on LLCP after receiving
256**                  NFA_P2P_CONN_REQ_EVT.
257**
258** Returns          NFA_STATUS_OK if successfully initiated
259**                  NFA_STATUS_BAD_HANDLE if handle is not valid
260**                  NFA_STATUS_FAILED otherwise
261**
262*******************************************************************************/
263NFC_API extern tNFA_STATUS NFA_P2pAcceptConn (tNFA_HANDLE conn_handle,
264                                              UINT16      miu,
265                                              UINT8       rw);
266
267/*******************************************************************************
268**
269** Function         NFA_P2pRejectConn
270**
271** Description      This function is called to reject a request of data link
272**                  connection to a listening SAP on LLCP after receiving
273**                  NFA_P2P_CONN_REQ_EVT.
274**
275** Returns          NFA_STATUS_OK if successfully initiated
276**                  NFA_STATUS_BAD_HANDLE if handle is not valid
277**                  NFA_STATUS_FAILED otherwise
278**
279*******************************************************************************/
280NFC_API extern tNFA_STATUS NFA_P2pRejectConn (tNFA_HANDLE conn_handle);
281
282/*******************************************************************************
283**
284** Function         NFA_P2pDisconnect
285**
286** Description      This function is called to disconnect an existing or
287**                  connecting data link connection.
288**
289**                  discard any pending data on data link connection if flush is set to TRUE
290**
291**                  NFA_P2P_DISC_EVT will be returned after data link connection is disconnected
292**
293** Returns          NFA_STATUS_OK if successfully initiated
294**                  NFA_STATUS_BAD_HANDLE if handle is not valid
295**                  NFA_STATUS_FAILED otherwise
296**
297*******************************************************************************/
298NFC_API extern tNFA_STATUS NFA_P2pDisconnect (tNFA_HANDLE conn_handle,
299                                              BOOLEAN     flush);
300
301/*******************************************************************************
302**
303** Function         NFA_P2pConnectByName
304**
305** Description      This function is called to create a connection-oriented transport
306**                  by a service name.
307**                  NFA_P2P_CONNECTED_EVT if success
308**                  NFA_P2P_DISC_EVT if failed
309**
310** Returns          NFA_STATUS_OK if successfully initiated
311**                  NFA_STATUS_BAD_HANDLE if client is not registered
312**                  NFA_STATUS_FAILED otherwise
313**
314*******************************************************************************/
315NFC_API extern tNFA_STATUS NFA_P2pConnectByName (tNFA_HANDLE client_handle,
316                                                 char       *p_service_name,
317                                                 UINT16      miu,
318                                                 UINT8       rw);
319
320/*******************************************************************************
321**
322** Function         NFA_P2pConnectBySap
323**
324** Description      This function is called to create a connection-oriented transport
325**                  by a SAP.
326**                  NFA_P2P_CONNECTED_EVT if success
327**                  NFA_P2P_DISC_EVT if failed
328**
329** Returns          NFA_STATUS_OK if successfully initiated
330**                  NFA_STATUS_BAD_HANDLE if client is not registered
331**                  NFA_STATUS_FAILED otherwise
332**
333*******************************************************************************/
334NFC_API extern tNFA_STATUS NFA_P2pConnectBySap (tNFA_HANDLE client_handle,
335                                                UINT8       dsap,
336                                                UINT16      miu,
337                                                UINT8       rw);
338
339/*******************************************************************************
340**
341** Function         NFA_P2pSendUI
342**
343** Description      This function is called to send data on connectionless
344**                  transport.
345**
346** Returns          NFA_STATUS_OK if successfully initiated
347**                  NFA_STATUS_BAD_HANDLE if handle is not valid
348**                  NFA_STATUS_BAD_LENGTH if data length is more than remote link MIU
349**                  NFA_STATUS_CONGESTED  if congested
350**                  NFA_STATUS_FAILED otherwise
351**
352*******************************************************************************/
353NFC_API extern tNFA_STATUS NFA_P2pSendUI (tNFA_HANDLE handle,
354                                          UINT8       dsap,
355                                          UINT16      length,
356                                          UINT8      *p_data);
357
358/*******************************************************************************
359**
360** Function         NFA_P2pReadUI
361**
362** Description      This function is called to read data on connectionless
363**                  transport when receiving NFA_P2P_DATA_EVT with NFA_P2P_LLINK_TYPE.
364**
365**                  - Remote SAP who sent UI PDU is returned.
366**                  - Information of UI PDU up to max_data_len is copied into p_data.
367**                  - If more information of UI PDU or more UI PDU in queue then more
368**                    is returned to TRUE.
369**                  - Information of next UI PDU is not concatenated.
370**
371** Returns          NFA_STATUS_OK if successfully initiated
372**                  NFA_STATUS_BAD_HANDLE if handle is not valid
373**
374*******************************************************************************/
375NFC_API extern tNFA_STATUS NFA_P2pReadUI (tNFA_HANDLE handle,
376                                          UINT32      max_data_len,
377                                          UINT8       *p_remote_sap,
378                                          UINT32      *p_data_len,
379                                          UINT8       *p_data,
380                                          BOOLEAN     *p_more);
381
382/*******************************************************************************
383**
384** Function         NFA_P2pFlushUI
385**
386** Description      This function is called to flush data on connectionless
387**                  transport.
388**
389** Returns          NFA_STATUS_OK if successfully initiated
390**                  NFA_STATUS_BAD_HANDLE if handle is not valid
391**
392*******************************************************************************/
393NFC_API extern tNFA_STATUS NFA_P2pFlushUI (tNFA_HANDLE handle,
394                                           UINT32      *p_length);
395
396/*******************************************************************************
397**
398** Function         NFA_P2pSendData
399**
400** Description      This function is called to send data on connection-oriented
401**                  transport.
402**
403** Returns          NFA_STATUS_OK if successfully initiated
404**                  NFA_STATUS_BAD_HANDLE if handle is not valid
405**                  NFA_STATUS_BAD_LENGTH if data length is more than remote MIU
406**                  NFA_STATUS_CONGESTED  if congested
407**                  NFA_STATUS_FAILED otherwise
408**
409*******************************************************************************/
410NFC_API extern tNFA_STATUS NFA_P2pSendData (tNFA_HANDLE conn_handle,
411                                            UINT16      length,
412                                            UINT8      *p_data);
413
414/*******************************************************************************
415**
416** Function         NFA_P2pReadData
417**
418** Description      This function is called to read data on connection-oriented
419**                  transport when receiving NFA_P2P_DATA_EVT with NFA_P2P_DLINK_TYPE.
420**
421**                  - Information of I PDU is copied into p_data up to max_data_len.
422**                  - If more information of I PDU or more I PDU in queue, then more
423**                    is returned to TRUE.
424**                  - Information of next I PDU is not concatenated.
425**
426** Returns          NFA_STATUS_OK if successfully initiated
427**                  NFA_STATUS_BAD_HANDLE if handle is not valid
428**
429*******************************************************************************/
430NFC_API extern tNFA_STATUS NFA_P2pReadData (tNFA_HANDLE handle,
431                                            UINT32      max_data_len,
432                                            UINT32      *p_data_len,
433                                            UINT8       *p_data,
434                                            BOOLEAN     *p_more);
435
436/*******************************************************************************
437**
438** Function         NFA_P2pFlushData
439**
440** Description      This function is called to flush data on connection-oriented
441**                  transport.
442**
443** Returns          NFA_STATUS_OK if successfully initiated
444**                  NFA_STATUS_BAD_HANDLE if handle is not valid
445**
446*******************************************************************************/
447NFC_API extern tNFA_STATUS NFA_P2pFlushData (tNFA_HANDLE handle,
448                                             UINT32      *p_length);
449
450/*******************************************************************************
451**
452** Function         NFA_P2pSetLocalBusy
453**
454** Description      This function is called to stop or resume incoming data on
455**                  connection-oriented transport.
456**
457** Returns          NFA_STATUS_OK if successfully initiated
458**                  NFA_STATUS_BAD_HANDLE if handle is not valid
459**                  NFA_STATUS_FAILED otherwise
460**
461*******************************************************************************/
462NFC_API extern tNFA_STATUS NFA_P2pSetLocalBusy (tNFA_HANDLE conn_handle,
463                                                BOOLEAN     is_busy);
464
465/*******************************************************************************
466**
467** Function         NFA_P2pGetLinkInfo
468**
469** Description      This function is called to get local/remote link MIU and
470**                  Well-Known Service list encoded as a 16-bit field of connected LLCP.
471**                  NFA_P2P_LINK_INFO_EVT will be returned.
472**
473** Returns          NFA_STATUS_OK if successfully initiated
474**                  NFA_STATUS_BAD_HANDLE if server or client is not registered
475**                  NFA_STATUS_FAILED otherwise
476**
477*******************************************************************************/
478NFC_API extern tNFA_STATUS NFA_P2pGetLinkInfo (tNFA_HANDLE handle);
479
480/*******************************************************************************
481**
482** Function         NFA_P2pGetRemoteSap
483**
484** Description      This function is called to get SAP associated by service name
485**                  on connected remote LLCP.
486**                  NFA_P2P_SDP_EVT will be returned.
487**
488** Returns          NFA_STATUS_OK if successfully initiated
489**                  NFA_STATUS_BAD_HANDLE if server or client is not registered
490**                  NFA_STATUS_FAILED otherwise
491**
492*******************************************************************************/
493NFC_API extern tNFA_STATUS NFA_P2pGetRemoteSap (tNFA_HANDLE handle,
494                                                char       *p_service_name);
495
496/*******************************************************************************
497**
498** Function         NFA_P2pSetLLCPConfig
499**
500** Description      This function is called to change LLCP config parameters.
501**                  Application must call while LLCP is not activated.
502**
503**                  Parameters descriptions (default value)
504**                  - Local Link MIU (LLCP_MIU)
505**                  - Option parameter (LLCP_OPT_VALUE)
506**                  - Response Waiting Time Index (LLCP_WAITING_TIME)
507**                  - Local Link Timeout (LLCP_LTO_VALUE)
508**                  - Inactivity Timeout as initiator role (LLCP_INIT_INACTIVITY_TIMEOUT)
509**                  - Inactivity Timeout as target role (LLCP_TARGET_INACTIVITY_TIMEOUT)
510**                  - Delay SYMM response (LLCP_DELAY_RESP_TIME)
511**                  - Data link connection timeout (LLCP_DATA_LINK_CONNECTION_TOUT)
512**                  - Delay timeout to send first PDU as initiator (LLCP_DELAY_TIME_TO_SEND_FIRST_PDU)
513**
514** Returns          NFA_STATUS_OK if successfully initiated
515**                  NFA_STATUS_FAILED otherwise
516**
517*******************************************************************************/
518NFC_API extern tNFA_STATUS NFA_P2pSetLLCPConfig (UINT16 link_miu,
519                                                 UINT8  opt,
520                                                 UINT8  wt,
521                                                 UINT16 link_timeout,
522                                                 UINT16 inact_timeout_init,
523                                                 UINT16 inact_timeout_target,
524                                                 UINT16 symm_delay,
525                                                 UINT16 data_link_timeout,
526                                                 UINT16 delay_first_pdu_timeout);
527
528/*******************************************************************************
529**
530** Function         NFA_P2pGetLLCPConfig
531**
532** Description      This function is called to read LLCP config parameters.
533**
534**                  Parameters descriptions
535**                  - Local Link MIU
536**                  - Option parameter
537**                  - Response Waiting Time Index
538**                  - Local Link Timeout
539**                  - Inactivity Timeout as initiator role
540**                  - Inactivity Timeout as target role
541**                  - Delay SYMM response
542**                  - Data link connection timeout
543**                  - Delay timeout to send first PDU as initiator
544**
545** Returns          None
546**
547*******************************************************************************/
548NFC_API extern void NFA_P2pGetLLCPConfig (UINT16 *p_link_miu,
549                                          UINT8  *p_opt,
550                                          UINT8  *p_wt,
551                                          UINT16 *p_link_timeout,
552                                          UINT16 *p_inact_timeout_init,
553                                          UINT16 *p_inact_timeout_target,
554                                          UINT16 *p_symm_delay,
555                                          UINT16 *p_data_link_timeout,
556                                          UINT16 *p_delay_first_pdu_timeout);
557
558/*******************************************************************************
559**
560** Function         NFA_P2pSetTraceLevel
561**
562** Description      This function sets the trace level for P2P.  If called with
563**                  a value of 0xFF, it simply returns the current trace level.
564**
565** Returns          The new or current trace level
566**
567*******************************************************************************/
568NFC_API extern UINT8 NFA_P2pSetTraceLevel (UINT8 new_level);
569
570#ifdef __cplusplus
571}
572#endif
573
574#endif /* NFA_P2P_API_H */
575
576