aboutsummaryrefslogtreecommitdiff
path: root/embassy-usb-logger
diff options
context:
space:
mode:
Diffstat (limited to 'embassy-usb-logger')
-rw-r--r--embassy-usb-logger/CHANGELOG.md2
-rw-r--r--embassy-usb-logger/src/lib.rs20
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;
8use embassy_futures::join::join; 8use embassy_futures::join::join;
9use embassy_sync::pipe::Pipe; 9use embassy_sync::pipe::Pipe;
10use embassy_usb::class::cdc_acm::{CdcAcmClass, Receiver, Sender, State}; 10use embassy_usb::class::cdc_acm::{CdcAcmClass, Receiver, Sender, State};
11use embassy_usb::driver::Driver; 11use embassy_usb::driver::{Driver, EndpointError};
12use embassy_usb::{Builder, Config}; 12use embassy_usb::{Builder, Config};
13use log::{Metadata, Record}; 13use 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];