summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-13 00:26:32 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-12-13 00:26:32 +0000
commit4233b35de6b60cbc5ed595361458730d86137e70 (patch)
tree6bb2f24f7cf3ceed01a8c5f7adc23faa046aa645
parent5174bdba3339ec8ce8eaf5f2395a4d6c0f74f079 (diff)
parentdffc85cd2d6790f25ba688d2385860b5eeb093d7 (diff)
downloadnfc-4233b35de6b60cbc5ed595361458730d86137e70.tar.gz
Snap for 11211173 from dffc85cd2d6790f25ba688d2385860b5eeb093d7 to 24Q1-release
Change-Id: I1dd7f27bb806e136030b4966bbf6b4fdce129ede
-rwxr-xr-xtools/casimir/scripts/t4at.py1
-rw-r--r--tools/casimir/src/controller.rs21
-rw-r--r--tools/casimir/src/nci_packets.pdl19
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[],
+}