فهرست منبع

add model BT-6711

balbekova 4 سال پیش
والد
کامیت
9a85d2aac5
7فایلهای تغییر یافته به همراه1539 افزوده شده و 3 حذف شده
  1. 8 0
      Makefile
  2. 2 0
      config/board.h
  3. 244 0
      config/board_bt6711.h
  4. 996 0
      modules/Ethernet/private_mib_bt6711.c
  5. 2 0
      modules/HTTP_Server/http_server.c
  6. 16 3
      modules/Makefile
  7. 271 0
      modules/settings_api_bt6711.c

+ 8 - 0
Makefile

@@ -75,6 +75,11 @@ fullflash_6710:
 	sleep 1
 	st-flash --reset write output/stm32bt6710.bin 0x8020000	
 
+fullflash_6711:
+	st-flash --reset write output/iap.bin 0x8000000
+	sleep 1
+	st-flash --reset write output/stm32bt6711.bin 0x8020000	
+
 release_6703:
 	$(MAKE) -C modules HARDWARE=bt6703 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
 
@@ -93,3 +98,6 @@ release_6709_beeline:
 release_6710:
 	$(MAKE) -C modules HARDWARE=bt6710 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
 
+release_6711:
+	$(MAKE) -C modules HARDWARE=bt6711 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
+

+ 2 - 0
config/board.h

@@ -13,6 +13,8 @@
 #include "board_bt6709_mts.h"
 #elif defined HARDWARE_BT6710
 #include "board_bt6710.h"
+#elif defined HARDWARE_BT6711
+#include "board_bt6711.h"
 #endif
 
 #define EXPAND_AS_ENUM(name, ...) name,

+ 244 - 0
config/board_bt6711.h

@@ -0,0 +1,244 @@
+#ifndef BOARD_BT6711_H
+#define BOARD_BT6711_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-6711"
+
+/**
+  * @brief  Версия прошивки
+  */
+#define VERSION                         "1.0"
+
+/**
+  * brief  Текст сообщения при запуске CLI
+  */
+#define TELNET_CLI_WELCOME_MESSAGE      "BT-6711 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 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( uint8_t, sFlagNotification[ALL_TRAPS], SETTINGS_SetFlagNotificationDef, ALL_DEFAULT ) \
+
+#define SNMP_DEV_ROOT_OID       11
+
+#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("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("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("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) \
+
+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,
+  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,		//
+	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_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 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)
+
+#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.12"
+
+#endif /* BOARD_PRS_H */

+ 996 - 0
modules/Ethernet/private_mib_bt6711.c

@@ -0,0 +1,996 @@
+/*
+ * private_mib_bt6709.c
+ *
+ *  Created on: 03.10.2018
+ *      Author: balbekova
+ */
+
+
+#if defined HARDWARE_BT6711
+#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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.1.37  */
+static const struct snmp_scalar_node signal37 = SNMP_SCALAR_CREATE_NODE(37, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.36  */
+static const struct snmp_scalar_node signal36 = SNMP_SCALAR_CREATE_NODE(36, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.35  */
+static const struct snmp_scalar_node signal35 = SNMP_SCALAR_CREATE_NODE(35, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.10.1.34  */
+static const struct snmp_scalar_node signal34 = SNMP_SCALAR_CREATE_NODE(34, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.33  */
+static const struct snmp_scalar_node signal33 = SNMP_SCALAR_CREATE_NODE(33, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.32  */
+static const struct snmp_scalar_node signal32 = SNMP_SCALAR_CREATE_NODE(32, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.31  */
+static const struct snmp_scalar_node signal31 = SNMP_SCALAR_CREATE_NODE(31, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.30  */
+static const struct snmp_scalar_node signal30 = SNMP_SCALAR_CREATE_NODE(30, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.29  */
+static const struct snmp_scalar_node signal29 = SNMP_SCALAR_CREATE_NODE(29, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.1.28  */
+static const struct snmp_scalar_node signal28 = SNMP_SCALAR_CREATE_NODE(28, SNMP_NODE_INSTANCE_READ_WRITE,
+        SNMP_ASN1_TYPE_OCTET_STRING, signal_get_value, signal_set_test, signal_set_value);
+
+/* signal .1.3.6.1.4.1.41752.911.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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.11.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,
+};
+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.11
+static const struct snmp_node *const bt6711_nodes[] = {
+    &signals_node.node
+};
+static const struct snmp_tree_node bt6711_node = SNMP_CREATE_TREE_NODE(11, bt6711_nodes);
+
+// swt .1.3.6.1.4.1.41752.911
+static const struct snmp_node *const swt_nodes[] = {
+    &bt6711_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 */
+            GetInternalTempStr((char *)paramStr, &paramLength);
+            break;
+        case 10: /* InFreq */
+            GetInputFreqStr((char *)paramStr, &paramLength);
+            break;
+        case 11: /* InVoltVAC */
+            GetInputVoltageStr((char *)paramStr, &paramLength);
+            break;
+        case 12: /* OutVoltVAC */
+            GetOutputVoltageStr((char *)paramStr, &paramLength);
+            break;
+        case 13: /* Power */
+            GetPowerStr((char *)paramStr, &paramLength);
+            break;
+        case 14: /* BatCap */
+            GetBatCapacityStr((char *)paramStr, &paramLength);
+            break;
+        case 15: /* BatTime */
+            GetRuntimeStr((char *)paramStr, &paramLength);
+            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 */
+            GetUPSVoltCellMinStr((char *)paramStr, &paramLength);
+            break;
+        case 29: /* UPSVoltCellMax */
+            GetUPSVoltCellMaxStr((char *)paramStr, &paramLength);
+            break;
+        case 30: /* VACAlarmHighRange */
+            GetVACAlarmHighRangeStr((char *)paramStr, &paramLength);
+            break;
+        case 31: /* VACAlarmLowRange */
+            GetVACAlarmLowRangeStr((char *)paramStr, &paramLength);
+            break;
+        case 32: /* VACAlarmHistRange */
+            GetVACAlarmHisteStr((char *)paramStr, &paramLength);
+            break;
+        case 33: /* TemperatureAlarmHighRange */
+            GetTemperatureAlarmHighRangeStr((char *)paramStr, &paramLength);
+            break;
+        case 34: /* TemperatureAlarmLowRange */
+            GetTemperatureAlarmLowRangeStr((char *)paramStr, &paramLength);
+            break;
+        case 35: /* TemperatureAlarmHistRange */
+            GetTemperatureAlarmHisteStr((char *)paramStr, &paramLength);
+            break;
+        case 36: /* LoadAlarmHighRange */
+            GetLoadAlarmHighRangeStr((char *)paramStr, &paramLength);
+            break;
+        case 37: /* LoadAlarmHistRange */
+            GetLoadAlarmHisteStr((char *)paramStr, &paramLength);
+            break;
+        case 38: /* SntpTimeZone */
+            GetSntpTimeZoneStr((char *)paramStr, &paramLength);
+            break;
+        case 39: /* SntpState */
+            GetSntpStateStr((char *)paramStr, &paramLength);
+            break;
+        case 40: /* SntpServerIp */
+            GetSntpServerIpStr((char *)paramStr, &paramLength);
+            break;
+        case 41: /* SntpLastData */
+            GetSntpLastDataStr((char *)paramStr, &paramLength);
+            break;
+        case 42: /* Date */
+            GetDateStr((char *)paramStr, &paramLength);
+            break;
+        case 43: /* Time */
+            GetTimeStr((char *)paramStr, &paramLength);
+            break;
+        case 44: /* AKBTimeWork */
+            GetAKBWorktimeStr((char *)paramStr, &paramLength);
+            break;
+        case 45: /* InputCurrent */
+            GetInputCurrentStr((char *)paramStr, &paramLength);
+            break;
+        case 46: /* OutputCurrent */
+            GetOutputCurrentStr((char *)paramStr, &paramLength);
+            break;
+        case 47: /* VoltageAKB */
+            GetVoltageAKBtStr((char *)paramStr, &paramLength);
+            break;
+        case 48: /*  CapacityNominalAKB*/
+            GetCapacityNominalAKBStr((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_string = (char *)value;
+            SetUPSVoltCellMinStr(val_string);
+            break;
+        case 29:
+            val_string = (char *)value;
+            SetUPSVoltCellMaxStr(val_string);
+            break;
+        case 30:
+            val_string = (char *)value;
+            SetVACAlarmHighRangeStr(val_string);
+            break;
+        case 31:
+            val_string = (char *)value;
+            SetVACAlarmLowRangeStr(val_string);
+            break;
+        case 32:
+            val_string = (char *)value;
+            SetVACAlarmHisteStr(val_string);
+            break;
+        case 33:
+            val_string = (char *)value;
+            SetTemperatureAlarmHighRangeStr(val_string);
+            break;
+        case 34:
+            val_string = (char *)value;
+            SetTemperatureAlarmLowRangeStr(val_string);
+            break;
+        case 35:
+            val_string = (char *)value;
+            SetTemperatureAlarmHisteStr(val_string);
+            break;
+        case 36:
+            val_string = (char *)value;
+            SetLoadAlarmHighRangeStr(val_string);
+            break;
+        case 37:
+            val_string = (char *)value;
+            SetLoadAlarmHistStr(val_string);
+            break;
+        case 38:
+            val_string = (char *)value;
+            SetSntpTimeZoneStr(val_string);
+            break;
+        case 39:
+            enable_old_sntp = sSettings.sSNTP.sntpEnable;
+            val_string = (char *)value;
+            SetSntpStateStr(val_string);
+            if (sSettings.sSNTP.sntpEnable != enable_old_sntp) {
+                SETTINGS_Save();
+                log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
+            }
+            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:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isfloatdigit(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value < sSettings.UPS_Setting.Ucellmax && tmp_value > MIN_VOLT_CELL_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 29:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isfloatdigit(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value > sSettings.UPS_Setting.Ucellmin && tmp_value <= MAX_VOLT_CELL_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 30:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isdigit_int(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= MAX_VAC_MIN_RANGE && tmp_value <= MAX_VAC_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 31:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isdigit_int(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= MIN_VAC_MIN_RANGE && tmp_value <= MIN_VAC_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 32:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isdigit_int(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= HIST_VAC_MIN_RANGE && tmp_value <= HIST_VAC_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 33:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isdigit_int(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= MAX_TEMP_MIN_RANGE && tmp_value <= MAX_TEMP_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 34:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isdigit_int(val_string[j])) {
+                    if (j == 0 && val_string[j] == '-') {
+                        continue;
+                    } else {
+                        return ret;
+                    }
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= MIN_TEMP_MIN_RANGE && tmp_value <= MIN_TEMP_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 35:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isfloatdigit(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= HIST_TEMP_MIN_RANGE && tmp_value <= HIST_TEMP_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 36:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isdigit_int(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= MAX_LOAD_MIN_RANGE && tmp_value <= MAX_LOAD_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 37:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            for (j = 0; j < len; j ++) {
+                if (!isfloatdigit(val_string[j])) {
+                    return ret;
+                }
+            }
+            tmp_value = atof(val_string);
+            if (tmp_value >= HIST_LOAD_MIN_RANGE && tmp_value <= HIST_LOAD_MAX_RANGE) {
+                ret = SNMP_ERR_NOERROR;
+            }
+            break;
+        case 38:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            if (len > 1 && len < 5) {
+                bool fail = false;
+                if (val_string[0] != '-' && val_string[0] != '+') {
+                    fail = true;
+                }
+                if (!isdigit_int(val_string[1]) && (!isdigit_int(val_string[2]) && val_string[2] != '.')
+                    && (!isdigit_int(val_string[3]) && val_string[3] != '.')) {
+                    fail = true;
+                }
+                if (len == 5) {
+                    if (!isdigit_int(val_string[4])) {
+                        fail = true;
+                    }
+                }
+                if (!fail) {
+                    tmp_value = atof(val_string);
+                    if (tmp_value >= -12.0 && tmp_value <= 12.0) {
+                        ret = SNMP_ERR_NOERROR;
+                    }
+                }
+            }
+            break;
+        case 39:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            if (len == 1) {
+                if (val_string[0] == '0' || val_string[0] == '1') {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 42:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            if (len == 10) {
+                for (j = 0; j < len; j++) {
+                    if (j != 4 && j != 7) {
+                        if (val_string[j] > 0x39 || val_string[j] < 0x30) {
+                            fail = true;
+                            break;
+                        }
+                    } else if (j == 4 || j == 7) {
+                        if (val_string[j] != '-') {
+                            fail = true;
+                            break;
+                        }
+                    }
+                }
+                if (!fail) {
+                    uint16_t temp = 0;
+                    temp = 1000 * (val_string[0] - 0x30) + 100 * (val_string[1] - 0x30) + 10 * (val_string[2] - 0x30) + val_string[3] -
+                        0x30;
+                    if (temp > 2099 || temp < 2000) {
+                        fail = true;
+                    }
+                    temp = 0;
+                    temp = 10 * (val_string[5] - 0x30) + (val_string[6] - 0x30);
+                    if (temp > 12) {
+                        fail = true;
+                    }
+                    temp = 0;
+                    temp = 10 * (val_string[8] - 0x30) + (val_string[9] - 0x30);
+                    if (temp > 31) {
+                        fail = true;
+                    }
+                }
+                if (!fail) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 43:
+            val_string = (char *)value;
+            val_string[len] = 0;
+            if (len == 5) {
+                for (j = 0; j < len; j++) {
+                    if (j != 2) {
+                        if (val_string[j] > 0x39 || val_string[j] < 0x30) {
+                            fail = true;
+                            break;
+                        }
+
+                    } else if (j == 2) {
+                        if (val_string[j]  != ':') {
+                            fail = true;
+                            break;
+                        }
+                    }
+                }
+                if (!fail) {
+                    uint16_t temp = 0;
+                    temp = 10 * (val_string[0] - 0x30) + (val_string[1] - 0x30);
+                    if (temp > 23) {
+                        fail = true;
+                    }
+                    temp = 0;
+                    temp = 10 * (val_string[3] - 0x30) + (val_string[4] - 0x30);
+                    if (temp > 59) {
+                        fail = true;
+                    }
+                }
+                if (!fail) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+    };
+
+
+    return ret;
+}
+
+#endif
+

+ 2 - 0
modules/HTTP_Server/http_server.c

@@ -17,6 +17,8 @@
 #include "bt6709_mts_fs/fsdata.c"
 #elif HARDWARE_BT6710
 #include "bt6710_fs/fsdata.c"
+#elif HARDWARE_BT6711
+#include "bt6711_fs/fsdata.c"
 #endif
 #include "settings_api.h"
 #include "netconf.h"

+ 16 - 3
modules/Makefile

@@ -51,7 +51,7 @@ ifeq ($(HARDWARE), bt6710)
 INCLUDES += -Iportgw
 INCLUDES += -Ids18b20
 endif
-ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts))
+ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts bt6711))
 INCLUDES += -Iwhitelist
 endif
 ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))
@@ -71,7 +71,7 @@ ifeq ($(HARDWARE), bt6710)
 CSRC += $(wildcard portgw/*.c)
 CSRC += $(wildcard ds18b20/*.c)
 endif
-ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts))     
+ifneq (,$(filter $(HARDWARE),bt6709 bt6709_mts bt6711))     
 CSRC += $(wildcard whitelist/*.c)
 endif
 ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))
@@ -116,7 +116,7 @@ endif
 ifeq ($(HARDWARE), bt6710) 	
    CSRC += $(wildcard HTTP_Server/http_server.c)
 endif  
-ifneq (,$(filter $(HARDWARE),bt6707 bt6709 bt6709_mts))
+ifneq (,$(filter $(HARDWARE),bt6707 bt6709 bt6709_mts bt6711))
 	INCLUDES += -Icli
 	CSRC += $(wildcard cli/*.c)
 	INCLUDES += -ITelnet_Server
@@ -210,6 +210,10 @@ ifeq ($(HARDWARE), bt6710)
 BUILDDIR = ../build/bt6710/$(TARGET)
 endif
 
+ifeq ($(HARDWARE), bt6711)
+BUILDDIR = ../build/bt6711/$(TARGET)
+endif
+
 FW_FLASH_START = $(shell awk '/USER_FLASH_FIRST_PAGE_ADDRESS/{print $$3}' ../config/common_config.h )
 FW_FLASH_CRC = $(shell awk '/USER_FLASH_CRC_ADDRESS/{print $$3}' ../config/common_config.h )
 
@@ -237,6 +241,10 @@ ifeq ($(HARDWARE), bt6710)
 FW_NAME = BT_6710xx
 endif
 
+ifeq ($(HARDWARE), bt6711)
+FW_NAME = BT_6711xx
+endif
+
 -include ../Makefile.inc.stm32
 
 #Building Web UI FS
@@ -245,6 +253,11 @@ ifeq ($(HARDWARE), bt6710)
 	FSDATA_DIR = ./HTTP_Server/bt6710_fs
 endif
 
+ifeq ($(HARDWARE), bt6711)
+	WUI_DIR = ../web_interface/dist/wui-11
+	FSDATA_DIR = ./HTTP_Server/bt6711_fs
+endif
+
 ifeq ($(HARDWARE), bt6707)
 	WUI_DIR = ../web_interface/dist/wui-7
 	FSDATA_DIR = ./HTTP_Server/bt6707_fs

+ 271 - 0
modules/settings_api_bt6711.c

@@ -0,0 +1,271 @@
+/********************************* (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_BT6711
+#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)",
+    "Авторизация",
+    "Тест ИБП",
+    "Откл. нагрузки ИБП",
+    "Низкое вых. напряжение",
+    "Высокое вых. напряжение",
+    "Высокая температура",
+    "Низкая температура",
+    "Авария вх. напряжения",
+    "Низкий заряд АКБ",
+    "Авария нагрузки",
+    "Авария связи с ИБП",
+    "Авария отключения АКБ",
+};
+
+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 = 36;
+  sSettings.UPS_Setting.common_capacity = 40;
+  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){
+
+}
+
+/**
+  * @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 **********************************/