Преглед изворни кода

[BT-6709]separate two model BT-6709-MTS & BT-6709 (BEELINE)

balbekova пре 4 година
родитељ
комит
81c60e99a7

+ 6 - 1
.vscode/settings.json

@@ -42,6 +42,11 @@
         "usart.h": "c",
         "fr_timers.h": "c",
         "string.h": "c",
-        "tinystdio.h": "c"
+        "tinystdio.h": "c",
+        "init_task.h": "c",
+        "cstring": "c",
+        "settings_api.h": "c",
+        "board_bt6709.h": "c",
+        "lwip_hook_ip4_input.h": "c"
     }
 }

+ 7 - 2
Makefile

@@ -65,6 +65,11 @@ fullflash_6709:
 	sleep 1
 	st-flash --reset write output/stm32bt6709.bin 0x8020000	
 
+fullflash_6709_mts:
+	st-flash --reset write output/iap.bin 0x8000000
+	sleep 1
+	st-flash --reset write output/stm32bt6709_mts.bin 0x8020000	
+
 fullflash_6710:
 	st-flash --reset write output/iap.bin 0x8000000
 	sleep 1
@@ -80,10 +85,10 @@ release_6707:
 	$(MAKE) -C modules HARDWARE=bt6707 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
 
 release_6709_mts:
-	$(MAKE) -C modules HARDWARE=bt6709 ORDER=mts VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
+	$(MAKE) -C modules HARDWARE=bt6709_mts VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
 
 release_6709_beeline:
-	$(MAKE) -C modules HARDWARE=bt6709 ORDER=beeline VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
+	$(MAKE) -C modules HARDWARE=bt6709 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
 
 release_6710:
 	$(MAKE) -C modules HARDWARE=bt6710 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release

+ 2 - 0
config/board.h

@@ -9,6 +9,8 @@
 #include "board_bt6707.h"
 #elif defined HARDWARE_BT6709
 #include "board_bt6709.h"
+#elif defined HARDWARE_BT6709_MTS
+#include "board_bt6709_mts.h"
 #elif defined HARDWARE_BT6710
 #include "board_bt6710.h"
 #endif

+ 2 - 25
config/board_bt6709.h

@@ -52,11 +52,7 @@ WDG_PIN(X)
 /**
   * @brief  Версия прошивки
   */
-#ifdef ORDER_MTS
-#define VERSION                         "1.3"
-#else
 #define VERSION                         "1.6b"
-#endif
 
 /**
   * brief  Текст сообщения при запуске CLI
@@ -88,7 +84,7 @@ XSETTING( WHITE_LIST_t, sWhiteListTemp[MAX_WHITE_LIST], SETTINGS_SetWhiteListDef
 XSETTING( SSH_t, sSSH, SETTINGS_SetSSHDef, PART_DEFAULT_1 ) \
 XSETTING( uint8_t, sFlagNotification[ALL_TRAPS], SETTINGS_SetFlagNotificationDef, ALL_DEFAULT ) \
 
-#define SNMP_DEV_ROOT_OID       8
+#define SNMP_DEV_ROOT_OID       10
 
 #define MAX_IRQ_HANDLERS 4
 
@@ -236,24 +232,7 @@ typedef enum {
 #define TEMP_AKB_MONITOR
 #define BAT_CONNECT_MONITOR
 #define UPS_CONNECT_MONITOR
-#ifdef ORDER_MTS
-#define AKB_CHANGE_MONITOR
-#endif
 
-#ifdef ORDER_MTS
-#define MONITOR_TABLE \
-  XMONITOR(UPS_TestFinishMonitor,               UPS.Present) \
-  XMONITOR(UPS_LineFailMonitor,                 UPS.Present) \
-  XMONITOR(UPS_VACoutputLowRangeMonitor,        UPS.Present) \
-  XMONITOR(UPS_VACoutputHighRangeMonitor,       UPS.Present) \
-  XMONITOR(UPS_LowBatMonitor,                   UPS.Present) \
-  XMONITOR(UPS_PowerMonitor,                    UPS.Present) \
-  XMONITOR(UPS_TemperatureHighRangeMonitor,     UPS.Present) \
-  XMONITOR(UPS_TemperatureLowRangeMonitor,      UPS.Present) \
-  XMONITOR(UPS_BatteryConnectMonitor,           UPS.Present) \
-  XMONITOR(UPS_ConnectMonitor,                  1) \
-  XMONITOR(AKB_Change_Monitor,                  1)
-#else
 #define MONITOR_TABLE \
   XMONITOR(UPS_TestFinishMonitor,               UPS.Present) \
   XMONITOR(UPS_LineFailMonitor,                 UPS.Present) \
@@ -265,8 +244,6 @@ typedef enum {
   XMONITOR(UPS_TemperatureLowRangeMonitor,      UPS.Present) \
   XMONITOR(UPS_BatteryConnectMonitor,           UPS.Present) \
   XMONITOR(UPS_ConnectMonitor,                  1)
-#endif
-
 
 #define LED_INIT_OK               LED_INIT_G
 #define LED_INIT_ERR              LED_INIT_R
@@ -274,6 +251,6 @@ typedef enum {
 #define LED_GREEN_MINOR           LED_MINOR_G
 #define LED_RED_MINOR             LED_MINOR_R
 
-#define SERVICE_CONTROLLER_IP  "192.168.0.9"
+#define SERVICE_CONTROLLER_IP  "192.168.0.11"
 
 #endif /* BOARD_PRS_H */

+ 258 - 0
config/board_bt6709_mts.h

@@ -0,0 +1,258 @@
+#ifndef BOARD_BT6709_MTS_H
+#define BOARD_BT6709_MTS_H
+
+#define SERVICE_RS232_UART_TABLE(X)     \
+X( SERVICE_TXDINT,   GPIOD,   5, AF_USART2) \
+X( SERVICE_RXDINT,   GPIOD,   6, AF_USART2)
+
+#define RS232_UART_TABLE(X)     \
+X( TXDINT,   GPIOA,   9, AF_USART1) \
+X( RXDINT,   GPIOA,   10, AF_USART1)
+
+#define SPI2_TABLE(X) \
+X( SPI2_MISO,   GPIOB,  14, AF_SPI2) \
+X( SPI2_MOSI,   GPIOB,  15, AF_SPI2) \
+X( SPI2_SCK,    GPIOB,  10, AF_SPI2) \
+X( SPI2_NSS,    GPIOB,  9,  GPIO_OUT | GPIO_SET)
+
+#define MCU_PERIPHERALS(X)  \
+SERVICE_RS232_UART_TABLE(X)\
+RS232_UART_TABLE(X) \
+SPI2_TABLE(X)
+
+#define LEDS(X) \
+X( LED_INIT_R,  GPIOA,  4,  GPIO_OUT | GPIO_INV) \
+X( LED_INIT_G,  GPIOA,  3,  GPIO_OUT | GPIO_INV) \
+X( LED_MAJOR_R, GPIOA,  5,  GPIO_OUT | GPIO_INV) \
+X( LED_MINOR_G, GPIOE,  11, GPIO_OUT | GPIO_INV) \
+X( LED_MINOR_R, GPIOE,  12, GPIO_OUT | GPIO_INV)
+
+#define JUMPERS(X) \
+X( MODE_JUMPER, GPIOE,  6,  GPIO_IN_PU | GPIO_INV)
+
+#define BUTTONS(X) \
+X( KEY_DEF,     GPIOE,  7,  GPIO_IN )//| GPIO_INV
+
+#define WDG_PIN(X) \
+X( _WDG,     GPIOE,   15, GPIO_OUT)
+
+#define GPIO_TABLE(X)   \
+MCU_PERIPHERALS(X)  \
+LEDS(X)             \
+JUMPERS(X) \
+BUTTONS(X)      \
+WDG_PIN(X)
+
+/**
+  * @brief  Маркер ревизии платы для валидации *.bin файла
+  *
+  */
+#define HW_REV                          "BT-6709_MTS"
+
+/**
+  * @brief  Версия прошивки
+  */
+#define VERSION                         "1.3"
+
+/**
+  * brief  Текст сообщения при запуске CLI
+  */
+#define TELNET_CLI_WELCOME_MESSAGE      "BT-6709_MTS command server - connection accepted.\r\nlogin:"
+
+#define RTC_ENABLE                  //RTC clock
+#define LED_ENABLE                  //LED индикация
+#define BUTTON_ENABLE               //Кнопки
+#define NET_ENABLE                  //Ethernet сеть
+#define HTTP_SERVER_ENABLE          //HTTP сервер
+#define SNMP_ENABLE                 //SNMP протокол
+#define NOTIFICATION_CONTROL_ENABLE //Управление уведомлениями
+#define WHITELIST_ENABLE            //Белый список
+#define TELNET_ENABLE               //Telnet сервер
+#define SSH_ENABLE                 //SSH сервер
+#define UPS_ENABLE                  //UPS
+//#define DEBUG_FREERTOS            //Мониторинг FreeRtos
+
+#define SETTINGS_TABLE \
+XSETTING( SNMP_t,	sSnmp, SETTINGS_SetSnmpDef, ALL_DEFAULT ) \
+XSETTING( AUTH_t,	sAuth[MAX_WEB_USERS], SETTINGS_SetServiceDef, PART_DEFAULT_2 ) \
+XSETTING( SNTP_t,	sSNTP, SETTINGS_SetSntpDef, ALL_DEFAULT ) \
+XSETTING( UPS_Setting_t, UPS_Setting, SETTINGS_SetUPSSettingsDef, ALL_DEFAULT ) \
+XSETTING( ALARM_MNGR_t, sAlarmManager, SETTINGS_SetAlarmManagerDef, ALL_DEFAULT ) \
+XSETTING( TELNET_t, sTelnet, SETTINGS_SetTelnetDef, PART_DEFAULT_1 ) \
+XSETTING( WHITE_LIST_t, sWhiteList[MAX_WHITE_LIST], SETTINGS_SetWhiteListDef, ALL_DEFAULT ) \
+XSETTING( WHITE_LIST_t, sWhiteListTemp[MAX_WHITE_LIST], SETTINGS_SetWhiteListDef, ALL_DEFAULT ) \
+XSETTING( SSH_t, sSSH, SETTINGS_SetSSHDef, PART_DEFAULT_1 ) \
+XSETTING( uint8_t, sFlagNotification[ALL_TRAPS], SETTINGS_SetFlagNotificationDef, ALL_DEFAULT ) \
+
+#define SNMP_DEV_ROOT_OID       8
+
+#define MAX_IRQ_HANDLERS 4
+
+#define WEB_SETTINGS_TAGS_TABLE \
+  XJSON_SETTINGS_TAG("read_community",     GetReadCommunity,                    SetReadCommunity) \
+  XJSON_SETTINGS_TAG("write_community",    GetWriteCommunity,                   SetWriteCommunity) \
+  XJSON_SETTINGS_TAG("managerIP",          GetManagerIp,                        SetManagerIp) \
+  XJSON_SETTINGS_TAG("managerIP2",         GetManagerIp2,                       SetManagerIp2) \
+  XJSON_SETTINGS_TAG("managerIP3",         GetManagerIp3,                       SetManagerIp3) \
+  XJSON_SETTINGS_TAG("managerIP4",         GetManagerIp4,                       SetManagerIp4) \
+  XJSON_SETTINGS_TAG("managerIP5",         GetManagerIp5,                       SetManagerIp5) \
+  XJSON_SETTINGS_TAG("ipaddr",             GetIpStr,                            SetIPStr) \
+  XJSON_SETTINGS_TAG("gw",                 GetGatewayStr,                       SetGatewayStr) \
+  XJSON_SETTINGS_TAG("mask",               GetMaskStr,                          SetMaskStr) \
+  XJSON_SETTINGS_TAG("dhcp",               GetDhcpStateStr,                     SetDhcpStateStr) \
+  XJSON_SETTINGS_TAG("tn_port",            GetTelnetPortStr,                    SetTelnetPortStr) \
+  XJSON_SETTINGS_TAG("tn_enabled",         GetTelnetEnableStateStr,             SetTelnetEnableStateStr) \
+  XJSON_SETTINGS_TAG("ssh_port",           GetSSHPortStr,                       SetSSHPortStr) \
+  XJSON_SETTINGS_TAG("ssh_enabled",        GetSSHEnableStateStr,                SetSSHEnableStateStr) \
+  XJSON_SETTINGS_TAG("wtl_ip1",            GetWhiteList1STR,                    SetWhiteList1STR) \
+  XJSON_SETTINGS_TAG("wtl_ip2",            GetWhiteList2STR,                    SetWhiteList2STR) \
+  XJSON_SETTINGS_TAG("wtl_ip3",            GetWhiteList3STR,                    SetWhiteList3STR) \
+  XJSON_SETTINGS_TAG("wtl_ip4",            GetWhiteList4STR,                    SetWhiteList4STR) \
+  XJSON_SETTINGS_TAG("wtl_ip5",            GetWhiteList5STR,                    SetWhiteList5STR) \
+  XJSON_SETTINGS_TAG("date",               GetDateStr,                          SetDateStr) \
+  XJSON_SETTINGS_TAG("time",               GetTimeStr,                          SetTimeWebStr) \
+  XJSON_SETTINGS_TAG("ntp",                GetSntpStateStr,                     SetSntpStateStr) \
+  XJSON_SETTINGS_TAG("ntpservip",          GetSntpServerIpStr,                  SetSntpServerIpStr) \
+  XJSON_SETTINGS_TAG("utc",                GetSntpTimeZoneStr,                  SetSntpTimeZoneStr) \
+  XJSON_SETTINGS_TAG("utm",                GetUnixTimeStr,                      SetEmptyFuncStr) \
+  XJSON_SETTINGS_TAG("lastsynctime",       GetSntpLastDataStr,                  SetEmptyFuncStr) \
+  XJSON_SETTINGS_TAG("ups_cell_min",       GetUPSVoltCellMinStr,                SetUPSVoltCellMinStr) \
+  XJSON_SETTINGS_TAG("ups_cell_max",       GetUPSVoltCellMaxStr,                SetUPSVoltCellMaxStr) \
+  XJSON_SETTINGS_TAG("bat_prod",           GetDataSetAKBStr,                    SetDataSetAKBStr) \
+  XJSON_SETTINGS_TAG("bat_exp",            GetLifeTimeAKBStr,                   SetLifeTimeAKBStr) \
+  XJSON_SETTINGS_TAG("bat_cap",            GetCapacityNominalAKBStr,            SetCapacityNominalAKBStr) \
+  XJSON_SETTINGS_TAG("bat_charge",         GetVoltageAKBNominalStr,             SetVoltageAKBNominalStr) \
+  XJSON_SETTINGS_TAG("ups_max_power",      GetUPSPowerStr,                      SetUPSPowerStr) \
+  XJSON_SETTINGS_TAG("mainvolt_high",      GetVACAlarmHighRangeStr,             SetVACAlarmHighRangeStr) \
+  XJSON_SETTINGS_TAG("mainvolt_low",       GetVACAlarmLowRangeStr,              SetVACAlarmLowRangeStr) \
+  XJSON_SETTINGS_TAG("mainvolt_hist",      GetVACAlarmHisteStr,                 SetVACAlarmHisteStr) \
+  XJSON_SETTINGS_TAG("temp_high",          GetTemperatureAlarmHighRangeStr,     SetTemperatureAlarmHighRangeStr) \
+  XJSON_SETTINGS_TAG("temp_low",           GetTemperatureAlarmLowRangeStr,      SetTemperatureAlarmLowRangeStr) \
+  XJSON_SETTINGS_TAG("temp_hist",          GetTemperatureAlarmHisteStr,         SetTemperatureAlarmHisteStr) \
+  XJSON_SETTINGS_TAG("loadvolt_high",      GetLoadAlarmHighRangeStr,            SetLoadAlarmHighRangeStr) \
+  XJSON_SETTINGS_TAG("loadvolt_hist",      GetLoadAlarmHisteStr,                SetLoadAlarmHistStr) \
+  XJSON_SETTINGS_TAG("netsettings_changed",GetWebReinitFlag,                    SetEmptyFuncStr) \
+
+#define WEB_PARAMS_TAGS_TABLE \
+  XJSON_PARAMS_TAG("AC",                 GetInputVoltageStr) \
+  XJSON_PARAMS_TAG("DC",                 GetOutputVoltageStr) \
+  XJSON_PARAMS_TAG("in_freq",            GetInputFreqStr) \
+  XJSON_PARAMS_TAG("out_freq",           GetOutputFreqStr) \
+  XJSON_PARAMS_TAG("pwr",                GetPowerStr) \
+  XJSON_PARAMS_TAG("bat_rem_cap",        GetBatCapacityStr) \
+  XJSON_PARAMS_TAG("inner_temp",         GetInternalTempStr) \
+  XJSON_PARAMS_TAG("bat_time_left",      GetRuntimeStr) \
+  XJSON_PARAMS_TAG("in_cur",             GetInputCurrentStr) \
+  XJSON_PARAMS_TAG("out_cur",            GetOutputCurrentStr) \
+  XJSON_PARAMS_TAG("bat_volt",           GetVoltageAKBtStr) \
+  XJSON_PARAMS_TAG("bat_cap",            GetCapacityNominalAKBStr) \
+  XJSON_PARAMS_TAG("bat_exp",            GetDataNextChangeAKBStrRU) \
+  XJSON_PARAMS_TAG("m_alarm",            GetAlarmMonitorStr) \
+  XJSON_PARAMS_TAG("u_alarm",            GetAlarmStr) \
+  XJSON_PARAMS_TAG("netsettings_changed",GetWebReinitFlag) \
+
+#define TRAPS_TABLE \
+  XTRAP(FW_VERSION_UPDATE,                 1,      true,      GetVersionStr) \
+  XTRAP(FW_VERSION_UPDATED,                1,      true,      GetVersionStr) \
+  XTRAP(DEVICE_RESTORED,                   1,      true,      GetVersionStr) \
+  XTRAP(DEVICE_REBOOTED,                   1,      true,      GetVersionStr) \
+  XTRAP(BATTERY_HIGH_TEMPERATURE_NORM,     9,      true,      GetInternalTempStr) \
+  XTRAP(BATTERY_HIGH_TEMPERATURE_ALARM,    9,      true,      GetInternalTempStr) \
+  XTRAP(LINE_ALARM,                        11,     true,      GetInputVoltageStr) \
+  XTRAP(LINE_NORM,                         11,     true,      GetInputVoltageStr) \
+  XTRAP(LOW_BAT_ALARM,                     14,     true,      GetBatCapacityStr) \
+  XTRAP(LOW_BAT_NORM,                      14,     true,      GetBatCapacityStr) \
+  XTRAP(POWER_ALARM,                       13,     true,      GetPowerStr) \
+  XTRAP(POWER_NORM,                        13,     true,      GetPowerStr) \
+  XTRAP(CONNECT_MONITOR_ALARM,             16,     true,      GetConnectMonitorStr) \
+  XTRAP(CONNECT_MONITOR_NORM,              16,     true,      GetConnectMonitorStr) \
+  XTRAP(BATTERY_CONNECT_ALARM,             14,     true,      GetBatCapacityStr) \
+  XTRAP(BATTERY_CONNECT_NORM,              14,     true,      GetBatCapacityStr) \
+  XTRAP(BATTERY_LOW_TEMPERATURE_NORM,      9,      true,      GetInternalTempStr) \
+  XTRAP(BATTERY_LOW_TEMPERATURE_ALARM,     9,      true,      GetInternalTempStr) \
+  XTRAP(BATTERY_CHANGE_ALARM,              49,     true,      GetDataNextChangeAKBStr) \
+  XTRAP(BATTERY_CHANGE_MORM,               49,     true,      GetDataNextChangeAKBStr) \
+
+typedef enum
+{
+  FW_VERSION_UPDATE = 1,
+  FW_VERSION_UPDATED,
+  DEVICE_RESTORED,
+  DEVICE_REBOOTED,
+  BATTERY_HIGH_TEMPERATURE_NORM,
+  BATTERY_HIGH_TEMPERATURE_ALARM,
+  LINE_ALARM,
+  LINE_NORM,
+  LOW_BAT_ALARM,
+  LOW_BAT_NORM,
+  POWER_ALARM,
+  POWER_NORM,
+  CONNECT_MONITOR_ALARM,
+  CONNECT_MONITOR_NORM,
+  BATTERY_CONNECT_ALARM,
+  BATTERY_CONNECT_NORM,
+  BATTERY_LOW_TEMPERATURE_NORM,
+  BATTERY_LOW_TEMPERATURE_ALARM,
+  BATTERY_CHANGE_ALARM,
+  BATTERY_CHANGE_MORM,
+  ALL_TRAPS
+} TRAP_LIST_t;
+
+typedef enum {
+	LOG_SYSTEM_BOOT = 0,			// device booted
+	LOG_SYSTEM_DEFCONFIG,	// default config applied
+	LOG_UPDATE_SOFT,
+	LOG_TURN_ON,		//
+	LOG_PSW_CHANGE,		//
+	LOG_SETTING_SAVE,		//
+	LOG_LOGIN_TELNET,		//
+	LOG_LOGIN_SSH,
+	LOG_LOGIN,		//
+	LOG_TEST_UPS,		//
+	LOG_SHUTDOWN_UPS,
+	LOG_ALARM_VAC_LOW_OUTPUT,
+	LOG_ALARM_VAC_HIGH_OUTPUT,
+	LOG_ALARM_HIGH_TEMP,
+	LOG_ALARM_LOW_TEMP,
+	LOG_ALARM_LINE,
+	LOG_ALARM_LOW_BAT,
+	LOG_ALARM_POWER,
+	LOG_ALARM_UPS,
+	LOG_ALARM_AKB,
+	LOG_ALARM_CHANGE_AKB,
+	LOG_VALUE,
+	LOG_NONE,
+} log_type_t;
+
+#define TEST_AKB_FINISH_MONITOR
+#define LINE_FAIL_MONITOR
+#define VAC_OUT_MONITOR
+#define LOW_BAT_MONITOR
+#define LOAD_MONITOR
+#define TEMP_AKB_MONITOR
+#define BAT_CONNECT_MONITOR
+#define UPS_CONNECT_MONITOR
+#define AKB_CHANGE_MONITOR
+
+#define MONITOR_TABLE \
+  XMONITOR(UPS_TestFinishMonitor,               UPS.Present) \
+  XMONITOR(UPS_LineFailMonitor,                 UPS.Present) \
+  XMONITOR(UPS_VACoutputLowRangeMonitor,        UPS.Present) \
+  XMONITOR(UPS_VACoutputHighRangeMonitor,       UPS.Present) \
+  XMONITOR(UPS_LowBatMonitor,                   UPS.Present) \
+  XMONITOR(UPS_PowerMonitor,                    UPS.Present) \
+  XMONITOR(UPS_TemperatureHighRangeMonitor,     UPS.Present) \
+  XMONITOR(UPS_TemperatureLowRangeMonitor,      UPS.Present) \
+  XMONITOR(UPS_BatteryConnectMonitor,           UPS.Present) \
+  XMONITOR(UPS_ConnectMonitor,                  1) \
+  XMONITOR(AKB_Change_Monitor,                  1)
+
+#define LED_INIT_OK               LED_INIT_G
+#define LED_INIT_ERR              LED_INIT_R
+#define LED_ALARM                 LED_MAJOR_R
+#define LED_GREEN_MINOR           LED_MINOR_G
+#define LED_RED_MINOR             LED_MINOR_R
+
+#define SERVICE_CONTROLLER_IP  "192.168.0.9"
+
+#endif /* BOARD_PRS_H */

+ 548 - 0
docs/bt6709-mts/BT6709-MTS.MIB

@@ -0,0 +1,548 @@
+RoTeK-swt-BT-BT-6709-signals-MIB DEFINITIONS ::= BEGIN
+
+IMPORTS
+	enterprises, NOTIFICATION-TYPE
+		FROM SNMPV2-SMI;
+
+    rotek           OBJECT IDENTIFIER ::= { enterprises 41752 }
+    swt             OBJECT IDENTIFIER ::= { rotek 911 }
+    BT-6709-MTS     OBJECT IDENTIFIER ::= { swt 8 }
+    signals         OBJECT IDENTIFIER ::= { BT-6709 1 }
+    traps           OBJECT IDENTIFIER ::= { BT-6709 2 }
+
+	
+    fwVersion OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "FWVersion" 
+    ::= { signals 1 }
+
+    restoreSignal OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  write-only
+    STATUS  current
+    DESCRIPTION
+    "Restore settings
+    1 - restore settings"
+    ::= { signals 2 }
+	
+    rebootSignal OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  write-only
+    STATUS  current
+    DESCRIPTION
+    "Reboot device: 
+    1 - reboot"
+    ::= { signals 3 }
+    
+    upsModel OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "UPS model" 
+    ::= { signals 4 }
+    
+   	upsSerial OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "UPS serial" 
+    ::= { signals 5 }
+    
+    upsVersion OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "UPS version" 
+    ::= { signals 6 }
+    
+    batTest OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  write-only
+    STATUS  current
+    DESCRIPTION
+    "0 - cancel test
+    1-99 - run test to x minutes
+    100 - run test to 10 seconds
+    999 - test till charging"
+    ::= { signals 7 }
+    
+    shutdown OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  write-only
+    STATUS  current
+    DESCRIPTION
+    "Control of shut down UPS load:
+	0 - stop shut down load
+	n - shut down load in n minutes
+	n: 0.2, 0.3, .., 1, 2, .., 10"
+    ::= { signals 8 }
+	
+    intTemp OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Internal temperature" 
+    ::= { signals 9 }
+	
+    inFreq OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Input frequency, Hz" 
+    ::= { signals 10 }
+	
+    inVoltVAC OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Input voltage" 
+    ::= { signals 11 }
+	
+    outVoltVAC OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Output voltage" 
+    ::= { signals 12 }
+	
+    power OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Power, %" 
+    ::= { signals 13 }
+	
+    batCap OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Battery capacity, %" 
+    ::= { signals 14 }
+    
+    batTime OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Rest working time of battery, min" 
+    ::= { signals 15 }
+		
+    connectMonitor OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Connect status:
+	0 - normal;
+	1 - connect fail" 
+    ::= { signals 16 }
+    
+    alarms OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "bit 7 - utility fail
+	bit 6 - battery low
+	bit 5 - bypass/boost or buck active
+	bit 4 - UPS fail
+	bit 3 - UPS Type is Standby (0 is On_line)
+	bit 2 - Test in Progress
+	bit 1 - Shutdown Active
+	bit 0 - Beeper On" 
+    ::= { signals 17 }
+    
+    server1 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Get/set server1 for traps" 
+    ::= { signals 18 }
+    
+    server2 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Get/set server2 for traps" 
+    ::= { signals 19 }
+    
+    server3 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Get/set server3 for traps" 
+    ::= { signals 20 }
+    
+    server4 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Get/set server4 for traps" 
+    ::= { signals 21 }
+    
+    server5 OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-write
+    STATUS  current
+    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  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "UPS voltage cell min" 
+    ::= { signals 28 }
+    
+    upsVoltCellMax OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "UPS voltage cell max" 
+    ::= { signals 29 }
+    
+    vacAlarmHighRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "VAC alarm high range" 
+    ::= { signals 30 }
+    
+    vacAlarmLowRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "VAC alarm low range" 
+    ::= { signals 31 }
+    
+    vacAlarmHistRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "VAC alarm hist range" 
+    ::= { signals 32 }
+    
+    tempAlarmHighRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Temperature alarm high range" 
+    ::= { signals 33 }
+    
+    tempAlarmLowRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Temprature alarm low range" 
+    ::= { signals 34 }
+    
+    tempAlarmHistRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Temprature alarm hist range" 
+    ::= { signals 35 }
+    
+    loadAlarmHighRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-write
+    STATUS  current
+    DESCRIPTION
+    "Load alarm high range" 
+    ::= { signals 36 }
+    
+    loadAlarmHistRange OBJECT-TYPE
+    SYNTAX  INTEGER
+    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 }
+    
+    akbWorkTime OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Work time from AKB, minutes" 
+    ::= { signals 44 }
+
+    currInput OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "UPS input current, A" 
+    ::= { signals 45 }
+
+    currOutput OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "UPS output current, A" 
+    ::= { signals 46 }
+
+    voltAKB OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "AKB current voltage, V" 
+    ::= { signals 47 }
+
+    normCapacityAKB OBJECT-TYPE
+    SYNTAX  INTEGER
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "AKB normal capacity, Ah" 
+    ::= { signals 48 }
+
+    changeDataAKB OBJECT-TYPE
+    SYNTAX  OCTET STRING
+    MAX-ACCESS  read-only
+    STATUS  current
+    DESCRIPTION
+    "Data of change AKB" 
+    ::= { signals 49 }    
+
+-- DEVICE TRAPS
+
+     fwVersionUpdate  NOTIFICATION-TYPE
+     OBJECTS              { fwVersion }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 1 }
+
+    fwVersionUpdated  NOTIFICATION-TYPE
+     OBJECTS              { fwVersion }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 2 }
+
+     deviceRestored  NOTIFICATION-TYPE
+     OBJECTS              { restoreSignal }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 3 }
+
+    deviceRebooted  NOTIFICATION-TYPE
+     OBJECTS              { rebootSignal }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 4 }
+
+     batteryTemperatureHighNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 5 }
+
+    batteryTemperatureHighAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 6 }
+	 
+     lineAlarm  NOTIFICATION-TYPE
+     OBJECTS              { inVoltVAC }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 7 }
+
+    lineNorm  NOTIFICATION-TYPE
+     OBJECTS              { inVoltVAC }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 8 } 
+
+     lowBatAlarm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 9 }
+
+     lowBatNorm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 10 }
+	 
+     powerAlarm  NOTIFICATION-TYPE
+     OBJECTS              { power }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 11 }
+
+    powerNorm  NOTIFICATION-TYPE
+     OBJECTS              { power }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 12 }
+
+	ConnectMonitorAlarm  NOTIFICATION-TYPE
+     OBJECTS              { connectMonitor }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 13 }
+	 
+     connectMonitorNorm  NOTIFICATION-TYPE
+     OBJECTS              { connectMonitor }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 14 }
+     
+     batteryConnectAlarm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 15 }
+
+     batteryConnectNorm  NOTIFICATION-TYPE
+     OBJECTS              { batCap }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 16 }	
+     
+     batteryTemperatureLowNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 17 }
+
+     batteryTemperatureLowAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 18 }
+
+     changeBatteryAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 19 }
+
+     changeBatteryNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 20 }
+	
+END
+

+ 60 - 0
docs/bt6709-mts/Changelog.md

@@ -0,0 +1,60 @@
+# 1.6
+### Исправлено
+1. Логика сохранения сетевых настроек
+2. Отображение статус бита "Вкл/Откл звука ИБП"
+
+
+# 1.5
+### Изменено
+1. Настройки по умолчанию
+2. Авария "Замена АКБ" не фиксируется в журнале "Событий"
+
+# 1.4
+### Добавлено
+1. Отключение звука ИБП
+
+
+# 1.3
+### Добавлено
+[CLI] Вывод серийного номера ИБП в ответе на команду info
+
+### Исправлено
+[SNMP] Запуск отправки trap-сообщений
+[NTP] Запуск синхронизации времени
+
+
+# 1.2
+### Добавлено
+1. Поддержка SSH.
+
+### Изменено
+1. [MIB] Тип переменных.
+2. [WEB] Валидция полей "Read Community", "Write Community"
+
+# 1.1
+### Добавлено
+1. [CLI] Команды: notification, whitelist reset.
+2. [ИБП] Поддержка команды "Shutdown and Restore" для  RTMP |.
+
+### Изменено
+1. [Bootloader WEB] слово "прошивка" заменено на "ПО".
+2. [WEB] В разделе "Белый список" фраза "IP-адреса" заменена на "Диапазон IP-адресов".
+
+### Исправлено
+1. Опрос ИБП.
+2. Условия проверки изменнения сетевых настроек.
+3. [DHCP] Перезапрос IP-адреса.
+4. [WEB] На странице "Уведомление" работа с checkbox.
+5. [WEB] На странице "Мониторинга" выделение параметром красном цвете при наступление аварийных событий.
+
+
+# 1.0
+### Добавлено
+Первый релиз
+### Изменено
+
+### Исправлено
+
+
+
+

+ 23 - 23
docs/bt6709/BT6709.MIB

@@ -6,7 +6,7 @@ IMPORTS
 
     rotek           OBJECT IDENTIFIER ::= { enterprises 41752 }
     swt             OBJECT IDENTIFIER ::= { rotek 911 }
-    BT-6709         OBJECT IDENTIFIER ::= { swt 8 }
+    BT-6709         OBJECT IDENTIFIER ::= { swt 10 }
     signals         OBJECT IDENTIFIER ::= { BT-6709 1 }
     traps           OBJECT IDENTIFIER ::= { BT-6709 2 }
 
@@ -84,7 +84,7 @@ IMPORTS
     ::= { signals 8 }
 	
     intTemp OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -92,7 +92,7 @@ IMPORTS
     ::= { signals 9 }
 	
     inFreq OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -100,7 +100,7 @@ IMPORTS
     ::= { signals 10 }
 	
     inVoltVAC OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -108,7 +108,7 @@ IMPORTS
     ::= { signals 11 }
 	
     outVoltVAC OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -116,7 +116,7 @@ IMPORTS
     ::= { signals 12 }
 	
     power OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -124,7 +124,7 @@ IMPORTS
     ::= { signals 13 }
 	
     batCap OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -132,7 +132,7 @@ IMPORTS
     ::= { signals 14 }
     
     batTime OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -245,7 +245,7 @@ IMPORTS
     ::= { signals 27 }
     
     upsVoltCellMin OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -253,7 +253,7 @@ IMPORTS
     ::= { signals 28 }
     
     upsVoltCellMax OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -261,7 +261,7 @@ IMPORTS
     ::= { signals 29 }
     
     vacAlarmHighRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -269,7 +269,7 @@ IMPORTS
     ::= { signals 30 }
     
     vacAlarmLowRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -277,7 +277,7 @@ IMPORTS
     ::= { signals 31 }
     
     vacAlarmHistRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -285,7 +285,7 @@ IMPORTS
     ::= { signals 32 }
     
     tempAlarmHighRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -293,7 +293,7 @@ IMPORTS
     ::= { signals 33 }
     
     tempAlarmLowRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -301,7 +301,7 @@ IMPORTS
     ::= { signals 34 }
     
     tempAlarmHistRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -309,7 +309,7 @@ IMPORTS
     ::= { signals 35 }
     
     loadAlarmHighRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -317,7 +317,7 @@ IMPORTS
     ::= { signals 36 }
     
     loadAlarmHistRange OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-write
     STATUS  current
     DESCRIPTION
@@ -375,7 +375,7 @@ IMPORTS
     ::= { signals 43 }
     
     akbWorkTime OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -383,7 +383,7 @@ IMPORTS
     ::= { signals 44 }
 
     currInput OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -391,7 +391,7 @@ IMPORTS
     ::= { signals 45 }
 
     currOutput OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -399,7 +399,7 @@ IMPORTS
     ::= { signals 46 }
 
     voltAKB OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION
@@ -407,7 +407,7 @@ IMPORTS
     ::= { signals 47 }
 
     normCapacityAKB OBJECT-TYPE
-    SYNTAX  INTEGER
+    SYNTAX  OCTET STRING
     MAX-ACCESS  read-only
     STATUS  current
     DESCRIPTION

+ 210 - 210
modules/Ethernet/private_mib_bt6709.c

@@ -50,204 +50,204 @@ 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.8.1.49  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.49  */
 static const struct snmp_scalar_node signal49 = SNMP_SCALAR_CREATE_NODE_READONLY(49, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.48  */
-static const struct snmp_scalar_node signal48 = SNMP_SCALAR_CREATE_NODE_READONLY(48, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.48  */
+static const struct snmp_scalar_node signal48 = SNMP_SCALAR_CREATE_NODE_READONLY(48, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.47  */
-static const struct snmp_scalar_node signal47 = SNMP_SCALAR_CREATE_NODE_READONLY(47, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.47  */
+static const struct snmp_scalar_node signal47 = SNMP_SCALAR_CREATE_NODE_READONLY(47, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.46  */
-static const struct snmp_scalar_node signal46 = SNMP_SCALAR_CREATE_NODE_READONLY(46, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.46  */
+static const struct snmp_scalar_node signal46 = SNMP_SCALAR_CREATE_NODE_READONLY(46, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.45  */
-static const struct snmp_scalar_node signal45 = SNMP_SCALAR_CREATE_NODE_READONLY(45, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.45  */
+static const struct snmp_scalar_node signal45 = SNMP_SCALAR_CREATE_NODE_READONLY(45, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.44  */
-static const struct snmp_scalar_node signal44 = SNMP_SCALAR_CREATE_NODE_READONLY(44, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.44  */
+static const struct snmp_scalar_node signal44 = SNMP_SCALAR_CREATE_NODE_READONLY(44, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.43  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.42  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.41  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.40  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.39  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.38  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.37  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.37  */
 static const struct snmp_scalar_node signal37 = SNMP_SCALAR_CREATE_NODE(37, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.36  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.36  */
 static const struct snmp_scalar_node signal36 = SNMP_SCALAR_CREATE_NODE(36, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.35  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.35  */
 static const struct snmp_scalar_node signal35 = SNMP_SCALAR_CREATE_NODE(35, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.34  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.34  */
 static const struct snmp_scalar_node signal34 = SNMP_SCALAR_CREATE_NODE(34, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.33  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.33  */
 static const struct snmp_scalar_node signal33 = SNMP_SCALAR_CREATE_NODE(33, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.32  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.32  */
 static const struct snmp_scalar_node signal32 = SNMP_SCALAR_CREATE_NODE(32, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.31  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.31  */
 static const struct snmp_scalar_node signal31 = SNMP_SCALAR_CREATE_NODE(31, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.30  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.30  */
 static const struct snmp_scalar_node signal30 = SNMP_SCALAR_CREATE_NODE(30, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.29  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.29  */
 static const struct snmp_scalar_node signal29 = SNMP_SCALAR_CREATE_NODE(29, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.28  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.28  */
 static const struct snmp_scalar_node signal28 = SNMP_SCALAR_CREATE_NODE(28, SNMP_NODE_INSTANCE_READ_WRITE,
-        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.27  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.26  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.25  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.24  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.23  */
+/* signal .1.3.6.1.4.1.41752.911.10.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.8.1.22  */
+/* signal .1.3.6.1.4.1.41752.911.10.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);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.21  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.21  */
 static const struct snmp_scalar_node signal21 = SNMP_SCALAR_CREATE_NODE(21, 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.8.1.20  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.20  */
 static const struct snmp_scalar_node signal20 = SNMP_SCALAR_CREATE_NODE(20, 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.8.1.19  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.19  */
 static const struct snmp_scalar_node signal19 = SNMP_SCALAR_CREATE_NODE(19, 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.8.1.18  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.18  */
 static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE(18, 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.8.1.17  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.17  */
 static const struct snmp_scalar_node signal17 = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.16  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.16  */
 static const struct snmp_scalar_node signal16 = SNMP_SCALAR_CREATE_NODE_READONLY(16, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.15  */
-static const struct snmp_scalar_node signal15 = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.15  */
+static const struct snmp_scalar_node signal15 = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.14  */
-static const struct snmp_scalar_node signal14 = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.14  */
+static const struct snmp_scalar_node signal14 = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.13  */
-static const struct snmp_scalar_node signal13 = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.13  */
+static const struct snmp_scalar_node signal13 = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.12  */
-static const struct snmp_scalar_node signal12 = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.12  */
+static const struct snmp_scalar_node signal12 = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.11  */
-static const struct snmp_scalar_node signal11 = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.11  */
+static const struct snmp_scalar_node signal11 = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.10  */
-static const struct snmp_scalar_node signal10 = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.10  */
+static const struct snmp_scalar_node signal10 = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.9  */
-static const struct snmp_scalar_node signal9 = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_INTEGER,
+/* signal .1.3.6.1.4.1.41752.911.10.1.9  */
+static const struct snmp_scalar_node signal9 = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.8  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.8  */
 static const struct snmp_scalar_node signal8 = SNMP_SCALAR_CREATE_NODE(8, SNMP_NODE_INSTANCE_WRITE_ONLY,
         SNMP_ASN1_TYPE_OCTET_STRING, NULL, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.7  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.7  */
 static const struct snmp_scalar_node signal7 = SNMP_SCALAR_CREATE_NODE(7, SNMP_NODE_INSTANCE_WRITE_ONLY,
         SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.6  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.6  */
 static const struct snmp_scalar_node signal6 = SNMP_SCALAR_CREATE_NODE_READONLY(6, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.5  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.5  */
 static const struct snmp_scalar_node signal5 = SNMP_SCALAR_CREATE_NODE_READONLY(5, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.4  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.4  */
 static const struct snmp_scalar_node signal4 = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.3  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.3  */
 static const struct snmp_scalar_node signal3 = SNMP_SCALAR_CREATE_NODE(3, SNMP_NODE_INSTANCE_WRITE_ONLY,
         SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.2  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.2  */
 static const struct snmp_scalar_node signal2 = SNMP_SCALAR_CREATE_NODE(2, SNMP_NODE_INSTANCE_WRITE_ONLY,
         SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
 
-/* signal .1.3.6.1.4.1.41752.911.8.1.1  */
+/* signal .1.3.6.1.4.1.41752.911.10.1.1  */
 static const struct snmp_scalar_node signal1 = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_OCTET_STRING,
         signal_get_value);
 
 
-// signals .1.3.6.1.4.1.41752.911.8.1
+// signals .1.3.6.1.4.1.41752.911.10.1
 static const struct snmp_node *const signals_nodes[] = {
     &signal1.node.node,
     &signal2.node.node,
@@ -301,11 +301,11 @@ static const struct snmp_node *const signals_nodes[] = {
 };
 static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
 
-// bt_6703 .1.3.6.1.4.1.41752.911.8
+// bt_6703 .1.3.6.1.4.1.41752.911.10
 static const struct snmp_node *const bt6709_nodes[] = {
     &signals_node.node
 };
-static const struct snmp_tree_node bt6709_node = SNMP_CREATE_TREE_NODE(8, bt6709_nodes);
+static const struct snmp_tree_node bt6709_node = SNMP_CREATE_TREE_NODE(10, bt6709_nodes);
 
 // swt .1.3.6.1.4.1.41752.911
 static const struct snmp_node *const swt_nodes[] = {
@@ -399,39 +399,25 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
             GetUPSVersionStr((char *)paramStr, &paramLength);
             break;
         case 9: /* IntTemp */
-            GetInternalTempInt(&val);
-            *paramInt = val * MUL10;
-            paramLength = sizeof(s32_t);
+            GetInternalTempStr((char *)paramStr, &paramLength);
             break;
         case 10: /* InFreq */
-            GetInputFreqInt(&val);
-            *paramInt = val * MUL10;
-            paramLength = sizeof(s32_t);
+            GetInputFreqStr((char *)paramStr, &paramLength);
             break;
         case 11: /* InVoltVAC */
-            GetInputVoltageInt(&val);
-            *paramInt = val * MUL10;
-            paramLength = sizeof(s32_t);
+            GetInputVoltageStr((char *)paramStr, &paramLength);
             break;
         case 12: /* OutVoltVAC */
-            GetOutputVoltageInt(&val);
-            *paramInt = val * MUL10;
-            paramLength = sizeof(s32_t);
+            GetOutputVoltageStr((char *)paramStr, &paramLength);
             break;
         case 13: /* Power */
-            GetPowerInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetPowerStr((char *)paramStr, &paramLength);
             break;
         case 14: /* BatCap */
-            GetBatCapacityInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetBatCapacityStr((char *)paramStr, &paramLength);
             break;
         case 15: /* BatTime */
-            GetRuntimeInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetRuntimeStr((char *)paramStr, &paramLength);
             break;
         case 16: /* ConnectMonitor */
             GetConnectMonitorStr((char *)paramStr, &paramLength);
@@ -470,54 +456,34 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
             GetWhiteListSTR((char *)paramStr, &paramLength, 4);
             break;
         case 28: /* UPSVoltCellMin */
-            GetUPSVoltCellMinInt(&val);
-            *paramInt = val * MUL100;
-            paramLength = sizeof(s32_t);
+            GetUPSVoltCellMinStr((char *)paramStr, &paramLength);
             break;
         case 29: /* UPSVoltCellMax */
-            GetUPSVoltCellMaxInt(&val);
-            *paramInt = val * MUL100;
-            paramLength = sizeof(s32_t);
+            GetUPSVoltCellMaxStr((char *)paramStr, &paramLength);
             break;
         case 30: /* VACAlarmHighRange */
-            GetVACAlarmHighRangeInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetVACAlarmHighRangeStr((char *)paramStr, &paramLength);
             break;
         case 31: /* VACAlarmLowRange */
-            GetVACAlarmLowRangeInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetVACAlarmLowRangeStr((char *)paramStr, &paramLength);
             break;
         case 32: /* VACAlarmHistRange */
-            GetVACAlarmHisteInt(&val);
-            *paramInt = (int32_t)val;
-            paramLength = sizeof(s32_t);
+            GetVACAlarmHisteStr((char *)paramStr, &paramLength);
             break;
         case 33: /* TemperatureAlarmHighRange */
-            GetTemperatureAlarmHighRangeInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetTemperatureAlarmHighRangeStr((char *)paramStr, &paramLength);
             break;
         case 34: /* TemperatureAlarmLowRange */
-            GetTemperatureAlarmLowRangeInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetTemperatureAlarmLowRangeStr((char *)paramStr, &paramLength);
             break;
         case 35: /* TemperatureAlarmHistRange */
-            GetTemperatureAlarmHisteInt(&val);
-            *paramInt = val * MUL10;
-            paramLength = sizeof(s32_t);
+            GetTemperatureAlarmHisteStr((char *)paramStr, &paramLength);
             break;
         case 36: /* LoadAlarmHighRange */
-            GetLoadAlarmHighRangeInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetLoadAlarmHighRangeStr((char *)paramStr, &paramLength);
             break;
         case 37: /* LoadAlarmHistRange */
-            GetLoadAlarmHisteInt(&val);
-            *paramInt = val * MUL10;
-            paramLength = sizeof(s32_t);
+            GetLoadAlarmHisteStr((char *)paramStr, &paramLength);
             break;
         case 38: /* SntpTimeZone */
             GetSntpTimeZoneStr((char *)paramStr, &paramLength);
@@ -538,29 +504,19 @@ static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
             GetTimeStr((char *)paramStr, &paramLength);
             break;
         case 44: /* AKBTimeWork */
-            GetAKBWorktimeInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetAKBWorktimeStr((char *)paramStr, &paramLength);
             break;
         case 45: /* InputCurrent */
-            GetInputCurrentInt(&val);
-            *paramInt = val * MUL100;
-            paramLength = sizeof(s32_t);
+            GetInputCurrentStr((char *)paramStr, &paramLength);
             break;
         case 46: /* OutputCurrent */
-            GetOutputCurrentInt(&val);
-            *paramInt = val * MUL100;
-            paramLength = sizeof(s32_t);
+            GetOutputCurrentStr((char *)paramStr, &paramLength);
             break;
         case 47: /* VoltageAKB */
-            GetVoltageAKBInt(&val);
-            *paramInt = val * MUL10;
-            paramLength = sizeof(s32_t);
+            GetVoltageAKBtStr((char *)paramStr, &paramLength);
             break;
         case 48: /*  CapacityNominalAKB*/
-            GetCapacityNominalAKBInt(&int_val);
-            *paramInt = int_val;
-            paramLength = sizeof(s32_t);
+            GetCapacityNominalAKBStr((char *)paramStr, &paramLength);
             break;
         case 49: /*  DataNextChangeAKB*/
             GetDataNextChangeAKBStr((char *)paramStr, &paramLength);
@@ -659,54 +615,44 @@ static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t le
             SetManagerIp5(val_string);
             break;
         case 28:
-            val = *((s32_t*)value);
-            setVal = (float)val/MUL100;
-            SetUPSVoltCellMinInt(setVal);
+            val_string = (char *)value;
+            SetUPSVoltCellMinStr(val_string);
             break;
         case 29:
-            val = *((s32_t*)value);
-            setVal = (float)val/MUL100;
-            SetUPSVoltCellMaxInt(setVal);
+            val_string = (char *)value;
+            SetUPSVoltCellMaxStr(val_string);
             break;
         case 30:
-            val = *((s32_t*)value);
-            setVal = (float)val;
-            SetVACAlarmHighRangeInt(setVal);
+            val_string = (char *)value;
+            SetVACAlarmHighRangeStr(val_string);
             break;
         case 31:
-            val = *((s32_t*)value);
-            setVal = (float)val;
-            SetVACAlarmLowRangeInt(setVal);
+            val_string = (char *)value;
+            SetVACAlarmLowRangeStr(val_string);
             break;
         case 32:
-            val = *((s32_t*)value);
-            setVal = (float)val;
-            SetVACAlarmHisteInt(setVal);
+            val_string = (char *)value;
+            SetVACAlarmHisteStr(val_string);
             break;
         case 33:
-            val = *((s32_t*)value);
-            setVal = (float)val;
-            SetTemperatureAlarmHighRangeInt(setVal);
+            val_string = (char *)value;
+            SetTemperatureAlarmHighRangeStr(val_string);
             break;
         case 34:
-            val = *((s32_t*)value);
-            setVal = (float)val;
-            SetTemperatureAlarmLowRangeInt(setVal);
+            val_string = (char *)value;
+            SetTemperatureAlarmLowRangeStr(val_string);
             break;
         case 35:
-            val = *((s32_t*)value);
-            setVal = (float)val/MUL10;
-            SetTemperatureAlarmHisteInt(setVal);
+            val_string = (char *)value;
+            SetTemperatureAlarmHisteStr(val_string);
             break;
         case 36:
-            val = *((s32_t*)value);
-            setVal = (float)val;
-            SetLoadAlarmHighRangeInt(setVal);
+            val_string = (char *)value;
+            SetLoadAlarmHighRangeStr(val_string);
             break;
         case 37:
-            val = *((s32_t*)value);
-            setVal = (float)val/MUL10;
-            SetLoadAlarmHistInt(setVal);
+            val_string = (char *)value;
+            SetLoadAlarmHistStr(val_string);
             break;
         case 38:
             val_string = (char *)value;
@@ -806,84 +752,138 @@ static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len
             }
             break;
         case 28:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val < (MUL100*sSettings.UPS_Setting.Ucellmax) && val > (MUL100*MIN_VOLT_CELL_RANGE)) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val > (MUL100*sSettings.UPS_Setting.Ucellmin) && val <= (MUL100*MAX_VOLT_CELL_RANGE)) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= MAX_VAC_MIN_RANGE && val <= MAX_VAC_MAX_RANGE) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= MIN_VAC_MIN_RANGE && val <= MIN_VAC_MAX_RANGE) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= HIST_VAC_MIN_RANGE && val <= HIST_VAC_MAX_RANGE) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= MAX_TEMP_MIN_RANGE && val <= MAX_TEMP_MAX_RANGE) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= MIN_TEMP_MIN_RANGE && val <= MIN_TEMP_MAX_RANGE) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= (MUL10*HIST_TEMP_MIN_RANGE) && val <= (MUL10*HIST_TEMP_MAX_RANGE)) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= MAX_LOAD_MIN_RANGE && val <= MAX_LOAD_MAX_RANGE) {
-                    ret = SNMP_ERR_NOERROR;
+            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:
-            if ( len == sizeof(s32_t) ) {
-                val = *((s32_t *)value);
-                if (val >= (MUL10*HIST_LOAD_MIN_RANGE) && val <= (MUL10*HIST_LOAD_MAX_RANGE)) {
-                    ret = SNMP_ERR_NOERROR;
+            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;

+ 1004 - 0
modules/Ethernet/private_mib_bt6709_mts.c

@@ -0,0 +1,1004 @@
+/*
+ * private_mib_bt6709.c
+ *
+ *  Created on: 03.10.2018
+ *      Author: balbekova
+ */
+
+
+#if defined HARDWARE_BT6709_MTS
+
+#include "stm32f4xx.h"
+#include "private_mib.h"
+#include "parameters.h"
+#include "settings_api.h"
+#include "log.h"
+#include "megatec.h"
+#include "control_symbol.h"
+#include "sntp_api.h"
+#include "web_params_api.h"
+#include "hal.h"
+
+#include "FreeRTOS.h"
+#include "task.h"
+
+#include <ctype.h>
+
+#ifdef PRINTF_STDLIB
+#include <stdio.h>
+#endif
+#ifdef PRINTF_CUSTOM
+#include "tinystdio.h"
+#endif
+
+#include "lwip/apps/snmp_scalar.h"
+#include "lwip/apps/snmp.h"
+//#include "snmp_core.h"
+
+#define MUL100          100
+#define MUL10           10
+
+extern struct snmp_mib mib2;
+
+/**
+  * @brief  Общая структура настроек
+  */
+extern SETTINGS_t sSettings;
+
+
+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.8.1.49  */
+static const struct snmp_scalar_node signal49 = SNMP_SCALAR_CREATE_NODE_READONLY(49, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.48  */
+static const struct snmp_scalar_node signal48 = SNMP_SCALAR_CREATE_NODE_READONLY(48, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.47  */
+static const struct snmp_scalar_node signal47 = SNMP_SCALAR_CREATE_NODE_READONLY(47, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.46  */
+static const struct snmp_scalar_node signal46 = SNMP_SCALAR_CREATE_NODE_READONLY(46, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.45  */
+static const struct snmp_scalar_node signal45 = SNMP_SCALAR_CREATE_NODE_READONLY(45, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.44  */
+static const struct snmp_scalar_node signal44 = SNMP_SCALAR_CREATE_NODE_READONLY(44, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.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.8.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.8.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.8.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.8.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.8.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.8.1.37  */
+static const struct snmp_scalar_node signal37 = SNMP_SCALAR_CREATE_NODE(37, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.36  */
+static const struct snmp_scalar_node signal36 = SNMP_SCALAR_CREATE_NODE(36, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.35  */
+static const struct snmp_scalar_node signal35 = SNMP_SCALAR_CREATE_NODE(35, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.34  */
+static const struct snmp_scalar_node signal34 = SNMP_SCALAR_CREATE_NODE(34, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.33  */
+static const struct snmp_scalar_node signal33 = SNMP_SCALAR_CREATE_NODE(33, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.32  */
+static const struct snmp_scalar_node signal32 = SNMP_SCALAR_CREATE_NODE(32, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.31  */
+static const struct snmp_scalar_node signal31 = SNMP_SCALAR_CREATE_NODE(31, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.30  */
+static const struct snmp_scalar_node signal30 = SNMP_SCALAR_CREATE_NODE(30, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.29  */
+static const struct snmp_scalar_node signal29 = SNMP_SCALAR_CREATE_NODE(29, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.28  */
+static const struct snmp_scalar_node signal28 = SNMP_SCALAR_CREATE_NODE(28, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_INTEGER, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.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.8.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.8.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.8.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.8.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.8.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);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.21  */
+static const struct snmp_scalar_node signal21 = SNMP_SCALAR_CREATE_NODE(21, 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.8.1.20  */
+static const struct snmp_scalar_node signal20 = SNMP_SCALAR_CREATE_NODE(20, 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.8.1.19  */
+static const struct snmp_scalar_node signal19 = SNMP_SCALAR_CREATE_NODE(19, 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.8.1.18  */
+static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE(18, 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.8.1.17  */
+static const struct snmp_scalar_node signal17 = SNMP_SCALAR_CREATE_NODE_READONLY(17, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.16  */
+static const struct snmp_scalar_node signal16 = SNMP_SCALAR_CREATE_NODE_READONLY(16, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.15  */
+static const struct snmp_scalar_node signal15 = SNMP_SCALAR_CREATE_NODE_READONLY(15, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.14  */
+static const struct snmp_scalar_node signal14 = SNMP_SCALAR_CREATE_NODE_READONLY(14, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.13  */
+static const struct snmp_scalar_node signal13 = SNMP_SCALAR_CREATE_NODE_READONLY(13, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.12  */
+static const struct snmp_scalar_node signal12 = SNMP_SCALAR_CREATE_NODE_READONLY(12, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.11  */
+static const struct snmp_scalar_node signal11 = SNMP_SCALAR_CREATE_NODE_READONLY(11, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.10  */
+static const struct snmp_scalar_node signal10 = SNMP_SCALAR_CREATE_NODE_READONLY(10, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.9  */
+static const struct snmp_scalar_node signal9 = SNMP_SCALAR_CREATE_NODE_READONLY(9, SNMP_ASN1_TYPE_INTEGER,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.8  */
+static const struct snmp_scalar_node signal8 = SNMP_SCALAR_CREATE_NODE(8, SNMP_NODE_INSTANCE_WRITE_ONLY,
+        SNMP_ASN1_TYPE_OCTET_STRING, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.7  */
+static const struct snmp_scalar_node signal7 = SNMP_SCALAR_CREATE_NODE(7, SNMP_NODE_INSTANCE_WRITE_ONLY,
+        SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.6  */
+static const struct snmp_scalar_node signal6 = SNMP_SCALAR_CREATE_NODE_READONLY(6, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.5  */
+static const struct snmp_scalar_node signal5 = SNMP_SCALAR_CREATE_NODE_READONLY(5, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.4  */
+static const struct snmp_scalar_node signal4 = SNMP_SCALAR_CREATE_NODE_READONLY(4, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.3  */
+static const struct snmp_scalar_node signal3 = SNMP_SCALAR_CREATE_NODE(3, SNMP_NODE_INSTANCE_WRITE_ONLY,
+        SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.2  */
+static const struct snmp_scalar_node signal2 = SNMP_SCALAR_CREATE_NODE(2, SNMP_NODE_INSTANCE_WRITE_ONLY,
+        SNMP_ASN1_TYPE_INTEGER, NULL, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.8.1.1  */
+static const struct snmp_scalar_node signal1 = SNMP_SCALAR_CREATE_NODE_READONLY(1, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+
+// signals .1.3.6.1.4.1.41752.911.8.1
+static const struct snmp_node *const signals_nodes[] = {
+    &signal1.node.node,
+    &signal2.node.node,
+    &signal3.node.node,
+    &signal4.node.node,
+    &signal5.node.node,
+    &signal6.node.node,
+    &signal7.node.node,
+    &signal8.node.node,
+    &signal9.node.node,
+    &signal10.node.node,
+    &signal11.node.node,
+    &signal12.node.node,
+    &signal13.node.node,
+    &signal14.node.node,
+    &signal15.node.node,
+    &signal16.node.node,
+    &signal17.node.node,
+    &signal18.node.node,
+    &signal19.node.node,
+    &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,
+    &signal44.node.node,
+    &signal45.node.node,
+    &signal46.node.node,
+    &signal47.node.node,
+    &signal48.node.node,
+    &signal49.node.node,
+};
+static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
+
+// bt_6703 .1.3.6.1.4.1.41752.911.8
+static const struct snmp_node *const bt6709_mts_nodes[] = {
+    &signals_node.node
+};
+static const struct snmp_tree_node bt6709_mts_node = SNMP_CREATE_TREE_NODE(8, bt6709_mts_nodes);
+
+// swt .1.3.6.1.4.1.41752.911
+static const struct snmp_node *const swt_nodes[] = {
+    &bt6709_mts_node.node
+};
+static const struct snmp_tree_node swt_node = SNMP_CREATE_TREE_NODE(911, swt_nodes);
+
+// rotek .1.3.6.1.4.1.41752
+static const struct snmp_node *const rotek_nodes[] = {
+    &swt_node.node
+};
+static const struct snmp_tree_node rotek_node = SNMP_CREATE_TREE_NODE(41752, rotek_nodes);
+
+// enterprises .1.3.6.1.4.1
+static const struct snmp_node *const enterprises_nodes[] = {
+    &rotek_node.node
+};
+static const struct snmp_tree_node enterprises_node = SNMP_CREATE_TREE_NODE(1, enterprises_nodes);
+
+// private .1.3.6.1.4
+static const struct snmp_node *const private_nodes[] = {
+    &enterprises_node.node
+};
+static const struct snmp_tree_node private_root = SNMP_CREATE_TREE_NODE(0, private_nodes);
+
+static const u32_t prvmib_base_oid[] = { 1, 3, 6, 1, 4 };
+static const struct snmp_mib private_mib = SNMP_MIB_CREATE(prvmib_base_oid, &private_root.node);
+
+
+
+
+void lwip_privmib_init(void)
+{
+    static const struct snmp_mib *my_snmp_mibs[] = {&mib2, &private_mib};
+
+    snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
+}
+
+
+
+uint32_t check_netsettings(char *addr, uint8_t len)
+{
+    uint32_t val = 0;
+    uint8_t i, j;
+    uint8_t cnt_dot = 0;
+    uint8_t digit = 0;
+
+    uint8_t c = *addr;
+
+    for (j = 0; j <= len; j ++) {
+        if (isdigit(c)) {
+            val = (val * 10) + (int)(c - '0');
+        } else if (c == '.' || c == 0) {
+            if (val > 0xff) {
+                return 0;
+            }
+            cnt_dot ++;
+            val = 0;
+        } else {
+            return 0;
+        }
+        c = *++addr;
+    }
+
+    if (cnt_dot != 4) {
+        return 0;
+    }
+    return 1;
+}
+
+static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
+{
+    u8_t *paramStr = (u8_t *)value;
+    s32_t *paramInt = (u8_t*)value;
+    u8_t paramLength = 0;
+    float val = 0;
+    int32_t int_val = 0;
+    u32_t oid = instance->node->oid; // id сигнала
+
+    switch (oid) {
+        case 1: /* FWVersion */
+            GetVersionStr((char *)paramStr, &paramLength);
+            break;
+        case 4: /* UPSModel*/
+            GetUPSModelStr((char *)paramStr, &paramLength);
+            break;
+        case 5: /* UPSSerial*/
+            GetUPSSerialStr((char *)paramStr, &paramLength);
+            break;
+        case 6: /* UPSVersion*/
+            GetUPSVersionStr((char *)paramStr, &paramLength);
+            break;
+        case 9: /* IntTemp */
+            GetInternalTempInt(&val);
+            *paramInt = val * MUL10;
+            paramLength = sizeof(s32_t);
+            break;
+        case 10: /* InFreq */
+            GetInputFreqInt(&val);
+            *paramInt = val * MUL10;
+            paramLength = sizeof(s32_t);
+            break;
+        case 11: /* InVoltVAC */
+            GetInputVoltageInt(&val);
+            *paramInt = val * MUL10;
+            paramLength = sizeof(s32_t);
+            break;
+        case 12: /* OutVoltVAC */
+            GetOutputVoltageInt(&val);
+            *paramInt = val * MUL10;
+            paramLength = sizeof(s32_t);
+            break;
+        case 13: /* Power */
+            GetPowerInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 14: /* BatCap */
+            GetBatCapacityInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 15: /* BatTime */
+            GetRuntimeInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 16: /* ConnectMonitor */
+            GetConnectMonitorStr((char *)paramStr, &paramLength);
+            break;
+        case 17: /* Alarms */
+            GetAlarmStr((char *)paramStr, &paramLength);
+            break;
+        case 18: /* IP server1 (traps) */
+            GetManagerIp((char *)paramStr, &paramLength);
+            break;
+        case 19: /* IP server2 (traps) */
+            GetManagerIp2((char *)paramStr, &paramLength);
+            break;
+        case 20: /* IP server3 (traps) */
+            GetManagerIp3((char *)paramStr, &paramLength);
+            break;
+        case 21: /* IP server4 (traps) */
+            GetManagerIp4((char *)paramStr, &paramLength);
+            break;
+        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 */
+            GetUPSVoltCellMinInt(&val);
+            *paramInt = val * MUL100;
+            paramLength = sizeof(s32_t);
+            break;
+        case 29: /* UPSVoltCellMax */
+            GetUPSVoltCellMaxInt(&val);
+            *paramInt = val * MUL100;
+            paramLength = sizeof(s32_t);
+            break;
+        case 30: /* VACAlarmHighRange */
+            GetVACAlarmHighRangeInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 31: /* VACAlarmLowRange */
+            GetVACAlarmLowRangeInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 32: /* VACAlarmHistRange */
+            GetVACAlarmHisteInt(&val);
+            *paramInt = (int32_t)val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 33: /* TemperatureAlarmHighRange */
+            GetTemperatureAlarmHighRangeInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 34: /* TemperatureAlarmLowRange */
+            GetTemperatureAlarmLowRangeInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 35: /* TemperatureAlarmHistRange */
+            GetTemperatureAlarmHisteInt(&val);
+            *paramInt = val * MUL10;
+            paramLength = sizeof(s32_t);
+            break;
+        case 36: /* LoadAlarmHighRange */
+            GetLoadAlarmHighRangeInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 37: /* LoadAlarmHistRange */
+            GetLoadAlarmHisteInt(&val);
+            *paramInt = val * MUL10;
+            paramLength = sizeof(s32_t);
+            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;
+        case 44: /* AKBTimeWork */
+            GetAKBWorktimeInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 45: /* InputCurrent */
+            GetInputCurrentInt(&val);
+            *paramInt = val * MUL100;
+            paramLength = sizeof(s32_t);
+            break;
+        case 46: /* OutputCurrent */
+            GetOutputCurrentInt(&val);
+            *paramInt = val * MUL100;
+            paramLength = sizeof(s32_t);
+            break;
+        case 47: /* VoltageAKB */
+            GetVoltageAKBInt(&val);
+            *paramInt = val * MUL10;
+            paramLength = sizeof(s32_t);
+            break;
+        case 48: /*  CapacityNominalAKB*/
+            GetCapacityNominalAKBInt(&int_val);
+            *paramInt = int_val;
+            paramLength = sizeof(s32_t);
+            break;
+        case 49: /*  DataNextChangeAKB*/
+            GetDataNextChangeAKBStr((char *)paramStr, &paramLength);
+            break;
+        default:
+            break;
+    }
+
+    return paramLength;
+
+}
+
+static snmp_err_t signal_set_value(struct snmp_node_instance *instance, u16_t len, void *value)
+{
+
+    u32_t oid = instance->node->oid; // id сигнала
+    char *val_string;
+    char str[20];
+    int8_t res = 0;
+    s32_t val;
+    float setVal;
+    bool enable_old_sntp;
+
+    memset(str, 0, 20);
+
+    switch (oid) {
+        case 2: /* RestoreSignal */
+            val = *(s32_t *)value;
+            if (val == 1) {
+                //    SNMP_SendUserTrap(DEVICE_RESTORED);
+                log_event_data(LOG_SYSTEM_DEFCONFIG, "Администратор");
+                vTaskDelay(500);
+                SETTINGS_SetPartDefault();
+                SETTINGS_Save();
+            }
+            break;
+        case 3: /* RebootSignal */
+            val = *(s32_t *)value;
+            if (val == 1) {
+                HTTP_StartResetTask(false);
+            }
+            break;
+        case 7: /* BatTest */
+            val = *(s32_t *)value;
+            if (val == 0) {
+                res = ups_metac_service_pdu(ups_cancel_test);
+                if (res == 1) {
+                    log_event_data(LOG_TEST_UPS, "Администратор (Останов)");
+                }
+            } else if (val > 0 && val < 100) {
+                TimeParam = val;
+                res = ups_metac_service_pdu(ups_test_time);
+                set_act_source(SNMP_ACT);
+            } else if (val == 100) {
+                res = ups_metac_service_pdu(ups_test_10sec);
+                set_act_source(SNMP_ACT);
+            } else if (val == 999) {
+                res = ups_metac_service_pdu(ups_test_low_bat);
+                set_act_source(SNMP_ACT);
+            }
+            break;
+        case 8: /* Shutdown UPS */
+            val_string = (char *)value;
+            float shtdn_val = atof(val_string);
+            if (shtdn_val == 0) {
+                res = ups_metac_service_pdu(ups_cancel_shut_down);
+                if (res == 1) {
+                    log_event_data(LOG_SHUTDOWN_UPS, "Администратор (Останов)");
+                }
+            } else {
+                TimeParamFloat = shtdn_val;
+                res = ups_metac_service_pdu(ups_shutdown);
+                if (res == 1) {
+                    log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
+                }
+            }
+            break;
+        case 18:
+            val_string = (char *)value;
+            SetManagerIp(val_string);
+            break;
+        case 19:
+            val_string = (char *)value;
+            SetManagerIp2(val_string);
+            break;
+        case 20:
+            val_string = (char *)value;
+            SetManagerIp3(val_string);
+            break;
+        case 21:
+            val_string = (char *)value;
+            SetManagerIp4(val_string);
+            break;
+        case 22:
+            val_string = (char *)value;
+            SetManagerIp5(val_string);
+            break;
+        case 28:
+            val = *((s32_t*)value);
+            setVal = (float)val/MUL100;
+            SetUPSVoltCellMinInt(setVal);
+            break;
+        case 29:
+            val = *((s32_t*)value);
+            setVal = (float)val/MUL100;
+            SetUPSVoltCellMaxInt(setVal);
+            break;
+        case 30:
+            val = *((s32_t*)value);
+            setVal = (float)val;
+            SetVACAlarmHighRangeInt(setVal);
+            break;
+        case 31:
+            val = *((s32_t*)value);
+            setVal = (float)val;
+            SetVACAlarmLowRangeInt(setVal);
+            break;
+        case 32:
+            val = *((s32_t*)value);
+            setVal = (float)val;
+            SetVACAlarmHisteInt(setVal);
+            break;
+        case 33:
+            val = *((s32_t*)value);
+            setVal = (float)val;
+            SetTemperatureAlarmHighRangeInt(setVal);
+            break;
+        case 34:
+            val = *((s32_t*)value);
+            setVal = (float)val;
+            SetTemperatureAlarmLowRangeInt(setVal);
+            break;
+        case 35:
+            val = *((s32_t*)value);
+            setVal = (float)val/MUL10;
+            SetTemperatureAlarmHisteInt(setVal);
+            break;
+        case 36:
+            val = *((s32_t*)value);
+            setVal = (float)val;
+            SetLoadAlarmHighRangeInt(setVal);
+            break;
+        case 37:
+            val = *((s32_t*)value);
+            setVal = (float)val/MUL10;
+            SetLoadAlarmHistInt(setVal);
+            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)");
+            }
+            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;
+}
+
+static snmp_err_t signal_set_test(struct snmp_node_instance *instance, u16_t len, void *value)
+{
+    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) {
+        case 2:
+        case 3:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val == 1) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 7: /* BatTest */
+            val = *((s32_t *)value);
+            if ((val >= 0 && val <= 100) || val == 999) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 8: /* Shutdown UPS */
+            if ( len <= 3 ) {
+                val_string = (char *)value;
+                val_string[len] = 0;
+                if (atof(val_string) <= 10) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 18:
+        case 19:
+        case 20:
+        case 21:
+        case 22:
+        case 40:
+            if ( len <= 15 ) {
+                val_string = (char *)value;
+                val_string[len] = 0;
+                if (check_netsettings(val_string, len)) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 28:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val < (MUL100*sSettings.UPS_Setting.Ucellmax) && val > (MUL100*MIN_VOLT_CELL_RANGE)) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 29:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val > (MUL100*sSettings.UPS_Setting.Ucellmin) && val <= (MUL100*MAX_VOLT_CELL_RANGE)) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 30:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= MAX_VAC_MIN_RANGE && val <= MAX_VAC_MAX_RANGE) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 31:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= MIN_VAC_MIN_RANGE && val <= MIN_VAC_MAX_RANGE) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 32:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= HIST_VAC_MIN_RANGE && val <= HIST_VAC_MAX_RANGE) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 33:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= MAX_TEMP_MIN_RANGE && val <= MAX_TEMP_MAX_RANGE) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 34:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= MIN_TEMP_MIN_RANGE && val <= MIN_TEMP_MAX_RANGE) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 35:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= (MUL10*HIST_TEMP_MIN_RANGE) && val <= (MUL10*HIST_TEMP_MAX_RANGE)) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 36:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= MAX_LOAD_MIN_RANGE && val <= MAX_LOAD_MAX_RANGE) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 37:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val >= (MUL10*HIST_LOAD_MIN_RANGE) && val <= (MUL10*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;
+    };
+
+
+    return ret;
+}
+
+#endif
+

+ 0 - 26
modules/Ethernet/trap_api.c

@@ -55,32 +55,6 @@ TRAP_t traps[ALL_TRAPS];
     traps[trap_num].handle = get_param; \
   } while (0);
 
-#ifdef HARDWARE_BT6709
-const char* name_traps[] =
-{
-  "",
-	"Начало обновл. ПО",
-  "Успешное обновл. ПО",
-  "Сброс настроек",
-  "Перезагрузка",
-  "Норм. темп. АКБ по верх. границы",
-  "Авария темп. АКБ по верх. границы",
-  "Авария на линии",
-  "Нормализация линии",
-  "Низкий заряд АКБ",
-  "Нормализация заряда АКБ",
-  "Нагрузка в норме",
-  "Авария нагрузки",
-  "Авария соединения с ИБП",
-  "Норм. соединения с ИБП",
-  "Отключение АКБ",
-  "Подключение АКБ",
-  "Норм. темп. АКБ по ниж. границы",
-  "Авария темп. АКБ по ниж. границы",
-  "Предупр. о замене АКБ",
-  "Норм. предупрежд. о замене АКБ",
-};
-#endif
 /**
   * @brief  Инициализация базы трапов
   * @retval 

+ 2 - 0
modules/HTTP_Server/http_server.c

@@ -13,6 +13,8 @@
 #include "bt6707_fs/fsdata.c"
 #elif HARDWARE_BT6709
 #include "bt6709_fs/fsdata.c"
+#elif HARDWARE_BT6709_MTS
+#include "bt6709_mts_fs/fsdata.c"
 #elif HARDWARE_BT6710
 #include "bt6710_fs/fsdata.c"
 #endif

+ 17 - 10
modules/Makefile

@@ -21,8 +21,6 @@ CFLAGS += -DPRINTF_$(shell echo $(PRINTF) | tr a-z A-Z)
 
 CFLAGS += -DHARDWARE_$(shell echo $(HARDWARE) | tr a-z A-Z)
 
-CFLAGS += -DORDER_$(shell echo $(ORDER) | tr a-z A-Z)
-
 INCLUDES = -I../config
 INCLUDES += -I../stm32/stm32f4xx_spl/inc 
 INCLUDES += -I../stm32/system
@@ -53,7 +51,7 @@ ifeq ($(HARDWARE), bt6710)
 INCLUDES += -Iportgw
 INCLUDES += -Ids18b20
 endif
-ifeq ($(HARDWARE), bt6709)
+ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts))
 INCLUDES += -Iwhitelist
 endif
 ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))
@@ -73,7 +71,7 @@ ifeq ($(HARDWARE), bt6710)
 CSRC += $(wildcard portgw/*.c)
 CSRC += $(wildcard ds18b20/*.c)
 endif
-ifeq ($(HARDWARE), bt6709)     
+ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts))     
 CSRC += $(wildcard whitelist/*.c)
 endif
 ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))
@@ -118,13 +116,13 @@ endif
 ifeq ($(HARDWARE), bt6710) 	
    CSRC += $(wildcard HTTP_Server/http_server.c)
 endif  
-ifneq (,$(filter $(HARDWARE),bt6707 bt6709))
+ifneq (,$(filter $(HARDWARE),bt6707 bt6709 bt6709_mts))
 	INCLUDES += -Icli
 	CSRC += $(wildcard cli/*.c)
 	INCLUDES += -ITelnet_Server
 	CSRC += $(wildcard HTTP_Server/http_server.c)
 	CSRC += $(wildcard Telnet_Server/*.c)
-	ifneq (,$(filter $(HARDWARE),bt6709))
+	ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts))
 		# SSH
 		CSRC += $(wildcard ../thirdparty/wolfssl/wolfcrypt/src/*.c) ../thirdparty/wolfssl/wolfcrypt/src/port/st/stm32.c
 		INCLUDES += -I../thirdparty/wolfssl
@@ -204,6 +202,10 @@ ifeq ($(HARDWARE), bt6709)
 BUILDDIR = ../build/bt6709/$(TARGET)
 endif
 
+ifeq ($(HARDWARE), bt6709_mts)
+BUILDDIR = ../build/bt6709_mts/$(TARGET)
+endif
+
 ifeq ($(HARDWARE), bt6710)
 BUILDDIR = ../build/bt6710/$(TARGET)
 endif
@@ -227,6 +229,10 @@ ifeq ($(HARDWARE), bt6709)
 FW_NAME = BT_6709xx
 endif
 
+ifeq ($(HARDWARE), bt6709_mts)
+FW_NAME = BT_6709_MTSxx
+endif
+
 ifeq ($(HARDWARE), bt6710)
 FW_NAME = BT_6710xx
 endif
@@ -249,6 +255,11 @@ ifeq ($(HARDWARE), bt6709)
 	FSDATA_DIR = ./HTTP_Server/bt6709_fs
 endif
 
+ifeq ($(HARDWARE), bt6709_mts)
+	WUI_DIR = ../web_interface/dist/wui-9-mts
+	FSDATA_DIR = ./HTTP_Server/bt6709_mts_fs
+endif
+
 ifeq ($(HARDWARE), bt6703_rt)
 	WUI_DIR = ../web_interface/dist/wui-3-rt
 	FSDATA_DIR = ./HTTP_Server/bt6703_rt_fs
@@ -263,11 +274,7 @@ $(FSDATA_DIR)/fsdata.c: $(WUI_DIR)/*
 	mkdir -p $(FSDATA_DIR)
 	../docs/makefsdata.pl $(FSDATA_DIR) $(WUI_DIR)
 
-ifneq (,$(filter $(ORDER),mts beeline))	
-ARTIFACTS_PATH := ~/Releases/$(HARDWARE)/$(ORDER)
-else
 ARTIFACTS_PATH := ~/Releases/$(HARDWARE)
-endif
 RELEASE_VERSION := $(shell ../projects/gcc/tools/version.sh $(HARDWARE) $(INCLUDES))
 RELEASE_PATH := $(ARTIFACTS_PATH)/$(RELEASE_VERSION)
 

+ 2 - 2
modules/Telnet_Server/telnet_server.c

@@ -529,7 +529,7 @@ void vBasicSocketsCommandInterpreterTask( void *pvParameters )
 	uint16_t port;
 	bool enabled;
 	bool firstrun = true;
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
 	struct sockaddr_in sa_temp;
 	socklen_t len;
 #endif
@@ -653,7 +653,7 @@ void vBasicSocketsCommandInterpreterTask( void *pvParameters )
 						if (new_sd > max_sd) {
 							max_sd = new_sd;
 						}
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
 						lwip_getpeername(new_sd, &sa_temp, &len);
 #endif
 					//	recv( new_sd, &auth_tlnt_srvr_param[cur_cnt].buf, 27, 0 );

+ 4 - 4
modules/cli/CLI_Commands.c

@@ -81,7 +81,7 @@ const char *akb_args_list[] = {
     "info",
     "voltcellmin",
     "voltcellmax",
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS
     "capacity",
     "voltakb",
     "lifetime",
@@ -328,7 +328,7 @@ static const CLI_Command_Definition_t prvAKBCommandDefinition = {
     ( const int8_t *const ) "\takb info: вывод информации о параметрах АКБ\r\n"
 							"\takb voltcellmin <value>: ввод минимального напряжения на ячейки АКБ (В)\r\n"
 							"\takb voltcellmax <value>: ввод максимального напряжения на ячейки АКБ (В)\r\n"
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS
 							"\takb capacity <value>: ввод ёмкости АКБ (Ач)\r\n"
 							"\takb voltakb <value>:  ввод номинального напряжения АКБ (В)\r\n"
 							"\takb lifetime <value>: ввод срока службы АКБ (лет)\r\n"
@@ -1403,7 +1403,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
         xParameterStringLength = sizeof(str) - 2;
     }
     strncat(str, ( const char * ) pcParameterString, strlen(( const char * ) pcParameterString));
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
 	if (i != ARG_AKB_DATASET)
 #endif
 	{
@@ -1433,7 +1433,7 @@ static portBASE_TYPE prvTaskAKBCommand(cli_state_t *cli_state, int8_t *pcWriteBu
                 strncpy( ( char * ) pcWriteBuffer, ( const char * ) pcInvalidCommand, strlen( ( char * ) pcInvalidCommand ) );
             }
             break;
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
         case ARG_AKB_CAPACITY:
             if (value >= CAPACITY_MIN_RANGE && value <= CAPACITY_MAX_RANGE && (value - (int32_t)value) == 0) {
                 SetCapacityNominalAKBStr(str);

+ 1 - 1
modules/cli/CLI_Commands.h

@@ -49,7 +49,7 @@ typedef enum{
 	ARG_AKB_INFO = 0,
 	ARG_AKB_VOLT_CELL_MIN,
 	ARG_AKB_VOLT_CELL_MAX,
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
 	ARG_AKB_CAPACITY,
 	ARG_AKB_VOLT,
 	ARG_AKB_LIFETIME,

+ 3 - 3
modules/cli/CLI_Parameters.c

@@ -236,7 +236,7 @@ void akb_config_param(int8_t *buf)
     GetUPSVoltCellMaxStr(str, &len);
     strncat(( char * ) buf, str, len);
 
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
 
     GetVoltageAKBNominalStr(str, &len);
     strcat(( char * ) buf, "\r\nНоминальное напряжение (В):\t\t");
@@ -430,7 +430,7 @@ void ups_sensor_param(int8_t *buf)
     GetOutputVoltageStr(str, &len);
     strncat(( char * ) buf, str, len);
 
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
     GetInputCurrentStr(str, &len);
     strcat(( char * ) buf, "\r\nВходная сила тока (A):\t\t\t");
     strncat(( char * ) buf, str, len);
@@ -483,7 +483,7 @@ void ups_sensor_akb_param(int8_t *buf)
     GetRuntimeStr(str, &len);
     strncat(( char * ) buf, str, len);
 
-#ifdef HARDWARE_BT6709
+#if HARDWARE_BT6709 || HARDWARE_BT6709_MTS 
     GetCapacityNominalAKBStr(str, &len);
     strcat(( char * ) buf, "\r\nЕмкость батареи (Ач):\t\t\t");
     strncat(( char * ) buf, str, len);

+ 3 - 3
modules/parameters.c

@@ -247,7 +247,7 @@ void GetInternalTempStr(char *str, uint8_t *len)
   */
 void GetInternalTempInt(float *value)
 {
-    #ifdef DALLAS_SENSOR_ENABLE
+#ifdef DALLAS_SENSOR_ENABLE
     if(sSettings.sTempControl[0].type_sensor == TS_AKB) {
       if (sTemperSensors[0].SensorState == 1){
         *value = 85;
@@ -1874,7 +1874,7 @@ void GetTemperatureAlarmHisteInt(float *value)
     *value = sSettings.sAlarmManager.Temprature_range.hyst;
 }
 
-#ifndef HARDWARE_BT6709
+#if !(HARDWARE_BT6709 || HARDWARE_BT6709_MTS)
 
 /**
   * @brief Верхняя граница температуры
@@ -2942,7 +2942,7 @@ void SetTemperatureAlarmHisteInt(float value)
     sSettings.sAlarmManager.Temprature_range.hyst = value;
 }
 
-#ifndef HARDWARE_BT6709
+#if !(HARDWARE_BT6709 || HARDWARE_BT6709_MTS) 
 /**
   * @brief  Верхняя граница температуры
   */

+ 2 - 2
modules/parameters.h

@@ -740,7 +740,7 @@ void GetTemperatureAlarmHisteStr(char *str, uint8_t *len);
   */
 void GetTemperatureAlarmHisteInt(float *value);
 
-#ifndef HARDWARE_BT6709
+#if !(HARDWARE_BT6709 || HARDWARE_BT6709_MTS)
 
 /**
   * @brief Верхняя граница температуры
@@ -1268,7 +1268,7 @@ void SetTemperatureAlarmHisteStr(char *str);
   */
 void SetTemperatureAlarmHisteInt(float value);
 
-#ifndef HARDWARE_BT6709
+#if !(HARDWARE_BT6709 || HARDWARE_BT6709_MTS)
 /**
   * @brief  Верхняя граница температуры
   */

+ 25 - 8
modules/settings_api_bt6709.c

@@ -56,7 +56,31 @@ const char* logsStrShortRu[] =
     "Авария нагрузки",
     "Авария связи с ИБП",
     "Авария отключения АКБ",
-    "Замена АКБ",
+};
+
+const char* name_traps[] =
+{
+  "",
+	"Начало обновл. ПО",
+  "Успешное обновл. ПО",
+  "Сброс настроек",
+  "Перезагрузка",
+  "Норм. темп. АКБ по верх. границы",
+  "Авария темп. АКБ по верх. границы",
+  "Авария на линии",
+  "Нормализация линии",
+  "Низкий заряд АКБ",
+  "Нормализация заряда АКБ",
+  "Нагрузка в норме",
+  "Авария нагрузки",
+  "Авария соединения с ИБП",
+  "Норм. соединения с ИБП",
+  "Отключение АКБ",
+  "Подключение АКБ",
+  "Норм. темп. АКБ по ниж. границы",
+  "Авария темп. АКБ по ниж. границы",
+  "Предупр. о замене АКБ",
+  "Норм. предупрежд. о замене АКБ",
 };
 
 /**
@@ -88,13 +112,8 @@ void SETTINGS_SetUPSSettingsDef(void)
 {
   sSettings.UPS_Setting.Ucellmin = 1.67;
   sSettings.UPS_Setting.Ucellmax = 2.27;
-#ifdef ORDER_BEELINE
   sSettings.UPS_Setting.Uakb = 36;
   sSettings.UPS_Setting.common_capacity = 40;
-#else
-  sSettings.UPS_Setting.Uakb = 24;
-  sSettings.UPS_Setting.common_capacity = 9;
-#endif
   sSettings.UPS_Setting.ups_power = 1000;
   sSettings.UPS_Setting.set_data = 0;
   sSettings.UPS_Setting.life_time = 5;
@@ -234,10 +253,8 @@ void SETTINGS_SetFlagNotificationDef(void)
     for(i = 0; i < ALL_TRAPS; i++ ) {
         sSettings.sFlagNotification[i] = 1;
     }
-#ifdef ORDER_BEELINE
     sSettings.sFlagNotification[BATTERY_CHANGE_ALARM] = 0;
     sSettings.sFlagNotification[BATTERY_CHANGE_MORM] = 0;
-#endif
 }
 
 /**

+ 276 - 0
modules/settings_api_bt6709_mts.c

@@ -0,0 +1,276 @@
+/********************************* (C) ROTEK ***********************************
+ * @module  settings_api
+ * @file    settings_api.c
+ * @version 1.0.0
+ * @date    XX.XX.XXXX
+ * $brief   Settings
+ *******************************************************************************
+ * @history     Version  Author         Comment
+ * XX.XX.XXXX   1.0.0    Telenkov D.A.  First release.
+ *******************************************************************************
+ */
+#ifdef HARDWARE_BT6709_MTS
+#include "stm32f4xx.h"  
+#include "settings_api.h"
+#include "common_config.h"
+#ifndef BT6702_SERVICE
+#include "snmp_api.h"
+#include "trap_api.h"
+#include "log.h"
+#endif
+#include "sys_api.h"
+
+#include "main.h"
+#include "parameters.h"
+
+#include <string.h>
+#include <stdlib.h>
+#ifdef PRINTF_STDLIB
+#include <stdio.h>
+#endif
+#ifdef PRINTF_CUSTOM
+#include "tinystdio.h"
+#endif
+
+//#define DBG if(0)
+
+const char* logsStrShortRu[] =
+{
+	"Перезагрузка контроллера",
+    "Сброс настроек",
+    "Обновление ПО",
+    "Включение",
+    "Смена пароля",
+    "Сохранение настроек",
+    "Авторизация (Telnet)",
+    "Авторизация (SSH)",
+    "Авторизация",
+    "Тест ИБП",
+    "Откл. нагрузки ИБП",
+    "Низкое вых. напряжение",
+    "Высокое вых. напряжение",
+    "Высокая температура",
+    "Низкая температура",
+    "Авария вх. напряжения",
+    "Низкий заряд АКБ",
+    "Авария нагрузки",
+    "Авария связи с ИБП",
+    "Авария отключения АКБ",
+    "Замена АКБ",
+};
+
+const char* name_traps[] =
+{
+  "",
+	"Начало обновл. ПО",
+  "Успешное обновл. ПО",
+  "Сброс настроек",
+  "Перезагрузка",
+  "Норм. темп. АКБ по верх. границы",
+  "Авария темп. АКБ по верх. границы",
+  "Авария на линии",
+  "Нормализация линии",
+  "Низкий заряд АКБ",
+  "Нормализация заряда АКБ",
+  "Нагрузка в норме",
+  "Авария нагрузки",
+  "Авария соединения с ИБП",
+  "Норм. соединения с ИБП",
+  "Отключение АКБ",
+  "Подключение АКБ",
+  "Норм. темп. АКБ по ниж. границы",
+  "Авария темп. АКБ по ниж. границы",
+  "Предупр. о замене АКБ",
+  "Норм. предупрежд. о замене АКБ",
+};
+
+/**
+  * @brief  Установить параметры SNMP по умолчанию
+  */
+void SETTINGS_SetSnmpDef(void)
+{
+  strcpy(sSettings.sSnmp.sysDesc.description, "");
+  sSettings.sSnmp.sysDesc.len = 0;
+  strcpy(sSettings.sSnmp.readCommunity, "public");
+  strcpy(sSettings.sSnmp.writeCommunity, "public");
+  strcpy(sSettings.sSnmp.sysContact.contact, "");
+  sSettings.sSnmp.sysContact.len = 0;
+  strcpy(sSettings.sSnmp.sysName.name, "");
+  sSettings.sSnmp.sysName.len = 0;
+  strcpy(sSettings.sSnmp.sysLocation.location, "");
+  sSettings.sSnmp.sysLocation.len = 0;
+  strcpy(sSettings.sSnmp.managerIP, "0.0.0.0");
+  strcpy(sSettings.sSnmp.managerIP2, "0.0.0.0");
+  strcpy(sSettings.sSnmp.managerIP3, "0.0.0.0");
+  strcpy(sSettings.sSnmp.managerIP4, "0.0.0.0");
+  strcpy(sSettings.sSnmp.managerIP5, "0.0.0.0");
+}
+
+/**
+  * @brief  Настройки ИБП по умолчанию
+  */
+void SETTINGS_SetUPSSettingsDef(void)
+{
+  sSettings.UPS_Setting.Ucellmin = 1.67;
+  sSettings.UPS_Setting.Ucellmax = 2.27;
+  sSettings.UPS_Setting.Uakb = 24;
+  sSettings.UPS_Setting.common_capacity = 9;
+  sSettings.UPS_Setting.ups_power = 1000;
+  sSettings.UPS_Setting.set_data = 0;
+  sSettings.UPS_Setting.life_time = 5;
+  sSettings.UPS_Setting.type_ups = ups_kestar;
+}
+
+/**
+  * @brief  Настройки серийного номера ИБП по умолчанию
+  */
+void SETTINGS_SetUPSSerialSettingsDef(void)
+{
+  sSettings.UPS_Setting.serial = 0;
+}
+
+/**
+  * @brief  Установить наcтройки менеджера Аварий по умолчанию
+  */
+void SETTINGS_SetAlarmManagerDef(void)
+{
+	sSettings.sAlarmManager.load_range.high = 70.0;
+	sSettings.sAlarmManager.load_range.low = 0;
+	sSettings.sAlarmManager.load_range.hyst = 1;
+
+	sSettings.sAlarmManager.ac_output_range.high = 250.0;
+	sSettings.sAlarmManager.ac_output_range.low = 150.0;
+	sSettings.sAlarmManager.ac_output_range.hyst = 20.0;
+
+	sSettings.sAlarmManager.Temprature_range.high = 70.0;
+	sSettings.sAlarmManager.Temprature_range.low = -40.0;
+	sSettings.sAlarmManager.Temprature_range.hyst = 1;
+}
+
+/**
+  * @brief  Установить значение сервисных настроек по умолчанию
+  */
+void SETTINGS_SetServiceDef(void)
+{
+    uint8_t user_id;
+
+    for (user_id = 0; user_id < MAX_WEB_USERS; user_id++) {
+        switch (user_id) {
+        /* First users in the system is always ADMIN.
+         * Others are USER */
+        case 0:
+            sSettings.sAuth[user_id].level = ADMIN;
+            strcpy(sSettings.sAuth[user_id].login, "admin");
+            strcpy(sSettings.sAuth[user_id].password, "12345");
+            break;
+        case 1:
+        default:
+        	sSettings.sAuth[user_id].level = USER;
+            strcpy(sSettings.sAuth[user_id].login, "user");
+            strcpy(sSettings.sAuth[user_id].password, "1234");
+            break;
+        }
+    }
+}
+
+/**
+  * @brief  Установить параметры SNTP по умолчанию
+  */
+void SETTINGS_SetSntpDef(void)
+{
+  sSettings.sSNTP.sntpEnable = true;
+  strcpy(sSettings.sSNTP.ip, "88.147.254.235");
+  sSettings.sSNTP.timeZone = 3.0;
+  strcpy(sSettings.sSNTP.data, "none");
+}
+
+/**
+  * @brief  Установить параметры настроек реле по умолчанию
+  */
+void SETTINGS_SetRelaysDef(void)
+{
+
+}
+
+/**
+  * @brief  Установить параметры настроек сухих контактов по умолчанию
+  */
+void SETTINGS_SetDINSDef(void)
+{
+
+}
+
+/**
+  * @brief  Установить параметры RADIUS по умолчанию
+  */
+void SETTINGS_SetRADIUSDef(void)
+{
+
+}
+
+/**
+  * @brief  Установить параметры сертификата сервера по умолчанию
+  */
+void SETTINGS_SetSSLcrtDef(void){
+
+}
+
+/**
+  * @brief  Установить параметры Telnet
+  */
+void SETTINGS_SetTelnetDef(void){
+	sSettings.sTelnet.TelnetEnable = true;
+	sSettings.sTelnet.port = 23;
+}
+
+/**
+  * @brief  Установить параметры SSH
+  */
+void SETTINGS_SetSSHDef(void){
+	sSettings.sSSH.SSHEnable = true;
+	sSettings.sSSH.port = 22;
+}
+
+/**
+  * @brief  Установить параметры списка доверительных хостов
+  */
+void SETTINGS_SetWhiteListDef(void){
+	for(uint8_t i = 0; i < MAX_WHITE_LIST; i++){
+		strcpy(sSettings.sWhiteListTemp[i].ip_range, "");
+		SetWhiteListSTR(sSettings.sWhiteListTemp[i].ip_range, i);
+		strcpy(sSettings.sWhiteList[i].ip_range, sSettings.sWhiteListTemp[i].ip_range);
+		sSettings.sWhiteList[i].ip = sSettings.sWhiteListTemp[i].ip;
+		sSettings.sWhiteList[i].mask = sSettings.sWhiteListTemp[i].mask;
+	}
+}
+
+/**
+  * @brief  Установить параметры разрешения уведомлений по умолчанию
+  */
+void SETTINGS_SetFlagNotificationDef(void)
+{
+    uint8_t i;
+
+    for(i = 0; i < ALL_TRAPS; i++ ) {
+        sSettings.sFlagNotification[i] = 1;
+    }
+}
+
+/**
+  * @brief  Установить значение настроек прозрачного порта по умолчанию
+  */
+void SETTINGS_SetPortGwDef(void)
+{
+
+}
+
+/**
+  * @brief  Установить параметры датчиков температуры
+  */
+void SETTINGS_SetTempControlDef(void)
+{
+
+}
+
+#endif
+/********************************* (C) ROTEK **********************************/

+ 1 - 3
modules/testing/testing.c

@@ -123,10 +123,8 @@ void TEST_SendData(void)
       netconn_connect(conn, IP_ADDR_BROADCAST, UDP_PORT);
       
 	  strcpy(msg, HW_REV);
-#ifdef ORDER_BEELINE
+#ifdef HARDWARE_BT6709
       strcat(msg, "_BEELINE");
-#elif ORDER_MTS
-      strcat(msg, "_MTS");
 #endif
 	  strcat(msg, ";");
 		

+ 6 - 0
projects/gcc/tools/version.sh

@@ -7,12 +7,18 @@ BIN=tmp
 if [ "$1" = "bt6703" ];
 then
 SRC=$'#define HARDWARE_BT6703 1\r\n#include <stdio.h>\r\n#include "common_config.h"\r\n'
+elif [ "$1" = "bt6703_rt" ];
+then
+SRC=$'#define HARDWARE_BT6703_RT 1\r\n#include <stdio.h>\r\n#include "common_config.h"\r\n'
 elif [ "$1" = "bt6707" ];
 then
 SRC=$'#define HARDWARE_BT6707 1\r\n#include <stdio.h>\r\n#include "common_config.h"\r\n'
 elif [ "$1" = "bt6709" ];
 then
 SRC=$'#define HARDWARE_BT6709 1\r\n#include <stdio.h>\r\n#include "common_config.h"\r\n'
+elif [ "$1" = "bt6709_mts" ];
+then
+SRC=$'#define HARDWARE_BT6709_MTS 1\r\n#include <stdio.h>\r\n#include "common_config.h"\r\n'
 elif [ "$1" = "bt6710" ];
 then
 SRC=$'#define HARDWARE_BT6710 1\r\n#include <stdio.h>\r\n#include "common_config.h"\r\n'

+ 1 - 3
service_hw/Commands/commands_api.c

@@ -255,10 +255,8 @@ void COM_TestSerno(void)
 
       memset(str, 0, 20);
       GetModelStr(str, &len);
-#ifdef ORDER_BEELINE
+#ifdef HARDWARE_BT6709
       strcat(str, "_BEELINE");
-#elif ORDER_MTS
-      strcat(str, "_MTS");
 #endif
 	  //strcpy(msg, sSettings.sSnmp.sysName);
       strcpy(msg, str);

+ 0 - 2
service_hw/Makefile

@@ -23,8 +23,6 @@ CFLAGS += -DPRINTF_$(shell echo $(PRINTF) | tr a-z A-Z)
 
 CFLAGS += -DHARDWARE_$(shell echo $(HARDWARE) | tr a-z A-Z)
 
-CFLAGS += -DORDER_$(shell echo $(ORDER) | tr a-z A-Z)
-
 INCLUDES = -I../config
 INCLUDES += -I../stm32/stm32f4xx_spl/inc 
 INCLUDES += -I../stm32/system