INNER CODE UNIT · C
dfu_dnload
dmitrystu/sboot_stm32 · src/bootloader.c:131
static usbd_respond dfu_dnload(void *buf, size_t blksize) {
switch(dfu_data.bState) {
case USB_DFU_STATE_DFU_DNLOADIDLE:
case USB_DFU_STATE_DFU_DNLOADSYNC:
case USB_DFU_STATE_DFU_IDLE:
if (blksize == 0) {
dfu_data.bState = USB_DFU_STATE_DFU_MANIFESTSYNC;
return usbd_ack;
}
if (blksize > dfu_data.remained) {
dfu_data.bStatus = USB_DFU_STATUS_ERR_ADDRESS;
dfu_data.bState = USB_DFU_STATE_DFU_ERROR;
return usbd_ack;
}
aes_decrypt(buf, buf, blksize );
dfu_data.bStatus = dfu_data.flash(dfu_data.dptr, buf, blksize);
if (dfu_data.bStatus == USB_DFU_STATUS_OK) {