usb: thor: add screen support
authorInha Song <ideal.song@samsung.com>
Fri, 11 Oct 2013 08:50:24 +0000 (17:50 +0900)
committerJaehoon Chung <jh80.chung@samsung.com>
Tue, 20 Oct 2020 00:42:15 +0000 (09:42 +0900)
cmd_thordown.c:
- add libtizen header
- change error handling for thor init
- add call to draw_thor_fail_screen() on error

f_thor.c:
- thor_init(): return -EINTR on ctrl+c or if power key was pressed 3 times
- thor_rx_data(): return -EINTR when pressed ctrl+c on data receiving
- add display simple info screen before cable is not connected
- add display download screen when connection is established
- update download progress bar if data receiving

Change-Id: Ia89ef48c6c2faa5eda5dda5c5b3951e675eec03b
Signed-off-by: Inha Song <ideal.song@samsung.com>
Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com>
cmd/thordown.c
drivers/usb/gadget/f_thor.c

index ae20ddd..5a5c7a8 100644 (file)
@@ -12,6 +12,7 @@
 #include <dfu.h>
 #include <g_dnl.h>
 #include <usb.h>
+#include <libtizen.h>
 
 int do_thor_down(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
@@ -47,8 +48,12 @@ int do_thor_down(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 
        ret = thor_init();
        if (ret) {
-               pr_err("THOR DOWNLOAD failed: %d\n", ret);
-               ret = CMD_RET_FAILURE;
+               error("THOR DOWNLOAD failed: %d", ret);
+               if (ret == -EINTR)
+                       ret = CMD_RET_SUCCESS;
+               else
+                       ret = CMD_RET_FAILURE;
+
                goto exit;
        }
 
@@ -65,6 +70,14 @@ exit:
 done:
        dfu_free_entities();
 
+#ifdef CONFIG_TIZEN
+#ifdef CONFIG_LCD      /* TODO : Need to enable LCD */
+       if (ret != CMD_RET_SUCCESS)
+               draw_thor_fail_screen();
+       else
+               lcd_clear();
+#endif
+#endif
        return ret;
 }
 
index 88fc87f..382433d 100644 (file)
 #include <linux/usb/cdc.h>
 #include <g_dnl.h>
 #include <dfu.h>
+#include <libtizen.h>
+#include <samsung/misc.h>
+#include <linux/input.h>
+#include <usb.h>
 
 #include "f_thor.h"
 
@@ -53,6 +57,10 @@ DEFINE_CACHE_ALIGN_BUFFER(unsigned char, thor_rx_data_buf,
 /* ********************************************************** */
 DEFINE_CACHE_ALIGN_BUFFER(char, f_name, F_NAME_BUF_SIZE + 1);
 static unsigned long long int thor_file_size;
+#ifdef CONFIG_TIZEN
+static unsigned long long int total_file_size;
+static unsigned long long int downloaded_file_size;
+#endif
 static int alt_setting_num;
 
 static void send_rsp(const struct rsp_box *rsp)
@@ -269,7 +277,11 @@ static long long int process_rqt_download(const struct rqt_box *rqt)
                thor_file_size = (unsigned long long int)rqt->int_data[0] +
                                 (((unsigned long long int)rqt->int_data[1])
                                  << 32);
-               debug("INIT: total %llu bytes\n", thor_file_size);
+#ifdef CONFIG_TIZEN
+               total_file_size = thor_file_size;
+               downloaded_file_size = 0;
+#endif
+               debug("INIT: total %d bytes\n", rqt->int_data[0]);
                break;
        case RQT_DL_FILE_INFO:
                file_type = rqt->int_data[0];
@@ -558,10 +570,17 @@ static int thor_rx_data(void)
                while (!dev->rxdata) {
                        usb_gadget_handle_interrupts(0);
                        if (ctrlc())
-                               return -1;
+                               return -EINTR;
                }
+
                dev->rxdata = 0;
                data_to_rx -= dev->out_req->actual;
+#ifdef CONFIG_TIZEN
+               downloaded_file_size += dev->out_req->actual;
+#ifdef CONFIG_LCD      /* TODO : Need to enable LCD*/
+               draw_thor_progress(total_file_size, downloaded_file_size);
+#endif
+#endif
        } while (data_to_rx);
 
        return tmp;
@@ -687,12 +706,32 @@ static void thor_set_dma(void *addr, int len)
 int thor_init(void)
 {
        struct thor_dev *dev = thor_func->dev;
+       int power_key_cnt = 0;
 
+#ifdef CONFIG_TIZEN
+#ifdef CONFIG_LCD      /* TODO : Need to enable LCD*/
+       draw_thor_init_screen();
+#endif
+#endif
        /* Wait for a device enumeration and configuration settings */
        debug("THOR enumeration/configuration setting....\n");
-       while (!dev->configuration_done)
+       while (!dev->configuration_done) {
                usb_gadget_handle_interrupts(0);
-
+#ifdef CONFIG_LCD_MENU
+               power_key_cnt += key_pressed(KEY_POWER);
+#endif
+               if (ctrlc() || power_key_cnt >= 3) {
+#ifdef CONFIG_BOOT_INFORM
+                       boot_inform_clear();
+#endif
+                       return -EINTR;
+               }
+       }
+#ifdef CONFIG_TIZEN
+#ifdef CONFIG_LCD      /* TODO : Need to enable LCD*/
+       draw_thor_screen();
+#endif
+#endif
        thor_set_dma(thor_rx_data_buf, strlen("THOR"));
        /* detect the download request from Host PC */
        if (thor_rx_data() < 0) {
@@ -733,7 +772,7 @@ int thor_handle(void)
                                return ret;
                } else {
                        printf("%s: No data received!\n", __func__);
-                       break;
+                       return ret;
                }
        }
 
@@ -896,6 +935,8 @@ static void thor_func_disable(struct usb_function *f)
                usb_ep_disable(dev->int_ep);
                dev->int_ep->driver_data = NULL;
        }
+
+       dev->configuration_done = 0;
 }
 
 static int thor_eps_setup(struct usb_function *f)