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