|
@@ -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);
|