aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBadr Bouslikhin <[email protected]>2024-02-07 16:41:58 +0100
committerBadr Bouslikhin <[email protected]>2024-02-07 16:41:58 +0100
commitc95bf6895adfcd33b5238c02620e83c6713205ce (patch)
tree62e9d08929ab523d7ac6b64da05c1b5a6d94c23e
parent2e8b7d259057a0cf345396b250cacfc04a0e64a0 (diff)
feat(usb-dfu): change usb dfu chunks write mechanism
-rw-r--r--embassy-usb-dfu/src/dfu.rs17
1 files changed, 16 insertions, 1 deletions
diff --git a/embassy-usb-dfu/src/dfu.rs b/embassy-usb-dfu/src/dfu.rs
index e99aa70c3..5f2c98684 100644
--- a/embassy-usb-dfu/src/dfu.rs
+++ b/embassy-usb-dfu/src/dfu.rs
@@ -60,6 +60,21 @@ impl<'d, DFU: NorFlash, STATE: NorFlash, RST: Reset, const BLOCK_SIZE: usize> Ha
60 } 60 }
61 Ok(Request::Dnload) if self.attrs.contains(DfuAttributes::CAN_DOWNLOAD) => { 61 Ok(Request::Dnload) if self.attrs.contains(DfuAttributes::CAN_DOWNLOAD) => {
62 if req.value == 0 { 62 if req.value == 0 {
63 match self.updater.prepare_update() {
64 Ok(_) => {
65 self.status = Status::Ok;
66 }
67 Err(e) => {
68 self.state = State::Error;
69 match e {
70 embassy_boot::FirmwareUpdaterError::Flash(e) => match e {
71 NorFlashErrorKind::NotAligned => self.status = Status::ErrErase,
72 _ => self.status = Status::ErrUnknown,
73 },
74 _ => self.status = Status::ErrUnknown,
75 }
76 }
77 }
63 self.state = State::Download; 78 self.state = State::Download;
64 self.offset = 0; 79 self.offset = 0;
65 } 80 }
@@ -93,7 +108,7 @@ impl<'d, DFU: NorFlash, STATE: NorFlash, RST: Reset, const BLOCK_SIZE: usize> Ha
93 self.state = State::Error; 108 self.state = State::Error;
94 return Some(OutResponse::Rejected); 109 return Some(OutResponse::Rejected);
95 } 110 }
96 match self.updater.write_firmware(self.offset, buf.as_ref()) { 111 match self.updater.write_firmware_without_erase(self.offset, buf.as_ref()) {
97 Ok(_) => { 112 Ok(_) => {
98 self.status = Status::Ok; 113 self.status = Status::Ok;
99 self.state = State::DlSync; 114 self.state = State::DlSync;