/****************************************************************************** * * Copyright (C) 2010-2012 Broadcom Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at: * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ******************************************************************************/ /****************************************************************************** * * This is the main implementation file for the NFA SNEP. * ******************************************************************************/ #include <string.h> #include "nfa_sys.h" #include "nfa_sys_int.h" #include "nfa_snep_int.h" /***************************************************************************** ** Global Variables *****************************************************************************/ /* system manager control block definition */ #if NFA_DYNAMIC_MEMORY == FALSE tNFA_SNEP_CB nfa_snep_cb; #endif /***************************************************************************** ** Static Functions *****************************************************************************/ /* event handler function type */ static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_msg); /* disable function type */ static void nfa_snep_sys_disable (void); /* debug functions type */ #if (BT_TRACE_VERBOSE == TRUE) static char *nfa_snep_evt_code (UINT16 evt_code); #endif /***************************************************************************** ** Constants *****************************************************************************/ static const tNFA_SYS_REG nfa_snep_sys_reg = { NULL, nfa_snep_evt_hdlr, nfa_snep_sys_disable, NULL }; #define NFA_SNEP_NUM_ACTIONS (NFA_SNEP_LAST_EVT & 0x00ff) /* type for action functions */ typedef BOOLEAN (*tNFA_SNEP_ACTION) (tNFA_SNEP_MSG *p_data); /* action function list */ const tNFA_SNEP_ACTION nfa_snep_action[] = { nfa_snep_start_default_server, /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */ nfa_snep_stop_default_server, /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT */ nfa_snep_reg_server, /* NFA_SNEP_API_REG_SERVER_EVT */ nfa_snep_reg_client, /* NFA_SNEP_API_REG_CLIENT_EVT */ nfa_snep_dereg, /* NFA_SNEP_API_DEREG_EVT */ nfa_snep_connect, /* NFA_SNEP_API_CONNECT_EVT */ nfa_snep_get_req, /* NFA_SNEP_API_GET_REQ_EVT */ nfa_snep_put_req, /* NFA_SNEP_API_PUT_REQ_EVT */ nfa_snep_get_resp, /* NFA_SNEP_API_GET_RESP_EVT */ nfa_snep_put_resp, /* NFA_SNEP_API_PUT_RESP_EVT */ nfa_snep_disconnect /* NFA_SNEP_API_DISCONNECT_EVT */ }; /******************************************************************************* ** ** Function nfa_snep_init ** ** Description Initialize NFA SNEP ** ** ** Returns None ** *******************************************************************************/ void nfa_snep_init (BOOLEAN is_dta_mode) { /* initialize control block */ memset (&nfa_snep_cb, 0, sizeof (tNFA_SNEP_CB)); nfa_snep_cb.trace_level = APPL_INITIAL_TRACE_LEVEL; nfa_snep_cb.is_dta_mode = is_dta_mode; SNEP_TRACE_DEBUG1 ("nfa_snep_init (): is_dta_mode=%d", is_dta_mode); nfa_snep_default_init (); /* register message handler on NFA SYS */ nfa_sys_register (NFA_ID_SNEP, &nfa_snep_sys_reg); } /******************************************************************************* ** ** Function nfa_snep_sys_disable ** ** Description Clean up and deregister NFA SNEP from NFA SYS/DM ** ** ** Returns None ** *******************************************************************************/ static void nfa_snep_sys_disable (void) { UINT8 xx; SNEP_TRACE_DEBUG0 ("nfa_snep_sys_disable ()"); /* deallocate any buffer and deregister from LLCP */ for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++) { if (nfa_snep_cb.conn[xx].p_cback != NULL) { LLCP_Deregister (nfa_snep_cb.conn[xx].local_sap); nfa_snep_deallocate_cb (xx); } } /* deregister message handler on NFA SYS */ nfa_sys_deregister (NFA_ID_SNEP); } /******************************************************************************* ** ** Function nfa_snep_evt_hdlr ** ** Description Processing event for NFA SNEP ** ** ** Returns TRUE if p_msg needs to be deallocated ** *******************************************************************************/ static BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_hdr) { BOOLEAN delete_msg = TRUE; UINT16 event; tNFA_SNEP_MSG *p_msg = (tNFA_SNEP_MSG *) p_hdr; #if (BT_TRACE_VERBOSE == TRUE) SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr (): Event [%s]", nfa_snep_evt_code (p_msg->hdr.event)); #else SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr(): Event 0x%02x", p_msg->hdr.event); #endif event = p_msg->hdr.event & 0x00ff; /* execute action functions */ if (event < NFA_SNEP_NUM_ACTIONS) { delete_msg = (*nfa_snep_action[event]) (p_msg); } else { SNEP_TRACE_ERROR0 ("Unhandled event"); } return delete_msg; } #if (BT_TRACE_VERBOSE == TRUE) /******************************************************************************* ** ** Function nfa_snep_evt_code ** ** Description ** ** Returns string of event ** *******************************************************************************/ static char *nfa_snep_evt_code (UINT16 evt_code) { switch (evt_code) { case NFA_SNEP_API_START_DEFAULT_SERVER_EVT: return "API_START_DEFAULT_SERVER"; case NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT: return "API_STOP_DEFAULT_SERVER"; case NFA_SNEP_API_REG_SERVER_EVT: return "API_REG_SERVER"; case NFA_SNEP_API_REG_CLIENT_EVT: return "API_REG_CLIENT"; case NFA_SNEP_API_DEREG_EVT: return "API_DEREG"; case NFA_SNEP_API_CONNECT_EVT: return "API_CONNECT"; case NFA_SNEP_API_GET_REQ_EVT: return "API_GET_REQ"; case NFA_SNEP_API_PUT_REQ_EVT: return "API_PUT_REQ"; case NFA_SNEP_API_GET_RESP_EVT: return "API_GET_RESP"; case NFA_SNEP_API_PUT_RESP_EVT: return "API_PUT_RESP"; case NFA_SNEP_API_DISCONNECT_EVT: return "API_DISCONNECT"; default: return "Unknown event"; } } #endif /* Debug Functions */