diff options
| author | Badr Bouslikhin <[email protected]> | 2024-02-07 16:41:58 +0100 |
|---|---|---|
| committer | Badr Bouslikhin <[email protected]> | 2024-02-07 16:41:58 +0100 |
| commit | c95bf6895adfcd33b5238c02620e83c6713205ce (patch) | |
| tree | 62e9d08929ab523d7ac6b64da05c1b5a6d94c23e | |
| parent | 2e8b7d259057a0cf345396b250cacfc04a0e64a0 (diff) | |
feat(usb-dfu): change usb dfu chunks write mechanism
| -rw-r--r-- | embassy-usb-dfu/src/dfu.rs | 17 |
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; |
