Skip to content

Commit d7520e6

Browse files
committed
feat: auto add device feature
fix: show proper ws_rw errors
1 parent dff79b6 commit d7520e6

File tree

2 files changed

+44
-7
lines changed

2 files changed

+44
-7
lines changed

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ release_build = ["sleep"]
5656
e2e = []
5757
qa = []
5858
sleep = []
59+
auto_add = []
5960

6061
[profile.dev]
6162
opt-level = 3

src/ws.rs

Lines changed: 43 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,25 @@ async fn ws_loop(
190190
.send(WsFrameOwned::Ping(alloc::vec::Vec::new()))
191191
.await;
192192

193+
#[cfg(feature = "auto_add")]
194+
{
195+
if !global_state
196+
.state
197+
.lock()
198+
.await
199+
.device_added
200+
.unwrap_or(false)
201+
{
202+
crate::ws::send_packet(crate::structs::TimerPacket {
203+
tag: None,
204+
data: crate::structs::TimerPacketInner::Add {
205+
firmware: alloc::string::ToString::to_string(crate::version::FIRMWARE),
206+
},
207+
})
208+
.await;
209+
}
210+
}
211+
193212
loop {
194213
let res = ws_rw(
195214
&mut rx_framer,
@@ -216,29 +235,46 @@ async fn ws_loop(
216235
}
217236
}
218237

238+
#[derive(Debug)]
239+
#[allow(dead_code)]
240+
enum WsRwError {
241+
OtaError(esp_hal_ota::OtaError),
242+
TaggedPublisherError,
243+
SocketWriteError,
244+
SocketReadError,
245+
Other,
246+
}
247+
219248
async fn ws_rw(
220249
framer_rx: &mut WsRxFramer<'_>,
221250
framer_tx: &mut WsTxFramer<'_>,
222251
global_state: GlobalState,
223252
socket: &mut WsSocket<'_, '_>,
224-
) -> Result<(), ()> {
225-
let mut ota = Ota::new(FlashStorage::new()).map_err(|_| ())?;
226-
let tagged_publisher = TAGGED_RETURN.publisher().map_err(|_| ())?;
253+
) -> Result<(), WsRwError> {
254+
let mut ota = Ota::new(FlashStorage::new()).map_err(WsRwError::OtaError)?;
255+
let tagged_publisher = TAGGED_RETURN
256+
.publisher()
257+
.map_err(|_| WsRwError::TaggedPublisherError)?;
227258
let recv = FRAME_CHANNEL.receiver();
228259

229260
loop {
230261
let read_fut = socket.read(framer_rx.mut_buf());
231262
let write_fut = recv.receive();
232263

233264
let n = match embassy_futures::select::select(read_fut, write_fut).await {
234-
embassy_futures::select::Either::First(read_res) => read_res,
265+
embassy_futures::select::Either::First(read_res) => {
266+
read_res.map_err(|_| WsRwError::SocketReadError)
267+
}
235268
embassy_futures::select::Either::Second(write_frame) => {
236269
let mut offset = 0;
237270
let frame_ref = write_frame.into_ref();
238271

239272
loop {
240273
let (data, finish) = framer_tx.partial_frame(&frame_ref, &mut offset);
241-
socket.write_all(data).await.map_err(|_| ())?;
274+
socket
275+
.write_all(data)
276+
.await
277+
.map_err(|_| WsRwError::SocketWriteError)?;
242278
if !finish {
243279
break;
244280
}
@@ -252,7 +288,7 @@ async fn ws_rw(
252288

253289
if n == 0 {
254290
log::warn!("read_n: 0");
255-
return Err(());
291+
return Err(WsRwError::Other);
256292
}
257293

258294
framer_rx.revolve_write_offset(n);
@@ -315,7 +351,7 @@ async fn ws_rw(
315351

316352
log::info!("Start update: {firmware}/{version}");
317353
log::info!("Begin update size: {size} crc: {crc}");
318-
ota.ota_begin(size, crc).map_err(|_| ())?;
354+
ota.ota_begin(size, crc).map_err(WsRwError::OtaError)?;
319355
unsafe {
320356
crate::state::OTA_STATE = true;
321357
}

0 commit comments

Comments
 (0)