瀏覽代碼

telnet: `ftp run` now polls the client for status

Sergey Alirzaev 4 年之前
父節點
當前提交
6820391fc6
共有 1 個文件被更改,包括 17 次插入3 次删除
  1. 17 3
      modules/cli/CLI_Commands.c

+ 17 - 3
modules/cli/CLI_Commands.c

@@ -3220,9 +3220,23 @@ static portBASE_TYPE prvTaskFTPCommand(cli_state_t *cli_state, int8_t *pcWriteBu
             }
             break; }
         case ARG_FTP_run: {
-            ftpcfg.settings = &sSettings.sFTPUpdate;
-            start_ftp_client(&ftpcfg);
-            strcpy((char *)pcWriteBuffer, "Начато обновление ПО по FTP\r\n");
+            static bool ran = false;
+            if (ran) {
+                vTaskDelay(500 / portTICK_PERIOD_MS);
+                char *status = get_ftp_progress();
+                unsigned statuslen = strlen(status);
+                sprintf((char *)pcWriteBuffer, "Статус обновления по FTP: %s%%\r\n", status);
+                // stop polling when we get an error message or 100%
+                return statuslen < 3;
+            } else {
+                // run!
+                ftpcfg.settings = &sSettings.sFTPUpdate;
+                start_ftp_client(&ftpcfg);
+                strcpy((char *)pcWriteBuffer, "Начато обновление ПО по FTP\r\n");
+                ran = true;
+                // tell the caller to poll us for more data
+                return pdTRUE;
+            }
             break; }
         default:
             strcpy((char *)pcWriteBuffer, (const char *)pcInvalidCommand);