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