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