|  | @@ -53,7 +53,7 @@ void SensorInfoTimerCallback(TimerHandle_t pxTimer) {
 | 
	
		
			
				|  |  |  	xTimerStart(cli_states[num_timer].RepeatSensorInfoTimer, 0);
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_t *s  )
 | 
	
		
			
				|  |  | +static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_t *s)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	portBASE_TYPE xReturn = pdTRUE;
 | 
	
		
			
				|  |  |  	uint32_t len;
 | 
	
	
		
			
				|  | @@ -102,14 +102,14 @@ static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_
 | 
	
		
			
				|  |  |  				strcpy( ( char * ) pcWriteBuffer, "\r\nАвторизация успешно пройдена\r\n>" );
 | 
	
		
			
				|  |  |  				s->input_state = CLI_CMD;
 | 
	
		
			
				|  |  |  				switch (user_id) {
 | 
	
		
			
				|  |  | -				  case 0:
 | 
	
		
			
				|  |  | -					  snprintf(name_login_telnet, sizeof(name_login_telnet), "Администратор");
 | 
	
		
			
				|  |  | -					  break;
 | 
	
		
			
				|  |  | -				  case 1:
 | 
	
		
			
				|  |  | -					  snprintf(name_login_telnet, sizeof(name_login_telnet), "Пользователь");
 | 
	
		
			
				|  |  | -					  break;
 | 
	
		
			
				|  |  | -				  default:
 | 
	
		
			
				|  |  | -					  break;
 | 
	
		
			
				|  |  | +					case 0:
 | 
	
		
			
				|  |  | +						snprintf(name_login_telnet, sizeof(name_login_telnet), "Администратор");
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					case 1:
 | 
	
		
			
				|  |  | +						snprintf(name_login_telnet, sizeof(name_login_telnet), "Пользователь");
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  | +					default:
 | 
	
		
			
				|  |  | +						break;
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  				log_event_data(LOG_LOGIN_TELNET, name_login_telnet);
 | 
	
	
		
			
				|  | @@ -145,7 +145,7 @@ static portBASE_TYPE FreeRTOS_CLIAuthProcess( int8_t * pcWriteBuffer, cli_state_
 | 
	
		
			
				|  |  |  	return xReturn;
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static portBASE_TYPE FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_state_t *s  )
 | 
	
		
			
				|  |  | +static portBASE_TYPE FreeRTOS_ChangePWDProcess( int8_t * pcWriteBuffer, cli_state_t *s)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |  	portBASE_TYPE xReturn = pdTRUE;
 | 
	
		
			
				|  |  |  	uint32_t len;
 | 
	
	
		
			
				|  | @@ -215,7 +215,7 @@ static void cli_input(cli_state_t *s)
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			break;
 | 
	
		
			
				|  |  |  		case CLI_CMD:
 | 
	
		
			
				|  |  | -			/* The input string has been terminated.  Was the
 | 
	
		
			
				|  |  | +			/* The input string has been terminated.	Was the
 | 
	
		
			
				|  |  |  			input a quit command? */
 | 
	
		
			
				|  |  |  			if( strcmp( "quit", ( const char * ) s->buf ) == 0 )
 | 
	
		
			
				|  |  |  			{
 | 
	
	
		
			
				|  | @@ -248,7 +248,7 @@ static void cli_input(cli_state_t *s)
 | 
	
		
			
				|  |  |  					/* Ensure there is not a string lingering in
 | 
	
		
			
				|  |  |  					the output buffer. */
 | 
	
		
			
				|  |  |  					cOutputBuffer[ 0 ] = 0x00;
 | 
	
		
			
				|  |  | -                                        // FIXME telnetState should go into the command processor
 | 
	
		
			
				|  |  | +					// FIXME telnetState should go into the command processor
 | 
	
		
			
				|  |  |  					//input_state = s->input_state;
 | 
	
		
			
				|  |  |  					xReturned = FreeRTOS_CLIProcessCommand(s, s->buf, cOutputBuffer, configCOMMAND_INT_MAX_OUTPUT_SIZE );
 | 
	
		
			
				|  |  |  					//s->input_state = input_state;
 | 
	
	
		
			
				|  | @@ -260,11 +260,9 @@ static void cli_input(cli_state_t *s)
 | 
	
		
			
				|  |  |  					strcpy( s->prev_cmd, s->buf );
 | 
	
		
			
				|  |  |  					memset( s->buf, 0x00, cmdMAX_INPUT_SIZE );
 | 
	
		
			
				|  |  |  					xTimerStart(s->RepeatSensorInfoTimer, 0);
 | 
	
		
			
				|  |  | -				}
 | 
	
		
			
				|  |  | -				else{
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | +				} else {
 | 
	
		
			
				|  |  |  					/* All the strings generated by the input
 | 
	
		
			
				|  |  | -					command have been sent.  Clear the input
 | 
	
		
			
				|  |  | +					command have been sent.	Clear the input
 | 
	
		
			
				|  |  |  					string ready to receive the next command.
 | 
	
		
			
				|  |  |  					Remember the command that was just processed
 | 
	
		
			
				|  |  |  					first in case it is to be processed again. */
 | 
	
	
		
			
				|  | @@ -300,50 +298,53 @@ void cli_getchar(cli_state_t *s, char incoming_char)
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -  if(s->buf[s->bufptr] == ISO_nl ||
 | 
	
		
			
				|  |  | -	s->buf[s->bufptr] == 0) {
 | 
	
		
			
				|  |  | -	s->bufptr = 0;
 | 
	
		
			
				|  |  | -    return;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -  if(s->buf[s->bufptr] == ISO_cr ||
 | 
	
		
			
				|  |  | -     s->bufptr == sizeof(s->buf) - 1) {
 | 
	
		
			
				|  |  | -    if(s->bufptr > 0) {
 | 
	
		
			
				|  |  | -      s->buf[s->bufptr] = 0;
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -    cli_input(s);
 | 
	
		
			
				|  |  | -    s->bufptr = 0;
 | 
	
		
			
				|  |  | -  } else if( s->buf[s->bufptr] == '\b' || s->buf[s->bufptr] == 0x7f)
 | 
	
		
			
				|  |  | -	{
 | 
	
		
			
				|  |  | -		/* Backspace was pressed.  Erase the last
 | 
	
		
			
				|  |  | +	if(s->buf[s->bufptr] == ISO_nl || s->buf[s->bufptr] == 0) {
 | 
	
		
			
				|  |  | +		s->bufptr = 0;
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if(s->buf[s->bufptr] == ISO_cr || s->bufptr == sizeof(s->buf) - 1) {
 | 
	
		
			
				|  |  | +		if(s->bufptr > 0) {
 | 
	
		
			
				|  |  | +			s->buf[s->bufptr] = 0;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		cli_input(s);
 | 
	
		
			
				|  |  | +		s->bufptr = 0;
 | 
	
		
			
				|  |  | +	} else if( s->buf[s->bufptr] == '\b' || s->buf[s->bufptr] == 0x7f) {
 | 
	
		
			
				|  |  | +		/* Backspace was pressed.	Erase the last
 | 
	
		
			
				|  |  |  		character in the string - if any. */
 | 
	
		
			
				|  |  | -	  	s->buf[s->bufptr] = '\0';
 | 
	
		
			
				|  |  | +			s->buf[s->bufptr] = '\0';
 | 
	
		
			
				|  |  |  		if( s->bufptr > 0 )
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			s->bufptr--;
 | 
	
		
			
				|  |  |  			s->buf[s->bufptr] = '\0';
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +	} else if (s->buf[s->bufptr] == 0x03){
 | 
	
		
			
				|  |  | +		xTimerStop(s->RepeatSensorInfoTimer, 0);
 | 
	
		
			
				|  |  | +		s->flag_telnet_ip_option = true;
 | 
	
		
			
				|  |  | +		if(s->input_state != CLI_CHANGE_PWD && s->input_state != CLI_CHANGE_PWD_ACK)
 | 
	
		
			
				|  |  | +			s->send( s->num_connect, pcEndOfCommandOutputString, strlen( ( const char * ) pcEndOfCommandOutputString ));
 | 
	
		
			
				|  |  | +	} else {
 | 
	
		
			
				|  |  | +		++s->bufptr;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  | -  else if (s->buf[s->bufptr] == 0x03){
 | 
	
		
			
				|  |  | -	  xTimerStop(s->RepeatSensorInfoTimer, 0);
 | 
	
		
			
				|  |  | -	  s->flag_telnet_ip_option = true;
 | 
	
		
			
				|  |  | -	  if(s->input_state != CLI_CHANGE_PWD && s->input_state != CLI_CHANGE_PWD_ACK)
 | 
	
		
			
				|  |  | -	  	s->send( s->num_connect, pcEndOfCommandOutputString, strlen( ( const char * ) pcEndOfCommandOutputString ));
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  else {
 | 
	
		
			
				|  |  | -    ++s->bufptr;
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  #define array_len(x) (sizeof(x)/sizeof(x[0]))
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  cli_state_t *alloc_state(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  | -  for (unsigned i = 0; i < array_len(cli_states); ++i) {
 | 
	
		
			
				|  |  | -    if (cli_states[i].state == STATE_UNUSED) {
 | 
	
		
			
				|  |  | -      cli_states[i].state = STATE_CLOSE;
 | 
	
		
			
				|  |  | -      return &cli_states[i];
 | 
	
		
			
				|  |  | -    }
 | 
	
		
			
				|  |  | -  }
 | 
	
		
			
				|  |  | -  return 0;
 | 
	
		
			
				|  |  | +	for (unsigned i = 0; i < array_len(cli_states); ++i) {
 | 
	
		
			
				|  |  | +		if (cli_states[i].state == STATE_UNUSED) {
 | 
	
		
			
				|  |  | +			cli_states[i].state = STATE_CLOSE;
 | 
	
		
			
				|  |  | +			return &cli_states[i];
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +	return 0;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void cli_hello(cli_state_t *cli_state)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	cli_state->state = STATE_NORMAL;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	const char hello[] = "hello\r\n>";
 | 
	
		
			
				|  |  | +	cli_state->send(cli_state->num_connect, hello, sizeof(hello));
 | 
	
		
			
				|  |  |  }
 |