diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-13 00:26:32 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-12-13 00:26:32 +0000 |
commit | 4233b35de6b60cbc5ed595361458730d86137e70 (patch) | |
tree | 6bb2f24f7cf3ceed01a8c5f7adc23faa046aa645 | |
parent | 5174bdba3339ec8ce8eaf5f2395a4d6c0f74f079 (diff) | |
parent | dffc85cd2d6790f25ba688d2385860b5eeb093d7 (diff) | |
download | nfc-4233b35de6b60cbc5ed595361458730d86137e70.tar.gz |
Snap for 11211173 from dffc85cd2d6790f25ba688d2385860b5eeb093d7 to 24Q1-release
Change-Id: I1dd7f27bb806e136030b4966bbf6b4fdce129ede
-rwxr-xr-x | tools/casimir/scripts/t4at.py | 1 | ||||
-rw-r--r-- | tools/casimir/src/controller.rs | 21 | ||||
-rw-r--r-- | tools/casimir/src/nci_packets.pdl | 19 |
3 files changed, 40 insertions, 1 deletions
diff --git a/tools/casimir/scripts/t4at.py b/tools/casimir/scripts/t4at.py index b40b6650..80981944 100755 --- a/tools/casimir/scripts/t4at.py +++ b/tools/casimir/scripts/t4at.py @@ -89,6 +89,7 @@ class T4AT: await self.active(response.sender) case _: pass + time.sleep(0.150); except TimeoutError: pass diff --git a/tools/casimir/src/controller.rs b/tools/casimir/src/controller.rs index 53efb3fb..c1c1bc63 100644 --- a/tools/casimir/src/controller.rs +++ b/tools/casimir/src/controller.rs @@ -22,6 +22,7 @@ use core::time::Duration; use pdl_runtime::Packet; use std::collections::HashMap; use std::convert::TryFrom; +use std::time::Instant; use tokio::sync::mpsc; use tokio::sync::Mutex; use tokio::time; @@ -113,6 +114,7 @@ pub struct State { pub rf_state: RfState, pub rf_poll_responses: Vec<RfPollResponse>, pub observe_mode: ObserveModeState, + pub start_time: std::time::Instant, } /// State of an NFCC instance. @@ -190,6 +192,7 @@ impl Controller { rf_state: RfState::Idle, rf_poll_responses: vec![], observe_mode: ObserveModeState::Disable, + start_time: Instant::now(), }), } } @@ -842,8 +845,24 @@ impl Controller { if state.rf_state != RfState::Discovery { return Ok(()); } - let technology = cmd.get_technology(); + + let ts_u32 = state.start_time.elapsed().as_millis() as u32; + let frame_type = match technology { + rf::Technology::NfcA => nci::PollingFrameType::Reqa, + rf::Technology::NfcB => nci::PollingFrameType::Reqb, + rf::Technology::NfcF => nci::PollingFrameType::Reqf, + _ => todo!(), + }; + + self.send_control(nci::AndroidPollingLoopNtfBuilder { + timestamp: ts_u32, + gain: 2, + frametype: frame_type, + polling_frame_data: vec![], + }) + .await?; + if state.discover_configuration.iter().any(|config| { matches!( (config.technology_and_mode, technology), diff --git a/tools/casimir/src/nci_packets.pdl b/tools/casimir/src/nci_packets.pdl index f6442d82..6f40a2ed 100644 --- a/tools/casimir/src/nci_packets.pdl +++ b/tools/casimir/src/nci_packets.pdl @@ -74,6 +74,7 @@ enum ProprietaryOpcodeId : 6 { enum AndroidSubOpcodeId : 8 { OBSERVE_MODE = 0x2, + POLLING_FRAME = 0x3, } enum Status : 8 { @@ -752,3 +753,21 @@ packet AndroidObserveModeCmd : AndroidPacket(mt = COMMAND, android_sub_oid = OBS packet AndroidObserveModeRsp : AndroidPacket(mt = RESPONSE, android_sub_oid = OBSERVE_MODE) { status: Status, } + +enum PollingFrameType : 8 { + REMOTE_FIELD = 0x0, + REQA = 0x1, + REQB = 0x2, + REQF = 0x3, + WUPA = 0x4, + WUPB = 0x5, + WUPF = 0x6, + UNKNOWN = 0x7, +} + +packet AndroidPollingLoopNtf : AndroidPacket(mt = NOTIFICATION, android_sub_oid = POLLING_FRAME) { + frametype: PollingFrameType, + timestamp: 32, + gain: 8, + polling_frame_data : 8[], +} |