nfa_snep_main.c revision 45faad0ff5deeb0c676356345d99398cc4ab695a
1/*****************************************************************************
2**
3**  Name:           nfa_snep_main.c
4**
5**  Description:    This is the main implementation file for the NFA SNEP.
6**
7**  Copyright (c) 2010, Broadcom Corp., All Rights Reserved.
8**  Broadcom Bluetooth Core. Proprietary and confidential.
9**
10*****************************************************************************/
11#include <string.h>
12#include "nfa_sys.h"
13#include "nfa_sys_int.h"
14#include "nfa_snep_int.h"
15
16/*****************************************************************************
17**  Global Variables
18*****************************************************************************/
19
20/* system manager control block definition */
21#if NFA_DYNAMIC_MEMORY == FALSE
22tNFA_SNEP_CB nfa_snep_cb;
23#endif
24
25/*****************************************************************************
26**  Static Functions
27*****************************************************************************/
28
29/* event handler function type */
30static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_msg);
31
32/* disable function type */
33static void nfa_snep_sys_disable (void);
34
35/* debug functions type */
36#if (BT_TRACE_VERBOSE == TRUE)
37static char *nfa_snep_evt_code (UINT16 evt_code);
38#endif
39
40/*****************************************************************************
41**  Constants
42*****************************************************************************/
43static const tNFA_SYS_REG nfa_snep_sys_reg =
44{
45    NULL,
46    nfa_snep_evt_hdlr,
47    nfa_snep_sys_disable,
48    NULL
49};
50
51#define NFA_SNEP_NUM_ACTIONS  (NFA_SNEP_LAST_EVT & 0x00ff)
52
53/* type for action functions */
54typedef BOOLEAN (*tNFA_SNEP_ACTION) (tNFA_SNEP_MSG *p_data);
55
56/* action function list */
57const tNFA_SNEP_ACTION nfa_snep_action[] =
58{
59    nfa_snep_start_default_server,          /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */
60    nfa_snep_stop_default_server,           /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT  */
61    nfa_snep_reg_server,                    /* NFA_SNEP_API_REG_SERVER_EVT           */
62    nfa_snep_reg_client,                    /* NFA_SNEP_API_REG_CLIENT_EVT           */
63    nfa_snep_dereg,                         /* NFA_SNEP_API_DEREG_EVT                */
64    nfa_snep_connect,                       /* NFA_SNEP_API_CONNECT_EVT              */
65    nfa_snep_get_req,                       /* NFA_SNEP_API_GET_REQ_EVT              */
66    nfa_snep_put_req,                       /* NFA_SNEP_API_PUT_REQ_EVT              */
67    nfa_snep_get_resp,                      /* NFA_SNEP_API_GET_RESP_EVT             */
68    nfa_snep_put_resp,                      /* NFA_SNEP_API_PUT_RESP_EVT             */
69    nfa_snep_disconnect                     /* NFA_SNEP_API_DISCONNECT_EVT           */
70};
71
72/*******************************************************************************
73**
74** Function         nfa_snep_init
75**
76** Description      Initialize NFA SNEP
77**
78**
79** Returns          None
80**
81*******************************************************************************/
82void nfa_snep_init (BOOLEAN is_dta_mode)
83{
84    /* initialize control block */
85    memset (&nfa_snep_cb, 0, sizeof (tNFA_SNEP_CB));
86    nfa_snep_cb.trace_level = APPL_INITIAL_TRACE_LEVEL;
87    nfa_snep_cb.is_dta_mode = is_dta_mode;
88
89    SNEP_TRACE_DEBUG1 ("nfa_snep_init (): is_dta_mode=%d", is_dta_mode);
90
91    nfa_snep_default_init ();
92
93    /* register message handler on NFA SYS */
94    nfa_sys_register (NFA_ID_SNEP,  &nfa_snep_sys_reg);
95}
96
97/*******************************************************************************
98**
99** Function         nfa_snep_sys_disable
100**
101** Description      Clean up and deregister NFA SNEP from NFA SYS/DM
102**
103**
104** Returns          None
105**
106*******************************************************************************/
107static void nfa_snep_sys_disable (void)
108{
109    UINT8 xx;
110
111    SNEP_TRACE_DEBUG0 ("nfa_snep_sys_disable ()");
112
113    /* deallocate any buffer and deregister from LLCP */
114    for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++)
115    {
116        if (nfa_snep_cb.conn[xx].p_cback != NULL)
117        {
118            LLCP_Deregister (nfa_snep_cb.conn[xx].local_sap);
119            nfa_snep_deallocate_cb (xx);
120        }
121    }
122
123    /* deregister message handler on NFA SYS */
124    nfa_sys_deregister (NFA_ID_SNEP);
125}
126
127/*******************************************************************************
128**
129** Function         nfa_snep_evt_hdlr
130**
131** Description      Processing event for NFA SNEP
132**
133**
134** Returns          TRUE if p_msg needs to be deallocated
135**
136*******************************************************************************/
137static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_hdr)
138{
139    BOOLEAN delete_msg = TRUE;
140    UINT16  event;
141
142    tNFA_SNEP_MSG *p_msg = (tNFA_SNEP_MSG *) p_hdr;
143
144#if (BT_TRACE_VERBOSE == TRUE)
145    SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr (): Event [%s]", nfa_snep_evt_code (p_msg->hdr.event));
146#else
147    SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr(): Event 0x%02x", p_msg->hdr.event);
148#endif
149
150    event = p_msg->hdr.event & 0x00ff;
151
152    /* execute action functions */
153    if (event < NFA_SNEP_NUM_ACTIONS)
154    {
155        delete_msg = (*nfa_snep_action[event]) (p_msg);
156    }
157    else
158    {
159        SNEP_TRACE_ERROR0 ("Unhandled event");
160    }
161
162    return delete_msg;
163}
164
165
166#if (BT_TRACE_VERBOSE == TRUE)
167/*******************************************************************************
168**
169** Function         nfa_snep_evt_code
170**
171** Description
172**
173** Returns          string of event
174**
175*******************************************************************************/
176static char *nfa_snep_evt_code (UINT16 evt_code)
177{
178    switch (evt_code)
179    {
180    case NFA_SNEP_API_START_DEFAULT_SERVER_EVT:
181        return "API_START_DEFAULT_SERVER";
182    case NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT:
183        return "API_STOP_DEFAULT_SERVER";
184    case NFA_SNEP_API_REG_SERVER_EVT:
185        return "API_REG_SERVER";
186    case NFA_SNEP_API_REG_CLIENT_EVT:
187        return "API_REG_CLIENT";
188    case NFA_SNEP_API_DEREG_EVT:
189        return "API_DEREG";
190    case NFA_SNEP_API_CONNECT_EVT:
191        return "API_CONNECT";
192    case NFA_SNEP_API_GET_REQ_EVT:
193        return "API_GET_REQ";
194    case NFA_SNEP_API_PUT_REQ_EVT:
195        return "API_PUT_REQ";
196    case NFA_SNEP_API_GET_RESP_EVT:
197        return "API_GET_RESP";
198    case NFA_SNEP_API_PUT_RESP_EVT:
199        return "API_PUT_RESP";
200    case NFA_SNEP_API_DISCONNECT_EVT:
201        return "API_DISCONNECT";
202    default:
203        return "Unknown event";
204    }
205}
206#endif  /* Debug Functions */
207