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