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 53563b67e721356234549ab74a24cccae962dd9b
Author: anjiahao <[email protected]>
AuthorDate: Mon Dec 25 15:23:33 2023 +0800

    fastbootd:add delay ms for bootloader
    
    usage in bootloader
    if [flag == bootloader]
      fastbootd
    else
      fastbootd 500
    fi
    
    host:
    $fastboot flash app app.bin
     < waiting for any device >
    
    let board enter booloader,use <reboot bootloader> or hard reset
    
    then will flash it.
    
    Signed-off-by: anjiahao <[email protected]>
---
 system/fastboot/fastboot.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/system/fastboot/fastboot.c b/system/fastboot/fastboot.c
index a74ba5b36..203b7a1a1 100644
--- a/system/fastboot/fastboot.c
+++ b/system/fastboot/fastboot.c
@@ -41,6 +41,7 @@
 #include <sys/stat.h>
 #include <sys/statfs.h>
 #include <sys/types.h>
+#include <sys/poll.h>
 
 /****************************************************************************
  * Pre-processor Definitions
@@ -112,6 +113,7 @@ struct fastboot_ctx_s
   size_t download_size;
   size_t download_offset;
   size_t total_imgsize;
+  int wait_ms;
   FAR void *download_buffer;
   FAR struct fastboot_var_s *varlist;
 };
@@ -576,6 +578,19 @@ static void fastboot_reboot_bootloader(FAR struct 
fastboot_ctx_s *context,
 
 static void fastboot_command_loop(FAR struct fastboot_ctx_s *context)
 {
+  if (context->wait_ms > 0)
+    {
+      struct pollfd fds[1];
+
+      fds[0].fd = context->usbdev_in;
+      fds[0].events = POLLIN;
+
+      if (poll(fds, 1, context->wait_ms) <= 0)
+        {
+          return;
+        }
+    }
+
   while (1)
     {
       char buffer[FASTBOOT_MSG_LEN];
@@ -698,6 +713,21 @@ int main(int argc, FAR char **argv)
     }
 #endif /* FASTBOOTD_USB_BOARDCTL */
 
+  if (argc > 1)
+    {
+      if (strcmp(argv[1], "-h") == 0)
+        {
+          printf("Usage: fastbootd [wait_ms]\n");
+          return 0;
+        }
+
+      context.wait_ms = atoi(argv[1]);
+    }
+  else
+    {
+      context.wait_ms = 0;
+    }
+
   buffer = malloc(CONFIG_SYSTEM_FASTBOOTD_DOWNLOAD_MAX);
   if (buffer == NULL)
     {

Reply via email to