1b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/****************************************************************************** 2b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 3b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Copyright (C) 2010-2012 Broadcom Corporation 4b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 5b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Licensed under the Apache License, Version 2.0 (the "License"); 6b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * you may not use this file except in compliance with the License. 7b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * You may obtain a copy of the License at: 8b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 9b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * http://www.apache.org/licenses/LICENSE-2.0 10b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 11b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * Unless required by applicable law or agreed to in writing, software 12b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * distributed under the License is distributed on an "AS IS" BASIS, 13b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * See the License for the specific language governing permissions and 15b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * limitations under the License. 16b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 17b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/ 18b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu 19b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu/****************************************************************************** 20b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 21b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * This file contains function of the NCI unit to format and send NCI 22b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * commands (for DH). 23b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu * 24b58ba0e89a3767e6174c42d3e90540d1eae10f81Evan Chu ******************************************************************************/ 2545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include <string.h> 2645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfc_target.h" 2745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 2845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if NFC_INCLUDED == TRUE 2945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nci_defs.h" 3045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nci_hmsgs.h" 3145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfc_api.h" 3245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#include "nfc_int.h" 3345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 3445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 3545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 3645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_core_reset 3745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 3845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send CORE RESET command to command queue 3945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 4145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 4245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 4345faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_core_reset (UINT8 reset_type) 4445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 4545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 4645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 4745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 48ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_RESET)) == NULL) 4945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 5045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 5145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 5245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_RESET; 5345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 5445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 55ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 5645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 57ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 58ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_RESET); 5945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_RESET); 6045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, reset_type); 6145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 6245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 6345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 6445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 6545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 6645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 6745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 6845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_core_init 6945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send CORE INIT command to command queue 7145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 7345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 7445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 7545faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_core_init (void) 7645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 7745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 7845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 7945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 80ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_INIT)) == NULL) 8145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 8245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 8345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 8445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_INIT; 8545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 8645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 87ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 8845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 89ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 90ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_INIT); 9145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_INIT); 9245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 9345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 9445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 9545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 9645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 9745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 9845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 9945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_core_get_config 10045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 10145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send CORE GET_CONFIG command to command queue 10245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 10345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 10445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 10545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 10645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_core_get_config (UINT8 *param_ids, UINT8 num_ids) 10745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 10845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 10945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 11045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 111ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (num_ids)) == NULL) 11245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 11345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 11445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 11545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + num_ids + 1; 11645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 11745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 118ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 11945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 120ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 121ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_GET_CONFIG); 122ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu UINT8_TO_STREAM (pp, (UINT8) (num_ids + 1)); 12345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, num_ids); 12445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ARRAY_TO_STREAM (pp, param_ids, num_ids); 12545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 12645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 12745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 12845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 12945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 13045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 13145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_core_set_config 13345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send CORE SET_CONFIG command to command queue 13545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 13745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 13845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 13945faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_core_set_config (UINT8 *p_param_tlvs, UINT8 tlv_size) 14045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 14145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 14245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 14345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 num = 0, ulen, len, *pt; 14445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 145ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (tlv_size + 1)) == NULL) 14645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 14745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 14845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 14945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + tlv_size + 1; 15045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 151ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 15245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 153ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 154ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_SET_CONFIG); 155ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu UINT8_TO_STREAM (pp, (UINT8) (tlv_size + 1)); 15645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu len = tlv_size; 15745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pt = p_param_tlvs; 15845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu while (len > 1) 15945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 16045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu len -= 2; 16145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pt++; 16245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu num++; 16345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ulen = *pt++; 16445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pt += ulen; 16545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (len >= ulen) 16645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 16745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu len -= ulen; 16845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 16945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 17045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 17145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_freebuf (p); 17245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return NCI_STATUS_FAILED; 17345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 17445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 17545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 17645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, num); 17745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 17845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 17945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 18045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 18145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 18245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 18345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 18445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_core_conn_create 18645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send CORE CONN_CREATE command to command queue 18845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 18945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 19045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 19145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 19245faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_core_conn_create (UINT8 dest_type, UINT8 num_tlv, UINT8 tlv_size, UINT8 *p_param_tlvs) 19345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 19445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 19545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 19645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 size = NCI_CORE_PARAM_SIZE_CON_CREATE+tlv_size; 19745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 198ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (size)) == NULL) 19945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 20045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 20145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 20245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_CON_CREATE; 20345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 20445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 205ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 20645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 207ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 208ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_CONN_CREATE); 20945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, size); 21045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, dest_type); 21145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, num_tlv); 21245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (tlv_size) 21345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 21445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 21545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len += tlv_size; 21645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 21745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 21845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 21945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 22045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 22145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 22245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 22345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_core_conn_close 22545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send CORE CONN_CLOSE command to command queue 22745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 22845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 22945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 23045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 23145faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_core_conn_close (UINT8 conn_id) 23245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 23345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 23445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 23545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 236ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_CON_CLOSE)) == NULL) 23745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 23845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 23945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 24045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_CON_CLOSE; 24145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 24245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 243ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 24445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 245ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_CORE); 246ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_CORE_CONN_CLOSE); 24745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_CON_CLOSE); 24845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, conn_id); 24945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 25045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 25145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 25245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 25345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 25445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 25545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if (NFC_NFCEE_INCLUDED == TRUE) 25645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if (NFC_RW_ONLY == FALSE) 25745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 25845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 25945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_nfcee_discover 26045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 26145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send NFCEE Management NFCEE_DISCOVER command 26245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 26345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 26445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 26545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 26645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 26745faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_nfcee_discover (UINT8 discover_action) 26845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 26945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 27045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 27145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 272ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_PARAM_SIZE_DISCOVER_NFCEE)) == NULL) 27345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 27445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 27545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 27645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_PARAM_SIZE_DISCOVER_NFCEE; 27745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 27845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 279ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 28045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 281ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_EE_MANAGE); 282ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_NFCEE_DISCOVER); 28345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_PARAM_SIZE_DISCOVER_NFCEE); 28445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, discover_action); 28545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 28645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 28745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 28845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 28945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 29045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 29145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 29245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_nfcee_mode_set 29345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 29445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send NFCEE Management NFCEE MODE SET command 29545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 29645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 29745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 29845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 29945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 30045faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_nfcee_mode_set (UINT8 nfcee_id, UINT8 nfcee_mode) 30145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 30245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 30345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 30445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 305ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET)) == NULL) 30645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 30745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 30845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 30945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET; 31045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 31145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 312ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 31345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 314ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_EE_MANAGE); 315ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_NFCEE_MODE_SET); 31645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_CORE_PARAM_SIZE_NFCEE_MODE_SET); 31745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, nfcee_id); 31845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, nfcee_mode); 31945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 32045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 32145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 32245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 32345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 32445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 32545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 32645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 32745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 32845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_discover_cmd 32945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 33045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management DISCOVER command to command queue 331e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 33245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 33345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 33445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 33545faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_discover_cmd (UINT8 num, tNCI_DISCOVER_PARAMS *p_param) 33645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 33745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 33845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp, *p_size, *p_start; 33945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int xx; 34045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int size; 34145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 342ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu size = num * sizeof (tNCI_DISCOVER_PARAMS) + 1; 343ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (size)) == NULL) 34445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 34545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 34645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 34745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 34845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 349ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 35045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 351ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 352ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DISCOVER); 35345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p_size = pp; 35445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pp++; 35545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p_start = pp; 35645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, num); 35745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu for (xx=0; xx<num; xx++) 35845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 35945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, p_param[xx].type); 36045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, p_param[xx].frequency); 36145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 362ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu *p_size = (UINT8) (pp - p_start); 36345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + *p_size; 36445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 36545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 36645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 36745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 36845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 36945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 37045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 37145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_discover_select_cmd 37245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 37345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management DISCOVER SELECT command 37445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 375e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 37645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 37745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 37845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 37945faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_discover_select_cmd (UINT8 rf_disc_id, UINT8 protocol, UINT8 rf_interface) 38045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 38145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 38245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 38345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 384ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_DISCOVER_PARAM_SIZE_SELECT)) == NULL) 38545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 38645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 38745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 38845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_DISCOVER_PARAM_SIZE_SELECT; 38945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 39045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 391ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 39245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 393ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 394ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DISCOVER_SELECT); 39545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_DISCOVER_PARAM_SIZE_SELECT); 39645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, rf_disc_id); 39745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, protocol); 39845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, rf_interface); 39945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 40045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 40145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 40245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 40345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 40445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 40545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 40645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_deactivate_cmd 40745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 40845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management DEACTIVATE command 40945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 410e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 41145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 41245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 41345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 41445faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_deactivate_cmd (UINT8 de_act_type ) 41545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 41645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 41745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 41845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 419ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_DISCOVER_PARAM_SIZE_DEACT)) == NULL) 42045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 42145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 42245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 42345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_DISCOVER_PARAM_SIZE_DEACT; 42445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 42545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 426ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 42745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 428ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 429ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DEACTIVATE); 43045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_DISCOVER_PARAM_SIZE_DEACT); 43145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, de_act_type); 43245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 43345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 43445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 43545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 43645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 43745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 43845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 43945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_discover_map_cmd 44045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 44145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management DISCOVER MAP command 44245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 443e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 44445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 44545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 44645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 44745faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_discover_map_cmd (UINT8 num, tNCI_DISCOVER_MAPS *p_maps) 44845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 44945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 45045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp, *p_size, *p_start; 45145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int xx; 45245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu int size; 45345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 454ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu size = num * sizeof (tNCI_DISCOVER_MAPS) + 1; 45545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 456ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (size)) == NULL) 45745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 45845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 45945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 46045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 46145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 462ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 46345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 464ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 465ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_DISCOVER_MAP); 46645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p_size = pp; 46745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pp++; 46845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p_start = pp; 46945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, num); 470ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu for (xx = 0; xx < num; xx++) 47145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 47245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, p_maps[xx].protocol); 47345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, p_maps[xx].mode); 47445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, p_maps[xx].intf_type); 47545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 476ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu *p_size = (UINT8) (pp - p_start); 47745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + *p_size; 47845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 47945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 48045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 48145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 48245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 48345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_t3t_polling 48445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 48545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management T3T POLLING command 48645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 487e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 48845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 48945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 49045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 49145faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_t3t_polling (UINT16 system_code, UINT8 rc, UINT8 tsn) 49245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 49345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 49445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 49545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 496ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (NCI_RF_PARAM_SIZE_T3T_POLLING)) == NULL) 49745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 49845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 49945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 50045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + NCI_RF_PARAM_SIZE_T3T_POLLING; 50145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 50245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 503ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 50445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 505ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 506ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_T3T_POLLING); 50745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, NCI_RF_PARAM_SIZE_T3T_POLLING); 50845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT16_TO_BE_STREAM (pp, system_code); 50945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, rc); 51045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, tsn); 51145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 51245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 51345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 51445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 51545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 51645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 51745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 51845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_parameter_update_cmd 51945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 52045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management RF Communication Parameter 52145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Update commandto command queue 522e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 52345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 52445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 52545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 52645faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_parameter_update_cmd (UINT8 *p_param_tlvs, UINT8 tlv_size) 52745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 52845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 52945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 53045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 num = 0, ulen, len, *pt; 53145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 532ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (tlv_size + 1)) == NULL) 53345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 53445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 53545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 53645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + tlv_size + 1; 53745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 538ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 53945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 540ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 541ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_PARAMETER_UPDATE); 542ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu UINT8_TO_STREAM (pp, (UINT8) (tlv_size + 1)); 54345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu len = tlv_size; 54445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pt = p_param_tlvs; 54545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu while (len > 1) 54645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 54745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu len -= 2; 54845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pt++; 54945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu num++; 55045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ulen = *pt++; 55145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu pt += ulen; 55245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (len >= ulen) 55345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 55445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu len -= ulen; 55545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 55645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 55745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 55845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu GKI_freebuf (p); 55945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return NCI_STATUS_FAILED; 56045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 56145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 56245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 56345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, num); 56445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 56545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 56645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 56745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 56845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 56945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 57045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if (NFC_NFCEE_INCLUDED == TRUE) 57145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#if (NFC_RW_ONLY == FALSE) 57245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 57345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 57445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_set_routing_cmd 57545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 57645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management SET_LISTEN_MODE_ROUTING command 57745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 578e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 57945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 58045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 58145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 58245faad0ff5deeb0c676356345d99398cc4ab695aEvan ChuUINT8 nci_snd_set_routing_cmd (BOOLEAN more, UINT8 target_handle, UINT8 num_tlv, UINT8 tlv_size, UINT8 *p_param_tlvs) 58345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 58445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 58545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 58645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 size = tlv_size + 2; 58745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 58845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (tlv_size == 0) 58945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 59045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu /* just to terminate routing table 59145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu * 2 bytes (more=FALSE and num routing entries=0) */ 59245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu size = 2; 59345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 59445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 59545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if ((p = NCI_GET_CMD_BUF(size)) == NULL) 59645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 59745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 59845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 59945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 60045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + size; 60145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 602ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 60345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 604ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 605ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_SET_ROUTING); 60645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, size); 60745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, more); 60845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu if (size == 2) 60945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 61045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, 0); 61145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 61245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu else 61345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu { 61445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, num_tlv); 61545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu ARRAY_TO_STREAM (pp, p_param_tlvs, tlv_size); 61645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu } 61745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 61845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 61945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 62045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 62145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 62245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu/******************************************************************************* 62345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 62445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Function nci_snd_get_routing_cmd 62545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 62645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Description compose and send RF Management GET_LISTEN_MODE_ROUTING command 62745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** to command queue 628e29968cf3e053557a9c2efc5a7a42d0767c51d9dEvan Chu** 62945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** Returns status 63045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu** 63145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu*******************************************************************************/ 632ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan ChuUINT8 nci_snd_get_routing_cmd (void) 63345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu{ 63445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu BT_HDR *p; 63545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 *pp; 63645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8 param_size = 0; 63745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 638ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu if ((p = NCI_GET_CMD_BUF (param_size)) == NULL) 63945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_FAILED); 64045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 64145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->event = BT_EVT_TO_NFC_NCI; 64245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->len = NCI_MSG_HDR_SIZE + param_size; 64345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->offset = NCI_MSG_OFFSET_SIZE; 64445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu p->layer_specific = 0; 645ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu pp = (UINT8 *) (p + 1) + p->offset; 64645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 647ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR0 (pp, NCI_MT_CMD, NCI_GID_RF_MANAGE); 648ad483f6fa0128f07fd2187bb9c46c2e3f7728cc5Evan Chu NCI_MSG_BLD_HDR1 (pp, NCI_MSG_RF_GET_ROUTING); 64945faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu UINT8_TO_STREAM (pp, param_size); 65045faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 65145faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu nfc_ncif_send_cmd (p); 65245faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu return (NCI_STATUS_OK); 65345faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu} 65445faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 65545faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif 65645faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 65745faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu 65845faad0ff5deeb0c676356345d99398cc4ab695aEvan Chu#endif /* NFC_INCLUDED == TRUE*/ 659