Просмотр исходного кода

[bt6708] 1)add oids (alarm settings, time settings, whitelist)
2)add save settings (snmp)

balbekova 5 лет назад
Родитель
Сommit
20a7835ff4

+ 170 - 0
docs/bt6708/BT6708.MIB

@@ -203,6 +203,176 @@ IMPORTS
     DESCRIPTION
     "Get/set server5 for traps" 
     ::= { signals 22 }
+    
+    whiteListRange1 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "white List Range1" 
+    ::= { signals 23 }
+    
+    whiteListRange2 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "white List Range2" 
+    ::= { signals 24 }
+    
+    whiteListRange3 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "white List Range3" 
+    ::= { signals 25 }
+    
+    whiteListRange4 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "white List Range4" 
+    ::= { signals 26 }
+    
+    whiteListRange5 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "white List Range5" 
+    ::= { signals 27 }
+    
+    upsVoltCellMin OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "UPS voltage cell min" 
+    ::= { signals 28 }
+    
+    upsVoltCellMax OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "UPS voltage cell max" 
+    ::= { signals 29 }
+    
+    vacAlarmHighRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "VAC alarm high range" 
+    ::= { signals 30 }
+    
+    vacAlarmLowRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "VAC alarm low range" 
+    ::= { signals 31 }
+    
+    vacAlarmHistRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "VAC alarm hist range" 
+    ::= { signals 32 }
+    
+    tempAlarmHighRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Temperature alarm high range" 
+    ::= { signals 33 }
+    
+    tempAlarmLowRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Temprature alarm low range" 
+    ::= { signals 34 }
+    
+    tempAlarmHistRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Temprature alarm hist range" 
+    ::= { signals 35 }
+    
+    loadAlarmHighRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Load alarm high range" 
+    ::= { signals 36 }
+    
+    loadAlarmHistRange OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Load alarm hist range" 
+    ::= { signals 37 }
+
+    sntpTimeZone OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Sntp time zone" 
+    ::= { signals 38 }
+
+    sntpState OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "SNTP synchronization state
+    0 - disable
+    1 - enable" 
+    ::= { signals 39 }
+    
+    sntpServerIp OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Sntp server IP  address" 
+    ::= { signals 40 }
+    
+    sntpLastData OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "SNTP last synchronization timestamp" 
+    ::= { signals 41 }
+    
+    dateController OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Current date, YYYY-MM-DD" 
+    ::= { signals 42 }
+    
+    timeController OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Current time, hh:mm" 
+    ::= { signals 43 }
 
 -- DEVICE TRAPS
 

+ 481 - 1
modules/Ethernet/private_mib_bt6708.c

@@ -14,6 +14,8 @@
 #include "settings_api.h"
 #include "log.h"
 #include "megatec.h"
+#include "control_symbol.h"
+#include "sntp_api.h"
 
 #include "FreeRTOS.h"
 #include "task.h"
@@ -43,6 +45,68 @@ static s16_t signal_get_value(struct snmp_node_instance* instance, void* value);
 static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t len, void* value);
 static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len, void* value);
 
+/* signal .1.3.6.1.4.1.41752.911.5.1.43  */
+static const struct snmp_scalar_node signal43 = SNMP_SCALAR_CREATE_NODE(43, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.42  */
+static const struct snmp_scalar_node signal42 = SNMP_SCALAR_CREATE_NODE(42, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.41  */
+static const struct snmp_scalar_node signal41 = SNMP_SCALAR_CREATE_NODE(41, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.40  */
+static const struct snmp_scalar_node signal40 = SNMP_SCALAR_CREATE_NODE(40, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.39  */
+static const struct snmp_scalar_node signal39 = SNMP_SCALAR_CREATE_NODE(39, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.38  */
+static const struct snmp_scalar_node signal38 = SNMP_SCALAR_CREATE_NODE(38, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.37  */
+static const struct snmp_scalar_node signal37 = SNMP_SCALAR_CREATE_NODE(37, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.36  */
+static const struct snmp_scalar_node signal36 = SNMP_SCALAR_CREATE_NODE(36, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.22  */
+static const struct snmp_scalar_node signal35 = SNMP_SCALAR_CREATE_NODE(35, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.34  */
+static const struct snmp_scalar_node signal34 = SNMP_SCALAR_CREATE_NODE(34, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.33  */
+static const struct snmp_scalar_node signal33 = SNMP_SCALAR_CREATE_NODE(33, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.32  */
+static const struct snmp_scalar_node signal32 = SNMP_SCALAR_CREATE_NODE(32, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.31  */
+static const struct snmp_scalar_node signal31 = SNMP_SCALAR_CREATE_NODE(31, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.22  */
+static const struct snmp_scalar_node signal30 = SNMP_SCALAR_CREATE_NODE(30, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.29  */
+static const struct snmp_scalar_node signal29 = SNMP_SCALAR_CREATE_NODE(29, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.28  */
+static const struct snmp_scalar_node signal28 = SNMP_SCALAR_CREATE_NODE(28, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.27  */
+static const struct snmp_scalar_node signal27 = SNMP_SCALAR_CREATE_NODE_READONLY(27, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.26  */
+static const struct snmp_scalar_node signal26 = SNMP_SCALAR_CREATE_NODE_READONLY(26, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.25  */
+static const struct snmp_scalar_node signal25 = SNMP_SCALAR_CREATE_NODE_READONLY(25, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.24  */
+static const struct snmp_scalar_node signal24 = SNMP_SCALAR_CREATE_NODE_READONLY(24, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.5.1.23  */
+static const struct snmp_scalar_node signal23 = SNMP_SCALAR_CREATE_NODE_READONLY(23, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value);
 
 /* signal .1.3.6.1.4.1.41752.911.5.1.22  */
 static const struct snmp_scalar_node signal22 = SNMP_SCALAR_CREATE_NODE(22, SNMP_NODE_INSTANCE_READ_WRITE, SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
@@ -135,6 +199,27 @@ static const struct snmp_node* const signals_nodes[] = {
 	&signal20.node.node,
 	&signal21.node.node,
 	&signal22.node.node,
+	&signal23.node.node,
+	&signal24.node.node,
+	&signal25.node.node,
+	&signal26.node.node,
+	&signal27.node.node,
+	&signal28.node.node,
+	&signal29.node.node,
+	&signal30.node.node,
+	&signal31.node.node,
+	&signal32.node.node,
+	&signal33.node.node,
+	&signal34.node.node,
+	&signal35.node.node,
+	&signal36.node.node,
+	&signal37.node.node,
+	&signal38.node.node,
+	&signal39.node.node,
+	&signal40.node.node,
+	&signal41.node.node,
+	&signal42.node.node,
+	&signal43.node.node,
 };
 static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 
@@ -277,8 +362,71 @@ static s16_t signal_get_value(struct snmp_node_instance* instance, void* value)
 	case 22: /* IP server5 (traps) */
 		GetManagerIp5((char*)paramStr, &paramLength);
 		break;
+	case 23: /* WhiteList range 1 */
+		GetWhiteListSTR((char*)paramStr, &paramLength, 0);
+		break;
+	case 24: /* WhiteList range 2 */
+		GetWhiteListSTR((char*)paramStr, &paramLength, 1);
+		break;
+	case 25: /* WhiteList range 3 */
+		GetWhiteListSTR((char*)paramStr, &paramLength, 2);
+		break;
+	case 26: /* WhiteList range 4 */
+		GetWhiteListSTR((char*)paramStr, &paramLength, 3);
+		break;
+	case 27: /* WhiteList range 5 */
+		GetWhiteListSTR((char*)paramStr, &paramLength, 4);
+		break;
+	case 28: /* UPSVoltCellMin */
+		GetUPSVoltCellMinStr((char*)paramStr, &paramLength);
+		break;
+	case 29: /* UPSVoltCellMax */
+		GetUPSVoltCellMaxStr((char*)paramStr, &paramLength);
+		break;
+	case 30: /* VACAlarmHighRange */
+		GetVACAlarmHighRangeStr((char*)paramStr, &paramLength);
+		break;
+	case 31: /* VACAlarmLowRange */
+		GetVACAlarmLowRangeStr((char*)paramStr, &paramLength);
+		break;
+	case 32: /* VACAlarmHistRange */
+		GetVACAlarmHisteStr((char*)paramStr, &paramLength);
+		break;
+	case 33: /* TemperatureAlarmHighRange */
+		GetTemperatureAlarmHighRangeStr((char*)paramStr, &paramLength);
+		break;
+	case 34: /* TemperatureAlarmLowRange */
+		GetTemperatureAlarmLowRangeStr((char*)paramStr, &paramLength);
+		break;
+	case 35: /* TemperatureAlarmHistRange */
+		GetTemperatureAlarmHisteStr((char*)paramStr, &paramLength);
+		break;
+	case 36: /* LoadAlarmHighRange */
+		GetLoadAlarmHighRangeStr((char*)paramStr, &paramLength);
+		break;
+	case 37: /* LoadAlarmHistRange */
+		GetLoadAlarmHisteStr((char*)paramStr, &paramLength);
+		break;
+	case 38: /* SntpTimeZone */
+		GetSntpTimeZoneStr((char*)paramStr, &paramLength);
+		break;
+	case 39: /* SntpState */
+		GetSntpStateStr((char*)paramStr, &paramLength);
+		break;
+	case 40: /* SntpServerIp */
+		GetSntpServerIpStr((char*)paramStr, &paramLength);
+		break;
+	case 41: /* SntpLastData */
+		GetSntpLastDataStr((char*)paramStr, &paramLength);
+		break;
+	case 42: /* Date */
+		GetDateStr((char*)paramStr, &paramLength);
+		break;
+	case 43: /* Time */
+		GetTimeStr((char*)paramStr, &paramLength);
+		break;
 	default:
-	break;
+		break;
     }
 
     return paramLength;
@@ -293,6 +441,7 @@ static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t le
 	char str[20];
 	int8_t res = 0;
 	s32_t val;
+	bool enable_old_sntp;
 
      memset(str, 0, 20);
 
@@ -385,11 +534,94 @@ static snmp_err_t signal_set_value(struct snmp_node_instance* instance, u16_t le
 	  val_string = (char*)value;
 	  SetManagerIp5(val_string);
 	  break;
+  	case 28:
+	  val_string = (char*)value;
+	  SetUPSVoltCellMinStr(val_string);
+	  break;
+  	case 29:
+	  val_string = (char*)value;
+	  SetUPSVoltCellMaxStr(val_string);
+	  break;
+  	case 30:
+	  val_string = (char*)value;
+	  SetVACAlarmHighRangeStr(val_string);
+	  break;
+  	case 31:
+	  val_string = (char*)value;
+	  SetVACAlarmLowRangeStr(val_string);
+	  break;
+  	case 32:
+	  val_string = (char*)value;
+	  SetVACAlarmHisteStr(val_string);
+	  break;
+  	case 33:
+	  val_string = (char*)value;
+	  SetTemperatureAlarmHighRangeStr(val_string);
+	  break;
+  	case 34:
+	  val_string = (char*)value;
+	  SetTemperatureAlarmLowRangeStr(val_string);
+	  break;
+  	case 35:
+	  val_string = (char*)value;
+	  SetTemperatureAlarmHisteStr(val_string);
+	  break;
+  	case 36:
+	  val_string = (char*)value;
+	  SetLoadAlarmHighRangeStr(val_string);
+	  break;
+  	case 37:
+	  val_string = (char*)value;
+	  SetLoadAlarmHistStr(val_string);
+	  break;
+  	case 38:
+	  val_string = (char*)value;
+	  SetSntpTimeZoneStr(val_string);
+	  break;
+  	case 39:
+  	  enable_old_sntp = sSettings.sSNTP.sntpEnable;
+	  val_string = (char*)value;
+	  SetSntpStateStr(val_string);
+	  if(sSettings.sSNTP.sntpEnable != enable_old_sntp){
+		  SETTINGS_Save();
+		  log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
+		  SNTP_Init();
+		  //vTaskDelay(7000);
+		 SNTP_Poll();
+	  }
+	  break;
+  	case 40:
+	  val_string = (char*)value;
+	  if(strncmp(val_string, sSettings.sSNTP.ip, strlen(val_string)) != 0){
+		  SetSntpServerIpStr(val_string);
+		  SETTINGS_Save();
+		  log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
+		  SNTP_Init();
+		  //vTaskDelay(7000);
+		  SNTP_Poll();
+	  }
+	  break;
+  	case 41:
+	  break;
+  	case 42:
+	  val_string = (char*)value;
+	  SetDateStr(val_string);
+	  break;
+  	case 43:
+	  val_string = (char*)value;
+	  SetTimeStr(val_string);
+	  break;
       default :
     	  return SNMP_ERR_GENERROR;
       break;
     };
 
+    if((oid >= 18 && oid <= 22)
+       || (oid >= 28 && oid <= 38)){
+    	SETTINGS_Save();
+    	log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
+    }
+
   return SNMP_ERR_NOERROR;
 }
 
@@ -398,7 +630,10 @@ static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len
 	snmp_err_t ret = SNMP_ERR_WRONGVALUE;
     char *val_string;
     int32_t val;
+    float tmp_value;
+    uint8_t j;
     u32_t oid = instance->node->oid; // id сигнала
+	bool fail = false;
 
     switch (oid)
     {
@@ -436,6 +671,7 @@ static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len
   	case 20:
   	case 21:
   	case 22:
+  	case 40:
   		if ( len <= 15 )
   		{
 			val_string = (char*)value;
@@ -444,6 +680,250 @@ static snmp_err_t signal_set_test(struct snmp_node_instance* instance, u16_t len
 				ret = SNMP_ERR_NOERROR;
   		}
   		break;
+  	case 28:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isfloatdigit(val_string[j])){
+				return ret;
+			}
+		}
+  		tmp_value = atof(val_string);
+  		if(tmp_value < sSettings.UPS_Setting.Ucellmax && tmp_value > MIN_VOLT_CELL_RANGE){
+  			ret = SNMP_ERR_NOERROR;
+  		}
+	  break;
+  	case 29:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isfloatdigit(val_string[j])){
+				return ret;
+			}
+		}
+  		tmp_value = atof(val_string);
+  		if(tmp_value > sSettings.UPS_Setting.Ucellmin && tmp_value <= MAX_VOLT_CELL_RANGE){
+  			ret = SNMP_ERR_NOERROR;
+  		}
+	  break;
+  	case 30:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isdigit_int(val_string[j])){
+				return ret;
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= MAX_VAC_MIN_RANGE && tmp_value <= MAX_VAC_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 31:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isdigit_int(val_string[j])){
+				return ret;
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= MIN_VAC_MIN_RANGE && tmp_value <= MIN_VAC_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 32:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isdigit_int(val_string[j])){
+				return ret;
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= HIST_VAC_MIN_RANGE && tmp_value <= HIST_VAC_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 33:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isdigit_int(val_string[j])){
+				return ret;
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= MAX_TEMP_MIN_RANGE && tmp_value <= MAX_TEMP_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 34:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isdigit_int(val_string[j])){
+				if(j == 0 && val_string[j] == '-'){
+					continue;
+				}
+				else{
+					return ret;
+				}
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= MIN_TEMP_MIN_RANGE && tmp_value <= MIN_TEMP_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 35:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isfloatdigit(val_string[j])){
+				return ret;
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= HIST_TEMP_MIN_RANGE && tmp_value <= HIST_TEMP_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 36:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isdigit_int(val_string[j])){
+				return ret;
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= MAX_LOAD_MIN_RANGE && tmp_value <= MAX_LOAD_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 37:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		for(j = 0; j < len; j ++){
+			if(!isfloatdigit(val_string[j])){
+				return ret;
+			}
+		}
+		tmp_value = atof(val_string);
+		if(tmp_value >= HIST_LOAD_MIN_RANGE && tmp_value <= HIST_LOAD_MAX_RANGE){
+			ret = SNMP_ERR_NOERROR;
+		}
+	  break;
+  	case 38:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		if(len > 1 && len < 5){
+  			bool fail = false;
+			if(val_string[0] != '-' && val_string[0] != '+')
+				fail = true;
+			if(!isdigit_int(val_string[1]) && (!isdigit_int(val_string[2]) && val_string[2] != '.')
+					&& (!isdigit_int(val_string[3]) && val_string[3] != '.'))
+				fail = true;
+			if(len == 5){
+				if(!isdigit_int(val_string[4]))
+					fail = true;
+			}
+			if(!fail){
+				tmp_value = atof(val_string);
+				if(tmp_value >= -12.0 && tmp_value <= 12.0){
+					ret = SNMP_ERR_NOERROR;
+				}
+			}
+  		}
+	  break;
+  	case 39:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+  		if(len == 1){
+			if(val_string[0] == '0' || val_string[0] == '1')
+			{
+				ret = SNMP_ERR_NOERROR;
+			}
+  		}
+	  break;
+  	case 42:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+		if(len == 10){
+			for(j = 0; j < len; j++)
+			{
+				  if(j != 4 && j != 7)
+				  {
+					  if(val_string[j] > 0x39 || val_string[j] < 0x30){
+						  fail = true;
+						  break;
+					  }
+				  }
+				  else if(j == 4 || j == 7){
+					  if(val_string[j] != '-'){
+						  fail = true;
+						  break;
+					  }
+				  }
+			}
+			if(!fail)
+			{
+				  uint16_t temp = 0;
+				  temp = 1000*(val_string[0] - 0x30) + 100*(val_string[1] - 0x30) + 10*(val_string[2] - 0x30) + val_string[3] - 0x30;
+				  if(temp > 2099 || temp < 2000)
+					  fail = true;
+				  temp = 0;
+				  temp = 10*(val_string[5] - 0x30) + (val_string[6] - 0x30);
+				  if(temp > 12)
+					  fail = true;
+				  temp = 0;
+				  temp = 10*(val_string[8] - 0x30) + (val_string[9] - 0x30);
+				  if(temp > 31)
+					  fail = true;
+			}
+			if(!fail){
+				ret = SNMP_ERR_NOERROR;
+			}
+		}
+	  break;
+  	case 43:
+  		val_string = (char*)value;
+  		val_string[len] = 0;
+		if(len == 5){
+			for(j = 0; j < len; j++)
+			{
+				  if(j != 2)
+				  {
+					  if(val_string[j] > 0x39 || val_string[j] < 0x30){
+						  fail = true;
+						  break;
+					  }
+
+				  }
+				  else if(j == 2){
+					  if(val_string[j]  != ':'){
+						  fail = true;
+						  break;
+					  }
+				  }
+			}
+			if(!fail)
+			{
+				  uint16_t temp = 0;
+				  temp = 10*(val_string[0] - 0x30) + (val_string[1] - 0x30);
+				  if(temp > 23)
+					  fail = true;
+				  temp = 0;
+				  temp = 10*(val_string[3] - 0x30) + (val_string[4] - 0x30);
+				  if(temp > 59)
+					  fail = true;
+			}
+			if(!fail){
+				ret = SNMP_ERR_NOERROR;
+			}
+		}
+	  break;
     };
 
 

+ 11 - 16
modules/Telnet_Server/CLI_Commands.c

@@ -39,11 +39,6 @@
 #include "netconf.h"
 #include "control_symbol.h"
 
-
-#define in_range_digit(c, lo, up)  	((uint8_t)c >= lo && (uint8_t)c <= up)
-#define isdigit_int(c)           	in_range_digit(c, '0', '9')
-#define isfloatdigit(c)          	(isdigit_int(c) || in_range_digit(c, '.', '.'))
-
 extern state_telnet_server_t telnetState;
 extern uint8_t id_change_pwd;
 
@@ -1011,7 +1006,7 @@ static portBASE_TYPE prvTaskNTPCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 					}
 					if(!fail){
 						float value = atof(str_temp);
-						if(value > -12.0 && value < 12.0){
+						if(value >= -12.0 && value <= 12.0){
 							SetSntpTimeZoneStr(str_temp);
 							SETTINGS_Save();
 							log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1406,7 +1401,7 @@ static portBASE_TYPE prvTaskAKBCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 
 	switch(i){
 	case ARG_AKB_VOLT_CELL_MIN:
-		if(value < sSettings.UPS_Setting.Ucellmax && value > 0){
+		if(value < sSettings.UPS_Setting.Ucellmax && value > MIN_VOLT_CELL_RANGE){
 			SetUPSVoltCellMinStr(str);
 			SETTINGS_Save();
 			log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1415,7 +1410,7 @@ static portBASE_TYPE prvTaskAKBCommand( int8_t *pcWriteBuffer, size_t xWriteBuff
 			strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
 		break;
 	case ARG_AKB_VOLT_CELL_MAX:
-		if(value > sSettings.UPS_Setting.Ucellmin && value <= 3.0){
+		if(value > sSettings.UPS_Setting.Ucellmin && value <= MAX_VOLT_CELL_RANGE){
 			SetUPSVoltCellMaxStr(str);
 			SETTINGS_Save();
 			log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1533,7 +1528,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= -40 && value <= 0){
+			if(value >= MIN_TEMP_MIN_RANGE && value <= MIN_TEMP_MAX_RANGE){
 				SetTemperatureAlarmLowRangeStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1550,7 +1545,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= 40 && value <= 80){
+			if(value >= MAX_TEMP_MIN_RANGE && value <= MAX_TEMP_MAX_RANGE){
 				SetTemperatureAlarmHighRangeStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1567,7 +1562,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= 0.5 && value <= 2){
+			if(value >= HIST_TEMP_MIN_RANGE && value <= HIST_TEMP_MAX_RANGE){
 				SetTemperatureAlarmHisteStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1594,7 +1589,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= 60 && value <= 120){
+			if(value >= MAX_LOAD_MIN_RANGE && value <= MAX_LOAD_MAX_RANGE){
 				SetLoadAlarmHighRangeStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1611,7 +1606,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= 0.5 && value <= 2){
+			if(value >= HIST_LOAD_MIN_RANGE && value <= HIST_LOAD_MAX_RANGE){
 				SetLoadAlarmHistStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1635,7 +1630,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= 110 && value <= 200){
+			if(value >= MIN_VAC_MIN_RANGE && value <= MIN_VAC_MAX_RANGE){
 				SetVACAlarmLowRangeStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1652,7 +1647,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= 220 && value <= 250){
+			if(value >= MAX_VAC_MIN_RANGE && value <= MAX_VAC_MAX_RANGE){
 				SetVACAlarmHighRangeStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);
@@ -1669,7 +1664,7 @@ static portBASE_TYPE prvTaskAlarmCommand( int8_t *pcWriteBuffer, size_t xWriteBu
 				}
 			}
 			value = atof(str);
-			if(value >= 10 && value <= 30){
+			if(value >= HIST_VAC_MIN_RANGE && value <= HIST_VAC_MAX_RANGE){
 				SetVACAlarmHisteStr(str);
 				SETTINGS_Save();
 				log_event_data(LOG_SETTING_SAVE, name_login_telnet);

+ 4 - 0
modules/common/control_symbol.h

@@ -10,6 +10,10 @@
 
 #include <stdbool.h>
 
+#define in_range_digit(c, lo, up)  	((uint8_t)c >= lo && (uint8_t)c <= up)
+#define isdigit_int(c)           	in_range_digit(c, '0', '9')
+#define isfloatdigit(c)          	(isdigit_int(c) || in_range_digit(c, '.', '.'))
+
 bool control_string_en_digit(char *str, uint8_t len);