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