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 *  NFA interface for device management
22b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu *
23b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/
2445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <string.h>
2545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_api.h"
2645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_sys.h"
2745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_dm_int.h"
2845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_ce_int.h"
2945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfa_sys_int.h"
3045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "ndef_utils.h"
3145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
3245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*****************************************************************************
3345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**  Constants
3445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*****************************************************************************/
3545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
3645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*****************************************************************************
3745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**  APIs
3845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*****************************************************************************/
3945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
4045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
4145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_Init
4245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
4345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function initializes control blocks for NFA
44e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
45eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  p_hal_entry_tbl points to a table of HAL entry points
46eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
47eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  NOTE: the buffer that p_hal_entry_tbl points must be
48eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**                  persistent until NFA is disabled.
49eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu**
5045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          none
5145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
5245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
53eb190654c5fbaea2f396bb5523f57062f291879aEvan Chuvoid NFA_Init(tHAL_NFC_ENTRY *p_hal_entry_tbl)
5445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
5545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_Init ()");
5645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_sys_init();
5745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_dm_init();
5845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_ee_init();
5945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_p2p_init();
6045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_cho_init();
6145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_snep_init(FALSE);
6245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_rw_init();
6345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_ce_init();
6445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    nfa_hci_init();
6545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
66eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu
6745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    /* Initialize NFC module */
68eb190654c5fbaea2f396bb5523f57062f291879aEvan Chu    NFC_Init (p_hal_entry_tbl);
6945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
7045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
7145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
7245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
7345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_Enable
7445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
75e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description      This function enables NFC. Prior to calling NFA_Enable,
7645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  the NFCC must be powered up, and ready to receive commands.
7745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  This function enables the tasks needed by NFC, opens the NCI
7845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  transport, resets the NFC controller, downloads patches to
7945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  the NFCC (if necessary), and initializes the NFC subsystems.
8045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
8145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  This function should only be called once - typically when NFC
8245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  is enabled during boot-up, or when NFC is enabled from a
8345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  settings UI. Subsequent calls to NFA_Enable while NFA is
8445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  enabling or enabled will be ignored. When the NFC startup
85ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  procedure is completed, an NFA_DM_ENABLE_EVT is returned to the
86e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  application using the tNFA_DM_CBACK.
87e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
8845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
8945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
9045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
9145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
9245faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_Enable (tNFA_DM_CBACK        *p_dm_cback,
9345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                        tNFA_CONN_CBACK      *p_conn_cback)
9445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
9545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_ENABLE *p_msg;
9645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
9745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_Enable ()");
9845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
9945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    /* Validate parameters */
10045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((!p_dm_cback) || (!p_conn_cback))
10145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
10245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        NFA_TRACE_ERROR0 ("NFA_Enable (): error null callback");
10345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_FAILED);
10445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
10545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
10645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_ENABLE *) GKI_getbuf (sizeof (tNFA_DM_API_ENABLE))) != NULL)
10745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
10845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event    = NFA_DM_API_ENABLE_EVT;
10945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_dm_cback   = p_dm_cback;
11045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_conn_cback = p_conn_cback;
11145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
11245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
11345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
11445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
11545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
11645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
11745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
11845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
11945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
12045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
12145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
12245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_Disable
12345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
12445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function is called to shutdown NFC. The tasks for NFC
12545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  are terminated, and clean up routines are performed. This
12645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  function is typically called during platform shut-down, or
12745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  when NFC is disabled from a settings UI. When the NFC
128ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  shutdown procedure is completed, an NFA_DM_DISABLE_EVT is
12945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  returned to the application using the tNFA_DM_CBACK.
13045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
131ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  The platform should wait until the NFC_DISABLE_REVT is
13245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  received before powering down the NFC chip and NCI transport.
13345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  This is required to so that NFA can gracefully shut down any
13445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  open connections.
135e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
13645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
13745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
13845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
13945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
14045faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_Disable (BOOLEAN graceful)
14145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
14245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_DISABLE *p_msg;
14345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
14445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_Disable (graceful=%i)", graceful);
14545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
14645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_DISABLE *) GKI_getbuf (sizeof (tNFA_DM_API_DISABLE))) != NULL)
14745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
14845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_DISABLE_EVT;
14945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->graceful  = graceful;
15045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
15145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
15245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
15345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
15445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
15545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
15645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
15745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
15845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
15945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
16045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
16145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_SetConfig
16245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
16345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Set the configuration parameters to NFCC. The result is
16445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  reported with an NFA_DM_SET_CONFIG_EVT in the tNFA_DM_CBACK
16545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  callback.
166e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
167ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
168ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  should happen before calling this function. Most Configuration
169ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  parameters are related to RF discovery.
170ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**
17145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
17245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_BUSY if previous setting is on-going
17345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
17445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
17545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
17645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_SetConfig (tNFA_PMID param_id,
17745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                           UINT8     length,
17845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                           UINT8    *p_data)
17945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
18045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_SET_CONFIG *p_msg;
18145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
18245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_SetConfig (): param_id:0x%X", param_id);
18345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
18445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_SET_CONFIG *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_SET_CONFIG) + length))) != NULL)
18545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
18645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_SET_CONFIG_EVT;
187e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu
18845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->param_id = param_id;
18945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->length   = length;
19045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_data   = (UINT8 *) (p_msg + 1);
19145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
19245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        /* Copy parameter data */
19345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        memcpy (p_msg->p_data, p_data, length);
19445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
19545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
19645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
19745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
19845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
19945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
20045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
20145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
20245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
20345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
20445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
20545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_GetConfig
20645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
20745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Get the configuration parameters from NFCC. The result is
20845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  reported with an NFA_DM_GET_CONFIG_EVT in the tNFA_DM_CBACK
20945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  callback.
210e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
21145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
21245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
21345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
21445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
215e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan ChutNFA_STATUS NFA_GetConfig (UINT8 num_ids,
21645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                           tNFA_PMID *p_param_ids)
21745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
21845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_GET_CONFIG *p_msg;
21945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
22045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_GetConfig (): num_ids: %i", num_ids);
22145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
22245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
22345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_GET_CONFIG *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_GET_CONFIG) + num_ids))) != NULL)
22445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
22545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_GET_CONFIG_EVT;
226e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu
22745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->num_ids = num_ids;
22845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_pmids = (tNFA_PMID *) (p_msg+1);
22945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
23045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        /* Copy the param IDs */
23145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        memcpy (p_msg->p_pmids, p_param_ids, num_ids);
23245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
23345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
23445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
23545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
23645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
23745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
23845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
23945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
24045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
24145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
24245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
243e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Function         NFA_RequestExclusiveRfControl
24445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
24545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Request exclusive control of NFC.
24645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  - Previous behavior (polling/tag reading, DH card emulation)
24745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                    will be suspended .
24845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  - Polling and listening will be done based on the specified
24945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                    params
25045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
25145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  The NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT event of
252ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  tNFA_CONN_CBACK indicates the status of the operation.
25345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
25445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_ACTIVATED_EVT and NFA_DEACTIVATED_EVT indicates link
25545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  activation/deactivation.
25645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
25745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_SendRawFrame is used to send data to the peer. NFA_DATA_EVT
25845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  indicates data from the peer.
25945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
26045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  If a tag is activated, then the NFA_RW APIs may be used to
26145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  send commands to the tag. Incoming NDEF messages are sent to
26245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  the NDEF callback.
26345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
26445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  Once exclusive RF control has started, NFA will not activate
26545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  LLCP internally. The application has exclusive control of
26645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  the link.
267e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
26845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
26945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  should happen before calling this function
270e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
27145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
27245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
27345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
27445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
27545faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_RequestExclusiveRfControl  (tNFA_TECHNOLOGY_MASK poll_mask,
27645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                            tNFA_LISTEN_CFG      *p_listen_cfg,
27745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                            tNFA_CONN_CBACK      *p_conn_cback,
27845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                            tNFA_NDEF_CBACK      *p_ndef_cback)
27945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
28045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_REQ_EXCL_RF_CTRL *p_msg;
28145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
28245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_RequestExclusiveRfControl () poll_mask=0x%x", poll_mask);
28345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
28445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (!p_conn_cback)
28545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
28645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        NFA_TRACE_ERROR0 ("NFA_RequestExclusiveRfControl (): error null callback");
28745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_FAILED);
28845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
28945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
29045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_REQ_EXCL_RF_CTRL *) GKI_getbuf (sizeof (tNFA_DM_API_REQ_EXCL_RF_CTRL))) != NULL)
29145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
29245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_REQUEST_EXCL_RF_CTRL_EVT;
29345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->poll_mask    = poll_mask;
29445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_conn_cback = p_conn_cback;
29545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_ndef_cback = p_ndef_cback;
29645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
29745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        if (p_listen_cfg)
29845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            memcpy (&p_msg->listen_cfg, p_listen_cfg, sizeof (tNFA_LISTEN_CFG));
29945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        else
30045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            memset (&p_msg->listen_cfg, 0x00, sizeof (tNFA_LISTEN_CFG));
30145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
30245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
30345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
30445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
30545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
30645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
30745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
30845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
30945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
31045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
31145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
31245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_ReleaseExclusiveRfControl
31345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
31445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Release exclusive control of NFC. Once released, behavior
31545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  prior to obtaining exclusive RF control will resume.
316e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
31745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
31845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
31945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
32045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
32145faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_ReleaseExclusiveRfControl (void)
32245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
32345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    BT_HDR *p_msg;
32445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
32545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_ReleaseExclusiveRfControl ()");
32645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
32745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (!nfa_dm_cb.p_excl_conn_cback)
32845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
32945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        NFA_TRACE_ERROR0 ("NFA_ReleaseExclusiveRfControl (): Exclusive rf control is not in progress");
33045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_FAILED);
33145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
33245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
33345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (BT_HDR *) GKI_getbuf (sizeof (BT_HDR))) != NULL)
33445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
33545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->event = NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT;
33645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
33745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
33845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
33945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
34045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
34145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
34245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
34345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
34445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
34545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
34645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_EnablePolling
34745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
34845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Enable polling for technologies specified by poll_mask.
34945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
35045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  The following events (notified using the connection
35145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  callback registered with NFA_Enable) are generated during
35245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  polling:
35345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
35445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  - NFA_POLL_ENABLED_EVT indicates whether or not polling
35545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                    successfully enabled.
356e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  - NFA_DISC_RESULT_EVT indicates there are more than one devices,
35745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                    so application must select one of tags by calling NFA_Select().
358ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  - NFA_SELECT_RESULT_EVT indicates whether previous selection was
359e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                    successful or not. If it was failed then application must select
360ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                    again or deactivate by calling NFA_Deactivate().
36145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  - NFA_ACTIVATED_EVT is generated when an NFC link is activated.
36245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  - NFA_NDEF_DETECT_EVT is generated if tag is activated
363e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  - NFA_LLCP_ACTIVATED_EVT/NFA_LLCP_DEACTIVATED_EVT is generated
36445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                    if NFC-DEP is activated
36545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  - NFA_DEACTIVATED_EVT will be returned after deactivating NFC link.
366e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
36745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
36845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  should happen before calling this function
369e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
37045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
37145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
37245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
37345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
37445faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_EnablePolling (tNFA_TECHNOLOGY_MASK poll_mask)
37545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
37645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_ENABLE_POLL *p_msg;
37745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
37845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_EnablePolling () 0x%X", poll_mask);
37945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
38045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_ENABLE_POLL *) GKI_getbuf (sizeof (tNFA_DM_API_ENABLE_POLL))) != NULL)
38145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
38245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_ENABLE_POLLING_EVT;
38345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->poll_mask = poll_mask;
38445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
38545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
38645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
38745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
38845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
38945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
39045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
39145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
39245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
39345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
39445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
39545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_DisablePolling
39645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
39745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Disable polling
39845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_POLL_DISABLED_EVT will be returned after stopping polling.
399e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
40045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
40145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  should happen before calling this function
40245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
40345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
40445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
40545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
40645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
40745faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_DisablePolling (void)
40845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
40945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    BT_HDR *p_msg;
41045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
41145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_DisablePolling ()");
41245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
41345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (BT_HDR *) GKI_getbuf (sizeof (BT_HDR))) != NULL)
41445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
41545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->event = NFA_DM_API_DISABLE_POLLING_EVT;
41645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
41745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
41845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
41945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
42045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
42145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
42245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
42345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
42445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
42545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
42645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
42745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_SetP2pListenTech
42845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
42945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function is called to set listen technology for NFC-DEP.
43045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  This funtion may be called before or after starting any server
43145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  on NFA P2P/CHO/SNEP.
43245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  If there is no technology for NFC-DEP, P2P listening will be
43345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  stopped.
43445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
43545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_SET_P2P_LISTEN_TECH_EVT without data will be returned.
436e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
43745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
43845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  should happen before calling this function
439e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
44045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
44145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
44245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
44345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
44445faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_SetP2pListenTech (tNFA_TECHNOLOGY_MASK tech_mask)
44545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
44645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_SET_P2P_LISTEN_TECH *p_msg;
44745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
44845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_P2pSetListenTech (): tech_mask:0x%X", tech_mask);
44945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
45045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_SET_P2P_LISTEN_TECH *) GKI_getbuf (sizeof (tNFA_DM_API_SET_P2P_LISTEN_TECH))) != NULL)
45145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
45245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_SET_P2P_LISTEN_TECH_EVT;
45345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->tech_mask = tech_mask;
45445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
45545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
45645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
45745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
45845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
45945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
46045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
46145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
46245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
46345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
46445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
46545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_StartRfDiscovery
46645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
46745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Start RF discovery
46845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  RF discovery parameters shall be set by other APIs.
469e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
47045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  An NFA_RF_DISCOVERY_STARTED_EVT indicates whether starting was successful or not.
471e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
47245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
47345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
47445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
47545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
47645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_StartRfDiscovery (void)
47745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
47845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    BT_HDR *p_msg;
47945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
48045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_StartRfDiscovery ()");
48145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
48245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (BT_HDR *) GKI_getbuf (sizeof (BT_HDR))) != NULL)
48345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
48445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->event = NFA_DM_API_START_RF_DISCOVERY_EVT;
48545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
48645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
48745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
48845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
48945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
49045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
49145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
49245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
49345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
49445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
49545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
49645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_StopRfDiscovery
49745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
49845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Stop RF discovery
499e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
50045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  An NFA_RF_DISCOVERY_STOPPED_EVT indicates whether stopping was successful or not.
501e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
50245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
50345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
50445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
50545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
50645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_StopRfDiscovery (void)
50745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
50845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    BT_HDR *p_msg;
50945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
51045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_StopRfDiscovery ()");
51145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
51245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (BT_HDR *) GKI_getbuf (sizeof (BT_HDR))) != NULL)
51345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
51445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->event = NFA_DM_API_STOP_RF_DISCOVERY_EVT;
51545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
51645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
51745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
51845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
51945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
52045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
52145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
52245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
52345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
52445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
52545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
52645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_SetRfDiscoveryDuration
52745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
52845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Set the duration of the single discovery period in [ms].
52945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  Allowable range: 0 ms to 0xFFFF ms.
53045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
531e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  If discovery is already started, the application should
53245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  call NFA_StopRfDiscovery prior to calling
533e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  NFA_SetRfDiscoveryDuration, and then call
53445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_StartRfDiscovery afterwards to restart discovery using
53545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  the new duration.
53645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
53745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Note:            If RF discovery is started, NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT
53845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  should happen before calling this function
53945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
54045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns:
54145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_OK, if command accepted
54245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED: otherwise
54345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
54445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
54545faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_SetRfDiscoveryDuration (UINT16 discovery_period_ms)
54645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
54745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_SET_RF_DISC_DUR *p_msg;
54845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
54945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_SetRfDiscoveryDuration ()");
55045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
55145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    /* Post the API message */
55245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_SET_RF_DISC_DUR *) GKI_getbuf (sizeof (BT_HDR))) != NULL)
55345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
55445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_SET_RF_DISC_DURATION_EVT;
55545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
55645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        /* Set discovery duration */
55745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->rf_disc_dur_ms = discovery_period_ms;
55845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
55945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
56045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
56145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
56245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
56345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
56445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
56545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
56645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
56745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
56845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
56945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_Select
57045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
57145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Select one from detected devices during discovery
57245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  (from NFA_DISC_RESULT_EVTs). The application should wait for
57345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  the final NFA_DISC_RESULT_EVT before selecting.
574e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
57545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  An NFA_SELECT_RESULT_EVT indicates whether selection was successful or not.
57645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  If failed then application must select again or deactivate by NFA_Deactivate().
577e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
57845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
57945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_INVALID_PARAM if RF interface is not matched protocol
58045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
58145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
58245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
58345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_Select (UINT8             rf_disc_id,
58445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                        tNFA_NFC_PROTOCOL protocol,
58545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                        tNFA_INTF_TYPE    rf_interface)
58645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
58745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_SELECT *p_msg;
58845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
589e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu    NFA_TRACE_API3 ("NFA_Select (): rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X",
59045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                    rf_disc_id, protocol, rf_interface);
59145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
59245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (  ((rf_interface == NFA_INTERFACE_ISO_DEP) && (protocol != NFA_PROTOCOL_ISO_DEP))
59345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        ||((rf_interface == NFA_INTERFACE_NFC_DEP) && (protocol != NFA_PROTOCOL_NFC_DEP))  )
59445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
59545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        NFA_TRACE_ERROR0 ("NFA_Select (): RF interface is not matched protocol");
59645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_INVALID_PARAM);
59745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
59845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
59945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_SELECT *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_SELECT)))) != NULL)
60045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
60145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event     = NFA_DM_API_SELECT_EVT;
60245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->rf_disc_id    = rf_disc_id;
60345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->protocol      = protocol;
60445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->rf_interface  = rf_interface;
60545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
60645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
60745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
60845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
60945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
61045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
61145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
61245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
61345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
61445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
61545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
61645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_UpdateRFCommParams
61745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
61845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function is called to update RF Communication parameters
619e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  once the Frame RF Interface has been activated.
62045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
621e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  An NFA_UPDATE_RF_PARAM_RESULT_EVT indicates whether updating
62245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  was successful or not.
623e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
62445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
62545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
62645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
62745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
62845faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_UpdateRFCommParams (tNFA_RF_COMM_PARAMS *p_params)
62945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
63045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_UPDATE_RF_PARAMS *p_msg;
63145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
63245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API0 ("NFA_UpdateRFCommParams ()");
63345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
63445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_UPDATE_RF_PARAMS *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_UPDATE_RF_PARAMS)))) != NULL)
63545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
63645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event     = NFA_DM_API_UPDATE_RF_PARAMS_EVT;
63745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        memcpy (&p_msg->params, p_params, sizeof (tNFA_RF_COMM_PARAMS));
63845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
63945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
64045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
64145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
64245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
64345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
64445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
64545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
64645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
64745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
64845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
64945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_Deactivate
65045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
651e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description
65245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  If sleep_mode=TRUE:
653e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                      Deselect the activated device by deactivating into sleep mode.
65445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
65545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                      An NFA_DEACTIVATE_FAIL_EVT indicates that selection was not successful.
65645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                      Application can select another discovered device or deactivate by NFA_Deactivate ()
65745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                      after receiving NFA_DEACTIVATED_EVT.
65845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
659ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                      Deactivating to sleep mode is not allowed when NFCC is in wait-for-host-select
660ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                      mode, or in listen-sleep states; NFA will deactivate to idle or discovery state
661ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                      for these cases respectively.
662ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**
663ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**
66445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  If sleep_mode=FALSE:
66545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                      Deactivate the connection (e.g. as a result of presence check failure)
66645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                      NFA_DEACTIVATED_EVT will indicate that link is deactivated.
667ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                      Polling/listening will resume (unless the nfcc is in wait_for-all-discoveries state)
66845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
669e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
67045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
67145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
67245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
67345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
67445faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern tNFA_STATUS NFA_Deactivate (BOOLEAN sleep_mode)
67545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
67645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_DEACTIVATE *p_msg;
67745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
67845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_Deactivate (): sleep_mode:%i", sleep_mode);
67945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
68045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_DEACTIVATE *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_DEACTIVATE)))) != NULL)
68145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
68245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event    = NFA_DM_API_DEACTIVATE_EVT;
68345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->sleep_mode   = sleep_mode;
68445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
68545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
68645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
68745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
68845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
68945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
69045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
69145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
69245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
69345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
69445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
69545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_SendRawFrame
69645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
697e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** Description      Send a raw frame over the activated interface with the NFCC.
69845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  This function can only be called after NFC link is activated.
699e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
70045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
70145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
70245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
70345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
704e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan ChutNFA_STATUS NFA_SendRawFrame (UINT8  *p_raw_data,
70545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                              UINT16  data_len)
70645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
70745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    BT_HDR *p_msg;
70845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    UINT16  size;
70945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    UINT8  *p;
71045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
71145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_SendRawFrame () data_len:%d", data_len);
71245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
71345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    /* Validate parameters */
71445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((data_len == 0) || (p_raw_data == NULL))
71545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_INVALID_PARAM);
71645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
71745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    size = BT_HDR_SIZE + NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE + data_len;
71845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (BT_HDR *) GKI_getbuf (size)) != NULL)
71945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
72045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->event  = NFA_DM_API_RAW_FRAME_EVT;
72145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE;
72245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->len    = data_len;
72345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
72445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p = (UINT8 *) (p_msg + 1) + p_msg->offset;
72545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        memcpy (p, p_raw_data, data_len);
72645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
72745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
72845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
72945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
73045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
73145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
73245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
73345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
73445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
73545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
73645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** NDEF Handler APIs
73745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
73845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
73945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
74045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
74145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_RegisterNDefTypeHandler
74245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
74345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function allows the applications to register for
74445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  specific types of NDEF records. When NDEF records are
74545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  received, NFA will parse the record-type field, and pass
746ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  the record to the registered tNFA_NDEF_CBACK.
74745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
74845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  For records types which were not registered, the record will
74945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  be sent to the default handler. A default type-handler may
75045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  be registered by calling this NFA_RegisterNDefTypeHandler
75145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  with tnf=NFA_TNF_DEFAULT. In this case, all un-registered
75245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  record types will be sent to the callback. Only one default
75345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  handler may be registered at a time.
75445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
755ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
75645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  to indicate that registration was successful, and provide a
75745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  handle for this record type.
758e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
75945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
76045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
76145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
76245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
76345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_RegisterNDefTypeHandler (BOOLEAN         handle_whole_message,
76445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                         tNFA_TNF        tnf,
76545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                         UINT8           *p_type_name,
76645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                         UINT8           type_name_len,
76745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                         tNFA_NDEF_CBACK *p_ndef_cback)
76845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
76945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_REG_NDEF_HDLR *p_msg;
77045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
771ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu    NFA_TRACE_API2 ("NFA_RegisterNDefTypeHandler (): handle whole ndef message: %i, tnf=0x%02x", handle_whole_message, tnf);
77245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
77345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    /* Check for NULL callback */
77445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (!p_ndef_cback)
77545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
776ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu        NFA_TRACE_ERROR0 ("NFA_RegisterNDefTypeHandler (): error - null callback");
77745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_INVALID_PARAM);
77845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
77945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
78045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
78145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_REG_NDEF_HDLR *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_REG_NDEF_HDLR) + type_name_len))) != NULL)
78245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
78345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_REG_NDEF_HDLR_EVT;
784e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu
78545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->flags = (handle_whole_message ? NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE : 0);
78645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->tnf = tnf;
78745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->name_len = type_name_len;
78845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_ndef_cback = p_ndef_cback;
78945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        memcpy (p_msg->name, p_type_name, type_name_len);
79045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
79145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
79245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
79345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
79445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
79545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
79645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
79745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
79845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
79945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
80045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
80145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_RegisterNDefUriHandler
80245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
80345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This API is a special-case of NFA_RegisterNDefTypeHandler
80445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  with TNF=NFA_TNF_WKT, and type_name='U' (URI record); and allows
80545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  registering for specific URI types (e.g. 'tel:' or 'mailto:').
80645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
807ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK
80845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  to indicate that registration was successful, and provide a
80945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  handle for this registration.
81045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
811ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu**                  If uri_id=NFA_NDEF_URI_ID_ABSOLUTE, then p_abs_uri contains the
81245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  unabridged URI. For all other uri_id values, the p_abs_uri
81345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  parameter is ignored (i.e the URI prefix is implied by uri_id).
81445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  See [NFC RTD URI] for more information.
815e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
81645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
81745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
81845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
81945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
82045faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern tNFA_STATUS NFA_RegisterNDefUriHandler (BOOLEAN          handle_whole_message,
82145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                                       tNFA_NDEF_URI_ID uri_id,
82245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                                       UINT8            *p_abs_uri,
82345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                                       UINT8            uri_id_len,
82445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                                                       tNFA_NDEF_CBACK  *p_ndef_cback)
82545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
82645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_REG_NDEF_HDLR *p_msg;
82745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
82845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API2 ("NFA_RegisterNDefUriHandler (): handle whole ndef message: %i, uri_id=0x%02x", handle_whole_message, uri_id);
82945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
83045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    /* Check for NULL callback */
83145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (!p_ndef_cback)
83245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
83345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        NFA_TRACE_ERROR0 ("NFA_RegisterNDefUriHandler (): error - null callback");
83445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_INVALID_PARAM);
83545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
83645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
83745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
83845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_REG_NDEF_HDLR *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_REG_NDEF_HDLR) + uri_id_len))) != NULL)
83945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
84045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_REG_NDEF_HDLR_EVT;
841e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu
84245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->flags = NFA_NDEF_FLAGS_WKT_URI;
84345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
84445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        if (handle_whole_message)
84545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        {
84645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            p_msg->flags |= NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE;
84745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        }
84845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
84945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        /* abs_uri is only valid fir uri_id=NFA_NDEF_URI_ID_ABSOLUTE */
85045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        if (uri_id != NFA_NDEF_URI_ID_ABSOLUTE)
85145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        {
85245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            uri_id_len = 0;
85345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        }
85445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
85545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->tnf = NFA_TNF_WKT;
85645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->uri_id = uri_id;
85745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->name_len = uri_id_len;
85845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_ndef_cback = p_ndef_cback;
85945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        memcpy (p_msg->name, p_abs_uri, uri_id_len);
86045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
86145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
86245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
86345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
86445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
86545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
86645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
86745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
86845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
86945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
87045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
87145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_DeregisterNDefTypeHandler
87245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
87345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      Deregister NDEF record type handler.
874e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**
87545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
87645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
87745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
87845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
87945faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuNFC_API extern tNFA_STATUS NFA_DeregisterNDefTypeHandler (tNFA_HANDLE ndef_type_handle)
88045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
88145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_DEREG_NDEF_HDLR *p_msg;
88245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
88345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_DeregisterNDefHandler (): handle 0x%08x", ndef_type_handle);
88445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
88545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
88645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_DEREG_NDEF_HDLR *) GKI_getbuf ((UINT16) (sizeof (tNFA_DM_API_DEREG_NDEF_HDLR)))) != NULL)
88745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
88845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event = NFA_DM_API_DEREG_NDEF_HDLR_EVT;
88945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->ndef_type_handle = ndef_type_handle;
89045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
89145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
89245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
89345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
89445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
89545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
89645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
89745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
89845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
89945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
90045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
90145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_PowerOffSleepMode
90245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
90345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function is called to enter or leave NFCC Power Off Sleep mode
90445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_DM_PWR_MODE_CHANGE_EVT will be sent to indicate status.
90545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
90645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  start_stop : TRUE if entering Power Off Sleep mode
90745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                               FALSE if leaving Power Off Sleep mode
90845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
90945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
91045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
91145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
91245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
91345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_PowerOffSleepMode (BOOLEAN start_stop)
91445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
91545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    BT_HDR *p_msg;
91645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
91745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_PowerOffSleepState () start_stop=%d", start_stop);
91845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
91945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (nfa_dm_cb.flags & NFA_DM_FLAGS_SETTING_PWR_MODE)
92045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
92145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        NFA_TRACE_ERROR0 ("NFA_PowerOffSleepState (): NFA DM is busy to update power mode");
92245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_FAILED);
92345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
92445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    else
92545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
92645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_dm_cb.flags |= NFA_DM_FLAGS_SETTING_PWR_MODE;
92745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
92845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
92945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (BT_HDR *) GKI_getbuf (sizeof (BT_HDR))) != NULL)
93045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
93145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->event          = NFA_DM_API_POWER_OFF_SLEEP_EVT;
93245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->layer_specific = start_stop;
93345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
93445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
93545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
93645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
93745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
93845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
93945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
94045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
94145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
94245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
94345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
94445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_RegVSCback
94545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
94645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function is called to register or de-register a callback
94745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  function to receive Proprietary NCI response and notification
94845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  events.
94945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  The maximum number of callback functions allowed is NFC_NUM_VS_CBACKS
95045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
95145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          tNFC_STATUS
95245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
95345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
95445faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFC_STATUS NFA_RegVSCback (BOOLEAN          is_register,
95545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                            tNFA_VSC_CBACK   *p_cback)
95645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
95745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_REG_VSC *p_msg;
95845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
95945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_RegVSCback() is_register=%d", is_register);
96045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
96145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (p_cback == NULL)
96245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
96345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        NFA_TRACE_ERROR0 ("NFA_RegVSCback() requires a valid callback function");
96445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_FAILED);
96545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
96645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
96745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_REG_VSC *) GKI_getbuf (sizeof(tNFA_DM_API_REG_VSC))) != NULL)
96845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
96945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event        = NFA_DM_API_REG_VSC_EVT;
97045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->is_register      = is_register;
97145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_cback          = p_cback;
97245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
97345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
97445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
97545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
97645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
97745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
97845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
97945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
98045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
98145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
98245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
98345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_SendVsCommand
98445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
98545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function is called to send an NCI Vendor Specific
98645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  command to NFCC.
98745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
98845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  oid             - The opcode of the VS command.
98945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  cmd_params_len  - The command parameter len
990e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu**                  p_cmd_params    - The command parameter
99145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  p_cback         - The callback function to receive the command
99245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                                    status
99345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
99445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          NFA_STATUS_OK if successfully initiated
99545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  NFA_STATUS_FAILED otherwise
99645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
99745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
99845faad0ff5deeb0c676356345d99398cc4ab695aEvan ChutNFA_STATUS NFA_SendVsCommand (UINT8            oid,
99945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                               UINT8            cmd_params_len,
100045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                               UINT8            *p_cmd_params,
100145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu                               tNFA_VSC_CBACK    *p_cback)
100245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
100345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    tNFA_DM_API_SEND_VSC *p_msg;
100445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    UINT16  size = sizeof(tNFA_DM_API_SEND_VSC) + cmd_params_len;
100545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
100645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    NFA_TRACE_API1 ("NFA_SendVsCommand() oid=0x%x", oid);
100745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
100845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if ((p_msg = (tNFA_DM_API_SEND_VSC *) GKI_getbuf (size)) != NULL)
100945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    {
101045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->hdr.event        = NFA_DM_API_SEND_VSC_EVT;
101145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->oid              = oid;
101245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        p_msg->p_cback          = p_cback;
101345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        if (cmd_params_len && p_cmd_params)
101445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        {
101545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            p_msg->cmd_params_len   = cmd_params_len;
101645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            p_msg->p_cmd_params     = (UINT8 *)(p_msg + 1);
101745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            memcpy (p_msg->p_cmd_params, p_cmd_params, cmd_params_len);
101845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        }
101945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        else
102045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        {
102145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            p_msg->cmd_params_len   = 0;
102245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu            p_msg->p_cmd_params     = NULL;
102345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        }
102445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
102545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_sendmsg (p_msg);
102645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
102745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        return (NFA_STATUS_OK);
102845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    }
102945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
103045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (NFA_STATUS_FAILED);
103145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
103245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
103345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/*******************************************************************************
103445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
103545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function         NFA_SetTraceLevel
103645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
103745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description      This function sets the trace level for NFA.  If called with
103845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**                  a value of 0xFF, it simply returns the current trace level.
103945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
104045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns          The new or current trace level
104145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu**
104245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/
104345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 NFA_SetTraceLevel (UINT8 new_level)
104445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{
104545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    if (new_level != 0xFF)
104645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu        nfa_sys_set_trace_level (new_level);
104745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
104845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu    return (nfa_sys_cb.trace_level);
104945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu}
105045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu
1051