Parcourir la source

cli: fixed `sensor info` routine

Sergey Alirzaev il y a 5 ans
Parent
commit
761c74e767
4 fichiers modifiés avec 24 ajouts et 8 suppressions
  1. 21 6
      modules/SSH_Server/cli.c
  2. 1 0
      modules/SSH_Server/cli.h
  3. 0 2
      modules/SSH_Server/server.c
  4. 2 0
      user/init_task.c

+ 21 - 6
modules/SSH_Server/cli.c

@@ -14,6 +14,10 @@
 #define ISO_nl       0x0a
 #define ISO_cr       0x0d
 
+#define REPEAT_SENSOR_INFO_TIME		configTICK_RATE_HZ*5*1
+
+#define array_len(x) (sizeof(x)/sizeof(x[0]))
+
 /**
   * @brief  Общая структура настроек
   */
@@ -34,19 +38,17 @@ cli_state_t cli_states[MAX_SESSIONS];
 void SensorInfoTimerCallback(TimerHandle_t pxTimer) {
 	portBASE_TYPE xReturned = pdTRUE;
 	uint8_t num_timer;
-	for(uint8_t i = 0; i < MAX_SESSIONS; i ++){
+	for (uint8_t i = 0; i < array_len(cli_states); i ++) {
 		if(pxTimer == cli_states[i].RepeatSensorInfoTimer){
 			num_timer = i;
 			break;
 		}
 	}
-	do
-	{
+	do {
 		/* Ensure there is not a string lingering in
 		the output buffer. */
 		cOutputBuffer[ 0 ] = 0x00;
-		// TODO
-		//xReturned = FreeRTOS_CLIProcessCommand( "sensor info", cOutputBuffer, configCOMMAND_INT_MAX_OUTPUT_SIZE );
+		xReturned = FreeRTOS_CLIProcessCommand(&cli_states[num_timer], "sensor info", cOutputBuffer, configCOMMAND_INT_MAX_OUTPUT_SIZE);
 		cli_states[num_timer].send(cli_states[num_timer].num_connect, cOutputBuffer, strlen( ( const char * ) cOutputBuffer ));
 
 	} while( xReturned != pdFALSE );
@@ -328,7 +330,20 @@ void cli_getchar(cli_state_t *s, char incoming_char)
 	}
 }
 
-#define array_len(x) (sizeof(x)/sizeof(x[0]))
+void cli_init(void)
+{
+	for (uint8_t i = 0; i < array_len(cli_states); i++) {
+		memset(cli_states[i].buf, 0, cmdMAX_INPUT_SIZE);
+		memset(cli_states[i].prev_cmd, 0, cmdMAX_INPUT_SIZE);
+		memset(cli_states[i].optdata, 0, cmdMAX_INPUT_SIZE);
+		cli_states[i].optlen = 0;
+		cli_states[i].num_connect = 0;
+		cli_states[i].user_id = USER;
+		cli_states[i].flag_telnet_ip_option = false;
+		cli_states[i].RepeatSensorInfoTimer = xTimerCreate("SensorInfoTmr", REPEAT_SENSOR_INFO_TIME, pdFALSE, ( void * ) i, SensorInfoTimerCallback);
+	}
+	vRegisterCLICommands();
+}
 
 cli_state_t *alloc_state(void)
 {

+ 1 - 0
modules/SSH_Server/cli.h

@@ -54,6 +54,7 @@ typedef struct {
 	intptr_t num_connect;	// fd
 } cli_state_t;
 
+void cli_init(void);
 void cli_getchar(cli_state_t *s, char incoming_char);
 cli_state_t *alloc_state(void);
 void cli_hello(cli_state_t *cli_state);

+ 0 - 2
modules/SSH_Server/server.c

@@ -165,7 +165,6 @@ static void *server_worker(void* vArgs)
         cli_state->input_state = CLI_CMD;
         cli_state->send = cli_send;
         cli_hello(cli_state);
-        cli_state->state = STATE_NORMAL;
 
         bool stop = false;
         do {
@@ -676,6 +675,5 @@ static void ssh_server(void *arg)
 
 void ssh_server_init(void)
 {
-    vRegisterCLICommands();
     xTaskCreate(ssh_server, ( char * ) "ssh_server", 24*configMINIMAL_STACK_SIZE + EXAMPLE_BUFFER_SZ, NULL, tskIDLE_PRIORITY + 1, NULL);
 }

+ 2 - 0
user/init_task.c

@@ -26,6 +26,7 @@
 #include "snmp_api.h"
 #if defined HARDWARE_BT6707 || HARDWARE_BT6709
 #include "http_server.h"
+#include "cli.h"
 //#include "telnet_server.h"
 #include "server.h"
 #elif defined HARDWARE_BT6703
@@ -158,6 +159,7 @@ void InitTask(void *params)
 		   UDP_netsetting_init();
 	   }
 #if defined HARDWARE_BT6707 || HARDWARE_BT6709
+	   cli_init();
 	   ssh_server_init();
 #endif
  /* HTTPS_Init();