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