diff options
Diffstat (limited to 'embassy-usb-logger')
| -rw-r--r-- | embassy-usb-logger/CHANGELOG.md | 2 | ||||
| -rw-r--r-- | embassy-usb-logger/src/lib.rs | 20 |
2 files changed, 16 insertions, 6 deletions
diff --git a/embassy-usb-logger/CHANGELOG.md b/embassy-usb-logger/CHANGELOG.md index 4ea0e8871..3ba140b1f 100644 --- a/embassy-usb-logger/CHANGELOG.md +++ b/embassy-usb-logger/CHANGELOG.md | |||
| @@ -8,6 +8,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |||
| 8 | <!-- next-header --> | 8 | <!-- next-header --> |
| 9 | ## Unreleased - ReleaseDate | 9 | ## Unreleased - ReleaseDate |
| 10 | 10 | ||
| 11 | - Fixed panic in `UsbLogger` when usb is disconnected | ||
| 12 | |||
| 11 | ## 0.5.1 - 2025-08-26 | 13 | ## 0.5.1 - 2025-08-26 |
| 12 | 14 | ||
| 13 | ## 0.5.0 - 2025-07-22 | 15 | ## 0.5.0 - 2025-07-22 |
diff --git a/embassy-usb-logger/src/lib.rs b/embassy-usb-logger/src/lib.rs index de25abce1..7c3c5e709 100644 --- a/embassy-usb-logger/src/lib.rs +++ b/embassy-usb-logger/src/lib.rs | |||
| @@ -8,7 +8,7 @@ use core::future::Future; | |||
| 8 | use embassy_futures::join::join; | 8 | use embassy_futures::join::join; |
| 9 | use embassy_sync::pipe::Pipe; | 9 | use embassy_sync::pipe::Pipe; |
| 10 | use embassy_usb::class::cdc_acm::{CdcAcmClass, Receiver, Sender, State}; | 10 | use embassy_usb::class::cdc_acm::{CdcAcmClass, Receiver, Sender, State}; |
| 11 | use embassy_usb::driver::Driver; | 11 | use embassy_usb::driver::{Driver, EndpointError}; |
| 12 | use embassy_usb::{Builder, Config}; | 12 | use embassy_usb::{Builder, Config}; |
| 13 | use log::{Metadata, Record}; | 13 | use log::{Metadata, Record}; |
| 14 | 14 | ||
| @@ -133,17 +133,25 @@ impl<const N: usize, T: ReceiverHandler + Send + Sync> UsbLogger<N, T> { | |||
| 133 | sender.wait_connection().await; | 133 | sender.wait_connection().await; |
| 134 | loop { | 134 | loop { |
| 135 | let len = self.buffer.read(&mut rx[..]).await; | 135 | let len = self.buffer.read(&mut rx[..]).await; |
| 136 | let _ = sender.write_packet(&rx[..len]).await; | 136 | if Err(EndpointError::Disabled) == sender.write_packet(&rx[..len]).await |
| 137 | if len as u8 == MAX_PACKET_SIZE { | 137 | || len as u8 == MAX_PACKET_SIZE && Err(EndpointError::Disabled) == sender.write_packet(&[]).await |
| 138 | let _ = sender.write_packet(&[]).await; | 138 | { |
| 139 | } | 139 | sender.wait_connection().await; |
| 140 | }; | ||
| 140 | } | 141 | } |
| 141 | }; | 142 | }; |
| 142 | let reciever_fut = async { | 143 | let reciever_fut = async { |
| 143 | let mut reciever_buf: [u8; MAX_PACKET_SIZE as usize] = [0; MAX_PACKET_SIZE as usize]; | 144 | let mut reciever_buf: [u8; MAX_PACKET_SIZE as usize] = [0; MAX_PACKET_SIZE as usize]; |
| 144 | receiver.wait_connection().await; | 145 | receiver.wait_connection().await; |
| 145 | loop { | 146 | loop { |
| 146 | let n = receiver.read_packet(&mut reciever_buf).await.unwrap(); | 147 | let n = match receiver.read_packet(&mut reciever_buf).await { |
| 148 | Err(EndpointError::Disabled) => { | ||
| 149 | receiver.wait_connection().await; | ||
| 150 | continue; | ||
| 151 | } | ||
| 152 | Err(_) => continue, | ||
| 153 | Ok(n) => n, | ||
| 154 | }; | ||
| 147 | match &self.recieve_handler { | 155 | match &self.recieve_handler { |
| 148 | Some(handler) => { | 156 | Some(handler) => { |
| 149 | let data = &reciever_buf[..n]; | 157 | let data = &reciever_buf[..n]; |
