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