1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 3e9629bad30a9f478b336ab46b8e6e02f7f87af46Evan Chu * Copyright (C) 2010-2014 Broadcom Corporation 4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * you may not use this file except in compliance with the License. 7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * You may obtain a copy of the License at: 8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * See the License for the specific language governing permissions and 15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * limitations under the License. 16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * NFA interface for device management 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 258a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach 268a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach#include <android-base/stringprintf.h> 278a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach#include <base/logging.h> 288a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach 296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi#include "ndef_utils.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_api.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfa_ce_int.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 338a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbachusing android::base::StringPrintf; 348a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach 358a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbachextern bool nfc_debug_enabled; 368a4edf623d58153f34cac27a77bb4f3bbb593a43Andre Eisenbach 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Constants 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/***************************************************************************** 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** APIs 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*****************************************************************************/ 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_Init 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function initializes control blocks for NFA 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** p_hal_entry_tbl points to a table of HAL entry points 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NOTE: the buffer that p_hal_entry_tbl points must be 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** persistent until NFA is disabled. 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns none 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoivoid NFA_Init(tHAL_NFC_ENTRY* p_hal_entry_tbl) { 596767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_init(); 616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_dm_init(); 626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_p2p_init(); 636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_snep_init(false); 646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_rw_init(); 656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ce_init(); 666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_ee_init(); 676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_ee_max_ee_cfg != 0) { 686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_dm_cb.get_max_ee = p_hal_entry_tbl->get_max_ee; 696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_hci_init(); 706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Initialize NFC module */ 736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_Init(p_hal_entry_tbl); 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_Enable 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function enables NFC. Prior to calling NFA_Enable, 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the NFCC must be powered up, and ready to receive commands. 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** This function enables the tasks needed by NFC, opens the NCI 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** transport, resets the NFC controller, downloads patches to 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the NFCC (if necessary), and initializes the NFC subsystems. 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 86552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** This function should only be called once - typically when 87552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFC is enabled during boot-up, or when NFC is enabled from a 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** settings UI. Subsequent calls to NFA_Enable while NFA is 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** enabling or enabled will be ignored. When the NFC startup 90552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** procedure is completed, an NFA_DM_ENABLE_EVT is returned to 91552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** the application using the tNFA_DM_CBACK. 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 976fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_Enable(tNFA_DM_CBACK* p_dm_cback, 986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_CONN_CBACK* p_conn_cback) { 996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_ENABLE* p_msg; 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1016767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Validate parameters */ 1046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((!p_dm_cback) || (!p_conn_cback)) { 1056767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("error null callback"); 1066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1090c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_ENABLE*)GKI_getbuf(sizeof(tNFA_DM_API_ENABLE)); 1100c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 1116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_ENABLE_EVT; 1126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_dm_cback = p_dm_cback; 1136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_conn_cback = p_conn_cback; 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_Disable 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to shutdown NFC. The tasks for NFC 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** are terminated, and clean up routines are performed. This 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** function is typically called during platform shut-down, or 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** when NFC is disabled from a settings UI. When the NFC 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** shutdown procedure is completed, an NFA_DM_DISABLE_EVT is 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** returned to the application using the tNFA_DM_CBACK. 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The platform should wait until the NFC_DISABLE_REVT is 135552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** received before powering down the NFC chip and NCI 136552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** transport. This is required to so that NFA can gracefully 137552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** shut down any open connections. 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_Disable(bool graceful) { 1446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_DISABLE* p_msg; 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1466767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 1476767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("NFA_Disable (graceful=%i)", graceful); 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1490c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_DISABLE*)GKI_getbuf(sizeof(tNFA_DM_API_DISABLE)); 1500c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_DISABLE_EVT; 1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->graceful = graceful; 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 16181e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna 16281e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna/******************************************************************************* 16381e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** 16481e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** Function NFA_GetNCIVersion 16581e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** 16681e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** Description Returns the NCI version of the NFCC to upper layer 16781e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** 16881e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** 16981e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** Returns NCI version NCI2.0 / NCI1.0 17081e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna** 17181e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna*******************************************************************************/ 17281e4f816534a9d9137ce202d1b158720cc13eb78Love Khannauint8_t NFA_GetNCIVersion() { return NFC_GetNCIVersion(); } 17381e4f816534a9d9137ce202d1b158720cc13eb78Love Khanna 1745e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna/******************************************************************************* 1755e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 1765e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Function NFA_SetPowerSubStateForScreenState 1775e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 1785e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Description Update the power sub-state as per current screen state to 1795e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** NFCC. 1805e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 1815e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Returns NFA_STATUS_OK if successfully initiated 1825e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** NFA_STATUS_FAILED otherwise 1835e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 1845e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna*******************************************************************************/ 1855e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love KhannatNFA_STATUS NFA_SetPowerSubStateForScreenState(uint8_t screenState) { 1866767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 1876767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("%s: state:0x%X", __func__, screenState); 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1895e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna uint8_t nci_scren_state = 0xFF; 1905e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna uint16_t buf_size = sizeof(tNFA_DM_API_SET_POWER_SUB_STATE); 1915e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna tNFA_DM_API_SET_POWER_SUB_STATE* p_msg = 1925e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna (tNFA_DM_API_SET_POWER_SUB_STATE*)GKI_getbuf(buf_size); 1935e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 1945e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna if (p_msg != NULL) { 1955e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna p_msg->hdr.event = NFA_DM_API_SET_POWER_SUB_STATE_EVT; 1965e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna switch (screenState) { 1975e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna case NFA_SCREEN_STATE_ON_UNLOCKED: 1985e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna nci_scren_state = SCREEN_STATE_ON_UNLOCKED; 1995e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna break; 2005e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna case NFA_SCREEN_STATE_OFF_UNLOCKED: 2015e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna nci_scren_state = SCREEN_STATE_OFF_UNLOCKED; 2025e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna break; 2035e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna case NFA_SCREEN_STATE_ON_LOCKED: 2045e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna nci_scren_state = SCREEN_STATE_ON_LOCKED; 2055e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna break; 2065e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna case NFA_SCREEN_STATE_OFF_LOCKED: 2075e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna nci_scren_state = SCREEN_STATE_OFF_LOCKED; 2085e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna break; 2095e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 2105e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna default: 2116767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 2126767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("%s, unknown screen state", __func__); 2135e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna break; 2145e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna } 2155e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 2165e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna p_msg->screen_state = nci_scren_state; 2175e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 2185e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna nfa_sys_sendmsg(p_msg); 2195e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna return (NFA_STATUS_OK); 2205e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna } 2215e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna return (NFA_STATUS_FAILED); 2225e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna} 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_SetConfig 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set the configuration parameters to NFCC. The result is 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** reported with an NFA_DM_SET_CONFIG_EVT in the tNFA_DM_CBACK 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback. 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 231552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 232552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 233552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function. Most Configuration 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** parameters are related to RF discovery. 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_BUSY if previous setting is on-going 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SetConfig(tNFA_PMID param_id, uint8_t length, uint8_t* p_data) { 2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SET_CONFIG* p_msg; 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2446767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("param_id:0x%X", param_id); 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2460c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_SET_CONFIG*)GKI_getbuf( 2470c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_DM_API_SET_CONFIG) + length)); 2480c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 2496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_SET_CONFIG_EVT; 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->param_id = param_id; 2526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->length = length; 2536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_data = (uint8_t*)(p_msg + 1); 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Copy parameter data */ 2566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p_msg->p_data, p_data, length); 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_GetConfig 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Get the configuration parameters from NFCC. The result is 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** reported with an NFA_DM_GET_CONFIG_EVT in the tNFA_DM_CBACK 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback. 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_GetConfig(uint8_t num_ids, tNFA_PMID* p_param_ids) { 2796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_GET_CONFIG* p_msg; 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2816767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("num_ids: %i", num_ids); 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2830c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_GET_CONFIG*)GKI_getbuf( 2840c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_DM_API_GET_CONFIG) + num_ids)); 2850c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 2866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_GET_CONFIG_EVT; 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->num_ids = num_ids; 2896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_pmids = (tNFA_PMID*)(p_msg + 1); 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Copy the param IDs */ 2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p_msg->p_pmids, p_param_ids, num_ids); 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RequestExclusiveRfControl 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Request exclusive control of NFC. 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** - Previous behavior (polling/tag reading, DH card emulation) 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** will be suspended . 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** - Polling and listening will be done based on the specified 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** params 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The NFA_EXCLUSIVE_RF_CONTROL_STARTED_EVT event of 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** tNFA_CONN_CBACK indicates the status of the operation. 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_ACTIVATED_EVT and NFA_DEACTIVATED_EVT indicates link 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** activation/deactivation. 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 318552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_SendRawFrame is used to send data to the peer. 319552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_DATA_EVT indicates data from the peer. 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If a tag is activated, then the NFA_RW APIs may be used to 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** send commands to the tag. Incoming NDEF messages are sent to 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the NDEF callback. 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Once exclusive RF control has started, NFA will not activate 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** LLCP internally. The application has exclusive control of 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the link. 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 329552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 330552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 331552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3376fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_RequestExclusiveRfControl(tNFA_TECHNOLOGY_MASK poll_mask, 3386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_LISTEN_CFG* p_listen_cfg, 3396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_CONN_CBACK* p_conn_cback, 3406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_CBACK* p_ndef_cback) { 3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REQ_EXCL_RF_CTRL* p_msg; 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3436767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("poll_mask=0x%x", poll_mask); 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!p_conn_cback) { 3466767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("error null callback"); 3476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 3486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3500c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_REQ_EXCL_RF_CTRL*)GKI_getbuf( 3510c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi sizeof(tNFA_DM_API_REQ_EXCL_RF_CTRL)); 3520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 3536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_REQUEST_EXCL_RF_CTRL_EVT; 3546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->poll_mask = poll_mask; 3556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_conn_cback = p_conn_cback; 3566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_ndef_cback = p_ndef_cback; 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_listen_cfg) 3596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(&p_msg->listen_cfg, p_listen_cfg, sizeof(tNFA_LISTEN_CFG)); 3606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi else 3616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memset(&p_msg->listen_cfg, 0x00, sizeof(tNFA_LISTEN_CFG)); 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 3646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 3666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_ReleaseExclusiveRfControl 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Release exclusive control of NFC. Once released, behavior 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** prior to obtaining exclusive RF control will resume. 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3826fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_ReleaseExclusiveRfControl(void) { 3836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3856767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!nfa_dm_cb.p_excl_conn_cback) { 3886767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf( 3896767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi "Exclusive rf control is not in " 3906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "progress"); 3916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 3926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 3940c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 3950c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 3966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_RELEASE_EXCL_RF_CTRL_EVT; 3976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 3996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_EnablePolling 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Enable polling for technologies specified by poll_mask. 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** The following events (notified using the connection 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** callback registered with NFA_Enable) are generated during 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** polling: 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** - NFA_POLL_ENABLED_EVT indicates whether or not polling 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** successfully enabled. 416552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** - NFA_DISC_RESULT_EVT indicates there are more than one 417552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** devices, so application must select one of tags by calling 418552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_Select(). 419552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** - NFA_SELECT_RESULT_EVT indicates whether previous selection 420552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** was successful or not. If it was failed then application 421552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** must select again or deactivate by calling 422552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_Deactivate(). 423552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** - NFA_ACTIVATED_EVT is generated when an NFC link is 424552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** activated. 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** - NFA_NDEF_DETECT_EVT is generated if tag is activated 426552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** - NFA_LLCP_ACTIVATED_EVT/NFA_LLCP_DEACTIVATED_EVT is 427552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** generated if NFC-DEP is activated 428552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** - NFA_DEACTIVATED_EVT will be returned after deactivating 429552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFC link. 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 431552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 432552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 433552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4396fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EnablePolling(tNFA_TECHNOLOGY_MASK poll_mask) { 4406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_ENABLE_POLL* p_msg; 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4426767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("0x%X", poll_mask); 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4440c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_ENABLE_POLL*)GKI_getbuf(sizeof(tNFA_DM_API_ENABLE_POLL)); 4450c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 4466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_ENABLE_POLLING_EVT; 4476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->poll_mask = poll_mask; 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 4526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_DisablePolling 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Disable polling 462552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_POLL_DISABLED_EVT will be returned after stopping 463552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** polling. 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 465552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 466552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 467552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4736fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_DisablePolling(void) { 4746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4766767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4780c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 4790c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 4806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_DISABLE_POLLING_EVT; 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 4856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 49267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function NFA_EnableListening 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 49467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description Enable listening. 495552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_LISTEN_ENABLED_EVT will be returned after listening is 496552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** allowed. 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 49867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** The actual listening technologies are specified by other NFA 49967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** API functions. Such functions include (but not limited to) 50067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_CeConfigureUiccListenTech. 501552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** If NFA_DisableListening () is called to ignore the listening 502552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** technologies, NFA_EnableListening () is called to restore 503552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** the listening technologies set by these functions. 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 505552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 506552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 507552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5136fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_EnableListening(void) { 5146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5166767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5180c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 5190c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 5206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_ENABLE_LISTENING_EVT; 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 5256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 53067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/******************************************************************************* 53167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 53267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function NFA_DisableListening 53367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 53467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description Disable listening 535552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_LISTEN_DISABLED_EVT will be returned after stopping 536552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** listening. This function is called to exclude listen at RF 537552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** discovery. 53867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 539552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 540552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 541552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 54267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 54367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns NFA_STATUS_OK if successfully initiated 54467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_STATUS_FAILED otherwise 54567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 54667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/ 5476fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_DisableListening(void) { 5486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 54909de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 5506767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 55109de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 5520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 5530c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 5546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_DISABLE_LISTENING_EVT; 55509de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 5566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 55709de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 5586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 5596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 56009de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 5616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 56209de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen} 56309de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 56467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/******************************************************************************* 56567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 56667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function NFA_PauseP2p 56767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 56867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description Pause P2P services. 56967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_P2P_PAUSED_EVT will be returned after P2P services are 57067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** disabled. 57167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 57267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** The P2P services enabled by NFA_P2p* API functions are not 57367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** available. NFA_ResumeP2p() is called to resume the P2P 57467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** services. 57567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 576552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 577552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 578552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 57967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 58067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns NFA_STATUS_OK if successfully initiated 58167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_STATUS_FAILED otherwise 58267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 58367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/ 5846fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_PauseP2p(void) { 5856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 58609de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 5876767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 58809de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 5890c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 5900c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 5916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_PAUSE_P2P_EVT; 59267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 5936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 59467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 5956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 5966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 59767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 5986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 59967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu} 60067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 60167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/******************************************************************************* 60267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 60367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function NFA_ResumeP2p 60467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 60567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Description Resume P2P services. 60667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_P2P_RESUMED_EVT will be returned after P2P services are. 60767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** enables again. 60867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 609552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 610552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 611552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 61267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 61367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns NFA_STATUS_OK if successfully initiated 61467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_STATUS_FAILED otherwise 61567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 61667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/ 6176fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_ResumeP2p(void) { 6186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 61967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 6206767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 62167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 6220c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 6230c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 6246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_RESUME_P2P_EVT; 62567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 6266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 62767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 6286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 6296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 63067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 6316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 63267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu} 63367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 63467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu/******************************************************************************* 63567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 63667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Function NFA_SetP2pListenTech 63767aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 638552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description This function is called to set listen technology for 639552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFC-DEP. This funtion may be called before or after starting 640552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** any server on NFA P2P/CHO/SNEP. 64167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** If there is no technology for NFC-DEP, P2P listening will be 64267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** stopped. 64367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 64467aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_SET_P2P_LISTEN_TECH_EVT without data will be returned. 64567aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 646552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 647552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 648552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 64967aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 65067aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** Returns NFA_STATUS_OK if successfully initiated 65167aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** NFA_STATUS_FAILED otherwise 65267aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu** 65367aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu*******************************************************************************/ 6546fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SetP2pListenTech(tNFA_TECHNOLOGY_MASK tech_mask) { 6556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SET_P2P_LISTEN_TECH* p_msg; 65667aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 6576767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("tech_mask:0x%X", tech_mask); 65867aef6c6c6f6bc7b8364b97949e874b9dc7175bcEvan Chu 6590c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_SET_P2P_LISTEN_TECH*)GKI_getbuf( 6600c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi sizeof(tNFA_DM_API_SET_P2P_LISTEN_TECH)); 6610c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 6626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_SET_P2P_LISTEN_TECH_EVT; 6636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->tech_mask = tech_mask; 66409de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 6656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 66609de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 6676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 6686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 66909de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 6706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 67109de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen} 67209de1b298ad4237ba50018d28086c0430da8c23eMartijn Coenen 673e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 674e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 675e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_StartRfDiscovery 676e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 677e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Start RF discovery 678e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** RF discovery parameters shall be set by other APIs. 679e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 680552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** An NFA_RF_DISCOVERY_STARTED_EVT indicates whether starting 681552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** was successful or not. 682e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 683e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 684e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 685e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 686e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6876fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_StartRfDiscovery(void) { 6886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 689e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6906767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6920c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 6930c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 6946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_START_RF_DISCOVERY_EVT; 695e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 697e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 6996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 700e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 702e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 703e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 704e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 705e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 706e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_StopRfDiscovery 707e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 708e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Stop RF discovery 709e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 710552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** An NFA_RF_DISCOVERY_STOPPED_EVT indicates whether stopping 711552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** was successful or not. 712e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 713e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 714e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 715e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 716e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 7176fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_StopRfDiscovery(void) { 7186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 719e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7206767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 721e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7220c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 7230c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 7246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_STOP_RF_DISCOVERY_EVT; 725e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 727e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 7296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 730e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 732e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 733e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 734e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 735e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 736e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_SetRfDiscoveryDuration 737e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 738e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Set the duration of the single discovery period in [ms]. 739e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Allowable range: 0 ms to 0xFFFF ms. 740e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 741e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If discovery is already started, the application should 742e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** call NFA_StopRfDiscovery prior to calling 743e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_SetRfDiscoveryDuration, and then call 744e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_StartRfDiscovery afterwards to restart discovery using 745e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the new duration. 746e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 747552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Note: If RF discovery is started, 748552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_StopRfDiscovery()/NFA_RF_DISCOVERY_STOPPED_EVT should 749552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** happen before calling this function 750e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 751e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns: 752e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_OK, if command accepted 753e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED: otherwise 754e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 755e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 7566fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SetRfDiscoveryDuration(uint16_t discovery_period_ms) { 7576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SET_RF_DISC_DUR* p_msg; 758e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7596767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 760e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Post the API message */ 7621d06277aa1c2fb28d9e21432b62754dd6ea3a8b8Love Khanna p_msg = (tNFA_DM_API_SET_RF_DISC_DUR*)GKI_getbuf(sizeof(NFC_HDR)); 7630c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 7646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_SET_RF_DISC_DURATION_EVT; 765e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Set discovery duration */ 7676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->rf_disc_dur_ms = discovery_period_ms; 768e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 770e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 7726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 773e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 7746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 775e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 776e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 777e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 778e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 779e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_Select 780e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 781e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Select one from detected devices during discovery 782e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** (from NFA_DISC_RESULT_EVTs). The application should wait for 783e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the final NFA_DISC_RESULT_EVT before selecting. 784e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 785552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** An NFA_SELECT_RESULT_EVT indicates whether selection was 786552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** successful or not. If failed then application must select 787552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** again or deactivate by NFA_Deactivate(). 788e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 789e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 790552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_STATUS_INVALID_PARAM if RF interface is not matched 791552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** protocol 792e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 793e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 794e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 7956fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_Select(uint8_t rf_disc_id, tNFA_NFC_PROTOCOL protocol, 7966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_INTF_TYPE rf_interface) { 7976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SELECT* p_msg; 7986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 7996767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 8006767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("rf_disc_id:0x%X, protocol:0x%X, rf_interface:0x%X", 8016767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi rf_disc_id, protocol, rf_interface); 8026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (((rf_interface == NFA_INTERFACE_ISO_DEP) && 8046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (protocol != NFA_PROTOCOL_ISO_DEP)) || 8056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ((rf_interface == NFA_INTERFACE_NFC_DEP) && 8066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (protocol != NFA_PROTOCOL_NFC_DEP))) { 8076767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("RF interface is not matched protocol"); 8086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_INVALID_PARAM); 8096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 8106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8110c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = 8120c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (tNFA_DM_API_SELECT*)GKI_getbuf((uint16_t)(sizeof(tNFA_DM_API_SELECT))); 8130c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 8146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_SELECT_EVT; 8156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->rf_disc_id = rf_disc_id; 8166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->protocol = protocol; 8176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->rf_interface = rf_interface; 8186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 8206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 8226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 8236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 8246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 825e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 826e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 827e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 828e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 829e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_UpdateRFCommParams 830e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 831552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description This function is called to update RF Communication 832552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** parameters once the Frame RF Interface has been activated. 833e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 834e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** An NFA_UPDATE_RF_PARAM_RESULT_EVT indicates whether updating 835e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** was successful or not. 836e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 837e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 838e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 839e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 840e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 8416fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_UpdateRFCommParams(tNFA_RF_COMM_PARAMS* p_params) { 8426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_UPDATE_RF_PARAMS* p_msg; 843e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8446767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << __func__; 845e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8460c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_UPDATE_RF_PARAMS*)GKI_getbuf( 8470c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_DM_API_UPDATE_RF_PARAMS))); 8480c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 8496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_UPDATE_RF_PARAMS_EVT; 8506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(&p_msg->params, p_params, sizeof(tNFA_RF_COMM_PARAMS)); 851e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 853e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 8556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 856e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 858e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 859e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 860e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 861e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 862e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_Deactivate 863e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 864e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description 865e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If sleep_mode=TRUE: 866552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Deselect the activated device by deactivating into sleep 867552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** mode. 868e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 869552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** An NFA_DEACTIVATE_FAIL_EVT indicates that selection was 870552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** not successful. Application can select another 871552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** discovered device or deactivate by NFA_Deactivate() 872e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** after receiving NFA_DEACTIVATED_EVT. 873e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 874552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Deactivating to sleep mode is not allowed when NFCC is 875552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** in wait-for-host-select mode, or in listen-sleep states; 876552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA will deactivate to idle or discovery state for these 877552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** cases respectively. 878e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 879e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 880e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** If sleep_mode=FALSE: 881552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Deactivate the connection (e.g. as a result of presence 882552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** check failure) NFA_DEACTIVATED_EVT will indicate that 883552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** link is deactivated. Polling/listening will resume 884552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** (unless the nfcc is in wait_for-all-discoveries state) 885e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 886e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 887e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 888e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 889e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 890e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 8916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS NFA_Deactivate(bool sleep_mode) { 8926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_DEACTIVATE* p_msg; 893e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8946767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("sleep_mode:%i", sleep_mode); 895e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 8960c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_DEACTIVATE*)GKI_getbuf( 8970c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_DM_API_DEACTIVATE))); 8980c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 8996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_DEACTIVATE_EVT; 9006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->sleep_mode = sleep_mode; 901e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 903e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 9056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 906e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 908e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 909e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 910e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 911e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 912e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_SendRawFrame 913e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 914e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Send a raw frame over the activated interface with the NFCC. 915552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** This function can only be called after NFC link is 916552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** activated. 917e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 918552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** If the activated interface is a tag and auto-presence check 919552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** is enabled then presence_check_start_delay can be used to 920552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** indicate the delay in msec after which the next auto 921552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** presence check command can be sent. 922552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** NFA_DM_DEFAULT_PRESENCE_CHECK_START_DELAY can be used as the 923552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** default value for the delay. 9245c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen** 925e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 926e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 927e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 928e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 9296fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SendRawFrame(uint8_t* p_raw_data, uint16_t data_len, 9306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t presence_check_start_delay) { 9316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 9326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t size; 9336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p; 934e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 9356767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("data_len:%d", data_len); 9366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Validate parameters */ 9386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if ((data_len == 0) || (p_raw_data == NULL)) 9396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_INVALID_PARAM); 9406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi size = NFC_HDR_SIZE + NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE + data_len; 9420c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(size); 9430c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 9446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_RAW_FRAME_EVT; 9456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->layer_specific = presence_check_start_delay; 9466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->offset = NCI_MSG_OFFSET_SIZE + NCI_DATA_HDR_SIZE; 9476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->len = data_len; 9486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p = (uint8_t*)(p_msg + 1) + p_msg->offset; 9506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p, p_raw_data, data_len); 9516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 9536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 9556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 9566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 958e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 959e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 960e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 961e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NDEF Handler APIs 962e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 963e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 964e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 965e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 966e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RegisterNDefTypeHandler 967e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 968e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function allows the applications to register for 969e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** specific types of NDEF records. When NDEF records are 970e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** received, NFA will parse the record-type field, and pass 971e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** the record to the registered tNFA_NDEF_CBACK. 972e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 973e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** For records types which were not registered, the record will 974e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** be sent to the default handler. A default type-handler may 975e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** be registered by calling this NFA_RegisterNDefTypeHandler 976e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** with tnf=NFA_TNF_DEFAULT. In this case, all un-registered 977e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** record types will be sent to the callback. Only one default 978e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** handler may be registered at a time. 979e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 980e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK 981e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to indicate that registration was successful, and provide a 982e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** handle for this record type. 983e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 984e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 985e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 986e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 987e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 9886fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_RegisterNDefTypeHandler(bool handle_whole_message, tNFA_TNF tnf, 9896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_type_name, 9906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t type_name_len, 9916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_CBACK* p_ndef_cback) { 9926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REG_NDEF_HDLR* p_msg; 9936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9946767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf( 9956767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi "handle whole ndef message: %i, " 9966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "tnf=0x%02x", 9976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi handle_whole_message, tnf); 9986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 9996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Check for NULL callback */ 10006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!p_ndef_cback) { 10016767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("error - null callback"); 10026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_INVALID_PARAM); 10036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 10046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10050c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_REG_NDEF_HDLR*)GKI_getbuf( 10060c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_DM_API_REG_NDEF_HDLR) + type_name_len)); 10070c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 10086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_REG_NDEF_HDLR_EVT; 10096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->flags = 10116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi (handle_whole_message ? NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE : 0); 10126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->tnf = tnf; 10136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->name_len = type_name_len; 10146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_ndef_cback = p_ndef_cback; 10156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p_msg->name, p_type_name, type_name_len); 10166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 10186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 10206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 10216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1023e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1024e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1025e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1026e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1027e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RegisterNDefUriHandler 1028e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1029e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This API is a special-case of NFA_RegisterNDefTypeHandler 1030552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** with TNF=NFA_TNF_WKT, and type_name='U' (URI record); and 1031552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** allows registering for specific URI types (e.g. 'tel:' or 1032552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** 'mailto:'). 1033e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1034e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** An NFA_NDEF_REGISTER_EVT will be sent to the tNFA_NDEF_CBACK 1035e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to indicate that registration was successful, and provide a 1036e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** handle for this registration. 1037e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1038552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** If uri_id=NFA_NDEF_URI_ID_ABSOLUTE, then p_abs_uri contains 1039552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** the unabridged URI. For all other uri_id values, 1040552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** the p_abs_uri parameter is ignored (i.e the URI prefix is 1041552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** implied by uri_id). See [NFC RTD URI] for more information. 1042e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1043e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 1044e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1045e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1046e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 10476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS NFA_RegisterNDefUriHandler(bool handle_whole_message, 10486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_URI_ID uri_id, 10496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_abs_uri, 10506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t uri_id_len, 10516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_NDEF_CBACK* p_ndef_cback) { 10526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REG_NDEF_HDLR* p_msg; 10536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10546767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf( 10556767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi "handle whole ndef message: %i, " 10566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi "uri_id=0x%02x", 10576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi handle_whole_message, uri_id); 10586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* Check for NULL callback */ 10606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (!p_ndef_cback) { 10616767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("error - null callback"); 10626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_INVALID_PARAM); 10636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 10646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10650c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_REG_NDEF_HDLR*)GKI_getbuf( 10660c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_DM_API_REG_NDEF_HDLR) + uri_id_len)); 10670c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 10686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_REG_NDEF_HDLR_EVT; 10696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->flags = NFA_NDEF_FLAGS_WKT_URI; 10716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 10726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (handle_whole_message) { 10736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->flags |= NFA_NDEF_FLAGS_HANDLE_WHOLE_MESSAGE; 1074e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1075e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* abs_uri is only valid fir uri_id=NFA_NDEF_URI_ID_ABSOLUTE */ 10776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (uri_id != NFA_NDEF_URI_ID_ABSOLUTE) { 10786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uri_id_len = 0; 10796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1080e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->tnf = NFA_TNF_WKT; 10826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->uri_id = uri_id; 10836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->name_len = uri_id_len; 10846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_ndef_cback = p_ndef_cback; 10856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p_msg->name, p_abs_uri, uri_id_len); 1086e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 1088e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 10906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1091e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 10926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1093e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1094e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1095e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1096e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1097e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_DeregisterNDefTypeHandler 1098e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1099e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description Deregister NDEF record type handler. 1100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 1102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 11056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiextern tNFA_STATUS NFA_DeregisterNDefTypeHandler(tNFA_HANDLE ndef_type_handle) { 11066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_DEREG_NDEF_HDLR* p_msg; 1107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11086767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 11096767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("handle 0x%08x", ndef_type_handle); 1110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11110c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_DEREG_NDEF_HDLR*)GKI_getbuf( 11120c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi (uint16_t)(sizeof(tNFA_DM_API_DEREG_NDEF_HDLR))); 11130c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 11146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_DEREG_NDEF_HDLR_EVT; 11156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->ndef_type_handle = ndef_type_handle; 1116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 1118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 11206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_PowerOffSleepMode 1128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1129552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description This function is called to enter or leave NFCC Power Off 1130552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Sleep mode NFA_DM_PWR_MODE_CHANGE_EVT will be sent to 1131552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** indicate status. 1132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** start_stop : TRUE if entering Power Off Sleep mode 1134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** FALSE if leaving Power Off Sleep mode 1135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 1137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 11406fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_PowerOffSleepMode(bool start_stop) { 11416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p_msg; 1142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11436767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("start_stop=%d", start_stop); 1144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (nfa_dm_cb.flags & NFA_DM_FLAGS_SETTING_PWR_MODE) { 11466767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("NFA DM is busy to update power mode"); 11476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 11486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 11496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_dm_cb.flags |= NFA_DM_FLAGS_SETTING_PWR_MODE; 11506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11520c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (NFC_HDR*)GKI_getbuf(sizeof(NFC_HDR)); 11530c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 11546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->event = NFA_DM_API_POWER_OFF_SLEEP_EVT; 11556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->layer_specific = start_stop; 1156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 1158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 11606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_RegVSCback 1168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1169552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description This function is called to register or de-register a 1170552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** callback function to receive Proprietary NCI response and 1171552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** notification events. The maximum number of callback 1172552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** functions allowed is NFC_NUM_VS_CBACKS 1173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns tNFC_STATUS 1175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 11776fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFC_STATUS NFA_RegVSCback(bool is_register, tNFA_VSC_CBACK* p_cback) { 11786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_REG_VSC* p_msg; 1179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11806767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 11816767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("is_register=%d", is_register); 1182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (p_cback == NULL) { 11846767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi LOG(ERROR) << StringPrintf("requires a valid callback function"); 11856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 11866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11880c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_REG_VSC*)GKI_getbuf(sizeof(tNFA_DM_API_REG_VSC)); 11890c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 11906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_REG_VSC_EVT; 11916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->is_register = is_register; 11926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_cback = p_cback; 1193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 1195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 11976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 1198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 11996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function NFA_SendVsCommand 1205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description This function is called to send an NCI Vendor Specific 1207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** command to NFCC. 1208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** oid - The opcode of the VS command. 1210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** cmd_params_len - The command parameter len 1211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** p_cmd_params - The command parameter 1212552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** p_cback - The callback function to receive the 1213552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** command status 1214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns NFA_STATUS_OK if successfully initiated 1216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** NFA_STATUS_FAILED otherwise 1217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 12196fca02d5010de7bd31d83b853c32138021da5f29Ruchi KandoitNFA_STATUS NFA_SendVsCommand(uint8_t oid, uint8_t cmd_params_len, 12206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_cmd_params, tNFA_VSC_CBACK* p_cback) { 12216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi tNFA_DM_API_SEND_VSC* p_msg; 12226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint16_t size = sizeof(tNFA_DM_API_SEND_VSC) + cmd_params_len; 12236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 12246767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf("oid=0x%x", oid); 12256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 12260c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p_msg = (tNFA_DM_API_SEND_VSC*)GKI_getbuf(size); 12270c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p_msg != NULL) { 12286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->hdr.event = NFA_DM_API_SEND_VSC_EVT; 12296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->oid = oid; 12306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_cback = p_cback; 12316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (cmd_params_len && p_cmd_params) { 12326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->cmd_params_len = cmd_params_len; 12336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_cmd_params = (uint8_t*)(p_msg + 1); 12346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi memcpy(p_msg->p_cmd_params, p_cmd_params, cmd_params_len); 12356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 12366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->cmd_params_len = 0; 12376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_msg->p_cmd_params = NULL; 1238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 12406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfa_sys_sendmsg(p_msg); 12416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 12426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_OK); 12436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 12446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 12456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NFA_STATUS_FAILED); 1246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 1247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 1249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 1250d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Function NFA_SendRawVsCommand 1251d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1252d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Description This function is called to send raw Vendor Specific 1253d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** command to NFCC. 1254d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1255d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** cmd_params_len - The command parameter len 1256d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** p_cmd_params - The command parameter 1257d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** p_cback - The callback function to receive the 1258d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** command 1259d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1260d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Returns NFA_STATUS_OK if successfully initiated 1261d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** NFA_STATUS_FAILED otherwise 1262d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1263d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna*******************************************************************************/ 1264d7852c900bb5cd0139708fc22bf60fbb5303830aLove KhannatNFA_STATUS NFA_SendRawVsCommand(uint8_t cmd_params_len, uint8_t* p_cmd_params, 1265d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna tNFA_VSC_CBACK* p_cback) { 1266d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna if (cmd_params_len == 0x00 || p_cmd_params == NULL || p_cback == NULL) { 1267d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna return NFA_STATUS_INVALID_PARAM; 1268d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna } 1269d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna uint16_t size = sizeof(tNFA_DM_API_SEND_VSC) + cmd_params_len; 1270d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna tNFA_DM_API_SEND_VSC* p_msg = (tNFA_DM_API_SEND_VSC*)GKI_getbuf(size); 1271d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna 1272d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna if (p_msg != NULL) { 1273d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna p_msg->hdr.event = NFA_DM_API_SEND_RAW_VS_EVT; 1274d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna p_msg->p_cback = p_cback; 1275d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna if (cmd_params_len && p_cmd_params) { 1276d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna p_msg->cmd_params_len = cmd_params_len; 1277d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna p_msg->p_cmd_params = (uint8_t*)(p_msg + 1); 1278d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna memcpy(p_msg->p_cmd_params, p_cmd_params, cmd_params_len); 1279d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna } else { 1280d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna p_msg->cmd_params_len = 0; 1281d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna p_msg->p_cmd_params = NULL; 1282d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna } 1283d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna 1284d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna nfa_sys_sendmsg(p_msg); 1285d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna 1286d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna return NFA_STATUS_OK; 1287d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna } 1288d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna 1289d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna return NFA_STATUS_FAILED; 1290d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna} 1291d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna 1292d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna/******************************************************************************* 1293d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1294d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Function: NFA_EnableDtamode 1295d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1296d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Description: Enable DTA Mode 1297d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1298d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** Returns: none: 1299d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna** 1300d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna*******************************************************************************/ 1301d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khannavoid NFA_EnableDtamode(tNFA_eDtaModes eDtaMode) { 13026767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi DLOG_IF(INFO, nfc_debug_enabled) 13036767aec6e61ac10feb07bd27f9e1247076b32050Ruchi Kandoi << StringPrintf("%s: 0x%x ", __func__, eDtaMode); 1304d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna appl_dta_mode_flag = 0x01; 1305d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna nfa_dm_cb.eDtaMode = eDtaMode; 1306d7852c900bb5cd0139708fc22bf60fbb5303830aLove Khanna} 1307