1*7eba2f3bSAndroid Build Coastguard Worker // Copyright 2021, The Android Open Source Project 2*7eba2f3bSAndroid Build Coastguard Worker // 3*7eba2f3bSAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*7eba2f3bSAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*7eba2f3bSAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*7eba2f3bSAndroid Build Coastguard Worker // 7*7eba2f3bSAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*7eba2f3bSAndroid Build Coastguard Worker // 9*7eba2f3bSAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*7eba2f3bSAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*7eba2f3bSAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*7eba2f3bSAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*7eba2f3bSAndroid Build Coastguard Worker // limitations under the License. 14*7eba2f3bSAndroid Build Coastguard Worker 15*7eba2f3bSAndroid Build Coastguard Worker //! NCI API module 16*7eba2f3bSAndroid Build Coastguard Worker 17*7eba2f3bSAndroid Build Coastguard Worker use crate::{CommandSender, LogicalConnectionsRegistry, Result}; 18*7eba2f3bSAndroid Build Coastguard Worker use bytes::Bytes; 19*7eba2f3bSAndroid Build Coastguard Worker use log::{debug, error}; 20*7eba2f3bSAndroid Build Coastguard Worker use nfc_hal::{HalEvent, HalEventRegistry, HalEventStatus}; 21*7eba2f3bSAndroid Build Coastguard Worker use nfc_packets::nci::RfMappingConfiguration; 22*7eba2f3bSAndroid Build Coastguard Worker use nfc_packets::nci::{self, CommandBuilder, DataPacket, Opcode}; 23*7eba2f3bSAndroid Build Coastguard Worker use nfc_packets::nci::{ConnCloseCommandBuilder, ConnCreateCommandBuilder}; 24*7eba2f3bSAndroid Build Coastguard Worker use nfc_packets::nci::{DestParam, DestParamTypes, DestTypes}; 25*7eba2f3bSAndroid Build Coastguard Worker use nfc_packets::nci::{FeatureEnable, PacketBoundaryFlag, ResetType}; 26*7eba2f3bSAndroid Build Coastguard Worker use nfc_packets::nci::{InitCommandBuilder, ResetCommandBuilder}; 27*7eba2f3bSAndroid Build Coastguard Worker use nfc_packets::nci::{InitResponse, ResponseChild}; 28*7eba2f3bSAndroid Build Coastguard Worker use pdl_runtime::Packet; 29*7eba2f3bSAndroid Build Coastguard Worker use tokio::sync::oneshot; 30*7eba2f3bSAndroid Build Coastguard Worker 31*7eba2f3bSAndroid Build Coastguard Worker type ConnCallback = fn(u8, u16, &[u8]); 32*7eba2f3bSAndroid Build Coastguard Worker 33*7eba2f3bSAndroid Build Coastguard Worker struct NfcData { 34*7eba2f3bSAndroid Build Coastguard Worker init_response: Option<InitResponse>, 35*7eba2f3bSAndroid Build Coastguard Worker rf_callback: Option<ConnCallback>, 36*7eba2f3bSAndroid Build Coastguard Worker hci_callback: Option<ConnCallback>, 37*7eba2f3bSAndroid Build Coastguard Worker } 38*7eba2f3bSAndroid Build Coastguard Worker 39*7eba2f3bSAndroid Build Coastguard Worker type RespCallback = fn(u16, &[u8]); 40*7eba2f3bSAndroid Build Coastguard Worker 41*7eba2f3bSAndroid Build Coastguard Worker /// NCI API object to manage static API data 42*7eba2f3bSAndroid Build Coastguard Worker pub struct NciApi { 43*7eba2f3bSAndroid Build Coastguard Worker /// Command Sender external interface 44*7eba2f3bSAndroid Build Coastguard Worker commands: Option<CommandSender>, 45*7eba2f3bSAndroid Build Coastguard Worker /// Interface to Logical Connections Registry 46*7eba2f3bSAndroid Build Coastguard Worker connections: Option<LogicalConnectionsRegistry>, 47*7eba2f3bSAndroid Build Coastguard Worker /// The NFC response callback 48*7eba2f3bSAndroid Build Coastguard Worker callback: Option<RespCallback>, 49*7eba2f3bSAndroid Build Coastguard Worker /// HalEventRegistry is used to register for HAL events 50*7eba2f3bSAndroid Build Coastguard Worker hal_events: Option<HalEventRegistry>, 51*7eba2f3bSAndroid Build Coastguard Worker nfc_data: NfcData, 52*7eba2f3bSAndroid Build Coastguard Worker } 53*7eba2f3bSAndroid Build Coastguard Worker 54*7eba2f3bSAndroid Build Coastguard Worker impl NciApi { 55*7eba2f3bSAndroid Build Coastguard Worker /// NciApi constructor new() -> NciApi56*7eba2f3bSAndroid Build Coastguard Worker pub fn new() -> NciApi { 57*7eba2f3bSAndroid Build Coastguard Worker let nfc_data = NfcData { init_response: None, rf_callback: None, hci_callback: None }; 58*7eba2f3bSAndroid Build Coastguard Worker NciApi { commands: None, connections: None, callback: None, hal_events: None, nfc_data } 59*7eba2f3bSAndroid Build Coastguard Worker } 60*7eba2f3bSAndroid Build Coastguard Worker 61*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 62*7eba2f3bSAndroid Build Coastguard Worker ** 63*7eba2f3bSAndroid Build Coastguard Worker ** Function nfc_enable 64*7eba2f3bSAndroid Build Coastguard Worker ** 65*7eba2f3bSAndroid Build Coastguard Worker ** Description This function enables NFC. Prior to calling NFC_Enable: 66*7eba2f3bSAndroid Build Coastguard Worker ** - the NFCC must be powered up, and ready to receive 67*7eba2f3bSAndroid Build Coastguard Worker ** commands. 68*7eba2f3bSAndroid Build Coastguard Worker ** 69*7eba2f3bSAndroid Build Coastguard Worker ** This function opens the NCI transport (if applicable), 70*7eba2f3bSAndroid Build Coastguard Worker ** resets the NFC controller, and initializes the NFC 71*7eba2f3bSAndroid Build Coastguard Worker ** subsystems. 72*7eba2f3bSAndroid Build Coastguard Worker ** 73*7eba2f3bSAndroid Build Coastguard Worker ** When the NFC startup procedure is completed, an 74*7eba2f3bSAndroid Build Coastguard Worker ** NFC_ENABLE_REVT is returned to the application using the 75*7eba2f3bSAndroid Build Coastguard Worker ** tNFC_RESPONSE_CBACK. 76*7eba2f3bSAndroid Build Coastguard Worker ** 77*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 78*7eba2f3bSAndroid Build Coastguard Worker ** 79*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 80*7eba2f3bSAndroid Build Coastguard Worker /// extern tNFC_STATUS NFC_Enable(tNFC_RESPONSE_CBACK* p_cback); nfc_enable(&mut self, callback: RespCallback)81*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_enable(&mut self, callback: RespCallback) { 82*7eba2f3bSAndroid Build Coastguard Worker let nci = crate::init().await; 83*7eba2f3bSAndroid Build Coastguard Worker 84*7eba2f3bSAndroid Build Coastguard Worker self.commands = Some(nci.commands); 85*7eba2f3bSAndroid Build Coastguard Worker self.connections = Some(nci.connections); 86*7eba2f3bSAndroid Build Coastguard Worker self.callback = Some(callback); 87*7eba2f3bSAndroid Build Coastguard Worker self.hal_events = Some(nci.hal_events); 88*7eba2f3bSAndroid Build Coastguard Worker } 89*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 90*7eba2f3bSAndroid Build Coastguard Worker ** 91*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_Disable 92*7eba2f3bSAndroid Build Coastguard Worker ** 93*7eba2f3bSAndroid Build Coastguard Worker ** Description This function performs clean up routines for shutting down 94*7eba2f3bSAndroid Build Coastguard Worker ** NFC and closes the NCI transport (if using dedicated NCI 95*7eba2f3bSAndroid Build Coastguard Worker ** transport). 96*7eba2f3bSAndroid Build Coastguard Worker ** 97*7eba2f3bSAndroid Build Coastguard Worker ** When the NFC shutdown procedure is completed, an 98*7eba2f3bSAndroid Build Coastguard Worker ** NFC_DISABLED_REVT is returned to the application using the 99*7eba2f3bSAndroid Build Coastguard Worker ** tNFC_RESPONSE_CBACK. 100*7eba2f3bSAndroid Build Coastguard Worker ** 101*7eba2f3bSAndroid Build Coastguard Worker ** Returns nothing 102*7eba2f3bSAndroid Build Coastguard Worker ** 103*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 104*7eba2f3bSAndroid Build Coastguard Worker /// extern void NFC_Disable(void); nfc_disable(&mut self)105*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_disable(&mut self) { 106*7eba2f3bSAndroid Build Coastguard Worker let (tx, rx) = oneshot::channel::<HalEventStatus>(); 107*7eba2f3bSAndroid Build Coastguard Worker if let Some(mut event) = self.hal_events.take() { 108*7eba2f3bSAndroid Build Coastguard Worker event.register(HalEvent::CloseComplete, tx).await; 109*7eba2f3bSAndroid Build Coastguard Worker 110*7eba2f3bSAndroid Build Coastguard Worker if let Some(cmd) = self.commands.take() { 111*7eba2f3bSAndroid Build Coastguard Worker drop(cmd); 112*7eba2f3bSAndroid Build Coastguard Worker } 113*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.take() { 114*7eba2f3bSAndroid Build Coastguard Worker drop(conn); 115*7eba2f3bSAndroid Build Coastguard Worker } 116*7eba2f3bSAndroid Build Coastguard Worker let status = rx.await.unwrap(); 117*7eba2f3bSAndroid Build Coastguard Worker debug!("Shutdown complete {:?}.", status); 118*7eba2f3bSAndroid Build Coastguard Worker 119*7eba2f3bSAndroid Build Coastguard Worker if let Some(cb) = self.callback.take() { 120*7eba2f3bSAndroid Build Coastguard Worker cb(1, &[]); 121*7eba2f3bSAndroid Build Coastguard Worker } 122*7eba2f3bSAndroid Build Coastguard Worker } 123*7eba2f3bSAndroid Build Coastguard Worker } 124*7eba2f3bSAndroid Build Coastguard Worker 125*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 126*7eba2f3bSAndroid Build Coastguard Worker ** 127*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_Init 128*7eba2f3bSAndroid Build Coastguard Worker ** 129*7eba2f3bSAndroid Build Coastguard Worker ** Description This function initializes control blocks for NFC 130*7eba2f3bSAndroid Build Coastguard Worker ** 131*7eba2f3bSAndroid Build Coastguard Worker ** Returns nothing 132*7eba2f3bSAndroid Build Coastguard Worker ** 133*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 134*7eba2f3bSAndroid Build Coastguard Worker /// extern void NFC_Init(tHAL_NFC_ENTRY* p_hal_entry_tbl); nfc_init(&mut self) -> Result<()>135*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_init(&mut self) -> Result<()> { 136*7eba2f3bSAndroid Build Coastguard Worker let pbf = PacketBoundaryFlag::CompleteOrFinal; 137*7eba2f3bSAndroid Build Coastguard Worker if let Some(cmd) = self.commands.as_mut() { 138*7eba2f3bSAndroid Build Coastguard Worker let reset = cmd 139*7eba2f3bSAndroid Build Coastguard Worker .send_and_notify( 140*7eba2f3bSAndroid Build Coastguard Worker ResetCommandBuilder { gid: 0, pbf, reset_type: ResetType::ResetConfig } 141*7eba2f3bSAndroid Build Coastguard Worker .build() 142*7eba2f3bSAndroid Build Coastguard Worker .into(), 143*7eba2f3bSAndroid Build Coastguard Worker ) 144*7eba2f3bSAndroid Build Coastguard Worker .await?; 145*7eba2f3bSAndroid Build Coastguard Worker let _notification_packet = reset.notification.await?; 146*7eba2f3bSAndroid Build Coastguard Worker let init = cmd 147*7eba2f3bSAndroid Build Coastguard Worker .send( 148*7eba2f3bSAndroid Build Coastguard Worker InitCommandBuilder { gid: 0, pbf, feature_enable: FeatureEnable::Rfu } 149*7eba2f3bSAndroid Build Coastguard Worker .build() 150*7eba2f3bSAndroid Build Coastguard Worker .into(), 151*7eba2f3bSAndroid Build Coastguard Worker ) 152*7eba2f3bSAndroid Build Coastguard Worker .await?; 153*7eba2f3bSAndroid Build Coastguard Worker if let ResponseChild::InitResponse(irp) = init.specialize() { 154*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.as_mut() { 155*7eba2f3bSAndroid Build Coastguard Worker // Open static RF connection 156*7eba2f3bSAndroid Build Coastguard Worker // TODO: use channels instead of callcacks here 157*7eba2f3bSAndroid Build Coastguard Worker // the data can be tranlated to c-callback at the shim level 158*7eba2f3bSAndroid Build Coastguard Worker conn.open(0, self.nfc_data.rf_callback, 0, 0).await; 159*7eba2f3bSAndroid Build Coastguard Worker // Open static HCI connection 160*7eba2f3bSAndroid Build Coastguard Worker conn.open( 161*7eba2f3bSAndroid Build Coastguard Worker 1, /* TODO: link constants to the c header */ 162*7eba2f3bSAndroid Build Coastguard Worker self.nfc_data.hci_callback, 163*7eba2f3bSAndroid Build Coastguard Worker irp.get_max_data_payload(), 164*7eba2f3bSAndroid Build Coastguard Worker irp.get_num_of_credits(), 165*7eba2f3bSAndroid Build Coastguard Worker ) 166*7eba2f3bSAndroid Build Coastguard Worker .await; 167*7eba2f3bSAndroid Build Coastguard Worker } 168*7eba2f3bSAndroid Build Coastguard Worker self.nfc_data.init_response = Some(irp); 169*7eba2f3bSAndroid Build Coastguard Worker } 170*7eba2f3bSAndroid Build Coastguard Worker } 171*7eba2f3bSAndroid Build Coastguard Worker Ok(()) 172*7eba2f3bSAndroid Build Coastguard Worker } 173*7eba2f3bSAndroid Build Coastguard Worker 174*7eba2f3bSAndroid Build Coastguard Worker /** ***************************************************************************** 175*7eba2f3bSAndroid Build Coastguard Worker ** 176*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_GetLmrtSize 177*7eba2f3bSAndroid Build Coastguard Worker ** 178*7eba2f3bSAndroid Build Coastguard Worker ** Description Called by application wto query the Listen Mode Routing 179*7eba2f3bSAndroid Build Coastguard Worker ** Table size supported by NFCC 180*7eba2f3bSAndroid Build Coastguard Worker ** 181*7eba2f3bSAndroid Build Coastguard Worker ** Returns Listen Mode Routing Table size 182*7eba2f3bSAndroid Build Coastguard Worker ** 183*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 184*7eba2f3bSAndroid Build Coastguard Worker /// extern uint16_t NFC_GetLmrtSize(void); nfc_get_lmrt_size(&mut self) -> u16185*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_get_lmrt_size(&mut self) -> u16 { 186*7eba2f3bSAndroid Build Coastguard Worker if let Some(ir) = &self.nfc_data.init_response { 187*7eba2f3bSAndroid Build Coastguard Worker ir.get_max_rout_tbls_size() 188*7eba2f3bSAndroid Build Coastguard Worker } else { 189*7eba2f3bSAndroid Build Coastguard Worker 0 190*7eba2f3bSAndroid Build Coastguard Worker } 191*7eba2f3bSAndroid Build Coastguard Worker } 192*7eba2f3bSAndroid Build Coastguard Worker 193*7eba2f3bSAndroid Build Coastguard Worker /** ***************************************************************************** 194*7eba2f3bSAndroid Build Coastguard Worker ** 195*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_SetConfig 196*7eba2f3bSAndroid Build Coastguard Worker ** 197*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to send the configuration parameter 198*7eba2f3bSAndroid Build Coastguard Worker ** TLV to NFCC. The response from NFCC is reported by 199*7eba2f3bSAndroid Build Coastguard Worker ** tNFC_RESPONSE_CBACK as NFC_SET_CONFIG_REVT. 200*7eba2f3bSAndroid Build Coastguard Worker ** 201*7eba2f3bSAndroid Build Coastguard Worker ** Parameters tlv_size - the length of p_param_tlvs. 202*7eba2f3bSAndroid Build Coastguard Worker ** p_param_tlvs - the parameter ID/Len/Value list 203*7eba2f3bSAndroid Build Coastguard Worker ** 204*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 205*7eba2f3bSAndroid Build Coastguard Worker ** 206*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 207*7eba2f3bSAndroid Build Coastguard Worker /// extern tNFC_STATUS NFC_SetConfig(uint8_t tlv_size, uint8_t* p_param_tlvs); nfc_set_config(&mut self, param_tlvs: &[u8]) -> Result<u8>208*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_set_config(&mut self, param_tlvs: &[u8]) -> Result<u8> { 209*7eba2f3bSAndroid Build Coastguard Worker let pbf = PacketBoundaryFlag::CompleteOrFinal; 210*7eba2f3bSAndroid Build Coastguard Worker if let Some(cmd) = self.commands.as_mut() { 211*7eba2f3bSAndroid Build Coastguard Worker let raw = cmd 212*7eba2f3bSAndroid Build Coastguard Worker .send( 213*7eba2f3bSAndroid Build Coastguard Worker CommandBuilder { 214*7eba2f3bSAndroid Build Coastguard Worker gid: 0, 215*7eba2f3bSAndroid Build Coastguard Worker pbf, 216*7eba2f3bSAndroid Build Coastguard Worker op: Opcode::CoreSetConfig, 217*7eba2f3bSAndroid Build Coastguard Worker payload: Some(Bytes::copy_from_slice(param_tlvs)), 218*7eba2f3bSAndroid Build Coastguard Worker } 219*7eba2f3bSAndroid Build Coastguard Worker .build(), 220*7eba2f3bSAndroid Build Coastguard Worker ) 221*7eba2f3bSAndroid Build Coastguard Worker .await? 222*7eba2f3bSAndroid Build Coastguard Worker .encode_to_bytes()?; 223*7eba2f3bSAndroid Build Coastguard Worker if let Some(cb) = self.callback { 224*7eba2f3bSAndroid Build Coastguard Worker cb(2, &raw[3..]); 225*7eba2f3bSAndroid Build Coastguard Worker } 226*7eba2f3bSAndroid Build Coastguard Worker Ok(raw[3]) 227*7eba2f3bSAndroid Build Coastguard Worker } else { 228*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::NotInitialized as u8) 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 ** 234*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_GetConfig 235*7eba2f3bSAndroid Build Coastguard Worker ** 236*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to retrieve the parameter TLV from 237*7eba2f3bSAndroid Build Coastguard Worker ** NFCC. The response from NFCC is reported by 238*7eba2f3bSAndroid Build Coastguard Worker ** tNFC_RESPONSE_CBACK as NFC_GET_CONFIG_REVT. 239*7eba2f3bSAndroid Build Coastguard Worker ** 240*7eba2f3bSAndroid Build Coastguard Worker ** Parameters num_ids - the number of parameter IDs 241*7eba2f3bSAndroid Build Coastguard Worker ** p_param_ids - the parameter ID list. 242*7eba2f3bSAndroid Build Coastguard Worker ** 243*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 244*7eba2f3bSAndroid Build Coastguard Worker ** 245*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 246*7eba2f3bSAndroid Build Coastguard Worker /// extern tNFC_STATUS NFC_GetConfig(uint8_t num_ids, uint8_t* p_param_ids); nfc_get_config(&mut self, param_tlvs: &[u8]) -> Result<u8>247*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_get_config(&mut self, param_tlvs: &[u8]) -> Result<u8> { 248*7eba2f3bSAndroid Build Coastguard Worker let pbf = PacketBoundaryFlag::CompleteOrFinal; 249*7eba2f3bSAndroid Build Coastguard Worker if let Some(cmd) = self.commands.as_mut() { 250*7eba2f3bSAndroid Build Coastguard Worker let raw = cmd 251*7eba2f3bSAndroid Build Coastguard Worker .send( 252*7eba2f3bSAndroid Build Coastguard Worker CommandBuilder { 253*7eba2f3bSAndroid Build Coastguard Worker gid: 0, 254*7eba2f3bSAndroid Build Coastguard Worker pbf, 255*7eba2f3bSAndroid Build Coastguard Worker op: Opcode::CoreGetConfig, 256*7eba2f3bSAndroid Build Coastguard Worker payload: Some(Bytes::copy_from_slice(param_tlvs)), 257*7eba2f3bSAndroid Build Coastguard Worker } 258*7eba2f3bSAndroid Build Coastguard Worker .build(), 259*7eba2f3bSAndroid Build Coastguard Worker ) 260*7eba2f3bSAndroid Build Coastguard Worker .await? 261*7eba2f3bSAndroid Build Coastguard Worker .encode_to_bytes()?; 262*7eba2f3bSAndroid Build Coastguard Worker if let Some(cb) = self.callback { 263*7eba2f3bSAndroid Build Coastguard Worker cb(3, &raw[3..]); 264*7eba2f3bSAndroid Build Coastguard Worker } 265*7eba2f3bSAndroid Build Coastguard Worker Ok(raw[3]) 266*7eba2f3bSAndroid Build Coastguard Worker } else { 267*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::NotInitialized as u8) 268*7eba2f3bSAndroid Build Coastguard Worker } 269*7eba2f3bSAndroid Build Coastguard Worker } 270*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 271*7eba2f3bSAndroid Build Coastguard Worker ** 272*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_ConnCreate 273*7eba2f3bSAndroid Build Coastguard Worker ** 274*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to create a logical connection with 275*7eba2f3bSAndroid Build Coastguard Worker ** NFCC for data exchange. 276*7eba2f3bSAndroid Build Coastguard Worker ** The response from NFCC is reported in tNFC_CONN_CBACK 277*7eba2f3bSAndroid Build Coastguard Worker ** as NFC_CONN_CREATE_CEVT. 278*7eba2f3bSAndroid Build Coastguard Worker ** 279*7eba2f3bSAndroid Build Coastguard Worker ** Parameters dest_type - the destination type 280*7eba2f3bSAndroid Build Coastguard Worker ** id - the NFCEE ID or RF Discovery ID . 281*7eba2f3bSAndroid Build Coastguard Worker ** protocol - the protocol 282*7eba2f3bSAndroid Build Coastguard Worker ** p_cback - the data callback function to receive data from 283*7eba2f3bSAndroid Build Coastguard Worker ** NFCC 284*7eba2f3bSAndroid Build Coastguard Worker ** 285*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 286*7eba2f3bSAndroid Build Coastguard Worker ** 287*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 288*7eba2f3bSAndroid Build Coastguard Worker //extern tNFC_STATUS NFC_ConnCreate(uint8_t dest_type, uint8_t id, 289*7eba2f3bSAndroid Build Coastguard Worker // uint8_t protocol, tNFC_CONN_CBACK* p_cback); nfc_conn_create( &mut self, dest_type: u8, id: u8, protocol: u8, callback: ConnCallback, ) -> Result<u8>290*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_conn_create( 291*7eba2f3bSAndroid Build Coastguard Worker &mut self, 292*7eba2f3bSAndroid Build Coastguard Worker dest_type: u8, 293*7eba2f3bSAndroid Build Coastguard Worker id: u8, 294*7eba2f3bSAndroid Build Coastguard Worker protocol: u8, 295*7eba2f3bSAndroid Build Coastguard Worker callback: ConnCallback, 296*7eba2f3bSAndroid Build Coastguard Worker ) -> Result<u8> { 297*7eba2f3bSAndroid Build Coastguard Worker let pbf = PacketBoundaryFlag::CompleteOrFinal; 298*7eba2f3bSAndroid Build Coastguard Worker let mut destparams: Vec<DestParam> = vec![]; 299*7eba2f3bSAndroid Build Coastguard Worker let dt = DestTypes::try_from(dest_type).unwrap(); 300*7eba2f3bSAndroid Build Coastguard Worker match dt { 301*7eba2f3bSAndroid Build Coastguard Worker DestTypes::NfccLpbk => (), 302*7eba2f3bSAndroid Build Coastguard Worker DestTypes::Remote => { 303*7eba2f3bSAndroid Build Coastguard Worker let parameter = vec![id, protocol]; 304*7eba2f3bSAndroid Build Coastguard Worker destparams.push(DestParam { ptype: DestParamTypes::RfDisc, parameter }); 305*7eba2f3bSAndroid Build Coastguard Worker } 306*7eba2f3bSAndroid Build Coastguard Worker DestTypes::Nfcee => { 307*7eba2f3bSAndroid Build Coastguard Worker let parameter: Vec<u8> = vec![id, protocol]; 308*7eba2f3bSAndroid Build Coastguard Worker destparams.push(DestParam { ptype: DestParamTypes::Nfcee, parameter }); 309*7eba2f3bSAndroid Build Coastguard Worker } 310*7eba2f3bSAndroid Build Coastguard Worker _ => return Ok(nci::Status::InvalidParam as u8), 311*7eba2f3bSAndroid Build Coastguard Worker } 312*7eba2f3bSAndroid Build Coastguard Worker if let Some(cmd) = self.commands.as_mut() { 313*7eba2f3bSAndroid Build Coastguard Worker let rp = cmd 314*7eba2f3bSAndroid Build Coastguard Worker .send(ConnCreateCommandBuilder { gid: 0, pbf, dt, destparams }.build().into()) 315*7eba2f3bSAndroid Build Coastguard Worker .await?; 316*7eba2f3bSAndroid Build Coastguard Worker if let ResponseChild::ConnCreateResponse(ccrp) = rp.specialize() { 317*7eba2f3bSAndroid Build Coastguard Worker let status = ccrp.get_status(); 318*7eba2f3bSAndroid Build Coastguard Worker if status == nci::Status::Ok { 319*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.as_mut() { 320*7eba2f3bSAndroid Build Coastguard Worker conn.open( 321*7eba2f3bSAndroid Build Coastguard Worker ccrp.get_conn_id(), 322*7eba2f3bSAndroid Build Coastguard Worker Some(callback), 323*7eba2f3bSAndroid Build Coastguard Worker ccrp.get_mpps(), 324*7eba2f3bSAndroid Build Coastguard Worker ccrp.get_ncreds(), 325*7eba2f3bSAndroid Build Coastguard Worker ) 326*7eba2f3bSAndroid Build Coastguard Worker .await; 327*7eba2f3bSAndroid Build Coastguard Worker let conn_create_evt = 328*7eba2f3bSAndroid Build Coastguard Worker [status as u8, dest_type, id, ccrp.get_mpps(), ccrp.get_ncreds()]; 329*7eba2f3bSAndroid Build Coastguard Worker callback(ccrp.get_conn_id(), 0, &conn_create_evt[..]); 330*7eba2f3bSAndroid Build Coastguard Worker } else { 331*7eba2f3bSAndroid Build Coastguard Worker return Ok(nci::Status::NotInitialized as u8); 332*7eba2f3bSAndroid Build Coastguard Worker } 333*7eba2f3bSAndroid Build Coastguard Worker } 334*7eba2f3bSAndroid Build Coastguard Worker Ok(status as u8) 335*7eba2f3bSAndroid Build Coastguard Worker } else { 336*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::Failed as u8) 337*7eba2f3bSAndroid Build Coastguard Worker } 338*7eba2f3bSAndroid Build Coastguard Worker } else { 339*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::NotInitialized as u8) 340*7eba2f3bSAndroid Build Coastguard Worker } 341*7eba2f3bSAndroid Build Coastguard Worker } 342*7eba2f3bSAndroid Build Coastguard Worker 343*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 344*7eba2f3bSAndroid Build Coastguard Worker ** 345*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_ConnClose 346*7eba2f3bSAndroid Build Coastguard Worker ** 347*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to close a logical connection with 348*7eba2f3bSAndroid Build Coastguard Worker ** NFCC. 349*7eba2f3bSAndroid Build Coastguard Worker ** The response from NFCC is reported in tNFC_CONN_CBACK 350*7eba2f3bSAndroid Build Coastguard Worker ** as NFC_CONN_CLOSE_CEVT. 351*7eba2f3bSAndroid Build Coastguard Worker ** 352*7eba2f3bSAndroid Build Coastguard Worker ** Parameters conn_id - the connection id. 353*7eba2f3bSAndroid Build Coastguard Worker ** 354*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 355*7eba2f3bSAndroid Build Coastguard Worker ** 356*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 357*7eba2f3bSAndroid Build Coastguard Worker //extern tNFC_STATUS NFC_ConnClose(uint8_t conn_id); nfc_conn_close(&mut self, conn_id: u8) -> Result<u8>358*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_conn_close(&mut self, conn_id: u8) -> Result<u8> { 359*7eba2f3bSAndroid Build Coastguard Worker let pbf = PacketBoundaryFlag::CompleteOrFinal; 360*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.as_mut() { 361*7eba2f3bSAndroid Build Coastguard Worker if let Some(cb) = conn.close(conn_id).await { 362*7eba2f3bSAndroid Build Coastguard Worker if let Some(cmd) = self.commands.as_mut() { 363*7eba2f3bSAndroid Build Coastguard Worker let rp = cmd 364*7eba2f3bSAndroid Build Coastguard Worker .send(ConnCloseCommandBuilder { gid: 0, pbf, conn_id }.build().into()) 365*7eba2f3bSAndroid Build Coastguard Worker .await?; 366*7eba2f3bSAndroid Build Coastguard Worker if let ResponseChild::ConnCloseResponse(ccrp) = rp.specialize() { 367*7eba2f3bSAndroid Build Coastguard Worker let status = ccrp.get_status() as u8; 368*7eba2f3bSAndroid Build Coastguard Worker let conn_close_evt = [status]; 369*7eba2f3bSAndroid Build Coastguard Worker cb(conn_id, 1, &conn_close_evt[..]); 370*7eba2f3bSAndroid Build Coastguard Worker return Ok(status); 371*7eba2f3bSAndroid Build Coastguard Worker } else { 372*7eba2f3bSAndroid Build Coastguard Worker return Ok(nci::Status::Failed as u8); 373*7eba2f3bSAndroid Build Coastguard Worker } 374*7eba2f3bSAndroid Build Coastguard Worker } 375*7eba2f3bSAndroid Build Coastguard Worker } else { 376*7eba2f3bSAndroid Build Coastguard Worker return Ok(nci::Status::InvalidParam as u8); 377*7eba2f3bSAndroid Build Coastguard Worker } 378*7eba2f3bSAndroid Build Coastguard Worker } 379*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::NotInitialized as u8) 380*7eba2f3bSAndroid Build Coastguard Worker } 381*7eba2f3bSAndroid Build Coastguard Worker 382*7eba2f3bSAndroid Build Coastguard Worker /** ***************************************************************************** 383*7eba2f3bSAndroid Build Coastguard Worker ** 384*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_SetStaticRfCback 385*7eba2f3bSAndroid Build Coastguard Worker ** 386*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to update the data callback function 387*7eba2f3bSAndroid Build Coastguard Worker ** to receive the data for the given connection id. 388*7eba2f3bSAndroid Build Coastguard Worker ** 389*7eba2f3bSAndroid Build Coastguard Worker ** Parameters p_cback - the connection callback function 390*7eba2f3bSAndroid Build Coastguard Worker ** 391*7eba2f3bSAndroid Build Coastguard Worker ** Returns Nothing 392*7eba2f3bSAndroid Build Coastguard Worker ** 393*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 394*7eba2f3bSAndroid Build Coastguard Worker //extern void NFC_SetStaticRfCback(tNFC_CONN_CBACK* p_cback); nfc_set_static_rf_callback(&mut self, callback: ConnCallback)395*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_set_static_rf_callback(&mut self, callback: ConnCallback) { 396*7eba2f3bSAndroid Build Coastguard Worker self.nfc_data.rf_callback = Some(callback); 397*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.as_mut() { 398*7eba2f3bSAndroid Build Coastguard Worker conn.set_static_callback(0, Some(callback)).await; 399*7eba2f3bSAndroid Build Coastguard Worker } 400*7eba2f3bSAndroid Build Coastguard Worker } 401*7eba2f3bSAndroid Build Coastguard Worker 402*7eba2f3bSAndroid Build Coastguard Worker /** ***************************************************************************** 403*7eba2f3bSAndroid Build Coastguard Worker ** 404*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_SetStaticHciCback 405*7eba2f3bSAndroid Build Coastguard Worker ** 406*7eba2f3bSAndroid Build Coastguard Worker ** Description This function to update the data callback function 407*7eba2f3bSAndroid Build Coastguard Worker ** to receive the data for the static Hci connection id. 408*7eba2f3bSAndroid Build Coastguard Worker ** 409*7eba2f3bSAndroid Build Coastguard Worker ** Parameters p_cback - the connection callback function 410*7eba2f3bSAndroid Build Coastguard Worker ** 411*7eba2f3bSAndroid Build Coastguard Worker ** Returns Nothing 412*7eba2f3bSAndroid Build Coastguard Worker ** 413*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 414*7eba2f3bSAndroid Build Coastguard Worker //extern void NFC_SetStaticHciCback(tNFC_CONN_CBACK* p_cback); nfc_set_static_hci_callback(&mut self, callback: ConnCallback)415*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_set_static_hci_callback(&mut self, callback: ConnCallback) { 416*7eba2f3bSAndroid Build Coastguard Worker self.nfc_data.hci_callback = Some(callback); 417*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.as_mut() { 418*7eba2f3bSAndroid Build Coastguard Worker conn.set_static_callback(1, Some(callback)).await; 419*7eba2f3bSAndroid Build Coastguard Worker } 420*7eba2f3bSAndroid Build Coastguard Worker } 421*7eba2f3bSAndroid Build Coastguard Worker 422*7eba2f3bSAndroid Build Coastguard Worker /******************************************************************************* 423*7eba2f3bSAndroid Build Coastguard Worker ** 424*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_SetReassemblyFlag 425*7eba2f3bSAndroid Build Coastguard Worker ** 426*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to set if nfc will reassemble 427*7eba2f3bSAndroid Build Coastguard Worker ** nci packet as much as its buffer can hold or it should not 428*7eba2f3bSAndroid Build Coastguard Worker ** reassemble but forward the fragmented nci packet to layer 429*7eba2f3bSAndroid Build Coastguard Worker ** above. If nci data pkt is fragmented, nfc may send multiple 430*7eba2f3bSAndroid Build Coastguard Worker ** NFC_DATA_CEVT with status NFC_STATUS_CONTINUE before sending 431*7eba2f3bSAndroid Build Coastguard Worker ** NFC_DATA_CEVT with status NFC_STATUS_OK based on reassembly 432*7eba2f3bSAndroid Build Coastguard Worker ** configuration and reassembly buffer size 433*7eba2f3bSAndroid Build Coastguard Worker ** 434*7eba2f3bSAndroid Build Coastguard Worker ** Parameters reassembly - flag to indicate if nfc may reassemble or not 435*7eba2f3bSAndroid Build Coastguard Worker ** 436*7eba2f3bSAndroid Build Coastguard Worker ** Returns Nothing 437*7eba2f3bSAndroid Build Coastguard Worker ** 438*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 439*7eba2f3bSAndroid Build Coastguard Worker //extern void NFC_SetReassemblyFlag(bool reassembly); 440*7eba2f3bSAndroid Build Coastguard Worker 441*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 442*7eba2f3bSAndroid Build Coastguard Worker ** 443*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_SendData 444*7eba2f3bSAndroid Build Coastguard Worker ** 445*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to send the given data packet 446*7eba2f3bSAndroid Build Coastguard Worker ** to the connection identified by the given connection id. 447*7eba2f3bSAndroid Build Coastguard Worker ** 448*7eba2f3bSAndroid Build Coastguard Worker ** Parameters conn_id - the connection id. 449*7eba2f3bSAndroid Build Coastguard Worker ** p_data - the data packet 450*7eba2f3bSAndroid Build Coastguard Worker ** 451*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 452*7eba2f3bSAndroid Build Coastguard Worker ** 453*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 454*7eba2f3bSAndroid Build Coastguard Worker //extern tNFC_STATUS NFC_SendData(uint8_t conn_id, NFC_HDR* p_data); nfc_send_data(&mut self, conn_id: u8, data: &[u8]) -> Result<u8>455*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_send_data(&mut self, conn_id: u8, data: &[u8]) -> Result<u8> { 456*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.as_mut() { 457*7eba2f3bSAndroid Build Coastguard Worker match DataPacket::parse(data) { 458*7eba2f3bSAndroid Build Coastguard Worker Ok(pkt) => { 459*7eba2f3bSAndroid Build Coastguard Worker conn.send_packet(conn_id, pkt).await; 460*7eba2f3bSAndroid Build Coastguard Worker return Ok(nci::Status::Ok as u8); 461*7eba2f3bSAndroid Build Coastguard Worker } 462*7eba2f3bSAndroid Build Coastguard Worker Err(e) => { 463*7eba2f3bSAndroid Build Coastguard Worker error!("Data packet is invalid:{:?}", e); 464*7eba2f3bSAndroid Build Coastguard Worker return Ok(nci::Status::InvalidParam as u8); 465*7eba2f3bSAndroid Build Coastguard Worker } 466*7eba2f3bSAndroid Build Coastguard Worker } 467*7eba2f3bSAndroid Build Coastguard Worker } 468*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::NotInitialized as u8) 469*7eba2f3bSAndroid Build Coastguard Worker } 470*7eba2f3bSAndroid Build Coastguard Worker 471*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 472*7eba2f3bSAndroid Build Coastguard Worker ** 473*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_FlushData 474*7eba2f3bSAndroid Build Coastguard Worker ** 475*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to discard the tx data queue of 476*7eba2f3bSAndroid Build Coastguard Worker ** the given connection id. 477*7eba2f3bSAndroid Build Coastguard Worker ** 478*7eba2f3bSAndroid Build Coastguard Worker ** Parameters conn_id - the connection id. 479*7eba2f3bSAndroid Build Coastguard Worker ** 480*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 481*7eba2f3bSAndroid Build Coastguard Worker ** 482*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 483*7eba2f3bSAndroid Build Coastguard Worker //extern tNFC_STATUS NFC_FlushData(uint8_t conn_id); nfc_flush_data(&mut self, conn_id: u8) -> Result<u8>484*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_flush_data(&mut self, conn_id: u8) -> Result<u8> { 485*7eba2f3bSAndroid Build Coastguard Worker if let Some(conn) = self.connections.as_mut() { 486*7eba2f3bSAndroid Build Coastguard Worker if conn.flush_data(conn_id).await { 487*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::Ok as u8) 488*7eba2f3bSAndroid Build Coastguard Worker } else { 489*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::Failed as u8) 490*7eba2f3bSAndroid Build Coastguard Worker } 491*7eba2f3bSAndroid Build Coastguard Worker } else { 492*7eba2f3bSAndroid Build Coastguard Worker Ok(nci::Status::NotInitialized as u8) 493*7eba2f3bSAndroid Build Coastguard Worker } 494*7eba2f3bSAndroid Build Coastguard Worker } 495*7eba2f3bSAndroid Build Coastguard Worker 496*7eba2f3bSAndroid Build Coastguard Worker /** **************************************************************************** 497*7eba2f3bSAndroid Build Coastguard Worker ** 498*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_DiscoveryMap 499*7eba2f3bSAndroid Build Coastguard Worker ** 500*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to set the discovery interface 501*7eba2f3bSAndroid Build Coastguard Worker ** mapping. The response from NFCC is reported by 502*7eba2f3bSAndroid Build Coastguard Worker ** tNFC_DISCOVER_CBACK as. NFC_MAP_DEVT. 503*7eba2f3bSAndroid Build Coastguard Worker ** 504*7eba2f3bSAndroid Build Coastguard Worker ** Parameters num - the number of items in p_params. 505*7eba2f3bSAndroid Build Coastguard Worker ** p_maps - the discovery interface mappings 506*7eba2f3bSAndroid Build Coastguard Worker ** p_cback - the discovery callback function 507*7eba2f3bSAndroid Build Coastguard Worker ** 508*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 509*7eba2f3bSAndroid Build Coastguard Worker ** 510*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 511*7eba2f3bSAndroid Build Coastguard Worker // extern tNFC_STATUS NFC_DiscoveryMap(uint8_t num, tNFC_DISCOVER_MAPS* p_maps, 512*7eba2f3bSAndroid Build Coastguard Worker // tNFC_DISCOVER_CBACK* p_cback); nfc_discovery_map(&mut self, _maps: Vec<RfMappingConfiguration>) -> Result<u8>513*7eba2f3bSAndroid Build Coastguard Worker pub async fn nfc_discovery_map(&mut self, _maps: Vec<RfMappingConfiguration>) -> Result<u8> { 514*7eba2f3bSAndroid Build Coastguard Worker Ok(0) 515*7eba2f3bSAndroid Build Coastguard Worker } 516*7eba2f3bSAndroid Build Coastguard Worker 517*7eba2f3bSAndroid Build Coastguard Worker /******************************************************************************* 518*7eba2f3bSAndroid Build Coastguard Worker ** 519*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_DiscoveryStart 520*7eba2f3bSAndroid Build Coastguard Worker ** 521*7eba2f3bSAndroid Build Coastguard Worker ** Description This function is called to start Polling and/or Listening. 522*7eba2f3bSAndroid Build Coastguard Worker ** The response from NFCC is reported by tNFC_DISCOVER_CBACK 523*7eba2f3bSAndroid Build Coastguard Worker ** as NFC_START_DEVT. The notification from NFCC is reported by 524*7eba2f3bSAndroid Build Coastguard Worker ** tNFC_DISCOVER_CBACK as NFC_RESULT_DEVT. 525*7eba2f3bSAndroid Build Coastguard Worker ** 526*7eba2f3bSAndroid Build Coastguard Worker ** Parameters num_params - the number of items in p_params. 527*7eba2f3bSAndroid Build Coastguard Worker ** p_params - the discovery parameters 528*7eba2f3bSAndroid Build Coastguard Worker ** p_cback - the discovery callback function 529*7eba2f3bSAndroid Build Coastguard Worker ** 530*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 531*7eba2f3bSAndroid Build Coastguard Worker ** 532*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 533*7eba2f3bSAndroid Build Coastguard Worker // extern tNFC_STATUS NFC_DiscoveryStart(uint8_t num_params, 534*7eba2f3bSAndroid Build Coastguard Worker // tNFC_DISCOVER_PARAMS* p_params, 535*7eba2f3bSAndroid Build Coastguard Worker // tNFC_DISCOVER_CBACK* p_cback); 536*7eba2f3bSAndroid Build Coastguard Worker 537*7eba2f3bSAndroid Build Coastguard Worker /******************************************************************************* 538*7eba2f3bSAndroid Build Coastguard Worker ** 539*7eba2f3bSAndroid Build Coastguard Worker ** Function NFC_DiscoverySelect 540*7eba2f3bSAndroid Build Coastguard Worker ** 541*7eba2f3bSAndroid Build Coastguard Worker ** Description If tNFC_DISCOVER_CBACK reports status=NFC_MULTIPLE_PROT, 542*7eba2f3bSAndroid Build Coastguard Worker ** the application needs to use this function to select the 543*7eba2f3bSAndroid Build Coastguard Worker ** the logical endpoint to continue. The response from NFCC is 544*7eba2f3bSAndroid Build Coastguard Worker ** reported by tNFC_DISCOVER_CBACK as NFC_SELECT_DEVT. 545*7eba2f3bSAndroid Build Coastguard Worker ** 546*7eba2f3bSAndroid Build Coastguard Worker ** Parameters rf_disc_id - The ID identifies the remote device. 547*7eba2f3bSAndroid Build Coastguard Worker ** protocol - the logical endpoint on the remote device 548*7eba2f3bSAndroid Build Coastguard Worker ** rf_interface - the RF interface to communicate with NFCC 549*7eba2f3bSAndroid Build Coastguard Worker ** 550*7eba2f3bSAndroid Build Coastguard Worker ** Returns tNFC_STATUS 551*7eba2f3bSAndroid Build Coastguard Worker ** 552*7eba2f3bSAndroid Build Coastguard Worker *******************************************************************************/ 553*7eba2f3bSAndroid Build Coastguard Worker // extern tNFC_STATUS NFC_DiscoverySelect(uint8_t rf_disc_id, uint8_t protocol, 554*7eba2f3bSAndroid Build Coastguard Worker // uint8_t rf_interface); 555*7eba2f3bSAndroid Build Coastguard Worker } 556*7eba2f3bSAndroid Build Coastguard Worker 557*7eba2f3bSAndroid Build Coastguard Worker impl Default for NciApi { default() -> Self558*7eba2f3bSAndroid Build Coastguard Worker fn default() -> Self { 559*7eba2f3bSAndroid Build Coastguard Worker Self::new() 560*7eba2f3bSAndroid Build Coastguard Worker } 561*7eba2f3bSAndroid Build Coastguard Worker } 562