dfu: add error callback

Add error callback in dfu stack to manage some board specific
behavior on DFU targets.

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
This commit is contained in:
Patrick Delaunay 2021-05-18 15:12:12 +02:00 committed by Patrice Chotard
parent d4cb402577
commit d4710326c8
2 changed files with 23 additions and 0 deletions

View File

@ -44,6 +44,14 @@ __weak void dfu_initiated_callback(struct dfu_entity *dfu)
{
}
/*
* The purpose of the dfu_error_callback() function is to
* provide callback for dfu user
*/
__weak void dfu_error_callback(struct dfu_entity *dfu, const char *msg)
{
}
/*
* The purpose of the dfu_usb_get_reset() function is to
* provide information if after USB_DETACH request
@ -342,6 +350,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
printf("%s: Wrong sequence number! [%d] [%d]\n",
__func__, dfu->i_blk_seq_num, blk_seq_num);
dfu_transaction_cleanup(dfu);
dfu_error_callback(dfu, "Wrong sequence number");
return -1;
}
@ -366,6 +375,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
ret = dfu_write_buffer_drain(dfu);
if (ret) {
dfu_transaction_cleanup(dfu);
dfu_error_callback(dfu, "DFU write error");
return ret;
}
}
@ -375,6 +385,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
pr_err("Buffer overflow! (0x%p + 0x%x > 0x%p)\n", dfu->i_buf,
size, dfu->i_buf_end);
dfu_transaction_cleanup(dfu);
dfu_error_callback(dfu, "Buffer overflow");
return -1;
}
@ -386,6 +397,7 @@ int dfu_write(struct dfu_entity *dfu, void *buf, int size, int blk_seq_num)
ret = dfu_write_buffer_drain(dfu);
if (ret) {
dfu_transaction_cleanup(dfu);
dfu_error_callback(dfu, "DFU write error");
return ret;
}
}

View File

@ -377,6 +377,17 @@ void dfu_initiated_callback(struct dfu_entity *dfu);
*/
void dfu_flush_callback(struct dfu_entity *dfu);
/**
* dfu_error_callback() - weak callback called at the DFU write error
*
* It is a callback function called by DFU stack after DFU write error.
* This function allows to manage some board specific behavior on DFU targets
*
* @dfu: pointer to the dfu_entity which cause the error
* @msg: the message of the error
*/
void dfu_error_callback(struct dfu_entity *dfu, const char *msg);
int dfu_transaction_initiate(struct dfu_entity *dfu, bool read);
void dfu_transaction_cleanup(struct dfu_entity *dfu);