From 09dc34aa6b8fce4f9ebd4261ce573fc7884b7a1b Mon Sep 17 00:00:00 2001 From: ivmarkov Date: Tue, 17 Sep 2024 10:49:53 +0000 Subject: [PATCH] Support the thread modem peripheral on the c6 MCU --- src/modem.rs | 54 ++++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 46 insertions(+), 8 deletions(-) diff --git a/src/modem.rs b/src/modem.rs index d15be7c2830..21762df3cde 100644 --- a/src/modem.rs +++ b/src/modem.rs @@ -8,18 +8,26 @@ pub use split::*; #[cfg(not(esp32h2))] pub trait WifiModemPeripheral: Peripheral

{} -#[cfg(esp32h2)] +#[cfg(any(esp32h2, esp32c6))] pub trait ThreadModemPeripheral: Peripheral

{} #[cfg(not(esp32s2))] pub trait BluetoothModemPeripheral: Peripheral

{} -#[cfg(not(any(esp32s2, esp32h2)))] +#[cfg(not(any(esp32s2, esp32h2, esp32c6)))] pub struct Modem(PhantomData<*const ()>, WifiModem, BluetoothModem); #[cfg(esp32h2)] pub struct Modem(PhantomData<*const ()>, ThreadModem, BluetoothModem); +#[cfg(esp32c6)] +pub struct Modem( + PhantomData<*const ()>, + WifiModem, + ThreadModem, + BluetoothModem, +); + #[cfg(esp32s2)] pub struct Modem(PhantomData<*const ()>); @@ -28,12 +36,20 @@ impl Modem { /// /// Care should be taken not to instantiate this Mac instance, if it is already instantiated and used elsewhere pub unsafe fn new() -> Self { - #[cfg(not(any(esp32s2, esp32h2)))] + #[cfg(not(any(esp32s2, esp32h2, esp32c6)))] let this = Modem(PhantomData, WifiModem::new(), BluetoothModem::new()); #[cfg(esp32h2)] let this = Modem(PhantomData, ThreadModem::new(), BluetoothModem::new()); + #[cfg(esp32c6)] + let this = Modem( + PhantomData, + WifiModem::new(), + ThreadModem::new(), + BluetoothModem::new(), + ); + #[cfg(esp32s2)] let this = Modem(PhantomData); @@ -41,7 +57,7 @@ impl Modem { } #[cfg(all( - not(any(esp32s2, esp32h2)), + not(any(esp32s2, esp32h2, esp32c6)), any( esp_idf_esp32_wifi_sw_coexist_enable, esp_idf_esp_coex_sw_coexist_enable @@ -52,7 +68,7 @@ impl Modem { } #[cfg(all( - not(any(esp32s2, esp32h2)), + not(any(esp32s2, esp32h2, esp32c6)), any( esp_idf_esp32_wifi_sw_coexist_enable, esp_idf_esp_coex_sw_coexist_enable @@ -83,6 +99,28 @@ impl Modem { pub fn split_ref(&mut self) -> (&mut ThreadModem, &mut BluetoothModem) { (&mut self.1, &mut self.2) } + + #[cfg(all( + esp32c6, + any( + esp_idf_esp32_wifi_sw_coexist_enable, + esp_idf_esp_coex_sw_coexist_enable + ) + ))] + pub fn split(self) -> (WifiModem, ThreadModem, BluetoothModem) { + unsafe { (WifiModem::new(), ThreadModem::new(), BluetoothModem::new()) } + } + + #[cfg(all( + esp32c6, + any( + esp_idf_esp32_wifi_sw_coexist_enable, + esp_idf_esp_coex_sw_coexist_enable + ) + ))] + pub fn split_ref(&mut self) -> (&mut WifiModem, &mut ThreadModem, &mut BluetoothModem) { + (&mut self.1, &mut self.2, &mut self.3) + } } unsafe impl Send for Modem {} @@ -100,7 +138,7 @@ impl Peripheral for Modem { #[cfg(not(esp32h2))] impl WifiModemPeripheral for Modem {} -#[cfg(esp32h2)] +#[cfg(any(esp32h2, esp32c6))] impl ThreadModemPeripheral for Modem {} #[cfg(not(esp32s2))] @@ -114,10 +152,10 @@ mod split { #[cfg(not(esp32h2))] impl super::WifiModemPeripheral for WifiModem {} - #[cfg(esp32h2)] + #[cfg(any(esp32h2, esp32c6))] crate::impl_peripheral!(ThreadModem); - #[cfg(esp32h2)] + #[cfg(any(esp32h2, esp32c6))] impl super::ThreadModemPeripheral for ThreadModem {} crate::impl_peripheral!(BluetoothModem);