This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git

commit 4d0b9d61de990bc4625c9181c4b1400169f76e2e
Author: wangjianyu3 <[email protected]>
AuthorDate: Fri Dec 15 12:08:40 2023 +0800

    system/fastboot: Support USB boardctl
    
    Signed-off-by: wangjianyu3 <[email protected]>
---
 system/fastboot/Kconfig    |  7 +++++++
 system/fastboot/fastboot.c | 36 ++++++++++++++++++++++++++++++++++++
 2 files changed, 43 insertions(+)

diff --git a/system/fastboot/Kconfig b/system/fastboot/Kconfig
index d05875c23..181405ee4 100644
--- a/system/fastboot/Kconfig
+++ b/system/fastboot/Kconfig
@@ -24,4 +24,11 @@ config SYSTEM_FASTBOOTD_DOWNLOAD_MAX
        int "USB-fastboot download buffer size"
        default 40960
 
+config FASTBOOTD_USB_BOARDCTL
+       bool "USB Board Control"
+       depends on BOARDCTL
+       depends on BOARDCTL_USBDEVCTRL
+       ---help---
+               Connect usbdev before running fastboot daemon.
+
 endif # SYSTEM_FASTBOOTD
diff --git a/system/fastboot/fastboot.c b/system/fastboot/fastboot.c
index 1d4786889..c703a34bb 100644
--- a/system/fastboot/fastboot.c
+++ b/system/fastboot/fastboot.c
@@ -623,6 +623,42 @@ int main(int argc, FAR char **argv)
   char usbdev[32];
   int ret = OK;
 
+#ifdef CONFIG_FASTBOOTD_USB_BOARDCTL
+  struct boardioc_usbdev_ctrl_s ctrl;
+#  ifdef CONFIG_USBDEV_COMPOSITE
+    uint8_t dev = BOARDIOC_USBDEV_COMPOSITE;
+#  else
+    uint8_t dev = BOARDIOC_USBDEV_FASTBOOT;
+#  endif
+  FAR void *handle;
+
+  ctrl.usbdev   = dev;
+  ctrl.action   = BOARDIOC_USBDEV_INITIALIZE;
+  ctrl.instance = 0;
+  ctrl.config   = 0;
+  ctrl.handle   = NULL;
+
+  ret = boardctl(BOARDIOC_USBDEV_CONTROL, (uintptr_t)&ctrl);
+  if (ret < 0)
+    {
+      printf("boardctl(BOARDIOC_USBDEV_CONTROL) failed: %d\n", ret);
+      return ret;
+    }
+
+  ctrl.usbdev   = dev;
+  ctrl.action   = BOARDIOC_USBDEV_CONNECT;
+  ctrl.instance = 0;
+  ctrl.config   = 0;
+  ctrl.handle   = &handle;
+
+  ret = boardctl(BOARDIOC_USBDEV_CONTROL, (uintptr_t)&ctrl);
+  if (ret < 0)
+    {
+      printf("boardctl(BOARDIOC_USBDEV_CONTROL) failed: %d\n", ret);
+      return ret;
+    }
+#endif /* FASTBOOTD_USB_BOARDCTL */
+
   buffer = malloc(CONFIG_SYSTEM_FASTBOOTD_DOWNLOAD_MAX);
   if (buffer == NULL)
     {

Reply via email to