Explorar o código

[bt_6709] add get/snmp.cdi

balbekova %!s(int64=5) %!d(string=hai) anos
pai
achega
34ae445da2

+ 123 - 122
modules/Ethernet/snmp_api.c

@@ -10,7 +10,7 @@
  *******************************************************************************
  */
 
-#include "stm32f4xx.h"  
+#include "stm32f4xx.h"
 #include "snmp_api.h"
 #include "trap_api.h"
 #include "settings_api.h"
@@ -66,148 +66,149 @@ QueueHandle_t    SNMP_TrapQueue;
 
 /**
   * @brief  Инициализация параметров SNMP
-  * @retval 
+  * @retval
   */
 void SNMP_Init(void)
 {
-  //snmp_mib *my_snmp_mibs[] = { &mib2, &private_mib }; 
-  //SETTINGS_SetSnmpDef();
-  SNMP_AgentInit();
-  lwip_privmib_init();
-  //snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
+    //snmp_mib *my_snmp_mibs[] = { &mib2, &private_mib };
+    //SETTINGS_SetSnmpDef();
+    SNMP_AgentInit();
+    lwip_privmib_init();
+    //snmp_set_mibs(my_snmp_mibs, LWIP_ARRAYSIZE(my_snmp_mibs));
 }
 
 
 /**
   * @brief  Системный тик SNMP. Таск должен вызываться с частотой 100Гц.
-  * @retval 
+  * @retval
   */
 void SNMP_SysUpTimeTask(void *arg)
 {
-  TickType_t xLastWakeTime;
-  const TickType_t xFrequency = 10;
-  
-  xLastWakeTime = xTaskGetTickCount();
-  
-  while(1)
-  {
-	vTaskDelayUntil( &xLastWakeTime, xFrequency );
-    //snmp_inc_sysuptime();
-  }
+    TickType_t xLastWakeTime;
+    const TickType_t xFrequency = 10;
+
+    xLastWakeTime = xTaskGetTickCount();
+
+    while (1) {
+        vTaskDelayUntil( &xLastWakeTime, xFrequency );
+        //snmp_inc_sysuptime();
+    }
 }
 
 /**
   * @brief  Тестовый таск для проверки отправки трапов
-  * @retval 
+  * @retval
   */
 void snmp_trap_tread(void *arg)
 {
-  uint8_t trapName;
-	
-  while(1)
-  {
-    if (xQueueReceive(SNMP_TrapQueue, &trapName, 0) == pdTRUE)
-	{
-      SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
-	  SNMP_SendVarbindTrap(&traps[trapName]);
-     
-      SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
-	  SNMP_SendVarbindTrap(&traps[trapName]);
-      
-      SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
-	  SNMP_SendVarbindTrap(&traps[trapName]);
-
-	  SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
-	  SNMP_SendVarbindTrap(&traps[trapName]);
-
-	  SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
-	  SNMP_SendVarbindTrap(&traps[trapName]);
-	}
-    vTaskDelay(10);
-  }  
+    uint8_t trapName;
+
+    while (1) {
+        if (xQueueReceive(SNMP_TrapQueue, &trapName, 0) == pdTRUE) {
+#ifdef HARDWARE_BT6709
+            if(sSettings.sFlagNotification[trapName])
+#endif
+            {
+              SNMP_SetManagerIP(sSettings.sSnmp.managerIP);
+              SNMP_SendVarbindTrap(&traps[trapName]);
+
+              SNMP_SetManagerIP(sSettings.sSnmp.managerIP2);
+              SNMP_SendVarbindTrap(&traps[trapName]);
 
+              SNMP_SetManagerIP(sSettings.sSnmp.managerIP3);
+              SNMP_SendVarbindTrap(&traps[trapName]);
+
+              SNMP_SetManagerIP(sSettings.sSnmp.managerIP4);
+              SNMP_SendVarbindTrap(&traps[trapName]);
+
+              SNMP_SetManagerIP(sSettings.sSnmp.managerIP5);
+              SNMP_SendVarbindTrap(&traps[trapName]);
+            }
+        }
+        vTaskDelay(10);
+    }
 }
 
 /**
   * @brief  Инициализация SNMP агента
-  * @retval 
+  * @retval
   */
 void SNMP_AgentInit(void)
 {
-  SNMP_SetObjDescr();
-
-  SNMP_SetReadCommunity(sSettings.sSnmp.readCommunity);
-  SNMP_SetWriteCommunity(sSettings.sSnmp.writeCommunity);
-  SNMP_SetSysContact(&sSettings.sSnmp.sysContact);
-  SNMP_SetSysName(&sSettings.sSnmp.sysName);
-  SNMP_SetSysLocation(&sSettings.sSnmp.sysLocation);
-  SNMP_SetManagerIP(sSettings.sSnmp.managerIP);  //SNMP_SetManagerIP("192.168.14.37");
-  SNMP_SetObjID();
-  SNMP_SetTrapOnOff(1);
-  
-  SNMP_InitTrapsBase();
-	
-  snmp_init();
-  udp_init();
-  
-  SNMP_TrapQueue = xQueueCreate(SNMP_TRAP_QUEUE_SIZE, sizeof(uint8_t));
+    SNMP_SetObjDescr();
+
+    SNMP_SetReadCommunity(sSettings.sSnmp.readCommunity);
+    SNMP_SetWriteCommunity(sSettings.sSnmp.writeCommunity);
+    SNMP_SetSysContact(&sSettings.sSnmp.sysContact);
+    SNMP_SetSysName(&sSettings.sSnmp.sysName);
+    SNMP_SetSysLocation(&sSettings.sSnmp.sysLocation);
+    SNMP_SetManagerIP(sSettings.sSnmp.managerIP);  //SNMP_SetManagerIP("192.168.14.37");
+    SNMP_SetObjID();
+    SNMP_SetTrapOnOff(1);
+
+    SNMP_InitTrapsBase();
+
+    snmp_init();
+    udp_init();
+
+    SNMP_TrapQueue = xQueueCreate(SNMP_TRAP_QUEUE_SIZE, sizeof(uint8_t));
 }
 
 /**
-  * @brief  Пользовательская функция для отправки трапа из массива traps[] 
+  * @brief  Пользовательская функция для отправки трапа из массива traps[]
   *         Трап помещается в очередь. Работа с очередью происходит по принципу
-  *         FIFO буфера. 
+  *         FIFO буфера.
   *         Если в настройках трапа отправка отключена, то трап игнорируется.
-  * @retval 
+  * @retval
   */
 void SNMP_SendUserTrap(uint8_t trapName)
 {
-  uint16_t availableSpace;
-  uint8_t  dummyTrap;
-  
-  if (traps[trapName].trapEnable)
-  {	
-    availableSpace = uxQueueSpacesAvailable(SNMP_TrapQueue);
-  
-    if (availableSpace == 0)
-	  xQueueReceive(SNMP_TrapQueue, &dummyTrap, 0);
-  
-    xQueueSend(SNMP_TrapQueue, &trapName, 0);
-  }
+    uint16_t availableSpace;
+    uint8_t  dummyTrap;
+
+    if (traps[trapName].trapEnable) {
+        availableSpace = uxQueueSpacesAvailable(SNMP_TrapQueue);
+
+        if (availableSpace == 0) {
+            xQueueReceive(SNMP_TrapQueue, &dummyTrap, 0);
+        }
+
+        xQueueSend(SNMP_TrapQueue, &trapName, 0);
+    }
 }
 
 /**
   * @brief  Установить SNMP Descriptor
-  * @retval 
+  * @retval
   */
 // TODO
 void SNMP_SetObjDescr(void)
 {
-  
-  memset(sSettings.sSnmp.sysDesc.description, 0, sizeof(sSettings.sSnmp.sysDesc.description));
-
-  strcpy(sSettings.sSnmp.sysDesc.description, HW_REV);
-  strcat(sSettings.sSnmp.sysDesc.description, " ");
-  strcat(sSettings.sSnmp.sysDesc.description, VERSION);
-  strcat(sSettings.sSnmp.sysDesc.description, " ");
-  sSettings.sSnmp.sysContact.contact[sSettings.sSnmp.sysContact.len] = 0;
-  strcat(sSettings.sSnmp.sysDesc.description, sSettings.sSnmp.sysContact.contact);
-  strcat(sSettings.sSnmp.sysDesc.description, " ");
-  strcat(sSettings.sSnmp.sysDesc.description, sSettings.sInfo.serialNumber);
-  strcat(sSettings.sSnmp.sysDesc.description, " ");
-  strcat(sSettings.sSnmp.sysDesc.description, UPS.model);
-  strcat(sSettings.sSnmp.sysDesc.description, " ");
-  strcat(sSettings.sSnmp.sysDesc.description, UPS.serial);
-  
-  sSettings.sSnmp.sysDesc.len = strlen(sSettings.sSnmp.sysDesc.description);
-  snmp_mib2_set_sysdescr((u8_t*)sSettings.sSnmp.sysDesc.description, &sSettings.sSnmp.sysDesc.len);
+
+    memset(sSettings.sSnmp.sysDesc.description, 0, sizeof(sSettings.sSnmp.sysDesc.description));
+
+    strcpy(sSettings.sSnmp.sysDesc.description, HW_REV);
+    strcat(sSettings.sSnmp.sysDesc.description, " ");
+    strcat(sSettings.sSnmp.sysDesc.description, VERSION);
+    strcat(sSettings.sSnmp.sysDesc.description, " ");
+    sSettings.sSnmp.sysContact.contact[sSettings.sSnmp.sysContact.len] = 0;
+    strcat(sSettings.sSnmp.sysDesc.description, sSettings.sSnmp.sysContact.contact);
+    strcat(sSettings.sSnmp.sysDesc.description, " ");
+    strcat(sSettings.sSnmp.sysDesc.description, sSettings.sInfo.serialNumber);
+    strcat(sSettings.sSnmp.sysDesc.description, " ");
+    strcat(sSettings.sSnmp.sysDesc.description, UPS.model);
+    strcat(sSettings.sSnmp.sysDesc.description, " ");
+    strcat(sSettings.sSnmp.sysDesc.description, UPS.serial);
+
+    sSettings.sSnmp.sysDesc.len = strlen(sSettings.sSnmp.sysDesc.description);
+    snmp_mib2_set_sysdescr((u8_t *)sSettings.sSnmp.sysDesc.description, &sSettings.sSnmp.sysDesc.len);
 }
 
 void SNMP_SettingsSave(void)
 {
-	SETTINGS_Save();
-	log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
-	SNMP_SetObjDescr();
+    SETTINGS_Save();
+    log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
+    SNMP_SetObjDescr();
 }
 
 /**
@@ -215,8 +216,8 @@ void SNMP_SettingsSave(void)
   */
 void SNMP_SetReadCommunity(char *comm)
 {
-  //strcpy(sSettings.sSnmp.readCommunity, comm);
-  snmp_set_community(comm);
+    //strcpy(sSettings.sSnmp.readCommunity, comm);
+    snmp_set_community(comm);
 }
 
 /**
@@ -224,75 +225,75 @@ void SNMP_SetReadCommunity(char *comm)
   */
 void SNMP_SetWriteCommunity(char *comm)
 {
-  //strcpy(sSettings.sSnmp.writeCommunity, comm);
-  snmp_set_community_write(comm);
+    //strcpy(sSettings.sSnmp.writeCommunity, comm);
+    snmp_set_community_write(comm);
 }
 
 /**
   * @brief  Установить SNMP SysContact
-  * @retval 
+  * @retval
   */
 void SNMP_SetSysContact(SNMP_SYS_CONTACT_t *con)
 {
-  snmp_mib2_set_syscontact((u8_t*)con->contact, &con->len, (sizeof(con->contact)-1));
+    snmp_mib2_set_syscontact((u8_t *)con->contact, &con->len, (sizeof(con->contact) - 1));
 }
 
 /**
   * @brief  Установить SNMP SysName
-  * @retval 
+  * @retval
   */
 void SNMP_SetSysName(SNMP_SYS_NAME_t *name)
 {
-  snmp_mib2_set_sysname((u8_t*)name->name, &name->len, (sizeof(name->name)-1));
+    snmp_mib2_set_sysname((u8_t *)name->name, &name->len, (sizeof(name->name) - 1));
 }
 
 /**
   * @brief  Установить SNMP SysLocation
-  * @retval 
+  * @retval
   */
 void SNMP_SetSysLocation(SNMP_SYS_LOCATION_t *loc)
 {
-  snmp_mib2_set_syslocation((u8_t*)loc->location, &loc->len, (sizeof(loc->location)-1));
+    snmp_mib2_set_syslocation((u8_t *)loc->location, &loc->len, (sizeof(loc->location) - 1));
 }
 
 /**
   * @brief  Установить SNMP SysManagerIP
-  * @retval 
+  * @retval
   */
 void SNMP_SetManagerIP(char *ip)
 {
-  static ip_addr_t trap_addr;
-  
-  ipaddr_aton(ip, &trap_addr);
- // snmp_trap_dst_ip_set(0, &trap_addr);
-  snmp_trap_pduv2_dst_ip_set(0, &trap_addr);
+    static ip_addr_t trap_addr;
+
+    ipaddr_aton(ip, &trap_addr);
+    // snmp_trap_dst_ip_set(0, &trap_addr);
+    snmp_trap_pduv2_dst_ip_set(0, &trap_addr);
 }
 
 /**
   * @brief  Установить SNMP Object ID
-  * @retval 
+  * @retval
   */
 void SNMP_SetObjID(void)
 {
 #ifdef HARDWARE_BT6703
-  static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, 6}};
+    static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, 6}};
 #elif HARDWARE_BT6707
-  static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, 7}};
+    static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, 7}};
 #elif HARDWARE_BT6709
-  static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, 8}};
+    static struct snmp_obj_id my_object_id = {9, {1, 3, 6, 1, 4, 1, 41752, 911, 8}};
 #endif
-  
-  snmp_set_device_enterprise_oid(&my_object_id);
+
+    snmp_set_device_enterprise_oid(&my_object_id);
 }
 
 /**
   * @brief  Вкл/выкл трапы
-  * @retval 
+  * @retval
   */
 void SNMP_SetTrapOnOff(uint8_t state)
 {
-  //snmp_trap_dst_enable(0, (u8_t)state);
-  snmp_trap_pduv2_dst_enable(0, (u8_t)state);
+    //snmp_trap_dst_enable(0, (u8_t)state);
+    snmp_trap_pduv2_dst_enable(0, (u8_t)state);
 }
 
 

+ 26 - 0
modules/Ethernet/trap_api.c

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

+ 76 - 0
modules/HTTP_Server/http_server.c

@@ -163,6 +163,9 @@ web_func_handler_t process_web_funcs[] = {
     { "GET /getJson.cgi",           16,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_GetParamsPage },
     { "GET /settings.cgi",          17,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_GetSettingsPage },
     { "POST /settings.cgi",         18,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_SetSettingsPage },
+#ifdef HARDWARE_BT6709
+    { "GET /snmp.cgi",              13,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_SnmpParam },
+#endif
     { "GET /info.cgi",              13,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_GetInfo },
     { "POST /info.cgi",             14,   COMMON_ANSWER,        TIME_ACCESS,  HTTP_SetInfoPage },
     { "GET /history.cgi",           16,   HISTORY_ANSWER,       TIME_ACCESS,  HTTP_HistoryPage },
@@ -1138,6 +1141,79 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
     HTTP_SaveSettings();
 }
 
+#ifdef HARDWARE_BT6709
+/**
+  * @brief
+  * @retval None
+  */
+char *HTTP_SnmpParam(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
+{
+    char value[8];
+    uint8_t valueLen;
+    char tempStr[50];
+    strncpy(tempStr, bufIn, 50);
+
+    (void)reqNum;
+
+    /* В запросе нет параметров, нужно формировать JSON ответ */
+    if (strstr(tempStr, "?_") != NULL) {
+        memset(bufOut, 0, SEND_BUF_MAX_LEN);
+
+        return HTTP_GetTrapAccess(bufIn, lenBufIn, bufOut, lenBufOut);
+    }
+    /* В запросе есть параметры, нужно парсить и сохранять настройки */
+    else {
+        HTTP_SetNotification(bufIn, lenBufIn);
+
+        fs_open("/snmp.html", &file);
+        *lenBufOut = file.len;
+        return file.data;
+    }
+}
+
+/**
+  * @brief
+  * @retval None
+  */
+void HTTP_SetNotification(char *buf, uint16_t lenBuf)
+{
+    uint8_t num_notification, value_notification;
+    const uint8_t len = 20;
+    uint16_t len2 = 0, len3 = 0, total_len = 0;
+    char str[20], value[20];
+
+    ClearParamString(buf);
+
+    total_len = strcspn(buf, "?") + 1;
+
+    lenBuf = strlen(buf);
+
+    const uint16_t strend = strcspn(buf, "_");
+
+    while (total_len < (strend)) {
+        memset(value, 0, len);
+        len2 = strcspn(&buf[total_len], "&");
+        strncat(value, &buf[total_len], len2);
+
+        memset(str, 0, len);
+        len3 = strcspn(&value[0], "=");
+        strncat(str, &value[0], (len3));
+        num_notification = atoi(str);
+
+        memset(str, 0, len);
+
+        strncat(str, &value[len3 + 1], (len2 - len3 - 1));
+        value_notification = atoi(str);
+
+        SetNotificationFlagsStr(&value_notification, num_notification);
+
+        total_len = total_len + strlen(value) + 1;
+    }
+
+    HTTP_SaveSettings();
+}
+#endif
+
 /**
   * @brief
   * @retval None

+ 14 - 0
modules/HTTP_Server/http_server.h

@@ -76,6 +76,20 @@ void HTTP_SetInfo(char *buf, uint16_t lenBuf);
   */
 char* HTTP_SetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
+#ifdef HARDWARE_BT6709
+/**
+  * @brief
+  * @retval None
+  */
+char *HTTP_SnmpParam(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
+
+/**
+  * @brief
+  * @retval None
+  */
+void HTTP_SetNotification(char *buf, uint16_t lenBuf);
+#endif
+
 /**
   * @brief  
   */

+ 58 - 0
modules/HTTP_Server/web_params_api.c

@@ -443,6 +443,64 @@ uint8_t ConvertStringForJSON(char *inStr, char *paramValue, uint8_t inLen)
     return 1;
 }
 
+#ifdef HARDWARE_BT6709
+/**
+  * @brief  Возвращяет строку с настройками уведомлений (есть/нет отправка)
+  * @retval None
+  */
+char *HTTP_GetTrapAccess(char *params, uint16_t len_params, char *buf, uint16_t *len_out)
+{
+    char str[64];
+    uint8_t len, i, first_item = 1;
+    char value[20];
+
+    (void)len_params;
+
+    ClearParamString(params);
+    memset(value, 0, 20);
+    memset(str, 0, 64);
+
+    /* Headers для поддержки saffari */
+    strcpy(buf, "HTTP/1.0 200 OK\r\nContent-Type:text/html\r\n\r\n");
+
+    /* Формирование списка уведомлений */
+    strcat(buf, "{\"params\":[");
+
+    for (i = 1; i < ALL_TRAPS; i++) {
+        if (first_item) {
+            first_item = 0;
+        } else {
+            strcat(buf, ",");
+        }
+
+        sprintf(str, "%d", i);
+        len = strlen(str);
+        strcat(buf, "{\"name\":\"");
+        strncat(buf, str, len);
+
+        GetTrapLongNameStr(str, &len, i);
+        strcat(buf, "\",\"label\":\"");
+        strncat(buf, str, len);
+
+        GetNotificationTrapsStateStr(str, &len, i);
+        strcat(buf, "\",\"snmp\":\"");
+        strncat(buf, str, len);
+
+        strcat(buf, "\"}");
+    }
+    strcat(buf, "]");
+
+    /* Признак изменения сетевых настроек */
+    GetWebReinitFlag(str, &len);
+    strcat(buf, ",\"netsettings_changed\":\"");
+    strncat(buf, str, len);
+    strcat(buf, "\"}");
+
+    *len_out = strlen(buf);
+    return buf;
+}
+#endif
+
 /**
   * @brief  Возвращяет строку с информацией об устройстве
   * @retval None

+ 8 - 0
modules/HTTP_Server/web_params_api.h

@@ -26,6 +26,14 @@ char *HTTP_GetParamsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t le
   */
 char *HTTP_GetSettingsPage(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut);
 
+#ifdef HARDWARE_BT6709
+/**
+  * @brief  Возвращяет строку с настройками уведомлений (есть/нет отправка)
+  * @retval None
+  */
+char *HTTP_GetTrapAccess(char *params, uint16_t len_params, char *buf, uint16_t *len_out);
+#endif
+
 /**
   * @brief  Возвращяет строку с информацией об устройстве
   */

+ 72 - 28
modules/parameters.c

@@ -41,6 +41,9 @@
 #include <stdlib.h>
 #include <math.h>
 
+#ifdef HARDWARE_BT6709
+extern const char* name_traps[];
+#endif
 //#endif
 /**
   * @brief  Структура для хранения состояний дискретных входов
@@ -207,8 +210,8 @@ void GetOutputCurrentStr(char *str, uint8_t *len)
 void GetVoltageAKBtStr(char *str, uint8_t *len)
 {
     float value;
-    if(UPS.Vakb_curr < 7) {
-      value = AKB_NUM_CELL*(sSettings.UPS_Setting.Uakb/AKB_VOLTAGE) * UPS.Vakb_curr;
+    if (UPS.Vakb_curr < 7) {
+        value = AKB_NUM_CELL * (sSettings.UPS_Setting.Uakb / AKB_VOLTAGE) * UPS.Vakb_curr;
     } else {
         value = sSettings.UPS_Setting.Uakb * UPS.Vakb_curr;
     }
@@ -661,6 +664,36 @@ void GetUPSVersionStr(char *str, uint8_t *len) // +
     strncpy(str, UPS.vertion, *len);
 }
 #endif
+
+#ifdef HARDWARE_BT6709
+// ************************************************************************** //
+//                              Параметры уведомления
+
+/**
+  * @brief  Параметр разрешения отправки трапа
+  */
+void GetNotificationTrapsStateStr(char *str, uint8_t *len, uint8_t num)
+{
+    if ( sSettings.sFlagNotification[num] ) {
+        sprintf(str, "%s", "true");
+        *len = strlen(str);
+    } else {
+        sprintf(str, "%s", "false");
+        *len = strlen(str);
+    }
+}
+
+/**
+  * @brief Длинное имя трапа
+  */
+void GetTrapLongNameStr(char *str, uint8_t *len, uint8_t num)
+{
+    sprintf(str, "%s", name_traps[num]);
+    *len = strlen(str);
+}
+
+#endif
+
 // ************************************************************************** //
 //                          Настройки аутентификации
 
@@ -1052,14 +1085,14 @@ void GetUPSVoltCellMaxStr(char *str, uint8_t *len)
   */
 void GetDataNextChangeAKBStrRU(char *str, uint8_t *len)
 {
-    if(sSettings.UPS_Setting.set_data == 0){
-      sprintf(str, "%s", "не установлена");
-      *len = strlen(str);
-      return;
+    if (sSettings.UPS_Setting.set_data == 0) {
+        sprintf(str, "%s", "не установлена");
+        *len = strlen(str);
+        return;
     }
     TM_RTC_t data;
     uint16_t sys_year;
-    uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000*sSettings.UPS_Setting.life_time);
+    uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000 * sSettings.UPS_Setting.life_time);
 
     memset(&data, 0, sizeof(data));
 
@@ -1075,13 +1108,13 @@ void GetDataNextChangeAKBStrRU(char *str, uint8_t *len)
   */
 void GetDataNextChangeAKBStr(char *str, uint8_t *len)
 {
-    if(sSettings.UPS_Setting.set_data == 0){
-      *len = 0;
-      return;
+    if (sSettings.UPS_Setting.set_data == 0) {
+        *len = 0;
+        return;
     }
     TM_RTC_t data;
     uint16_t sys_year;
-    uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000*sSettings.UPS_Setting.life_time);
+    uint32_t data_change = sSettings.UPS_Setting.set_data + (31536000 * sSettings.UPS_Setting.life_time);
 
     memset(&data, 0, sizeof(data));
 
@@ -1097,9 +1130,9 @@ void GetDataNextChangeAKBStr(char *str, uint8_t *len)
   */
 void GetDataSetAKBStr(char *str, uint8_t *len)
 {
-    if(sSettings.UPS_Setting.set_data == 0){
-      *len = 0;
-      return;
+    if (sSettings.UPS_Setting.set_data == 0) {
+        *len = 0;
+        return;
     }
     TM_RTC_t data;
     uint16_t sys_year;
@@ -1264,7 +1297,18 @@ void SetConfirmWebParamsFlag(void)
     fConfirmWebParams = true;
 }
 
+#ifdef HARDWARE_BT6709
+// ************************************************************************** //
+//                              Параметры уведомления
 
+/**
+  * @brief  Параметр разрешения отправки
+  */
+void SetNotificationFlagsStr(uint8_t *value, uint8_t num)
+{
+    sSettings.sFlagNotification[num] = *value;
+}
+#endif
 // ************************************************************************** //
 //                             Сетевые параметры
 /**
@@ -1727,21 +1771,21 @@ void SetDataSetAKBStr(char *str)
 {
     TM_RTC_t tmp_data;
     char str_data[3];
-    if(str[0] != 0) {
-      memset(str_data, 0, 3);
-      memset(&tmp_data, 0, sizeof(tmp_data));
-      str += 2;
-      strncpy(str_data, str, 2);
-      tmp_data.year = atoi(str_data);
-      memset(str_data, 0, 3);
-      strncat(str_data, (str + 3), 2);
-      tmp_data.month = atoi(str_data);
-      memset(str_data, 0, 3);
-      strncat(str_data, (str + 6), 2);
-      tmp_data.date = atoi(str_data);
-      sSettings.UPS_Setting.set_data = TM_RTC_GetUnixTimeStamp(&tmp_data);
+    if (str[0] != 0) {
+        memset(str_data, 0, 3);
+        memset(&tmp_data, 0, sizeof(tmp_data));
+        str += 2;
+        strncpy(str_data, str, 2);
+        tmp_data.year = atoi(str_data);
+        memset(str_data, 0, 3);
+        strncat(str_data, (str + 3), 2);
+        tmp_data.month = atoi(str_data);
+        memset(str_data, 0, 3);
+        strncat(str_data, (str + 6), 2);
+        tmp_data.date = atoi(str_data);
+        sSettings.UPS_Setting.set_data = TM_RTC_GetUnixTimeStamp(&tmp_data);
     } else {
-      sSettings.UPS_Setting.set_data = 0;
+        sSettings.UPS_Setting.set_data = 0;
     }
 }
 

+ 25 - 0
modules/parameters.h

@@ -219,6 +219,21 @@ void GetUPSModelStr(char *str, uint8_t *len);
   */
 void GetUPSVersionStr(char *str, uint8_t *len);
 
+#ifdef HARDWARE_BT6709
+// ************************************************************************** //
+//                              Параметры уведомления
+
+/**
+  * @brief  Параметр разрешения отправки трапа
+  */
+void GetNotificationTrapsStateStr(char *str, uint8_t *len, uint8_t num);
+
+/**
+  * @brief Длинное имя трапа
+  */
+void GetTrapLongNameStr(char *str, uint8_t *len, uint8_t num);
+#endif
+
 // ************************************************************************** //
 //                             Параметры WEB
 
@@ -529,6 +544,16 @@ void SetWebReinitFlag(bool value);
   */
 void SetConfirmWebParamsFlag(void);
 
+#ifdef HARDWARE_BT6709
+// ************************************************************************** //
+//   							Параметры уведомления
+
+/**
+  * @brief  Параметр разрешения отправки 
+  */
+void SetNotificationFlagsStr(uint8_t *value, uint8_t num);
+#endif
+
 // ************************************************************************** //
 //                             Сетевые параметры
 

+ 16 - 0
modules/settings_api.c

@@ -305,6 +305,18 @@ void SETTINGS_SetWhiteListDef(void){
 	}
 }
 
+/**
+  * @brief  Установить параметры разрешения уведомлений по умолчанию
+  */
+void SETTINGS_SetFlagNotificationDef(void)
+{
+    uint8_t i;
+
+    for(i = 0; i < ALL_TRAPS; i++ ) {
+        sSettings.sFlagNotification[i] = 1;
+    }
+}
+
 #endif
 
 /**
@@ -331,6 +343,7 @@ void SETTINGS_SetDefault(void)
 #if defined HARDWARE_BT6709
   SETTINGS_SetSSHDef();
   SETTINGS_SetWhiteListDef();
+  SETTINGS_SetFlagNotificationDef();
 #endif
 
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
@@ -354,6 +367,7 @@ void SETTINGS_SetPartDefault(void)
  // SETTINGS_SetRADIUSDef();
 #if defined HARDWARE_BT6709
   SETTINGS_SetWhiteListDef();
+  SETTINGS_SetFlagNotificationDef();
 #endif
   
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
@@ -390,6 +404,7 @@ void SETTINGS_SetAllDefault(void)
 #ifdef HARDWARE_BT6709
   SETTINGS_SetSSHDef();
   SETTINGS_SetWhiteListDef();
+  SETTINGS_SetFlagNotificationDef();
 #endif
   
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();
@@ -425,6 +440,7 @@ void SETTINGS_SetDefaultDebug(void)
 #if defined HARDWARE_BT6709
   SETTINGS_SetSSHDef();
   SETTINGS_SetWhiteListDef();
+  SETTINGS_SetFlagNotificationDef();
 #endif
   
   sSettings.CritSecCRC = SETTINGS_GetCritSecCRC();

+ 9 - 1
modules/settings_api.h

@@ -17,6 +17,7 @@
 #include "stm32f4xx.h"
 #include <stdbool.h>
 #include "d_inouts.h"
+#include "trap_api.h"
 
 /* Предельные границы настроек */
 #define MAX_VOLT_CELL_RANGE				3.0
@@ -335,7 +336,7 @@ typedef struct
 * В случае повреждения критического сектора, загружаются параметры по умолчанию. */
   FLAGS_t       sFlags;
   SNMP_t        sSnmp;
-  AUTH_t		sAuth[MAX_WEB_USERS];
+  AUTH_t		    sAuth[MAX_WEB_USERS];
   SNTP_t        sSNTP;
 #ifndef HARDWARE_BT6709
   INOUTS_t		sInOuts;
@@ -354,6 +355,7 @@ typedef struct
   WHITE_LIST_t sWhiteList[MAX_WHITE_LIST];
   WHITE_LIST_t sWhiteListTemp[MAX_WHITE_LIST];
   SSH_t sSSH;
+  uint8_t       sFlagNotification[ALL_TRAPS];
 #endif
   uint32_t      controlWorld;  // Слово для контроля целостности структуры настроек
   
@@ -440,6 +442,12 @@ void SETTINGS_SetSSHDef(void);
   * @brief  Установить параметры списка доверительных хостов
   */
 void SETTINGS_SetWhiteListDef(void);
+
+/**
+  * @brief  Установить параметры разрешения уведомлений по умолчанию
+  */
+void SETTINGS_SetFlagNotificationDef(void);
+
 #endif
 
 /**

+ 1 - 0
service_hw/Makefile

@@ -51,6 +51,7 @@ INCLUDES += -I../modules/d_inouts
 INCLUDES += -I../modules/common/
 INCLUDES += -I../modules/mbedtls_api
 INCLUDES += -I../modules
+INCLUDES += -I../modules/Ethernet/
 
 CSRC += $(wildcard leds/*.c)
 CSRC += $(wildcard buttons/*.c)