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 195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen 20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/****************************************************************************** 21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * This file contains function of the NCI unit to format and send NCI 23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * commands (for DH). 24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ******************************************************************************/ 26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include <string.h> 27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_target.h" 28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if NFC_INCLUDED == TRUE 30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_defs.h" 31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nci_hmsgs.h" 32e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_api.h" 33e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#include "nfc_int.h" 34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_reset 38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE RESET command to command queue 40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_core_reset (UINT8 reset_type) 45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_RESET)) == NULL) 50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET; 54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_RESET); 60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_RESET); 61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, reset_type); 62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_init 70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE INIT command to command queue 72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_core_init (void) 77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_INIT)) == NULL) 82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_INIT; 86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_INIT); 92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_INIT); 93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 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*******************************************************************************/ 107e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_core_get_config (UINT8 *param_ids, UINT8 num_ids) 108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (num_ids)) == NULL) 113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + num_ids + 1; 117e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 118e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 119e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 121e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 122e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_GET_CONFIG); 123e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, (UINT8) (num_ids + 1)); 124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, num_ids); 125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (pp, param_ids, num_ids); 126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 128e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 129e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 130e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_set_config 134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE SET_CONFIG command to command queue 136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_core_set_config (UINT8 *p_param_tlvs, UINT8 tlv_size) 141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num = 0, ulen, len, *pt; 145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (tlv_size + 1)) == NULL) 147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + tlv_size + 1; 151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_SET_CONFIG); 156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, (UINT8) (tlv_size + 1)); 157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = tlv_size; 158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pt = p_param_tlvs; 159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project while (len > 1) 160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len -= 2; 162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pt++; 163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num++; 164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ulen = *pt++; 165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pt += ulen; 166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (len >= ulen) 167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len -= ulen; 169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p); 173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NCI_STATUS_FAILED; 174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, num); 178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_conn_create 187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE CONN_CREATE command to command queue 189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_core_conn_create (UINT8 dest_type, UINT8 num_tlv, UINT8 tlv_size, UINT8 *p_param_tlvs) 194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 size = NCI_CORE_PARAM_SIZE_CON_CREATE+tlv_size; 198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (size)) == NULL) 200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_CON_CREATE; 204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_CONN_CREATE); 210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, size); 211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, dest_type); 212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, num_tlv); 213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tlv_size) 214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len += tlv_size; 217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_core_conn_close 226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send CORE CONN_CLOSE command to command queue 228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_core_conn_close (UINT8 conn_id) 233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_CON_CLOSE)) == NULL) 238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_CON_CLOSE; 242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_CONN_CLOSE); 248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_CON_CLOSE); 249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, conn_id); 250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE) 258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_nfcee_discover 261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send NFCEE Management NFCEE_DISCOVER command 263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_nfcee_discover (UINT8 discover_action) 269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 271e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 272e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 273e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_PARAM_SIZE_DISCOVER_NFCEE)) == NULL) 274e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 275e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 276e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 277e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_PARAM_SIZE_DISCOVER_NFCEE; 278e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 279e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 280e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 281e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 282e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_EE_MANAGE); 283e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_NFCEE_DISCOVER); 284e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_PARAM_SIZE_DISCOVER_NFCEE); 285e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, discover_action); 286e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 287e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 288e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 289e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 290e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 291e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 292e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 293e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_nfcee_mode_set 294e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 295e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send NFCEE Management NFCEE MODE SET command 296e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 297e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 298e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 299e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 300e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 301e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_nfcee_mode_set (UINT8 nfcee_id, UINT8 nfcee_mode) 302e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 303e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 304e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 305e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 306e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET)) == NULL) 307e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 308e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 309e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 310e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET; 311e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 312e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 313e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 314e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 315e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_EE_MANAGE); 316e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_NFCEE_MODE_SET); 317e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET); 318e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, nfcee_id); 319e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, nfcee_mode); 320e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 321e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 322e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 323e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 324e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 325e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 326e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 327e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 328e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 329e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_discover_cmd 330e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 331e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management DISCOVER command to command queue 332e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 333e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 334e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 335e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 336e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_discover_cmd (UINT8 num, tNCI_DISCOVER_PARAMS *p_param) 337e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 338e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 339e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, *p_size, *p_start; 340e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 341e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int size; 342e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 343e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project size = num * sizeof (tNCI_DISCOVER_PARAMS) + 1; 344e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (size)) == NULL) 345e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 346e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 347e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 348e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 349e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 350e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 351e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 352e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 353e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DISCOVER); 354e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_size = pp; 355e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp++; 356e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_start = pp; 357e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, num); 358e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx=0; xx<num; xx++) 359e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 360e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, p_param[xx].type); 361e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, p_param[xx].frequency); 362e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 363e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *p_size = (UINT8) (pp - p_start); 364e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + *p_size; 365e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 366e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 367e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 368e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 369e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 370e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 371e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 372e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_discover_select_cmd 373e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 374e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management DISCOVER SELECT command 375e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 376e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 377e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 378e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 379e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 380e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_discover_select_cmd (UINT8 rf_disc_id, UINT8 protocol, UINT8 rf_interface) 381e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 382e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 383e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 384e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 385e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_DISCOVER_PARAM_SIZE_SELECT)) == NULL) 386e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 387e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 388e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 389e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_DISCOVER_PARAM_SIZE_SELECT; 390e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 391e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 392e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 393e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 394e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 395e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DISCOVER_SELECT); 396e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_DISCOVER_PARAM_SIZE_SELECT); 397e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, rf_disc_id); 398e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, protocol); 399e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, rf_interface); 400e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 401e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 402e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 403e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 404e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 405e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 406e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 407e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_deactivate_cmd 408e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 409e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management DEACTIVATE command 410e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 411e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 412e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 413e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 414e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 415e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_deactivate_cmd (UINT8 de_act_type ) 416e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 417e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 418e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 419e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 420a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu nfc_cb.reassembly = TRUE; 421a24be4f06674b2707b57904deaa0dff5a95823bdEvan Chu 422e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_DISCOVER_PARAM_SIZE_DEACT)) == NULL) 423e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 424e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 425e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 426e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_DISCOVER_PARAM_SIZE_DEACT; 427e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 428e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 429e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 430e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 431e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 432e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DEACTIVATE); 433e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_DISCOVER_PARAM_SIZE_DEACT); 434e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, de_act_type); 435e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 436e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 437e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 438e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 439e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 440e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 441e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 442e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_discover_map_cmd 443e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 444e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management DISCOVER MAP command 445e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 446e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 447e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 448e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 449e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 450e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_discover_map_cmd (UINT8 num, tNCI_DISCOVER_MAPS *p_maps) 451e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 452e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 453e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp, *p_size, *p_start; 454e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int xx; 455e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project int size; 456e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 457e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project size = num * sizeof (tNCI_DISCOVER_MAPS) + 1; 458e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 459e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (size)) == NULL) 460e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 461e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 462e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 463e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 464e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 465e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 466e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 467e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 468e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DISCOVER_MAP); 469e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_size = pp; 470e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp++; 471e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p_start = pp; 472e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, num); 473e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project for (xx = 0; xx < num; xx++) 474e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 475e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, p_maps[xx].protocol); 476e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, p_maps[xx].mode); 477e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, p_maps[xx].intf_type); 478e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 479e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project *p_size = (UINT8) (pp - p_start); 480e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + *p_size; 481e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 482e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 483e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 484e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 485e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 486e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_t3t_polling 487e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 488e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management T3T POLLING command 489e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 490e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 491e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 492e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 493e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 494e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_t3t_polling (UINT16 system_code, UINT8 rc, UINT8 tsn) 495e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 496e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 497e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 498e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 499e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (NCI_RF_PARAM_SIZE_T3T_POLLING)) == NULL) 500e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 501e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 502e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 503e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + NCI_RF_PARAM_SIZE_T3T_POLLING; 504e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 505e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 506e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 507e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 508e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 509e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_T3T_POLLING); 510e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, NCI_RF_PARAM_SIZE_T3T_POLLING); 511e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT16_TO_BE_STREAM (pp, system_code); 512e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, rc); 513e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, tsn); 514e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 515e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 516e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 517e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 518e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 519e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 520e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 521e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_parameter_update_cmd 522e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 523e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management RF Communication Parameter 524e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Update commandto command queue 525e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 526e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 527e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 528e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 529e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_parameter_update_cmd (UINT8 *p_param_tlvs, UINT8 tlv_size) 530e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 531e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 532e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 533e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 num = 0, ulen, len, *pt; 534e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 535e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (tlv_size + 1)) == NULL) 536e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 537e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 538e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 539e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + tlv_size + 1; 540e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 541e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 542e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 543e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 544e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_PARAMETER_UPDATE); 545e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, (UINT8) (tlv_size + 1)); 546e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len = tlv_size; 547e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pt = p_param_tlvs; 548e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project while (len > 1) 549e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 550e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len -= 2; 551e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pt++; 552e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project num++; 553e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ulen = *pt++; 554e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pt += ulen; 555e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (len >= ulen) 556e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 557e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project len -= ulen; 558e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 559e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 560e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 561e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project GKI_freebuf (p); 562e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return NCI_STATUS_FAILED; 563e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 564e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 565e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 566e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, num); 567e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 568e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 569e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 570e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 571e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 572e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 573e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_NFCEE_INCLUDED == TRUE) 574e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#if (NFC_RW_ONLY == FALSE) 575e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 576e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 577e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_set_routing_cmd 578e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 579e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management SET_LISTEN_MODE_ROUTING command 580e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 581e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 582e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 583e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 584e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 5857b9f7f66cd23c68558a36c80b8fe1b24e6616ee2Sherry SmithUINT8 nci_snd_set_routing_cmd (BOOLEAN more, UINT8 num_tlv, UINT8 tlv_size, UINT8 *p_param_tlvs) 586e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 587e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 588e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 589e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 size = tlv_size + 2; 590e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 591e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (tlv_size == 0) 592e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 593e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project /* just to terminate routing table 594e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project * 2 bytes (more=FALSE and num routing entries=0) */ 595e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project size = 2; 596e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 597e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 598e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF(size)) == NULL) 599e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 600e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 601e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 602e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 603e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + size; 604e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 605e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 606e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 607e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 608e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_SET_ROUTING); 609e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, size); 610e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, more); 611e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if (size == 2) 612e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 613e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, 0); 614e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 615e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project else 616e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project { 617e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, num_tlv); 618e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 619e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project } 620e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 621e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 622e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 623e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 624e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 625e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/******************************************************************************* 626e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 627e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Function nci_snd_get_routing_cmd 628e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 629e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Description compose and send RF Management GET_LISTEN_MODE_ROUTING command 630e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** to command queue 631e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 632e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** Returns status 633e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project** 634e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project*******************************************************************************/ 635e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectUINT8 nci_snd_get_routing_cmd (void) 636e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 637e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project BT_HDR *p; 638e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 *pp; 639e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8 param_size = 0; 640e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 641e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project if ((p = NCI_GET_CMD_BUF (param_size)) == NULL) 642e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_FAILED); 643e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 644e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->event = BT_EVT_TO_NFC_NCI; 645e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->len = NCI_MSG_HDR_SIZE + param_size; 646e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->offset = NCI_MSG_OFFSET_SIZE; 647e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project p->layer_specific = 0; 648e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project pp = (UINT8 *) (p + 1) + p->offset; 649e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 650e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 651e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_GET_ROUTING); 652e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project UINT8_TO_STREAM (pp, param_size); 653e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 654e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project nfc_ncif_send_cmd (p); 655e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project return (NCI_STATUS_OK); 656e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project} 657e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 658e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif 659e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 660e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project 661e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#endif /* NFC_INCLUDED == TRUE*/ 662