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