Преглед на файлове

[BT-6703_RT]add new model

balbekova преди 4 години
родител
ревизия
bc36600547

+ 12 - 1
Makefile

@@ -39,10 +39,18 @@ iapflash:
 fwflash_6703:	
 	st-flash --reset write output/stm32bt6703.bin 0x8020000
 
+fwflash_6703_rt:	
+	st-flash --reset write output/stm32bt6703_rt.bin 0x8020000
+
 fullflash_6703:
 	st-flash --reset write output/iap.bin 0x8000000
 	sleep 1
 	st-flash --reset write output/stm32bt6703.bin 0x8020000
+
+fullflash_6703_rt:
+	st-flash --reset write output/iap.bin 0x8000000
+	sleep 1
+	st-flash --reset write output/stm32bt6703_rt.bin 0x8020000
 	
 fwflash_6707:	
 	st-flash --reset write output/stm32bt6707.bin 0x8020000
@@ -64,7 +72,10 @@ fullflash_6710:
 
 release_6703:
 	$(MAKE) -C modules HARDWARE=bt6703 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
-	
+
+release_6703_rt:
+	$(MAKE) -C modules HARDWARE=bt6703_rt VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
+
 release_6707:
 	$(MAKE) -C modules HARDWARE=bt6707 VERBOSE=1 DEBUG=0 PRINTF=custom MAC=EC-4C-4D-00-80-0A release
 

+ 2 - 0
config/board.h

@@ -3,6 +3,8 @@
 
 #if defined HARDWARE_BT6703
 #include "board_bt6703.h"
+#elif defined HARDWARE_BT6703_RT
+#include "board_bt6703_rt.h"
 #elif defined HARDWARE_BT6707
 #include "board_bt6707.h"
 #elif defined HARDWARE_BT6709

+ 265 - 0
config/board_bt6703_rt.h

@@ -0,0 +1,265 @@
+#ifndef BOARD_BT6703_RT_H
+#define BOARD_BT6703_RT_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 DI_TABLE(X)                  \
+X( DIN1,       GPIOA,   0, GPIO_IN)
+
+#ifdef BT6702_SERVICE
+#define RELAYS(X) \
+X( DOUT1,      GPIOE,  3, GPIO_OUT)\
+X( DOUT2,      GPIOE,  4, GPIO_OUT) \
+X( DOUT_PREV_VER,      GPIOE,  5, GPIO_OUT)
+#else
+#define RELAYS(X) \
+X( DOUT1,      GPIOE,  3, GPIO_OUT)\
+X( DOUT2,      GPIOE,  4, GPIO_OUT) 
+#endif 
+
+
+#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)  \
+DI_TABLE(X)         \
+RELAYS(X) \
+LEDS(X)             \
+JUMPERS(X) \
+BUTTONS(X)      \
+WDG_PIN(X)
+
+/**
+  * @brief  Маркер ревизии платы для валидации *.bin файла
+  *
+  */
+#define HW_REV                          "BT-6703"
+
+/**
+  * @brief  Версия прошивки
+  */
+#define VERSION                         "1.0"
+
+#define RTC_ENABLE                  //RTC clock
+#define LED_ENABLE                  //LED индикация
+#define BUTTON_ENABLE               //Кнопки
+#define DOUTS_ENABLE                  //Выходы
+#define DINS_ENABLE                 //Входы
+#define NET_ENABLE                  //Ethernet сеть
+#define SSL_SERVER_ENABLE           //HTTPS сервер
+#define RADIUS_SERVER_ENABLE        //RADIUS сервер
+#define SNMP_ENABLE                 //SNMP протокол
+#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( RELAY_Settings_t,	sRelays[OUTPUTS_TOTAL_COUNT], SETTINGS_SetRelaysDef, ALL_DEFAULT ) \
+XSETTING( DIN_Settings_t,	sDINs[INPUTS_TOTAL_COUNT], SETTINGS_SetDINSDef, ALL_DEFAULT ) \
+XSETTING( UPS_Setting_t, UPS_Setting, SETTINGS_SetUPSSettingsDef, ALL_DEFAULT ) \
+XSETTING( ALARM_MNGR_t, sAlarmManager, SETTINGS_SetAlarmManagerDef, ALL_DEFAULT ) \
+XSETTING( RADIUS_t, sRADIUS, SETTINGS_SetRADIUSDef, PART_DEFAULT_1 ) \
+XSETTING( char, our_srv_crt[1705], SETTINGS_SetSSLcrtDef, PART_DEFAULT_1 ) \
+
+#define SNMP_DEV_ROOT_OID       6
+
+#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("di1",                GetDIN0TypeActStr,                       SetDIN0TypeActStr) \
+  XJSON_SETTINGS_TAG("ro1",                GetRO0TypeActStr,                        SetRO1TypeActStr) \
+  XJSON_SETTINGS_TAG("ro2",                GetRO1TypeActStr,                        SetRO2TypeActStr) \
+  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("swauth",             GetAuthEnableStateStr,                   SetAuthEnableStateStr) \
+  XJSON_SETTINGS_TAG("rs_server",          GetRDSIpStr,                             SetRDSIpStr) \
+  XJSON_SETTINGS_TAG("rs_port",            GetRDSPortStr,                           SetRDSPortStr) \
+  XJSON_SETTINGS_TAG("rs_pwd",             GetRDSPasswordkStr,                      SetRDSPasswordkStr) \
+  XJSON_SETTINGS_TAG("rs_key",             GetRDSKeyAccesstStr,                     SetRDSKeyAccesstStr) \
+  XJSON_SETTINGS_TAG("rs_enabled",         GetRDSEnableStateStr,                    SetRDSEnableStateStr) \
+  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("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("di1",                GetDIN0StatusStr) \
+  XJSON_PARAMS_TAG("ro1",                GetDOUT0StatusStr) \
+  XJSON_PARAMS_TAG("ro2",                GetDOUT1StatusStr) \
+  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(DI0_NORM,                          9,      true,      GetDIN0StatusStr) \
+  XTRAP(DI0_ALARM,                         9,      true,      GetDIN0StatusStr) \
+  XTRAP(DO0_TOGGLED,                       5,      true,      GetDOUT0StatusStr) \
+  XTRAP(DO1_TOGGLED,                       6,      true,      GetDOUT1StatusStr) \
+  XTRAP(BATTERY_HIGH_TEMPERATURE_NORM,     10,     true,      GetInternalTempStr) \
+  XTRAP(BATTERY_HIGH_TEMPERATURE_ALARM,    10,     true,      GetInternalTempStr) \
+  XTRAP(LINE_ALARM,                        12,     true,      GetInputVoltageStr) \
+  XTRAP(LINE_NORM,                         12,     true,      GetInputVoltageStr) \
+  XTRAP(LOW_BAT_ALARM,                     15,     true,      GetBatCapacityStr) \
+  XTRAP(LOW_BAT_NORM,                      15,     true,      GetBatCapacityStr) \
+  XTRAP(POWER_ALARM,                       14,     true,      GetPowerStr) \
+  XTRAP(POWER_NORM,                        14,     true,      GetPowerStr) \
+  XTRAP(CONNECT_MONITOR_ALARM,             17,     true,      GetConnectMonitorStr) \
+  XTRAP(CONNECT_MONITOR_NORM,              17,     true,      GetConnectMonitorStr) \
+  XTRAP(BATTERY_CONNECT_ALARM,             15,     true,      GetBatCapacityStr) \
+  XTRAP(BATTERY_CONNECT_NORM,              15,     true,      GetBatCapacityStr) \
+  XTRAP(BATTERY_LOW_TEMPERATURE_NORM,      10,     true,      GetInternalTempStr) \
+  XTRAP(BATTERY_LOW_TEMPERATURE_ALARM,     10,     true,      GetInternalTempStr) \
+
+typedef enum
+{
+  FW_VERSION_UPDATE = 1,
+  FW_VERSION_UPDATED,
+  DEVICE_RESTORED,
+  DEVICE_REBOOTED,
+  DI0_NORM,
+  DI0_ALARM,
+  DO0_TOGGLED,
+  DO1_TOGGLED,
+  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 = 0x00,			// device booted
+	LOG_SYSTEM_DEFCONFIG,	// default config applied
+	LOG_UPDATE_SOFT,
+	LOG_TURN_ON,		//
+	LOG_PSW_CHANGE,		//
+	LOG_SETTING_SAVE,		//
+	LOG_LOGIN,		//
+	LOG_TEST_UPS,		//
+	LOG_SHUTDOWN_UPS,
+	LOG_ALARM_DIO,
+	LOG_DO0_STATE,
+	LOG_DO1_STATE,
+	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_TEST_ALARM_AKB,
+	LOG_VALUE,
+	LOG_NONE,
+} log_type_t;
+
+#define TEST_AKB_FINISH_MONITOR
+#define LINE_FAIL_MONITOR
+#define LOW_BAT_MONITOR
+#define LOAD_MONITOR
+#define TEMP_AKB_MONITOR
+#define BAT_CONNECT_MONITOR
+#define UPS_CONNECT_MONITOR
+#define DIN_MONITOR
+
+#define MONITOR_TABLE \
+  XMONITOR(UPS_TestFinishMonitor,                 UPS.Present) \
+  XMONITOR(UPS_LineFailMonitor,                   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(UPS_DI0Monitor,                        1) \
+
+#define RELAY_AC_PRESENT
+#define RELAY_ALARM_AKB
+#define RELAY_CHARGE_AKB
+#define RELAY_OFF_AKB
+
+#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 RELAY_NO
+
+#define SERVICE_CONTROLLER_IP  "192.168.0.12"
+
+#endif /* BOARD_PRS_H */

+ 5 - 0
config/board_bt6707.h

@@ -264,6 +264,11 @@ typedef enum {
   XMONITOR(UPS_ConnectMonitor,                      1) \
   XMONITOR(UPS_DI0Monitor,                          1) \
 
+#define RELAY_AC_PRESENT
+#define RELAY_DC_PRESENT
+#define RELAY_CHARGE_AKB
+#define RELAY_OFF_AKB
+
 #define LED_INIT_OK               LED_INIT_G
 #define LED_INIT_ERR              LED_INIT_R
 #define LED_ALARM                 LED_MAJOR_R

+ 397 - 0
modules/Ethernet/private_mib_bt6703_rt.c

@@ -0,0 +1,397 @@
+#ifdef HARDWARE_BT6703_RT
+
+#include "stm32f4xx.h"
+#include "private_mib.h"
+#include "parameters.h"
+#include "settings_api.h"
+#include "log.h"
+#include "megatec.h"
+#include "web_params_api.h"
+#include "hal.h"
+
+#include "FreeRTOS.h"
+#include "task.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"
+
+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.6.1.18  */
+static const struct snmp_scalar_node signal18 = SNMP_SCALAR_CREATE_NODE_READONLY(18, SNMP_ASN1_TYPE_OCTET_STRING,
+        signal_get_value);
+
+/* signal .1.3.6.1.4.1.41752.911.6.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.6.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.6.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.6.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.6.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.6.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.6.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.6.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.6.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.6.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.6.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.6.1.6  */
+static const struct snmp_scalar_node signal6 = SNMP_SCALAR_CREATE_NODE(6, 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.6.1.5  */
+static const struct snmp_scalar_node signal5 = SNMP_SCALAR_CREATE_NODE(5, 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.6.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.6.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.6.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.6.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.6.1
+static const struct snmp_node *const signals_nodes[] = {
+    /*  &test_signal.node.node,
+      &test_signal2.node.node,
+      &test_signal3.node.node*/
+    &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,
+};
+static const struct snmp_tree_node signals_node = SNMP_CREATE_TREE_NODE(1, signals_nodes);
+
+// bt_6702 .1.3.6.1.4.1.41752.911.6
+static const struct snmp_node *const bt6703_nodes[] = {
+    &signals_node.node
+};
+static const struct snmp_tree_node bt6703_node = SNMP_CREATE_TREE_NODE(6, bt6703_nodes);
+
+// swt .1.3.6.1.4.1.41752.911
+static const struct snmp_node *const swt_nodes[] = {
+    &bt6703_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));
+}
+
+
+
+static s16_t signal_get_value(struct snmp_node_instance *instance, void *value)
+{
+    u8_t *paramStr = (u8_t *)value;
+    u8_t paramLength = 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: /* DO1*/
+            GetDOUTStatusStr((char *)paramStr, &paramLength, 0);
+            break;
+        case 6: /* DO2*/
+            GetDOUTStatusStr((char *)paramStr, &paramLength, 1);
+            break;
+        case 9: /* DIO*/
+            GetDINStatusStr((char *)paramStr, &paramLength, 0);
+            break;
+        case 10: /* IntTemp */
+            GetInternalTempStr((char *)paramStr, &paramLength);
+            break;
+        case 11: /* InFreq */
+            GetInputFreqStr((char *)paramStr, &paramLength);
+            break;
+        case 12: /* InVoltVAC */
+            GetInputVoltageStr((char *)paramStr, &paramLength);
+            break;
+        case 13: /* OutVoltVAC */
+            GetOutputVoltageStr((char *)paramStr, &paramLength);
+            break;
+        case 14: /* Power */
+            GetPowerStr((char *)paramStr, &paramLength);
+            break;
+        case 15: /* BatCap */
+            GetBatCapacityStr((char *)paramStr, &paramLength);
+            break;
+        case 16: /* BatTime */
+            GetRuntimeStr((char *)paramStr, &paramLength);
+            break;
+        case 17: /* ConnectMonitor */
+            GetConnectMonitorStr((char *)paramStr, &paramLength);
+            break;
+        case 18: /* Alarms */
+            GetAlarmStr((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;
+
+    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 5: /* DO1 */
+            if (sSettings.sRelays[0].ro_type_source == SNMP_SET) {
+                val_string = (char *)value;
+                SetROStr(val_string, 0);
+                if (val_string[0] == 0x31) {
+                    strcat(str, "Замкнуто");
+                } else {
+                    strcat(str, "Разомкнуто");
+                }
+                //  SNMP_SendUserTrap(DO0_TOGGLED);
+                log_event_data(LOG_DO0_STATE, str);
+            }
+            break;
+        case 6: /* DO2 */
+            if (sSettings.sRelays[1].ro_type_source == SNMP_SET) {
+                val_string = (char *)value;
+                SetROStr(val_string, 1);
+                if (val_string[0] == 0x31) {
+                    strcat(str, "Замкнуто");
+                } else {
+                    strcat(str, "Разомкнуто");
+                }
+                //  SNMP_SendUserTrap(DO1_TOGGLED);
+                log_event_data(LOG_DO1_STATE, str);
+            }
+            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;
+        default :
+            return SNMP_ERR_GENERROR;
+            break;
+    };
+
+    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;
+    u32_t oid = instance->node->oid; // id сигнала
+
+    switch (oid) {
+        case 2:
+        case 3:
+            if ( len == sizeof(s32_t) ) {
+                val = *((s32_t *)value);
+                if (val == 1) {
+                    ret = SNMP_ERR_NOERROR;
+                }
+            }
+            break;
+        case 5: /* DO1 */
+            if ( len <= 1 ) {
+                val_string = (char *)value;
+                val_string[len] = 0;
+                if (atoi(val_string) <= 1) {
+                    if (sSettings.sRelays[0].ro_type_source == SNMP_SET) {
+                        ret = SNMP_ERR_NOERROR;
+                    }
+                }
+            }
+            break;
+        case 6: /* DO2 */
+            if ( len <= 1 ) {
+                val_string = (char *)value;
+                val_string[len] = 0;
+                if (atoi(val_string) <= 1) {
+                    if (sSettings.sRelays[1].ro_type_source == SNMP_SET) {
+                        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;
+    };
+
+
+    return ret;
+}
+
+#endif

+ 4 - 0
modules/HTTP_Server/my_ssl_server.c

@@ -17,7 +17,11 @@
 #include "web_params_api.h"
 #include "parameters.h"
 #include "urlcode.h"
+#ifdef HARDWARE_BT6703
 #include "bt6703_fs/fsdata.c"
+#elif HARDWARE_BT6703_RT
+#include "bt6703_rt_fs/fsdata.c"
+#endif
 #include "settings_api.h"
 #include "netconf.h"
 #include "testing.h"

+ 17 - 4
modules/Makefile

@@ -56,7 +56,7 @@ endif
 ifeq ($(HARDWARE), bt6709)
 INCLUDES += -Iwhitelist
 endif
-ifeq ($(HARDWARE), bt6703)
+ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))
 INCLUDES += -Iradius
 endif
 INCLUDES += -Imbedtls_api
@@ -76,7 +76,7 @@ endif
 ifeq ($(HARDWARE), bt6709)     
 CSRC += $(wildcard whitelist/*.c)
 endif
-ifeq ($(HARDWARE), bt6703)
+ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))
 CSRC += $(wildcard radius/*.c)
 endif
 CSRC += $(wildcard mbedtls_api/*.c)
@@ -112,7 +112,7 @@ INCLUDES += -I../thirdparty/cjson
     INCLUDES += -IEthernet
  # INCLUDES += -I../stm32/stm32f4x7_ethernet 
  	INCLUDES += -ISTM32F4x7_ETH_Driver
-ifeq ($(HARDWARE), bt6703) 	
+ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))	
    CSRC += $(wildcard HTTP_Server/my_ssl_server.c)
 endif  
 ifeq ($(HARDWARE), bt6710) 	
@@ -176,7 +176,7 @@ INCLUDES += -I../thirdparty/mbedTLS/include/
 
 CSRC += $(wildcard ../thirdparty/mbedTLS/library/*.c)
 
-ifeq ($(HARDWARE), bt6703)
+ifneq (,$(filter $(HARDWARE),bt6703 bt6703_rt))
 #RADDIUS_SERVER
 
 INCLUDES += -I../thirdparty/FreeRadius/
@@ -192,6 +192,10 @@ ifeq ($(HARDWARE), bt6703)
 BUILDDIR = ../build/bt6703/$(TARGET)
 endif
 
+ifeq ($(HARDWARE), bt6703_rt)
+BUILDDIR = ../build/bt6703_rt/$(TARGET)
+endif
+
 ifeq ($(HARDWARE), bt6707)
 BUILDDIR = ../build/bt6707/$(TARGET)
 endif
@@ -211,6 +215,10 @@ ifeq ($(HARDWARE), bt6703)
 FW_NAME = BT_6703xx
 endif
 
+ifeq ($(HARDWARE), bt6703_rt)
+FW_NAME = BT_6703xx_RT
+endif
+
 ifeq ($(HARDWARE), bt6707)
 FW_NAME = BT_6707xx
 endif
@@ -241,6 +249,11 @@ ifeq ($(HARDWARE), bt6709)
 	FSDATA_DIR = ./HTTP_Server/bt6709_fs
 endif
 
+ifeq ($(HARDWARE), bt6703_rt)
+	WUI_DIR = ../web_interface/dist/wui-3-rt
+	FSDATA_DIR = ./HTTP_Server/bt6703_rt_fs
+endif
+
 ifeq ($(HARDWARE), bt6703)
 	WUI_DIR = ../web_interface/dist/wui-3
 	FSDATA_DIR = ./HTTP_Server/bt6703_fs

+ 14 - 0
modules/MegaTec/megatec.c

@@ -8,6 +8,7 @@
 #include "task.h"
 #include "usart.h"
 #include "megatec.h"
+#include "ups_monitor.h"
 #include "log.h"
 #include "snmp_api.h"
 #include "settings_api.h"
@@ -87,6 +88,7 @@ void init_UPS_value(void)
     UPS.Temp = 0;
     UPS.Load = 0;
     UPS.SOC = 0;
+    UPS.SOC_test = 0;
     UPS.work_time = 0;
     UPS.akb_work_time = 0;
     UPS.Status = 0;
@@ -294,6 +296,13 @@ void ups_status_response(char *data)
         }
         UPS.Status = stat;
     }
+
+#ifdef RELAY_ALARM_AKB
+    if (sSettings.UPS_Setting.type_ups == ups_kestar || sSettings.UPS_Setting.type_ups == ups_offline) {
+      UPS_TestSOCMonitor();
+    }
+#endif
+
 }
 
 void ups_general_status_response(char *data)
@@ -503,6 +512,10 @@ void ups_akb_info_response(char *data)
         UPS.SOC = atoi(value);
     }
 
+#ifdef RELAY_ALARM_AKB
+      UPS_TestSOCMonitor();
+#endif
+
     len = get_ups_param(data, "\r", value);
     data += (len + 1);
     if (len > 0) {
@@ -715,6 +728,7 @@ int ups_metac_service_pdu(cmdMegaTecEnums_t command)
             TimeParam2 = 1;
             send_MegaTec_cmd(ups_shutdown_restore);
         } else {
+            UPS.SOC_test = UPS.SOC;
             send_MegaTec_cmd(command);
         }
         if (ups_megatec_rx_pdu()) {

+ 1 - 0
modules/MegaTec/megatec.h

@@ -55,6 +55,7 @@ typedef struct{
 	float Vakb_curr;
 	uint8_t Load;
 	uint8_t SOC;
+	uint8_t SOC_test;
 	uint16_t work_time;
 	uint32_t akb_work_time;
 	uint32_t Alarm;

+ 78 - 28
modules/monitor/ups_monitor.c

@@ -28,6 +28,13 @@
 
 #include <stdbool.h>
 
+#ifdef PRINTF_STDLIB
+#include <stdio.h>
+#endif
+#ifdef PRINTF_CUSTOM
+#include "tinystdio.h"
+#endif
+
 
 bool flCriticalAlarm = false;
 bool flNonCriticalAlarm = false;
@@ -311,6 +318,8 @@ void UPS_NonCriticalAlarmMonitor(void)
 }
 #endif
 
+static uint8_t test_flag = 0;
+
 /**
   * @brief  Мониторинг бита Test in progress
   */
@@ -327,6 +336,8 @@ void UPS_TestFinishMonitor(void)
   if (TestFinishStateCurrent != TestFinishState)
   {
     if (!TestFinishStateCurrent){
+      test_flag = 1;
+      printf("Test finish\r\n");
       log_event_data(LOG_TEST_UPS, "Завершен");
       flUpdateLog = true;
     } else {
@@ -348,6 +359,8 @@ void UPS_TestFinishMonitor(void)
             break;
       }
       strcat(log_string, " (Запущен)");
+      test_flag = 1;
+      printf("Test start\r\n");
       log_event_data(LOG_TEST_UPS, log_string);
       flUpdateLog = true;
     }
@@ -356,6 +369,43 @@ void UPS_TestFinishMonitor(void)
   TestFinishState = TestFinishStateCurrent;
 #endif
 }
+
+/**
+  * @brief  Мониторинг SOC
+  */
+void UPS_TestSOCMonitor(void)
+{
+#ifdef RELAY_ALARM_AKB
+
+  static uint8_t AKBAlarmState = 0;
+  uint8_t i = 0;
+  static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+  uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+
+  for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++)
+	  CurrROtype_Sourse[i] = sSettings.sRelays[i].ro_type_source;
+
+  printf("SOC_curr %d %d\r\n", UPS.SOC_test, UPS.SOC);
+  if(UPS.SOC_test != UPS.SOC && UPS.SOC_test != 0 && (test_flag || (UPS.Status >> 2) & 0x01)) {
+    if (((int8_t)UPS.SOC_test - (int8_t)UPS.SOC) >= 20 && UPS.Load < 10) {
+        relay_setup_log(CurrROtype_Sourse, ALARM_AKB, 1);
+        log_event_data(LOG_TEST_ALARM_AKB, "Авария");
+        AKBAlarmState = 1;
+    } 
+    UPS.SOC_test = 0;
+    test_flag = 0;
+  }
+
+  UPS.SOC_test = UPS.SOC;
+
+	if (AKBAlarmState)
+		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, ALARM_AKB);
+
+  for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++)
+	  OldROtype_Sourse[i] = CurrROtype_Sourse[i];
+#endif
+}
+
 /**
   * @brief  Мониторинг бита LainFail
   */
@@ -366,7 +416,7 @@ void UPS_LineFailMonitor(void)
   static uint8_t lineFailOldState = 0;
   uint8_t lineFailCurrent;
 
-#if defined HARDWARE_BT6707
+#if defined RELAY_AC_PRESENT
   uint8_t i = 0;
   static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
   uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
@@ -385,12 +435,12 @@ void UPS_LineFailMonitor(void)
     	log_event_data(LOG_ALARM_LINE, "Авария");
           SNMP_SendUserTrap(LINE_ALARM);
           flUpdateLog = true;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_AC_PRESENT
     	relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 1);
 #endif
     }
     else{
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_AC_PRESENT
       relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 0);
 #endif
       log_event_data(LOG_ALARM_LINE, "Норма");
@@ -410,7 +460,7 @@ void UPS_LineFailMonitor(void)
   if (lineFailCurrent != lineFailOldState)
   {
     if (lineFailCurrent){
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_AC_PRESENT
     	relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 1);
 #endif
 
@@ -425,7 +475,7 @@ void UPS_LineFailMonitor(void)
     	flUpdateLog = true;
     }
     else{
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_AC_PRESENT
       relay_setup_log(CurrROtype_Sourse, AC_PRESENT, 0);
 #endif
       log_event_data(LOG_ALARM_LINE, "Норма");
@@ -434,7 +484,7 @@ void UPS_LineFailMonitor(void)
     }
   }
 
-#if defined HARDWARE_BT6707
+#if defined RELAY_AC_PRESENT
   else{
 	  if (lineFailCurrent)
 		  relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, AC_PRESENT);
@@ -458,7 +508,7 @@ void UPS_VACoutputLowRangeMonitor(void)
 
   static uint8_t stateCurrentVACoutput = HYST_IDLE;
   uint8_t VACoutputCurrent;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
   uint8_t i = 0;
   static bool isValueRecv = false;
   static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
@@ -480,7 +530,7 @@ void UPS_VACoutputLowRangeMonitor(void)
 	    {
           UPS.Alarm |= (1 << 7);
           stateCurrentVACoutput = HYST_DOWN;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
           relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 1);
 #endif
 	        log_event_data(LOG_ALARM_VAC_LOW_OUTPUT, "Авария");
@@ -488,7 +538,7 @@ void UPS_VACoutputLowRangeMonitor(void)
 	//  SNMP_SendUserTrap(POWER_ALARM);
 	        flUpdateLog = true;
 	    } else {
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
     	    relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, DC_PRESENT);
 #endif
       }
@@ -500,7 +550,7 @@ void UPS_VACoutputLowRangeMonitor(void)
 	    {
           UPS.Alarm &= 0xffffff7f;
     	    stateCurrentVACoutput = HYST_IDLE;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
 	        relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
 #endif
 	        log_event_data(LOG_ALARM_VAC_LOW_OUTPUT, "Норма");
@@ -512,7 +562,7 @@ void UPS_VACoutputLowRangeMonitor(void)
   if (UPS.Alarm & 0x80) {
     flLedAlarm = true;
   }
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   	  OldROtype_Sourse[i] = CurrROtype_Sourse[i];
     }
@@ -527,7 +577,7 @@ void UPS_VACoutputHighRangeMonitor(void)
 
   static uint8_t stateCurrentVACoutput = HYST_IDLE;
   uint8_t VACoutputCurrent;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
   uint8_t i = 0;
   static bool isValueRecv = false;
   static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
@@ -548,7 +598,7 @@ void UPS_VACoutputHighRangeMonitor(void)
       if (stateCurrentVACoutput == HYST_IDLE) {
           UPS.Alarm |= (1 << 7);
           stateCurrentVACoutput = HYST_UP;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
           relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 1);
 #endif
 	        log_event_data(LOG_ALARM_VAC_HIGH_OUTPUT, "Авария");
@@ -556,7 +606,7 @@ void UPS_VACoutputHighRangeMonitor(void)
 	//  SNMP_SendUserTrap(POWER_ALARM);
 	        flUpdateLog = true;
 	    } else {
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
     	    relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, DC_PRESENT);
 #endif
       }
@@ -567,7 +617,7 @@ void UPS_VACoutputHighRangeMonitor(void)
       if (stateCurrentVACoutput == HYST_UP) {
           UPS.Alarm &= 0xffffff7f;
     	    stateCurrentVACoutput = HYST_IDLE;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
 	        relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
 #endif
 	        log_event_data(LOG_ALARM_VAC_HIGH_OUTPUT, "Норма");
@@ -579,7 +629,7 @@ void UPS_VACoutputHighRangeMonitor(void)
   if (UPS.Alarm & 0x80) {
     flLedAlarm = true;
   }
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_DC_PRESENT
   for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
   	  OldROtype_Sourse[i] = CurrROtype_Sourse[i];
     }
@@ -599,7 +649,7 @@ void UPS_LowBatMonitor(void)
   static bool flag_alarm_time = false;
   uint8_t lowBatCurrent;
 
-#if defined HARDWARE_BT6707
+#if defined RELAY_CHARGE_AKB
   uint8_t i = 0;
   static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
   uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
@@ -620,7 +670,7 @@ void UPS_LowBatMonitor(void)
     	log_event_data(LOG_ALARM_LOW_BAT, "Авария");
           SNMP_SendUserTrap(LOW_BAT_ALARM);
           flUpdateLog = true;
-#if defined HARDWARE_BT6707
+#if defined RELAY_CHARGE_AKB
       relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 1);
 #endif
     }
@@ -628,7 +678,7 @@ void UPS_LowBatMonitor(void)
 	  SNMP_SendUserTrap(LOW_BAT_NORM);
 	  log_event_data(LOG_ALARM_LOW_BAT, "Норма");
 	  flUpdateLog = true;
-#if defined HARDWARE_BT6707
+#if defined RELAY_CHARGE_AKB
 	  relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 0);
 #endif
 	}
@@ -643,7 +693,7 @@ void UPS_LowBatMonitor(void)
 		  SNMP_SendUserTrap(LOW_BAT_ALARM);
 		  log_event_data(LOG_ALARM_LOW_BAT, "Авария");
 		  flUpdateLog = true;
-#ifdef HARDWARE_BT6707
+#ifdef RELAY_CHARGE_AKB
 		  relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 1);
 #endif
 		}
@@ -651,7 +701,7 @@ void UPS_LowBatMonitor(void)
 		  SNMP_SendUserTrap(LOW_BAT_NORM);
 		  log_event_data(LOG_ALARM_LOW_BAT, "Норма");
 		  flUpdateLog = true;
-#if defined HARDWARE_BT6707
+#if defined RELAY_CHARGE_AKB
 		  relay_setup_log(CurrROtype_Sourse, CHARGE_AKB, 0);
 #endif
 		}
@@ -660,7 +710,7 @@ void UPS_LowBatMonitor(void)
 		flag_alarm_time = true;
 	}
   }
-#if defined HARDWARE_BT6707
+#if defined RELAY_CHARGE_AKB
   else{
 	  flag_alarm_time = false;
 	  if (lowBatCurrent)
@@ -1117,7 +1167,7 @@ void UPS_BatteryConnectMonitor(void)
   static uint8_t AKBconnectOldState = 0;
   uint8_t AKBconnectCurrent;
 
-#if defined HARDWARE_BT6707
+#if defined RELAY_OFF_AKB
   uint8_t i = 0;
   static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
   uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
@@ -1141,7 +1191,7 @@ void UPS_BatteryConnectMonitor(void)
       log_event_data(LOG_ALARM_AKB, "Авария");
 	  SNMP_SendUserTrap(BATTERY_CONNECT_ALARM);
 	  flUpdateLog = true;
-#if defined HARDWARE_BT6707
+#if defined RELAY_OFF_AKB
       relay_setup_log(CurrROtype_Sourse, OFF_AKB, 1);
 #endif
     }
@@ -1149,7 +1199,7 @@ void UPS_BatteryConnectMonitor(void)
     	log_event_data(LOG_ALARM_AKB, "Норма");
 		  SNMP_SendUserTrap(BATTERY_CONNECT_NORM);
 		  flUpdateLog = true;
-#if	defined HARDWARE_BT6707
+#if	defined RELAY_OFF_AKB
 		  relay_setup_log(CurrROtype_Sourse, OFF_AKB, 0);
 #endif
     }
@@ -1164,7 +1214,7 @@ void UPS_BatteryConnectMonitor(void)
 		  log_event_data(LOG_ALARM_AKB, "Норма");
 		  SNMP_SendUserTrap(BATTERY_CONNECT_NORM);
 		  flUpdateLog = true;
-#if defined HARDWARE_BT6707
+#if defined RELAY_OFF_AKB
 		  relay_setup_log(CurrROtype_Sourse, OFF_AKB, 0);
 #endif
 		}
@@ -1172,7 +1222,7 @@ void UPS_BatteryConnectMonitor(void)
 		  log_event_data(LOG_ALARM_AKB, "Авария");
 		  SNMP_SendUserTrap(BATTERY_CONNECT_ALARM);
 		  flUpdateLog = true;
-#if defined HARDWARE_BT6707
+#if defined RELAY_OFF_AKB
 		  relay_setup_log(CurrROtype_Sourse, OFF_AKB, 1);
 #endif
 		}
@@ -1181,7 +1231,7 @@ void UPS_BatteryConnectMonitor(void)
 		flag_alarm_time = true;
 	}
   }
-#if defined HARDWARE_BT6707
+#if defined RELAY_OFF_AKB
   else{
 	  flag_alarm_time = false;
 	  if (AKBconnectCurrent)

+ 5 - 0
modules/monitor/ups_monitor.h

@@ -32,6 +32,11 @@ typedef enum
   */
 void UPS_TestFinishMonitor(void);
 
+/**
+  * @brief  Мониторинг SOC
+  */
+void UPS_TestSOCMonitor(void);
+
 /**
   * @brief  Мониторинг бита DI0 state
   */

+ 14 - 3
modules/settings_api.h

@@ -17,6 +17,7 @@
 #include "stm32f4xx.h"
 #include <stdbool.h>
 #include "d_inouts.h"
+#include "common_config.h"
 
 /* Предельные границы настроек */
 #define MAX_VOLT_CELL_RANGE				3.0
@@ -217,17 +218,27 @@ typedef struct
   */
 typedef enum
 {
-#if defined HARDWARE_BT6707
+#ifdef RELAY_AC_PRESENT
 	AC_PRESENT = 1,
+#endif
+#ifdef RELAY_DC_PRESENT
 	DC_PRESENT,
+#endif
+#ifdef RELAY_ALARM_AKB
+	ALARM_AKB,
+#endif
+#ifdef RELAY_CHARGE_AKB
 	CHARGE_AKB,
+#endif
+#ifdef RELAY_OFF_AKB
 	OFF_AKB,
-#elif HARDWARE_BT6703
+#endif
+#ifdef TYPE_CRITICAL_ALARM_MONITOR
 	CRITICAL = 1,
 	NON_CRITICAL,
 #endif
 	SNMP_SET,
-    RO_MAX_SOURCE
+  RO_MAX_SOURCE
 } ro_type_source_t;
 
 /**

+ 259 - 0
modules/settings_api_bt6703_rt.c

@@ -0,0 +1,259 @@
+/********************************* (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_BT6703_RT
+#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 "mbedtls/certs.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[] =
+{
+	"Перезагрузка контроллера",
+    "Сброс настроек",
+    "Обновление ПО",
+    "Включение",
+    "Смена пароля",
+    "Сохранение настроек",
+    "Авторизация",
+    "Тест ИБП",
+    "Откл. нагрузки ИБП",
+    "Авария дискр. входа 1",
+    "Состояние выхода 1",
+    "Состояние выхода 2",
+    "Высокая температура",
+    "Низкая температура",
+    "Авария вх. напряжения",
+    "Низкий заряд АКБ",
+    "Авария нагрузки",
+    "Авария связи с ИБП",
+    "Авария отключения АКБ",
+    "Авария АКБ",
+};
+
+/**
+  * @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.ups_power = 1000;
+  sSettings.UPS_Setting.set_data = 0;
+  sSettings.UPS_Setting.life_time = 5;
+  sSettings.UPS_Setting.common_capacity = 9;
+  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;
+
+  sSettings.sAlarmManager.Temprature_cabinet_range.high = 70.0;
+	sSettings.sAlarmManager.Temprature_cabinet_range.low = -40.0;
+	sSettings.sAlarmManager.Temprature_cabinet_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, "R04ekR4MP2");
+            break;
+        case 1:
+        default:
+        	sSettings.sAuth[user_id].level = USER;
+            strcpy(sSettings.sAuth[user_id].login, "user");
+            strcpy(sSettings.sAuth[user_id].password, "R03ekR4MP2");
+            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)
+{
+	sSettings.sRelays[0].ro_type_source = AC_PRESENT;
+	sSettings.sRelays[1].ro_type_source = OFF_AKB;
+}
+
+/**
+  * @brief  Установить параметры настроек сухих контактов по умолчанию
+  */
+void SETTINGS_SetDINSDef(void)
+{
+	for(uint8_t i = 0; i < INPUTS_TOTAL_COUNT; i ++) {
+    sSettings.sDINs[i].din_type_act = DI_CONN;
+    memset(sSettings.sDINs[i].name, 0, sizeof(sSettings.sDINs[i].name));
+    sprintf( sSettings.sDINs[i].name, "Door_%d", (i + 1));
+  }
+}
+
+/**
+  * @brief  Установить параметры RADIUS по умолчанию
+  */
+void SETTINGS_SetRADIUSDef(void)
+{
+  sSettings.sRADIUS.Auth_enable = true;
+  //sSettings.sRADIUS.RDSEnable = false;
+  // todo вернуть на значение false
+  sSettings.sRADIUS.RDSEnable = false;
+  strcpy(sSettings.sRADIUS.ServerIP, "0.0.0.0");
+  //strcpy(sSettings.sRADIUS.ServerIP, "192.168.14.234");
+  sSettings.sRADIUS.port = 1812;
+  sSettings.sRADIUS.key_access = 123;
+  strcpy(sSettings.sRADIUS.rds_password, "R02ekR4MP2");
+}
+
+/**
+  * @brief  Установить параметры сертификата сервера по умолчанию
+  */
+void SETTINGS_SetSSLcrtDef(void){
+	memset(sSettings.our_srv_crt, 0, sizeof(sSettings.our_srv_crt));
+	memcpy(sSettings.our_srv_crt, (unsigned char *) mbedtls_test_srv_crt, mbedtls_test_srv_crt_len);
+	//memcpy(sSettings.our_srv_key, (unsigned char *) mbedtls_test_srv_key, mbedtls_test_srv_key_len);
+}
+
+/**
+  * @brief  Установить значение настроек прозрачного порта по умолчанию
+  */
+void SETTINGS_SetPortGwDef(void)
+{
+
+}
+
+/**
+  * @brief  Установить параметры Telnet
+  */
+void SETTINGS_SetTelnetDef(void){
+
+}
+
+/**
+  * @brief  Установить параметры SSH
+  */
+void SETTINGS_SetSSHDef(void){
+
+}
+
+/**
+  * @brief  Установить параметры списка доверительных хостов
+  */
+void SETTINGS_SetWhiteListDef(void){
+
+}
+
+/**
+  * @brief  Установить параметры разрешения уведомлений по умолчанию
+  */
+void SETTINGS_SetFlagNotificationDef(void)
+{
+  
+}
+
+/**
+  * @brief  Установить параметры датчиков температуры
+  */
+void SETTINGS_SetTempControlDef(void)
+{
+  
+}
+
+#endif
+/********************************* (C) ROTEK **********************************/