aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorxoviat <[email protected]>2025-11-23 13:13:11 -0600
committerxoviat <[email protected]>2025-11-23 13:13:11 -0600
commit849303b82de5e7d28e576f85b65764a84cbc0e1c (patch)
treeca485ca52cca0514dc195266a32bbce60e7d7f9e
parent08125aa919a4dc4de79f91de9a7f3586e51a7739 (diff)
parent1573bd6329af67860757f629b22d2c232504b73f (diff)
Merge branch 'main' of https://github.com/embassy-rs/embassy into wpan
-rw-r--r--.vscode/settings.json7
-rw-r--r--embassy-stm32-wpan/src/cmd.rs21
-rw-r--r--embassy-stm32-wpan/src/evt.rs1
-rw-r--r--embassy-stm32-wpan/src/shci.rs18
-rw-r--r--embassy-stm32-wpan/src/sub/sys.rs15
-rw-r--r--embassy-stm32/Cargo.toml4
6 files changed, 41 insertions, 25 deletions
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 3c9cce18b..73dfa53a4 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -5,6 +5,9 @@
5 "[markdown]": { 5 "[markdown]": {
6 "editor.formatOnSave": false 6 "editor.formatOnSave": false
7 }, 7 },
8 "rust-analyzer.rustfmt.extraArgs": [
9 "+nightly"
10 ],
8 "rust-analyzer.check.allTargets": false, 11 "rust-analyzer.check.allTargets": false,
9 "rust-analyzer.check.noDefaultFeatures": true, 12 "rust-analyzer.check.noDefaultFeatures": true,
10 "rust-analyzer.cargo.noDefaultFeatures": true, 13 "rust-analyzer.cargo.noDefaultFeatures": true,
@@ -61,8 +64,4 @@
61 // "examples/stm32wl/Cargo.toml", 64 // "examples/stm32wl/Cargo.toml",
62 // "examples/wasm/Cargo.toml", 65 // "examples/wasm/Cargo.toml",
63 ], 66 ],
64 "rust-analyzer.rustfmt.extraArgs": [
65 //Uncomment to run rustfmt with nightly-only settings that match the CI
66 // "+nightly"
67 ],
68} \ No newline at end of file 67} \ No newline at end of file
diff --git a/embassy-stm32-wpan/src/cmd.rs b/embassy-stm32-wpan/src/cmd.rs
index 5c81a4aa7..787c22c4b 100644
--- a/embassy-stm32-wpan/src/cmd.rs
+++ b/embassy-stm32-wpan/src/cmd.rs
@@ -1,4 +1,5 @@
1use core::ptr; 1use core::ptr;
2use core::sync::atomic::{Ordering, compiler_fence};
2 3
3use crate::PacketHeader; 4use crate::PacketHeader;
4use crate::consts::TlPacketType; 5use crate::consts::TlPacketType;
@@ -45,11 +46,11 @@ pub struct CmdPacket {
45 46
46impl CmdPacket { 47impl CmdPacket {
47 pub unsafe fn write_into(cmd_buf: *mut CmdPacket, packet_type: TlPacketType, cmd_code: u16, payload: &[u8]) { 48 pub unsafe fn write_into(cmd_buf: *mut CmdPacket, packet_type: TlPacketType, cmd_code: u16, payload: &[u8]) {
48 let p_cmd_serial = &mut (*cmd_buf).cmdserial as *mut _ as *mut CmdSerialStub; 49 let p_cmd_serial = (cmd_buf as *mut u8).add(size_of::<PacketHeader>());
49 let p_payload = &mut (*cmd_buf).cmdserial.cmd.payload as *mut _; 50 let p_payload = p_cmd_serial.add(size_of::<CmdSerialStub>());
50 51
51 ptr::write_volatile( 52 ptr::write_unaligned(
52 p_cmd_serial, 53 p_cmd_serial as *mut _,
53 CmdSerialStub { 54 CmdSerialStub {
54 ty: packet_type as u8, 55 ty: packet_type as u8,
55 cmd_code, 56 cmd_code,
@@ -58,6 +59,8 @@ impl CmdPacket {
58 ); 59 );
59 60
60 ptr::copy_nonoverlapping(payload as *const _ as *const u8, p_payload, payload.len()); 61 ptr::copy_nonoverlapping(payload as *const _ as *const u8, p_payload, payload.len());
62
63 compiler_fence(Ordering::Release);
61 } 64 }
62} 65}
63 66
@@ -87,11 +90,11 @@ pub struct AclDataPacket {
87 90
88impl AclDataPacket { 91impl AclDataPacket {
89 pub unsafe fn write_into(cmd_buf: *mut AclDataPacket, packet_type: TlPacketType, handle: u16, payload: &[u8]) { 92 pub unsafe fn write_into(cmd_buf: *mut AclDataPacket, packet_type: TlPacketType, handle: u16, payload: &[u8]) {
90 let p_cmd_serial = &mut (*cmd_buf).acl_data_serial as *mut _ as *mut AclDataSerialStub; 93 let p_cmd_serial = (cmd_buf as *mut u8).add(size_of::<PacketHeader>());
91 let p_payload = &mut (*cmd_buf).acl_data_serial.acl_data as *mut _; 94 let p_payload = p_cmd_serial.add(size_of::<AclDataSerialStub>());
92 95
93 ptr::write_volatile( 96 ptr::write_unaligned(
94 p_cmd_serial, 97 p_cmd_serial as *mut _,
95 AclDataSerialStub { 98 AclDataSerialStub {
96 ty: packet_type as u8, 99 ty: packet_type as u8,
97 handle: handle, 100 handle: handle,
@@ -100,5 +103,7 @@ impl AclDataPacket {
100 ); 103 );
101 104
102 ptr::copy_nonoverlapping(payload as *const _ as *const u8, p_payload, payload.len()); 105 ptr::copy_nonoverlapping(payload as *const _ as *const u8, p_payload, payload.len());
106
107 compiler_fence(Ordering::Release);
103 } 108 }
104} 109}
diff --git a/embassy-stm32-wpan/src/evt.rs b/embassy-stm32-wpan/src/evt.rs
index c6528413d..f32821269 100644
--- a/embassy-stm32-wpan/src/evt.rs
+++ b/embassy-stm32-wpan/src/evt.rs
@@ -67,6 +67,7 @@ pub struct EvtSerial {
67pub struct EvtStub { 67pub struct EvtStub {
68 pub kind: u8, 68 pub kind: u8,
69 pub evt_code: u8, 69 pub evt_code: u8,
70 pub payload_len: u8,
70} 71}
71 72
72/// This format shall be used for all events (asynchronous and command response) reported 73/// This format shall be used for all events (asynchronous and command response) reported
diff --git a/embassy-stm32-wpan/src/shci.rs b/embassy-stm32-wpan/src/shci.rs
index 1946c55fd..2d94a9cda 100644
--- a/embassy-stm32-wpan/src/shci.rs
+++ b/embassy-stm32-wpan/src/shci.rs
@@ -1,6 +1,10 @@
1use core::{mem, slice}; 1use core::sync::atomic::{Ordering, compiler_fence};
2use core::{mem, ptr, slice};
2 3
4use crate::PacketHeader;
5use crate::cmd::CmdPacket;
3use crate::consts::{TL_CS_EVT_SIZE, TL_EVT_HEADER_SIZE, TL_PACKET_HEADER_SIZE}; 6use crate::consts::{TL_CS_EVT_SIZE, TL_EVT_HEADER_SIZE, TL_PACKET_HEADER_SIZE};
7use crate::evt::{CcEvt, EvtStub};
4 8
5const SHCI_OGF: u16 = 0x3F; 9const SHCI_OGF: u16 = 0x3F;
6 10
@@ -21,6 +25,18 @@ pub enum SchiCommandStatus {
21 ShciFusCmdNotSupported = 0xFF, 25 ShciFusCmdNotSupported = 0xFF,
22} 26}
23 27
28impl SchiCommandStatus {
29 pub unsafe fn from_packet(cmd_buf: *const CmdPacket) -> Result<Self, ()> {
30 let p_cmd_serial = (cmd_buf as *mut u8).add(size_of::<PacketHeader>());
31 let p_evt_payload = p_cmd_serial.add(size_of::<EvtStub>());
32
33 compiler_fence(Ordering::Acquire);
34 let cc_evt = ptr::read_unaligned(p_evt_payload as *const CcEvt);
35
36 cc_evt.payload[0].try_into()
37 }
38}
39
24impl TryFrom<u8> for SchiCommandStatus { 40impl TryFrom<u8> for SchiCommandStatus {
25 type Error = (); 41 type Error = ();
26 42
diff --git a/embassy-stm32-wpan/src/sub/sys.rs b/embassy-stm32-wpan/src/sub/sys.rs
index dffe9942c..718ccae8b 100644
--- a/embassy-stm32-wpan/src/sub/sys.rs
+++ b/embassy-stm32-wpan/src/sub/sys.rs
@@ -4,9 +4,10 @@ use embassy_stm32::ipcc::{IpccRxChannel, IpccTxChannel};
4 4
5use crate::cmd::CmdPacket; 5use crate::cmd::CmdPacket;
6use crate::consts::TlPacketType; 6use crate::consts::TlPacketType;
7use crate::evt::{CcEvt, EvtBox, EvtPacket}; 7use crate::evt::EvtBox;
8#[allow(unused_imports)] 8#[cfg(feature = "ble")]
9use crate::shci::{SchiCommandStatus, ShciBleInitCmdParam, ShciOpcode}; 9use crate::shci::ShciBleInitCmdParam;
10use crate::shci::{SchiCommandStatus, ShciOpcode};
10use crate::sub::mm; 11use crate::sub::mm;
11use crate::tables::{SysTable, WirelessFwInfoTable}; 12use crate::tables::{SysTable, WirelessFwInfoTable};
12use crate::unsafe_linked_list::LinkedListNode; 13use crate::unsafe_linked_list::LinkedListNode;
@@ -64,13 +65,7 @@ impl<'a> Sys<'a> {
64 self.write(opcode, payload).await; 65 self.write(opcode, payload).await;
65 self.ipcc_system_cmd_rsp_channel.flush().await; 66 self.ipcc_system_cmd_rsp_channel.flush().await;
66 67
67 unsafe { 68 unsafe { SchiCommandStatus::from_packet(SYS_CMD_BUF.as_ptr()) }
68 let p_event_packet = SYS_CMD_BUF.as_ptr() as *const EvtPacket;
69 let p_command_event = &((*p_event_packet).evt_serial.evt.payload) as *const _ as *const CcEvt;
70 let p_payload = &((*p_command_event).payload) as *const u8;
71
72 ptr::read_volatile(p_payload).try_into()
73 }
74 } 69 }
75 70
76 #[cfg(feature = "mac")] 71 #[cfg(feature = "mac")]
diff --git a/embassy-stm32/Cargo.toml b/embassy-stm32/Cargo.toml
index fbd00895d..e10409112 100644
--- a/embassy-stm32/Cargo.toml
+++ b/embassy-stm32/Cargo.toml
@@ -200,11 +200,11 @@ aligned = "0.4.1"
200heapless = "0.9.1" 200heapless = "0.9.1"
201 201
202#stm32-metapac = { version = "18" } 202#stm32-metapac = { version = "18" }
203stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-61abfb115273dc66ed99bf14545779a2aa0722c8" } 203stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-f61ed017ef12ec84ff04c49e3147694bda3b29cb" }
204 204
205[build-dependencies] 205[build-dependencies]
206#stm32-metapac = { version = "18", default-features = false, features = ["metadata"]} 206#stm32-metapac = { version = "18", default-features = false, features = ["metadata"]}
207stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-61abfb115273dc66ed99bf14545779a2aa0722c8", default-features = false, features = ["metadata"] } 207stm32-metapac = { git = "https://github.com/embassy-rs/stm32-data-generated", tag = "stm32-data-f61ed017ef12ec84ff04c49e3147694bda3b29cb", default-features = false, features = ["metadata"] }
208 208
209proc-macro2 = "1.0.36" 209proc-macro2 = "1.0.36"
210quote = "1.0.15" 210quote = "1.0.15"