Home | History | Annotate | Download | only in int
      1 /******************************************************************************
      2  *
      3  *  Copyright (C) 2010-2013 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 private interface file for the NFA SNEP.
     23  *
     24  ******************************************************************************/
     25 #ifndef NFA_SNEP_INT_H
     26 #define NFA_SNEP_INT_H
     27 
     28 #if (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE))
     29 #include "llcp_api.h"
     30 #include "nfa_snep_api.h"
     31 
     32 /*****************************************************************************
     33 **  Constants and data types
     34 *****************************************************************************/
     35 #define NFA_SNEP_DEFAULT_SERVER_SAP     0x04    /* SNEP default server SAP   */
     36 #define NFA_SNEP_HEADER_SIZE            6       /* SNEP header size          */
     37 #define NFA_SNEP_ACCEPT_LEN_SIZE        4       /* SNEP Acceptable Length size */
     38 #define NFA_SNEP_CLIENT_TIMEOUT         1000    /* ms, waiting for response  */
     39 
     40 /* NFA SNEP events */
     41 enum
     42 {
     43     NFA_SNEP_API_START_DEFAULT_SERVER_EVT  = NFA_SYS_EVT_START (NFA_ID_SNEP),
     44     NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT,
     45     NFA_SNEP_API_REG_SERVER_EVT,
     46     NFA_SNEP_API_REG_CLIENT_EVT,
     47     NFA_SNEP_API_DEREG_EVT,
     48     NFA_SNEP_API_CONNECT_EVT,
     49     NFA_SNEP_API_GET_REQ_EVT,
     50     NFA_SNEP_API_PUT_REQ_EVT,
     51     NFA_SNEP_API_GET_RESP_EVT,
     52     NFA_SNEP_API_PUT_RESP_EVT,
     53     NFA_SNEP_API_DISCONNECT_EVT,
     54 
     55     NFA_SNEP_LAST_EVT
     56 };
     57 
     58 /* data type for NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
     59 typedef struct
     60 {
     61     BT_HDR              hdr;
     62     tNFA_SNEP_CBACK     *p_cback;
     63 } tNFA_SNEP_API_START_DEFAULT_SERVER;
     64 
     65 /* data type for NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT */
     66 typedef struct
     67 {
     68     BT_HDR              hdr;
     69     tNFA_SNEP_CBACK     *p_cback;
     70 } tNFA_SNEP_API_STOP_DEFAULT_SERVER;
     71 
     72 /* data type for NFA_SNEP_API_REG_SERVER_EVT */
     73 typedef struct
     74 {
     75     BT_HDR              hdr;
     76     UINT8               server_sap;
     77     char                service_name[LLCP_MAX_SN_LEN + 1];
     78     tNFA_SNEP_CBACK     *p_cback;
     79 } tNFA_SNEP_API_REG_SERVER;
     80 
     81 /* data type for NFA_SNEP_API_REG_CLIENT_EVT */
     82 typedef struct
     83 {
     84     BT_HDR              hdr;
     85     tNFA_SNEP_CBACK     *p_cback;
     86 } tNFA_SNEP_API_REG_CLIENT;
     87 
     88 /* data type for NFA_SNEP_API_DEREG_EVT */
     89 typedef struct
     90 {
     91     BT_HDR              hdr;
     92     tNFA_HANDLE         reg_handle;     /* handle for registered server/client */
     93 } tNFA_SNEP_API_DEREG;
     94 
     95 /* data type for NFA_SNEP_API_CONNECT_EVT */
     96 typedef struct
     97 {
     98     BT_HDR              hdr;
     99     tNFA_HANDLE         client_handle;  /* handle for client                   */
    100     char                service_name[LLCP_MAX_SN_LEN + 1];
    101 } tNFA_SNEP_API_CONNECT;
    102 
    103 /* data type for NFA_SNEP_API_GET_REQ_EVT */
    104 typedef struct
    105 {
    106     BT_HDR              hdr;
    107     tNFA_HANDLE         conn_handle;    /* handle for data link connection      */
    108     UINT32              buff_length;    /* length of buffer; acceptable length  */
    109     UINT32              ndef_length;    /* length of current NDEF message       */
    110     UINT8               *p_ndef_buff;   /* buffer for NDEF message              */
    111 } tNFA_SNEP_API_GET_REQ;
    112 
    113 /* data type for NFA_SNEP_API_PUT_REQ_EVT */
    114 typedef struct
    115 {
    116     BT_HDR              hdr;
    117     tNFA_HANDLE         conn_handle;    /* handle for data link connection */
    118     UINT32              ndef_length;    /* length of NDEF message          */
    119     UINT8               *p_ndef_buff;   /* buffer for NDEF message         */
    120 } tNFA_SNEP_API_PUT_REQ;
    121 
    122 /* data type for NFA_SNEP_API_GET_RESP_EVT */
    123 typedef struct
    124 {
    125     BT_HDR              hdr;
    126     tNFA_HANDLE         conn_handle;    /* handle for data link connection */
    127     tNFA_SNEP_RESP_CODE resp_code;      /* response code                   */
    128     UINT32              ndef_length;    /* length of NDEF message          */
    129     UINT8               *p_ndef_buff;   /* buffer for NDEF message         */
    130 } tNFA_SNEP_API_GET_RESP;
    131 
    132 /* data type for NFA_SNEP_API_PUT_RESP_EVT */
    133 typedef struct
    134 {
    135     BT_HDR              hdr;
    136     tNFA_HANDLE         conn_handle;    /* handle for data link connection */
    137     tNFA_SNEP_RESP_CODE resp_code;      /* response code                   */
    138 } tNFA_SNEP_API_PUT_RESP;
    139 
    140 /* data type for NFA_SNEP_API_DISCONNECT_EVT */
    141 typedef struct
    142 {
    143     BT_HDR              hdr;
    144     tNFA_HANDLE         conn_handle;    /* response code                   */
    145     BOOLEAN             flush;          /* TRUE if discard pending data    */
    146 } tNFA_SNEP_API_DISCONNECT;
    147 
    148 /* union of all event data types */
    149 typedef union
    150 {
    151     BT_HDR                              hdr;
    152     tNFA_SNEP_API_START_DEFAULT_SERVER  api_start_default_server;   /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
    153     tNFA_SNEP_API_STOP_DEFAULT_SERVER   api_stop_default_server;    /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT  */
    154     tNFA_SNEP_API_REG_SERVER            api_reg_server;             /* NFA_SNEP_API_REG_SERVER_EVT   */
    155     tNFA_SNEP_API_REG_CLIENT            api_reg_client;             /* NFA_SNEP_API_REG_CLIENT_EVT   */
    156     tNFA_SNEP_API_DEREG                 api_dereg;                  /* NFA_SNEP_API_DEREG_EVT        */
    157     tNFA_SNEP_API_CONNECT               api_connect;                /* NFA_SNEP_API_CONNECT_EVT      */
    158     tNFA_SNEP_API_GET_REQ               api_get_req;                /* NFA_SNEP_API_GET_REQ_EVT      */
    159     tNFA_SNEP_API_PUT_REQ               api_put_req;                /* NFA_SNEP_API_PUT_REQ_EVT      */
    160     tNFA_SNEP_API_GET_RESP              api_get_resp;               /* NFA_SNEP_API_GET_RESP_EVT     */
    161     tNFA_SNEP_API_PUT_RESP              api_put_resp;               /* NFA_SNEP_API_PUT_RESP_EVT     */
    162     tNFA_SNEP_API_DISCONNECT            api_disc;                   /* NFA_SNEP_API_DISCONNECT_EVT   */
    163 } tNFA_SNEP_MSG;
    164 
    165 /*****************************************************************************
    166 **  control block
    167 *****************************************************************************/
    168 
    169 /* NFA SNEP service control block */
    170 #define NFA_SNEP_FLAG_ANY               0x00   /* ignore flags while searching   */
    171 #define NFA_SNEP_FLAG_SERVER            0x01   /* server */
    172 #define NFA_SNEP_FLAG_CLIENT            0x02   /* client */
    173 #define NFA_SNEP_FLAG_CONNECTING        0x04   /* waiting for connection confirm */
    174 #define NFA_SNEP_FLAG_CONNECTED         0x08   /* data link connected            */
    175 #define NFA_SNEP_FLAG_W4_RESP_CONTINUE  0x10   /* Waiting for continue response  */
    176 #define NFA_SNEP_FLAG_W4_REQ_CONTINUE   0x20   /* Waiting for continue request   */
    177 
    178 typedef struct
    179 {
    180     UINT8               local_sap;      /* local SAP of service */
    181     UINT8               remote_sap;     /* local SAP of service */
    182     UINT8               flags;          /* internal flags       */
    183     tNFA_SNEP_CBACK    *p_cback;        /* callback for event   */
    184     TIMER_LIST_ENT      timer;          /* timer for client     */
    185 
    186     UINT16              tx_miu;         /* adjusted MIU for throughput              */
    187     BOOLEAN             congest;        /* TRUE if data link connection is congested */
    188     BOOLEAN             rx_fragments;   /* TRUE if waiting more fragments            */
    189 
    190     UINT8               tx_code;        /* transmitted code in request/response */
    191     UINT8               rx_code;        /* received code in request/response    */
    192 
    193     UINT32              acceptable_length;
    194     UINT32              buff_length;    /* size of buffer for NDEF message   */
    195     UINT32              ndef_length;    /* length of NDEF message            */
    196     UINT32              cur_length;     /* currently sent or received length */
    197     UINT8               *p_ndef_buff;   /* NDEF message buffer               */
    198 } tNFA_SNEP_CONN;
    199 
    200 /*
    201 ** NFA SNEP control block
    202 */
    203 typedef struct
    204 {
    205     tNFA_SNEP_CONN      conn[NFA_SNEP_MAX_CONN];
    206     BOOLEAN             listen_enabled;
    207     BOOLEAN             is_dta_mode;
    208     UINT8               trace_level;
    209 } tNFA_SNEP_CB;
    210 
    211 /*
    212 ** NFA SNEP default server control block
    213 */
    214 
    215 /* multiple data link connections for default server */
    216 typedef struct
    217 {
    218     tNFA_HANDLE         conn_handle;    /* connection handle for default server   */
    219     UINT8               *p_rx_ndef;     /* buffer to receive NDEF                 */
    220 } tNFA_SNEP_DEFAULT_CONN;
    221 
    222 #define NFA_SNEP_DEFAULT_MAX_CONN    3
    223 
    224 typedef struct
    225 {
    226 
    227     tNFA_HANDLE             server_handle;                  /* registered handle for default server   */
    228     tNFA_SNEP_DEFAULT_CONN  conn[NFA_SNEP_DEFAULT_MAX_CONN];/* connections for default server         */
    229 
    230 } tNFA_SNEP_DEFAULT_CB;
    231 
    232 /*****************************************************************************
    233 **  External variables
    234 *****************************************************************************/
    235 
    236 /* NFA SNEP control block */
    237 #if NFA_DYNAMIC_MEMORY == FALSE
    238 extern tNFA_SNEP_CB nfa_snep_cb;
    239 #else
    240 extern tNFA_SNEP_CB *nfa_snep_cb_ptr;
    241 #define nfa_snep_cb (*nfa_snep_cb_ptr)
    242 #endif
    243 
    244 /* NFA SNEP default server control block */
    245 #if NFA_DYNAMIC_MEMORY == FALSE
    246 extern tNFA_SNEP_DEFAULT_CB nfa_snep_default_cb;
    247 #else
    248 extern tNFA_SNEP_DEFAULT_CB *nfa_snep_default_cb_ptr;
    249 #define nfa_snep_default_cb (*nfa_snep_default_cb_ptr)
    250 #endif
    251 
    252 /*****************************************************************************
    253 **  External functions
    254 *****************************************************************************/
    255 /*
    256 **  nfa_snep_main.c
    257 */
    258 void nfa_snep_init (BOOLEAN is_dta_mode);
    259 /*
    260 **  nfa_snep_default.c
    261 */
    262 void nfa_snep_default_init (void);
    263 BOOLEAN nfa_snep_start_default_server (tNFA_SNEP_MSG *p_msg);
    264 BOOLEAN nfa_snep_stop_default_server (tNFA_SNEP_MSG *p_msg);
    265 /*
    266 **  nfa_snep_srv.c
    267 */
    268 UINT8 nfa_snep_allocate_cb (void);
    269 void nfa_snep_deallocate_cb (UINT8 xx);
    270 void nfa_snep_send_msg (UINT8 opcode, UINT8 dlink);
    271 
    272 void nfa_snep_llcp_cback (tLLCP_SAP_CBACK_DATA *p_data);
    273 void nfa_snep_proc_llcp_data_ind (tLLCP_SAP_CBACK_DATA  *p_data);
    274 void nfa_snep_proc_llcp_connect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
    275 void nfa_snep_proc_llcp_connect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
    276 void nfa_snep_proc_llcp_disconnect_ind (tLLCP_SAP_CBACK_DATA  *p_data);
    277 void nfa_snep_proc_llcp_disconnect_resp (tLLCP_SAP_CBACK_DATA  *p_data);
    278 void nfa_snep_proc_llcp_congest (tLLCP_SAP_CBACK_DATA  *p_data);
    279 void nfa_snep_proc_llcp_link_status (tLLCP_SAP_CBACK_DATA  *p_data);
    280 void nfa_snep_proc_llcp_tx_complete (tLLCP_SAP_CBACK_DATA  *p_data);
    281 
    282 BOOLEAN nfa_snep_reg_server (tNFA_SNEP_MSG *p_msg);
    283 BOOLEAN nfa_snep_reg_client (tNFA_SNEP_MSG *p_msg);
    284 BOOLEAN nfa_snep_dereg (tNFA_SNEP_MSG *p_msg);
    285 BOOLEAN nfa_snep_connect (tNFA_SNEP_MSG *p_msg);
    286 BOOLEAN nfa_snep_put_resp (tNFA_SNEP_MSG *p_msg);
    287 BOOLEAN nfa_snep_get_resp (tNFA_SNEP_MSG *p_msg);
    288 BOOLEAN nfa_snep_put_req (tNFA_SNEP_MSG *p_msg);
    289 BOOLEAN nfa_snep_get_req (tNFA_SNEP_MSG *p_msg);
    290 BOOLEAN nfa_snep_disconnect (tNFA_SNEP_MSG *p_msg);
    291 
    292 #endif /* (defined (NFA_SNEP_INCLUDED) && (NFA_SNEP_INCLUDED==TRUE)) */
    293 #endif /* NFA_SNEP_INT_H */
    294