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