1b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/****************************************************************************** 2b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 3b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Copyright (C) 2010-2012 Broadcom Corporation 4b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 5b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Licensed under the Apache License, Version 2.0 (the "License"); 6b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * you may not use this file except in compliance with the License. 7b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * You may obtain a copy of the License at: 8b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 9b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * http://www.apache.org/licenses/LICENSE-2.0 10b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 11b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Unless required by applicable law or agreed to in writing, software 12b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * distributed under the License is distributed on an "AS IS" BASIS, 13b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * See the License for the specific language governing permissions and 15b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * limitations under the License. 16b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 17b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/ 18b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu 19b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/****************************************************************************** 20b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 21b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * This is the main implementation file for the NFA SNEP. 22b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 23b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/ 2445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <string.h> 2545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_sys.h" 2645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_sys_int.h" 2745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_snep_int.h" 2845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 2945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/***************************************************************************** 3045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Global Variables 3145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*****************************************************************************/ 3245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/* system manager control block definition */ 3445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if NFA_DYNAMIC_MEMORY == FALSE 3545faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_SNEP_CB nfa_snep_cb; 3645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 3745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/***************************************************************************** 3945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Static Functions 4045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*****************************************************************************/ 4145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 4245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/* event handler function type */ 4345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_msg); 4445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 4545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/* disable function type */ 4645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic void nfa_snep_sys_disable (void); 4745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 4845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/* debug functions type */ 4945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if (BT_TRACE_VERBOSE == TRUE) 5045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic char *nfa_snep_evt_code (UINT16 evt_code); 5145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 5245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 5345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/***************************************************************************** 5445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Constants 5545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*****************************************************************************/ 56e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chustatic const tNFA_SYS_REG nfa_snep_sys_reg = 5745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 5845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu NULL, 59e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu nfa_snep_evt_hdlr, 6045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_sys_disable, 6145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu NULL 6245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}; 6345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 6445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#define NFA_SNEP_NUM_ACTIONS (NFA_SNEP_LAST_EVT & 0x00ff) 6545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 6645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/* type for action functions */ 6745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chutypedef BOOLEAN (*tNFA_SNEP_ACTION) (tNFA_SNEP_MSG *p_data); 6845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 6945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/* action function list */ 7045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuconst tNFA_SNEP_ACTION nfa_snep_action[] = 7145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 7245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_start_default_server, /* NFA_SNEP_API_START_DEFAULT_SERVER_EVT */ 7345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_stop_default_server, /* NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT */ 7445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_reg_server, /* NFA_SNEP_API_REG_SERVER_EVT */ 7545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_reg_client, /* NFA_SNEP_API_REG_CLIENT_EVT */ 7645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_dereg, /* NFA_SNEP_API_DEREG_EVT */ 7745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_connect, /* NFA_SNEP_API_CONNECT_EVT */ 7845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_get_req, /* NFA_SNEP_API_GET_REQ_EVT */ 7945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_put_req, /* NFA_SNEP_API_PUT_REQ_EVT */ 8045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_get_resp, /* NFA_SNEP_API_GET_RESP_EVT */ 8145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_put_resp, /* NFA_SNEP_API_PUT_RESP_EVT */ 8245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_disconnect /* NFA_SNEP_API_DISCONNECT_EVT */ 8345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}; 8445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 8545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 8645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 8745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_snep_init 8845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 8945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description Initialize NFA SNEP 90e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 9145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns None 9345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 9545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chuvoid nfa_snep_init (BOOLEAN is_dta_mode) 9645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 9745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu /* initialize control block */ 9845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu memset (&nfa_snep_cb, 0, sizeof (tNFA_SNEP_CB)); 9945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_cb.trace_level = APPL_INITIAL_TRACE_LEVEL; 10045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_cb.is_dta_mode = is_dta_mode; 10145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 10245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu SNEP_TRACE_DEBUG1 ("nfa_snep_init (): is_dta_mode=%d", is_dta_mode); 10345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 10445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_default_init (); 10545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 10645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu /* register message handler on NFA SYS */ 10745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_sys_register (NFA_ID_SNEP, &nfa_snep_sys_reg); 10845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 10945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 11045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 11145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 11245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_snep_sys_disable 11345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 11445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description Clean up and deregister NFA SNEP from NFA SYS/DM 115e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 11645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 11745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns None 11845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 11945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 12045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic void nfa_snep_sys_disable (void) 12145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 12245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 xx; 12345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 12445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu SNEP_TRACE_DEBUG0 ("nfa_snep_sys_disable ()"); 12545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 12645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu /* deallocate any buffer and deregister from LLCP */ 12745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for (xx = 0; xx < NFA_SNEP_MAX_CONN; xx++) 12845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 12945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (nfa_snep_cb.conn[xx].p_cback != NULL) 13045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 13145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu LLCP_Deregister (nfa_snep_cb.conn[xx].local_sap); 13245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_snep_deallocate_cb (xx); 13345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 13445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 13545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 13645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu /* deregister message handler on NFA SYS */ 13745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfa_sys_deregister (NFA_ID_SNEP); 13845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 13945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 14045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 14145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_snep_evt_hdlr 14345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description Processing event for NFA SNEP 145e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 14645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns TRUE if p_msg needs to be deallocated 14845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 14945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 15045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic BOOLEAN nfa_snep_evt_hdlr (BT_HDR *p_hdr) 15145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 15245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BOOLEAN delete_msg = TRUE; 15345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT16 event; 15445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 15545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu tNFA_SNEP_MSG *p_msg = (tNFA_SNEP_MSG *) p_hdr; 15645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 15745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if (BT_TRACE_VERBOSE == TRUE) 15845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr (): Event [%s]", nfa_snep_evt_code (p_msg->hdr.event)); 15945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#else 16045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu SNEP_TRACE_DEBUG1 ("nfa_snep_evt_hdlr(): Event 0x%02x", p_msg->hdr.event); 16145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 16245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 16345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu event = p_msg->hdr.event & 0x00ff; 16445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 16545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu /* execute action functions */ 16645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (event < NFA_SNEP_NUM_ACTIONS) 16745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 16845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu delete_msg = (*nfa_snep_action[event]) (p_msg); 16945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 17045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 17145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 17245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu SNEP_TRACE_ERROR0 ("Unhandled event"); 17345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 17445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 17545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return delete_msg; 17645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 17745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 17845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 17945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if (BT_TRACE_VERBOSE == TRUE) 18045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 18145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nfa_snep_evt_code 18345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 184e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description 18545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns string of event 18745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 18945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chustatic char *nfa_snep_evt_code (UINT16 evt_code) 19045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 19145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu switch (evt_code) 19245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 19345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_START_DEFAULT_SERVER_EVT: 19445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_START_DEFAULT_SERVER"; 19545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_STOP_DEFAULT_SERVER_EVT: 19645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_STOP_DEFAULT_SERVER"; 19745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_REG_SERVER_EVT: 19845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_REG_SERVER"; 19945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_REG_CLIENT_EVT: 20045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_REG_CLIENT"; 20145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_DEREG_EVT: 20245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_DEREG"; 20345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_CONNECT_EVT: 20445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_CONNECT"; 20545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_GET_REQ_EVT: 20645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_GET_REQ"; 20745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_PUT_REQ_EVT: 20845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_PUT_REQ"; 20945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_GET_RESP_EVT: 21045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_GET_RESP"; 21145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_PUT_RESP_EVT: 21245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_PUT_RESP"; 21345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu case NFA_SNEP_API_DISCONNECT_EVT: 21445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "API_DISCONNECT"; 21545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu default: 21645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return "Unknown event"; 21745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 21845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 21945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif /* Debug Functions */ 220