[Uboot-stm32] [PATCH 09/10] dfu: add error callback
Patrice CHOTARD
patrice.chotard at foss.st.com
Fri May 28 14:54:40 CEST 2021
Hi Patrick
On 5/18/21 3:12 PM, Patrick Delaunay wrote:
> Add error callback in dfu stack to manage some board specific
> behavior on DFU targets.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay at foss.st.com>
> ---
>
> drivers/dfu/dfu.c | 12 ++++++++++++
> include/dfu.h | 11 +++++++++++
> 2 files changed, 23 insertions(+)
>
> diff --git a/drivers/dfu/dfu.c b/drivers/dfu/dfu.c
> index 213a20e7bc..ff1859d946 100644
> --- a/drivers/dfu/dfu.c
> +++ b/drivers/dfu/dfu.c
> @@ -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;
> }
> }
> diff --git a/include/dfu.h b/include/dfu.h
> index d18b701728..1963e9ffb9 100644
> --- a/include/dfu.h
> +++ b/include/dfu.h
> @@ -383,6 +383,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);
>
>
Reviewed-by: Patrice Chotard <patrice.chotard at foss.st.com>
Thanks
Patrice
More information about the U-Boot
mailing list