From 8b15485609180b36a598a2eee75cb05ae61d1767 Mon Sep 17 00:00:00 2001 From: Sylwester Nawrocki Date: Wed, 25 Nov 2020 18:54:28 +0100 Subject: [PATCH] thor: Add API for thor status notifications This patch adds an empty by default thor_status_notify() function which can be reimplemented as required and which allows to add notifications of thor status and flashing progress, e.g. on external monitor. Change-Id: Ic1eaad7f3f5adbca404162b745a9287d5a9ae247 Signed-off-by: Sylwester Nawrocki --- cmd/thordown.c | 7 +++++++ drivers/usb/gadget/f_thor.c | 12 ++++++++++++ include/thor.h | 15 +++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/cmd/thordown.c b/cmd/thordown.c index de00600c15..c1dc115db6 100644 --- a/cmd/thordown.c +++ b/cmd/thordown.c @@ -100,6 +100,8 @@ done: else lcd_clear(); #endif + if (ret != CMD_RET_SUCCESS) + thor_status_notify(THOR_NOTIFY_DOWNLOAD_FAILED, NULL); #endif bad_args: if (argc == 1) { @@ -110,6 +112,11 @@ bad_args: return ret; } +__weak void thor_status_notify(enum thor_notify_type type, + struct thor_notify_data *data) +{ +} + U_BOOT_CMD(thordown, CONFIG_SYS_MAXARGS, 1, do_thor_down, "TIZEN \"THOR\" downloader", " \n" diff --git a/drivers/usb/gadget/f_thor.c b/drivers/usb/gadget/f_thor.c index 30f764f79f..31cbb07d76 100644 --- a/drivers/usb/gadget/f_thor.c +++ b/drivers/usb/gadget/f_thor.c @@ -551,6 +551,9 @@ static struct usb_request *alloc_ep_req(struct usb_ep *ep, unsigned length) static int thor_rx_data(size_t *received) { struct thor_dev *dev = thor_func->dev; +#ifdef CONFIG_TIZEN + struct thor_notify_data nd; +#endif size_t data_to_rx; int status; @@ -579,6 +582,11 @@ static int thor_rx_data(size_t *received) data_to_rx -= dev->out_req->actual; #ifdef CONFIG_TIZEN downloaded_file_size += dev->out_req->actual; + + nd.total_size = total_file_size; + nd.current_size = downloaded_file_size; + thor_status_notify(THOR_NOTIFY_PROGRESS, &nd); + #ifdef CONFIG_LCD /* TODO : Need to enable LCD*/ draw_thor_progress(total_file_size, downloaded_file_size); #endif @@ -712,6 +720,8 @@ int thor_init(void) size_t received; int ret; + thor_status_notify(THOR_NOTIFY_INIT, NULL); + #ifdef CONFIG_TIZEN #ifdef CONFIG_LCD /* TODO : Need to enable LCD*/ draw_thor_init_screen(); @@ -738,6 +748,8 @@ int thor_init(void) draw_thor_connected(); #endif #endif + thor_status_notify(THOR_NOTIFY_CONNECTED, NULL); + thor_set_dma(thor_rx_data_buf, strlen("THOR")); /* detect the download request from Host PC */ ret = thor_rx_data(&received); diff --git a/include/thor.h b/include/thor.h index ee67ab0a27..171b8b8827 100644 --- a/include/thor.h +++ b/include/thor.h @@ -17,4 +17,19 @@ int thor_handle(void); int thor_init(void); int thor_add(struct usb_configuration *c); + +enum thor_notify_type { + THOR_NOTIFY_INIT, + THOR_NOTIFY_CONNECTED, + THOR_NOTIFY_PROGRESS, + THOR_NOTIFY_DOWNLOAD_FAILED, +}; + +struct thor_notify_data { + u64 total_size; + u64 current_size; +}; + +void thor_status_notify(enum thor_notify_type type, + struct thor_notify_data *data); #endif /* __THOR_H_ */ -- 2.34.1