diff --git a/examples/rpi-pico-w/src/main.rs b/examples/rpi-pico-w/src/main.rs index d4aae8479..bef820d31 100644 --- a/examples/rpi-pico-w/src/main.rs +++ b/examples/rpi-pico-w/src/main.rs @@ -6,6 +6,7 @@ use core::slice; use defmt::{assert, assert_eq, panic, *}; use embassy::executor::Spawner; +use embassy::time::{Duration, Timer}; use embassy::util::Forever; use embassy_rp::gpio::{Flex, Level, Output, Pin}; use embassy_rp::peripherals::{PIN_23, PIN_24, PIN_25, PIN_29}; diff --git a/src/lib.rs b/src/lib.rs index 040caed86..271917971 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -243,7 +243,7 @@ impl<'a> Control<'a> { info!("Configuring misc stuff..."); self.set_iovar_u32("bus:txglom", 0).await; - self.set_iovar_u32("apsta", 1).await; + //self.set_iovar_u32("apsta", 1).await; self.set_iovar("cur_etheraddr", &[02, 03, 04, 05, 06, 07]).await; let country = countries::WORLD_WIDE_XX; @@ -257,9 +257,13 @@ impl<'a> Control<'a> { // set country takes some time, next ioctls fail if we don't wait. Timer::after(Duration::from_millis(100)).await; - // self.set_iovar_u32("ampdu_ba_wsize", 8).await; - // self.set_iovar_u32("ampdu_mpdu", 4).await; - // self.set_iovar_u32("ampdu_rx_factor", 0).await; // this crashes + self.ioctl_set_u32(64, 0, 0).await; // WLC_SET_ANTDIV + + self.set_iovar_u32("bus:txglom", 0).await; + //self.set_iovar_u32("apsta", 1).await; + self.set_iovar_u32("ampdu_ba_wsize", 8).await; + self.set_iovar_u32("ampdu_mpdu", 4).await; + //self.set_iovar_u32("ampdu_rx_factor", 0).await; // this crashes Timer::after(Duration::from_millis(100)).await; @@ -275,6 +279,12 @@ impl<'a> Control<'a> { Timer::after(Duration::from_millis(100)).await; + self.ioctl_set_u32(86, 0, 0).await; // no power save + self.ioctl_set_u32(110, 0, 1).await; // SET_GMODE = auto + self.ioctl_set_u32(142, 0, 0).await; // SET_BAND = any + + Timer::after(Duration::from_millis(100)).await; + info!("INIT DONE"); } @@ -494,11 +504,11 @@ impl<'a, PWR: Pin, CS: Pin, CLK: Pin, DIO: Pin> Runner<'a, PWR, CS, CLK, DIO> { let mut val = self.read8(FUNC_BACKPLANE, REG_BACKPLANE_SLEEP_CSR); val |= 0x01; // SBSDIO_SLPCSR_KEEP_SDIO_ON self.write8(FUNC_BACKPLANE, REG_BACKPLANE_SLEEP_CSR, val); + */ // clear pulls self.write8(FUNC_BACKPLANE, REG_BACKPLANE_PULL_UP, 0); let _ = self.read8(FUNC_BACKPLANE, REG_BACKPLANE_PULL_UP); - */ info!("init done "); } @@ -595,14 +605,12 @@ impl<'a, PWR: Pin, CS: Pin, CLK: Pin, DIO: Pin> Runner<'a, PWR, CS, CLK, DIO> { let packet = &payload[packet_start..]; //info!("rx {:02x}", &packet[..(packet.len() as usize).min(36)]); - let evt = EventHeader::from_bytes(&packet[24..][..EventHeader::SIZE].try_into().unwrap()); - let evt_num = evt.event_type.to_be() as u8; - let evt_data_len = evt.datalen.to_be() as u8; - let evt_data = &packet[24 + EventHeader::SIZE..][..evt_data_len as usize]; + let mut evt = EventHeader::from_bytes(&packet[24..][..EventHeader::SIZE].try_into().unwrap()); + evt.byteswap(); + let evt_data = &packet[24 + EventHeader::SIZE..][..evt.datalen as usize]; info!( - "=== EVENT {} ({}) {} {:02x}", - events::Event::from(evt_num), - evt_num, + "=== EVENT {}: {} {:02x}", + events::Event::from(evt.event_type as u8), evt, evt_data ); diff --git a/src/structs.rs b/src/structs.rs index 8a98d5227..beda9f364 100644 --- a/src/structs.rs +++ b/src/structs.rs @@ -92,6 +92,18 @@ pub struct EventHeader { } impl_bytes!(EventHeader); +impl EventHeader { + pub fn byteswap(&mut self) { + self.version = self.version.to_be(); + self.flags = self.flags.to_be(); + self.event_type = self.event_type.to_be(); + self.status = self.status.to_be(); + self.reason = self.reason.to_be(); + self.auth_type = self.auth_type.to_be(); + self.datalen = self.datalen.to_be(); + } +} + #[derive(Clone, Copy)] #[repr(C)] pub struct DownloadHeader {