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 * This file contains function of the NCI unit to format and send NCI 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * commands (for DH). 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_target.h" 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_defs.h" 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h" 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_int.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_reset 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE RESET command to command queue 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_core_reset(uint8_t reset_type) { 436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 460c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(NCI_CORE_PARAM_SIZE_RESET); 470c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET; 516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_CORE); 566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_CORE_RESET); 576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, NCI_CORE_PARAM_SIZE_RESET); 586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, reset_type); 596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_init 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE INIT command to command queue 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 733f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoiuint8_t nci_snd_core_init(uint8_t nci_version) { 746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 773f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi if ((p = NCI_GET_CMD_BUF(NCI_CORE_PARAM_SIZE_INIT(nci_version))) == NULL) 783f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi return (NCI_STATUS_FAILED); 796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 813f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_INIT(nci_version); 826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_CORE); 876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_CORE_INIT); 883f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi UINT8_TO_STREAM(pp, NCI_CORE_PARAM_SIZE_INIT(nci_version)); 893f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi if (nfc_cb.nci_version == NCI_VERSION_2_0) { 903f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi UINT8_TO_STREAM(pp, NCI2_0_CORE_INIT_CMD_BYTE_0); 913f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi UINT8_TO_STREAM(pp, NCI2_0_CORE_INIT_CMD_BYTE_1); 923f64b002fc7bea3004fcce63a1a503f67d69ba9bRuchi Kandoi } 936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_get_config 101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE GET_CONFIG command to command queue 103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 105e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 106e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_core_get_config(uint8_t* param_ids, uint8_t num_ids) { 1086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 1096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 1106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1110c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(num_ids); 1120c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 1136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 1156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + num_ids + 1; 1166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 1176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 1186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 1196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_CORE); 1216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_CORE_GET_CONFIG); 1226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, (uint8_t)(num_ids + 1)); 1236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, num_ids); 1246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ARRAY_TO_STREAM(pp, param_ids, num_ids); 1256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 1276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_set_config 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE SET_CONFIG command to command queue 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_core_set_config(uint8_t* p_param_tlvs, uint8_t tlv_size) { 1406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 1416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 1426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t num = 0, ulen, len, *pt; 1436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1440c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(tlv_size + 1); 1450c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 1466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 1486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + tlv_size + 1; 1496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 1506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 1516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_CORE); 1536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_CORE_SET_CONFIG); 1546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, (uint8_t)(tlv_size + 1)); 1556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi len = tlv_size; 1566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pt = p_param_tlvs; 1576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi while (len > 1) { 1586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi len -= 2; 1596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pt++; 1606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi num++; 1616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ulen = *pt++; 1626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pt += ulen; 1636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (len >= ulen) { 1646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi len -= ulen; 1656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 1666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi GKI_freebuf(p); 1676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return NCI_STATUS_FAILED; 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 1696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, num); 1726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ARRAY_TO_STREAM(pp, p_param_tlvs, tlv_size); 1736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 1756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_conn_create 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE CONN_CREATE command to command queue 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 1876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_core_conn_create(uint8_t dest_type, uint8_t num_tlv, 1886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t tlv_size, uint8_t* p_param_tlvs) { 1896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 1906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 1916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t size = NCI_CORE_PARAM_SIZE_CON_CREATE + tlv_size; 1926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1930c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(size); 1940c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 1956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 1966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 1976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_CON_CREATE; 1986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 1996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 2006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 2016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_CORE); 2036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_CORE_CONN_CREATE); 2046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, size); 2056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, dest_type); 2066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, num_tlv); 2076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (tlv_size) { 2086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ARRAY_TO_STREAM(pp, p_param_tlvs, tlv_size); 2096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len += tlv_size; 2106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 2116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 2136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_conn_close 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE CONN_CLOSE command to command queue 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_core_conn_close(uint8_t conn_id) { 2266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 2276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 2286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2290c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(NCI_CORE_PARAM_SIZE_CON_CLOSE); 2300c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 2316fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2326fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 2336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_CON_CLOSE; 2346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 2356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 2366fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 2376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2386fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_CORE); 2396fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_CORE_CONN_CLOSE); 2406fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, NCI_CORE_PARAM_SIZE_CON_CLOSE); 2416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, conn_id); 2426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 2446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE) 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_nfcee_discover 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send NFCEE Management NFCEE_DISCOVER command 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_nfcee_discover(uint8_t discover_action) { 2606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 2616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 2626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2630c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(NCI_PARAM_SIZE_DISCOVER_NFCEE); 2640c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 2656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 2676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_PARAM_SIZE_DISCOVER_NFCEE; 2686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 2696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 2706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 2716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_EE_MANAGE); 2736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_NFCEE_DISCOVER); 2746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, NCI_PARAM_SIZE_DISCOVER_NFCEE); 2756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, discover_action); 2766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 2786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_nfcee_mode_set 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send NFCEE Management NFCEE MODE SET command 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 2916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_nfcee_mode_set(uint8_t nfcee_id, uint8_t nfcee_mode) { 2926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 2936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 2946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2950c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET); 2960c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 2976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 2986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 2996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET; 3006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 3016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 3026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 3036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_EE_MANAGE); 3056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_NFCEE_MODE_SET); 3066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET); 3076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, nfcee_id); 3086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, nfcee_mode); 3096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 311d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna return (NCI_STATUS_OK); 312d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna} 313d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna 314d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna/******************************************************************************* 315d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** 316d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** Function nci_snd_iso_dep_nak_presence_check_cmd 317d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** 318d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** Description compose and send RF Management presence check ISO-DEP NAK 319d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** command. 320d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** 321d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** 322d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** Returns status 323d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna** 324d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna*******************************************************************************/ 325d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khannauint8_t nci_snd_iso_dep_nak_presence_check_cmd() { 326d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna NFC_HDR* p; 327d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna uint8_t* pp; 328d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna 329d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna if ((p = NCI_GET_CMD_BUF(0)) == NULL) return (NCI_STATUS_FAILED); 330d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna 331d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna p->event = BT_EVT_TO_NFC_NCI; 332d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna p->offset = NCI_MSG_OFFSET_SIZE; 333d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna p->len = NCI_MSG_HDR_SIZE + 0; 334d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna p->layer_specific = 0; 335d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna pp = (uint8_t*)(p + 1) + p->offset; 336d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna 337d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 338d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_ISO_DEP_NAK_PRESENCE); 339d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna UINT8_TO_STREAM(pp, 0x00); 340d09d4bf1d5335cba9858a1e526ed095dcdb76676Love Khanna nfc_ncif_send_cmd(p); 3416fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_discover_cmd 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 350552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description compose and send RF Management DISCOVER command to command 351552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** queue 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_discover_cmd(uint8_t num, tNCI_DISCOVER_PARAMS* p_param) { 3576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 3586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t *pp, *p_size, *p_start; 3596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int xx; 3606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int size; 3616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi size = num * sizeof(tNCI_DISCOVER_PARAMS) + 1; 3630c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(size); 3640c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 3656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 3676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 3686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 3696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 3706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 3726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_DISCOVER); 3736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_size = pp; 3746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp++; 3756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_start = pp; 3766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, num); 3776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < num; xx++) { 3786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, p_param[xx].type); 3796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, p_param[xx].frequency); 3806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 3816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *p_size = (uint8_t)(pp - p_start); 3826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + *p_size; 3836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 3846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 3856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_discover_select_cmd 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management DISCOVER SELECT command 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 3986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_discover_select_cmd(uint8_t rf_disc_id, uint8_t protocol, 3996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t rf_interface) { 4006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 4016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 4026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4030c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(NCI_DISCOVER_PARAM_SIZE_SELECT); 4040c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 4056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4066fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 4076fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_DISCOVER_PARAM_SIZE_SELECT; 4086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 4096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 4106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 4116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 4136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_DISCOVER_SELECT); 4146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, NCI_DISCOVER_PARAM_SIZE_SELECT); 4156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, rf_disc_id); 4166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, protocol); 4176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, rf_interface); 4186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 4206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 421e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_deactivate_cmd 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management DEACTIVATE command 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4336fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_deactivate_cmd(uint8_t de_act_type) { 4346fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 4356fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4376fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_cb.reassembly = true; 438a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 4390c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(NCI_DISCOVER_PARAM_SIZE_DEACT); 4400c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4426fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 4436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_DISCOVER_PARAM_SIZE_DEACT; 4446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 4456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 4466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4486fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 4496fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_DEACTIVATE); 4506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, NCI_DISCOVER_PARAM_SIZE_DEACT); 4516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, de_act_type); 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 4536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 4546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 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 nci_snd_discover_map_cmd 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management DISCOVER MAP command 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 4676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_discover_map_cmd(uint8_t num, tNCI_DISCOVER_MAPS* p_maps) { 4686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 4696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t *pp, *p_size, *p_start; 4706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int xx; 4716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi int size; 4726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi size = num * sizeof(tNCI_DISCOVER_MAPS) + 1; 4746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4750c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(size); 4760c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 4776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 4796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 4806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 4816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 4826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 4836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 4846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_DISCOVER_MAP); 4856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_size = pp; 4866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp++; 4876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p_start = pp; 4886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, num); 4896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi for (xx = 0; xx < num; xx++) { 4906fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, p_maps[xx].protocol); 4916fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, p_maps[xx].mode); 4926fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, p_maps[xx].intf_type); 4936fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 4946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi *p_size = (uint8_t)(pp - p_start); 4956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + *p_size; 4966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 4976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_t3t_polling 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management T3T POLLING command 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_t3t_polling(uint16_t system_code, uint8_t rc, uint8_t tsn) { 5106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 5116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 5126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5130c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(NCI_RF_PARAM_SIZE_T3T_POLLING); 5140c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 5156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 5176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + NCI_RF_PARAM_SIZE_T3T_POLLING; 5186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 5196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 5206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 5216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 5236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_T3T_POLLING); 5246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, NCI_RF_PARAM_SIZE_T3T_POLLING); 5256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT16_TO_BE_STREAM(pp, system_code); 5266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, rc); 5276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, tsn); 5286fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5296fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 5306fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_parameter_update_cmd 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management RF Communication Parameter 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Update commandto command queue 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5436fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_parameter_update_cmd(uint8_t* p_param_tlvs, uint8_t tlv_size) { 5446fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 5456fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 5466fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t num = 0, ulen, len, *pt; 5476fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5480c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(tlv_size + 1); 5490c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 5506fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5516fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 5526fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + tlv_size + 1; 5536fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 5546fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 5556fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 5566fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 5576fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_PARAMETER_UPDATE); 5586fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, (uint8_t)(tlv_size + 1)); 5596fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi len = tlv_size; 5606fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pt = p_param_tlvs; 5616fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi while (len > 1) { 5626fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi len -= 2; 5636fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pt++; 5646fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi num++; 5656fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ulen = *pt++; 5666fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pt += ulen; 5676fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (len >= ulen) { 5686fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi len -= ulen; 5696fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 5706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi GKI_freebuf(p); 5716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return NCI_STATUS_FAILED; 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 5736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5756fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, num); 5766fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ARRAY_TO_STREAM(pp, p_param_tlvs, tlv_size); 5776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 5796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE) 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 585e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_set_routing_cmd 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 588552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description compose and send RF Management SET_LISTEN_MODE_ROUTING 589552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** command to command queue 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5946fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_set_routing_cmd(bool more, uint8_t num_tlv, uint8_t tlv_size, 5956fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* p_param_tlvs) { 5966fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 5976fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 5986fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t size = tlv_size + 2; 5996fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6006fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (tlv_size == 0) { 6016fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi /* just to terminate routing table 6026fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi * 2 bytes (more=FALSE and num routing entries=0) */ 6036fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi size = 2; 6046fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6056fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6060c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(size); 6070c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 6086fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6096fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 6106fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 6116fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + size; 6126fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 6136fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 6146fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6156fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 6166fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_SET_ROUTING); 6176fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, size); 6186fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, more); 6196fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi if (size == 2) { 6206fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, 0); 6216fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } else { 6226fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, num_tlv); 6236fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi ARRAY_TO_STREAM(pp, p_param_tlvs, tlv_size); 6246fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi } 6256fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 6266fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6276fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 6295e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna/******************************************************************************* 6305e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 6315e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Function nci_snd_set_power_sub_state_cmd 6325e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 6335e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Description compose and send core CORE_SET_POWER_SUB_STATE command 6345e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** to command queue 6355e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 6365e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** Returns status 6375e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna** 6385e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna*******************************************************************************/ 6395e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khannauint8_t nci_snd_core_set_power_sub_state(uint8_t screen_state) { 6405e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna NFC_HDR* p = NCI_GET_CMD_BUF(NCI_CORE_PARAM_SIZE_SET_POWER_SUB_STATE); 6415e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna uint8_t* pp; 6425e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 6435e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna if (p == NULL) return (NCI_STATUS_FAILED); 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 6455e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna p->event = BT_EVT_TO_NFC_NCI; 6465e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna p->offset = NCI_MSG_OFFSET_SIZE; 6475e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_SET_POWER_SUB_STATE; 6485e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna p->layer_specific = 0; 6495e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna pp = (uint8_t*)(p + 1) + p->offset; 6505e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 6515e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_CORE); 6525e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna NCI_MSG_BLD_HDR1(pp, NCI_MSG_CORE_SET_POWER_SUB_STATE); 6535e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna UINT8_TO_STREAM(pp, NCI_CORE_PARAM_SIZE_SET_POWER_SUB_STATE); 6545e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna UINT8_TO_STREAM(pp, screen_state); 6555e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 6565e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna nfc_ncif_send_cmd(p); 6575e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna 6585e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna return (NCI_STATUS_OK); 6595e4b4d7eb1ce345c12131ca948f31e1b7b9e0256Love Khanna} 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 662e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_get_routing_cmd 663e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 664552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** Description compose and send RF Management GET_LISTEN_MODE_ROUTING 665552f2b745deddd35d9b75da9c9c09bd2f3f573a8Ruchi Kandoi** command to command queue 666e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 667e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 668e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 669e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 6706fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoiuint8_t nci_snd_get_routing_cmd(void) { 6716fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NFC_HDR* p; 6726fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t* pp; 6736fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi uint8_t param_size = 0; 6746fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6750c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi p = NCI_GET_CMD_BUF(param_size); 6760c515ae1d2edf9202878a7ac7bcbf195333643e5Ruchi Kandoi if (p == NULL) return (NCI_STATUS_FAILED); 6776fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6786fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->event = BT_EVT_TO_NFC_NCI; 6796fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->len = NCI_MSG_HDR_SIZE + param_size; 6806fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->offset = NCI_MSG_OFFSET_SIZE; 6816fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi p->layer_specific = 0; 6826fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi pp = (uint8_t*)(p + 1) + p->offset; 6836fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6846fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR0(pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 6856fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi NCI_MSG_BLD_HDR1(pp, NCI_MSG_RF_GET_ROUTING); 6866fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi UINT8_TO_STREAM(pp, param_size); 6876fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi 6886fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi nfc_ncif_send_cmd(p); 6896fca02d5010de7bd31d83b853c32138021da5f29Ruchi Kandoi return (NCI_STATUS_OK); 690e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 691e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 692e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 693