diff options
| author | Dario Nieuwenhuis <[email protected]> | 2023-05-08 22:01:44 +0200 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2023-05-08 22:01:44 +0200 |
| commit | 6b5d9642d583bc034ee35b88c903545e7f423b4e (patch) | |
| tree | b921f526c7a4a612fb8933c0f6b0d324ae0df847 | |
| parent | 881e9d07d2e1107b27952c8bfe1d5afeef172165 (diff) | |
Rename BCD -> BDC. That's what Broadcom calls it. Still no idea what it means.
| -rw-r--r-- | src/runner.rs | 24 | ||||
| -rw-r--r-- | src/structs.rs | 20 |
2 files changed, 22 insertions, 22 deletions
diff --git a/src/runner.rs b/src/runner.rs index 1d8ec4359..5706696b4 100644 --- a/src/runner.rs +++ b/src/runner.rs | |||
| @@ -249,7 +249,7 @@ where | |||
| 249 | let mut buf = [0; 512]; | 249 | let mut buf = [0; 512]; |
| 250 | let buf8 = slice8_mut(&mut buf); | 250 | let buf8 = slice8_mut(&mut buf); |
| 251 | 251 | ||
| 252 | // There MUST be 2 bytes of padding between the SDPCM and BCD headers. | 252 | // There MUST be 2 bytes of padding between the SDPCM and BDC headers. |
| 253 | // And ONLY for data packets! | 253 | // And ONLY for data packets! |
| 254 | // No idea why, but the firmware will append two zero bytes to the tx'd packets | 254 | // No idea why, but the firmware will append two zero bytes to the tx'd packets |
| 255 | // otherwise. If the packet is exactly 1514 bytes (the max MTU), this makes it | 255 | // otherwise. If the packet is exactly 1514 bytes (the max MTU), this makes it |
| @@ -258,7 +258,7 @@ where | |||
| 258 | // and adds it to the header size her https://github.com/Infineon/wifi-host-driver/blob/c04fcbb6b0d049304f376cf483fd7b1b570c8cd5/WiFi_Host_Driver/src/whd_sdpcm.c#L597 | 258 | // and adds it to the header size her https://github.com/Infineon/wifi-host-driver/blob/c04fcbb6b0d049304f376cf483fd7b1b570c8cd5/WiFi_Host_Driver/src/whd_sdpcm.c#L597 |
| 259 | // ¯\_(ツ)_/¯ | 259 | // ¯\_(ツ)_/¯ |
| 260 | const PADDING_SIZE: usize = 2; | 260 | const PADDING_SIZE: usize = 2; |
| 261 | let total_len = SdpcmHeader::SIZE + PADDING_SIZE + BcdHeader::SIZE + packet.len(); | 261 | let total_len = SdpcmHeader::SIZE + PADDING_SIZE + BdcHeader::SIZE + packet.len(); |
| 262 | 262 | ||
| 263 | let seq = self.sdpcm_seq; | 263 | let seq = self.sdpcm_seq; |
| 264 | self.sdpcm_seq = self.sdpcm_seq.wrapping_add(1); | 264 | self.sdpcm_seq = self.sdpcm_seq.wrapping_add(1); |
| @@ -275,19 +275,19 @@ where | |||
| 275 | reserved: [0, 0], | 275 | reserved: [0, 0], |
| 276 | }; | 276 | }; |
| 277 | 277 | ||
| 278 | let bcd_header = BcdHeader { | 278 | let bdc_header = BdcHeader { |
| 279 | flags: BDC_VERSION << BDC_VERSION_SHIFT, | 279 | flags: BDC_VERSION << BDC_VERSION_SHIFT, |
| 280 | priority: 0, | 280 | priority: 0, |
| 281 | flags2: 0, | 281 | flags2: 0, |
| 282 | data_offset: 0, | 282 | data_offset: 0, |
| 283 | }; | 283 | }; |
| 284 | trace!("tx {:?}", sdpcm_header); | 284 | trace!("tx {:?}", sdpcm_header); |
| 285 | trace!(" {:?}", bcd_header); | 285 | trace!(" {:?}", bdc_header); |
| 286 | 286 | ||
| 287 | buf8[0..SdpcmHeader::SIZE].copy_from_slice(&sdpcm_header.to_bytes()); | 287 | buf8[0..SdpcmHeader::SIZE].copy_from_slice(&sdpcm_header.to_bytes()); |
| 288 | buf8[SdpcmHeader::SIZE + PADDING_SIZE..][..BcdHeader::SIZE] | 288 | buf8[SdpcmHeader::SIZE + PADDING_SIZE..][..BdcHeader::SIZE] |
| 289 | .copy_from_slice(&bcd_header.to_bytes()); | 289 | .copy_from_slice(&bdc_header.to_bytes()); |
| 290 | buf8[SdpcmHeader::SIZE + PADDING_SIZE + BcdHeader::SIZE..][..packet.len()] | 290 | buf8[SdpcmHeader::SIZE + PADDING_SIZE + BdcHeader::SIZE..][..packet.len()] |
| 291 | .copy_from_slice(packet); | 291 | .copy_from_slice(packet); |
| 292 | 292 | ||
| 293 | let total_len = (total_len + 3) & !3; // round up to 4byte | 293 | let total_len = (total_len + 3) & !3; // round up to 4byte |
| @@ -366,13 +366,13 @@ where | |||
| 366 | } | 366 | } |
| 367 | } | 367 | } |
| 368 | CHANNEL_TYPE_EVENT => { | 368 | CHANNEL_TYPE_EVENT => { |
| 369 | let Some((_, bcd_packet)) = BcdHeader::parse(payload) else { | 369 | let Some((_, bdc_packet)) = BdcHeader::parse(payload) else { |
| 370 | warn!("BCD event, incomplete header"); | 370 | warn!("BDC event, incomplete header"); |
| 371 | return; | 371 | return; |
| 372 | }; | 372 | }; |
| 373 | 373 | ||
| 374 | let Some((event_packet, evt_data)) = EventPacket::parse(bcd_packet) else { | 374 | let Some((event_packet, evt_data)) = EventPacket::parse(bdc_packet) else { |
| 375 | warn!("BCD event, incomplete data"); | 375 | warn!("BDC event, incomplete data"); |
| 376 | return; | 376 | return; |
| 377 | }; | 377 | }; |
| 378 | 378 | ||
| @@ -439,7 +439,7 @@ where | |||
| 439 | } | 439 | } |
| 440 | } | 440 | } |
| 441 | CHANNEL_TYPE_DATA => { | 441 | CHANNEL_TYPE_DATA => { |
| 442 | let Some((_, packet)) = BcdHeader::parse(payload) else { return }; | 442 | let Some((_, packet)) = BdcHeader::parse(payload) else { return }; |
| 443 | trace!("rx pkt {:02x}", Bytes(&packet[..packet.len().min(48)])); | 443 | trace!("rx pkt {:02x}", Bytes(&packet[..packet.len().min(48)])); |
| 444 | 444 | ||
| 445 | match self.ch.try_rx_buf() { | 445 | match self.ch.try_rx_buf() { |
diff --git a/src/structs.rs b/src/structs.rs index 3b646e1a8..5ba633c74 100644 --- a/src/structs.rs +++ b/src/structs.rs | |||
| @@ -165,7 +165,7 @@ pub const BDC_VERSION_SHIFT: u8 = 4; | |||
| 165 | #[derive(Debug, Clone, Copy)] | 165 | #[derive(Debug, Clone, Copy)] |
| 166 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] | 166 | #[cfg_attr(feature = "defmt", derive(defmt::Format))] |
| 167 | #[repr(C)] | 167 | #[repr(C)] |
| 168 | pub struct BcdHeader { | 168 | pub struct BdcHeader { |
| 169 | pub flags: u8, | 169 | pub flags: u8, |
| 170 | /// 802.1d Priority (low 3 bits) | 170 | /// 802.1d Priority (low 3 bits) |
| 171 | pub priority: u8, | 171 | pub priority: u8, |
| @@ -173,24 +173,24 @@ pub struct BcdHeader { | |||
| 173 | /// Offset from end of BDC header to packet data, in 4-uint8_t words. Leaves room for optional headers. | 173 | /// Offset from end of BDC header to packet data, in 4-uint8_t words. Leaves room for optional headers. |
| 174 | pub data_offset: u8, | 174 | pub data_offset: u8, |
| 175 | } | 175 | } |
| 176 | impl_bytes!(BcdHeader); | 176 | impl_bytes!(BdcHeader); |
| 177 | 177 | ||
| 178 | impl BcdHeader { | 178 | impl BdcHeader { |
| 179 | pub fn parse(packet: &mut [u8]) -> Option<(&mut Self, &mut [u8])> { | 179 | pub fn parse(packet: &mut [u8]) -> Option<(&mut Self, &mut [u8])> { |
| 180 | if packet.len() < Self::SIZE { | 180 | if packet.len() < Self::SIZE { |
| 181 | return None; | 181 | return None; |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | let (bcd_header, bcd_packet) = packet.split_at_mut(Self::SIZE); | 184 | let (bdc_header, bdc_packet) = packet.split_at_mut(Self::SIZE); |
| 185 | let bcd_header = Self::from_bytes_mut(bcd_header.try_into().unwrap()); | 185 | let bdc_header = Self::from_bytes_mut(bdc_header.try_into().unwrap()); |
| 186 | trace!(" {:?}", bcd_header); | 186 | trace!(" {:?}", bdc_header); |
| 187 | 187 | ||
| 188 | let packet_start = 4 * bcd_header.data_offset as usize; | 188 | let packet_start = 4 * bdc_header.data_offset as usize; |
| 189 | 189 | ||
| 190 | let bcd_packet = bcd_packet.get_mut(packet_start..)?; | 190 | let bdc_packet = bdc_packet.get_mut(packet_start..)?; |
| 191 | trace!(" {:02x}", Bytes(&bcd_packet[..bcd_packet.len().min(36)])); | 191 | trace!(" {:02x}", Bytes(&bdc_packet[..bdc_packet.len().min(36)])); |
| 192 | 192 | ||
| 193 | Some((bcd_header, bcd_packet)) | 193 | Some((bdc_header, bdc_packet)) |
| 194 | } | 194 | } |
| 195 | } | 195 | } |
| 196 | 196 | ||
