| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 | 
							- /********************************* (C) ROTEK ***********************************
 
-  * @module  template
 
-  * @file    template.c
 
-  * @version 1.0.0
 
-  * @date    XX.XX.XXXX
 
-  * $brief   Template
 
-  *******************************************************************************
 
-  * @history     Version  Author         Comment
 
-  * XX.XX.XXXX   1.0.0    Telenkov D.A.  First release.
 
-  *******************************************************************************
 
-  */
 
- #include "stm32f4xx.h"
 
- #include "snmp_api.h"
 
- #include "trap_api.h"
 
- #include "settings_api.h"
 
- #include "common_config.h"
 
- #include "rtc.h"
 
- #include "megatec.h"
 
- #include "log.h"
 
- #include "apps/snmp.h"
 
- #include "snmp_mib2.h"
 
- #include "snmp_core.h"
 
- #include "private_mib.h"
 
- #include "snmp_trap_pdu2.h"
 
- #ifdef PRINTF_STDLIB
 
- #include <stdio.h>
 
- #endif
 
- #ifdef PRINTF_CUSTOM
 
- #include "tinystdio.h"
 
- #endif
 
- #include <stdbool.h>
 
- #include <string.h>
 
- #include "lwip/opt.h"
 
- #include "lwip/api.h"
 
- #include "lwip/sys.h"
 
- #include "lwip/udp.h"
 
- //#include "snmp.h"
 
- //#include "snmp_msg.h"
 
- //#include "private_mib.h"
 
- #include "FreeRTOS.h"
 
- #include "task.h"
 
- #include "queue.h"
 
- /**
 
-   * @brief  Пул всех возможных трапов устройства
 
-   */
 
- extern TRAP_t traps[];
 
- /**
 
-   * @brief  Общая структура настроек
 
-   */
 
- extern SETTINGS_t sSettings;
 
- /**
 
-   * @brief  Очередь для отправки трапов
 
-   */
 
- QueueHandle_t    SNMP_TrapQueue;
 
- /**
 
-   * @brief  Инициализация параметров SNMP
 
-   * @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));
 
- }
 
- /**
 
-   * @brief  Системный тик SNMP. Таск должен вызываться с частотой 100Гц.
 
-   * @retval
 
-   */
 
- void SNMP_SysUpTimeTask(void *arg)
 
- {
 
-     TickType_t xLastWakeTime;
 
-     const TickType_t xFrequency = 10;
 
-     xLastWakeTime = xTaskGetTickCount();
 
-     while (1) {
 
-         vTaskDelayUntil( &xLastWakeTime, xFrequency );
 
-         //snmp_inc_sysuptime();
 
-     }
 
- }
 
- /**
 
-   * @brief  Тестовый таск для проверки отправки трапов
 
-   * @retval
 
-   */
 
- void snmp_trap_tread(void *arg)
 
- {
 
-     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
 
-   */
 
- 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));
 
- }
 
- /**
 
-   * @brief  Пользовательская функция для отправки трапа из массива traps[]
 
-   *         Трап помещается в очередь. Работа с очередью происходит по принципу
 
-   *         FIFO буфера.
 
-   *         Если в настройках трапа отправка отключена, то трап игнорируется.
 
-   * @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);
 
-     }
 
- }
 
- /**
 
-   * @brief  Установить SNMP Descriptor
 
-   * @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);
 
- }
 
- void SNMP_SettingsSave(void)
 
- {
 
-     SETTINGS_Save();
 
-     log_event_data(LOG_SETTING_SAVE, "Администратор (SNMP)");
 
-     SNMP_SetObjDescr();
 
- }
 
- /**
 
-   * @brief  Установить SNMP Community для чтения
 
-   */
 
- void SNMP_SetReadCommunity(char *comm)
 
- {
 
-     //strcpy(sSettings.sSnmp.readCommunity, comm);
 
-     snmp_set_community(comm);
 
- }
 
- /**
 
-   * @brief  Установить SNMP Community для записи
 
-   */
 
- void SNMP_SetWriteCommunity(char *comm)
 
- {
 
-     //strcpy(sSettings.sSnmp.writeCommunity, comm);
 
-     snmp_set_community_write(comm);
 
- }
 
- /**
 
-   * @brief  Установить SNMP SysContact
 
-   * @retval
 
-   */
 
- void SNMP_SetSysContact(SNMP_SYS_CONTACT_t *con)
 
- {
 
-     snmp_mib2_set_syscontact((u8_t *)con->contact, &con->len, (sizeof(con->contact) - 1));
 
- }
 
- /**
 
-   * @brief  Установить SNMP SysName
 
-   * @retval
 
-   */
 
- void SNMP_SetSysName(SNMP_SYS_NAME_t *name)
 
- {
 
-     snmp_mib2_set_sysname((u8_t *)name->name, &name->len, (sizeof(name->name) - 1));
 
- }
 
- /**
 
-   * @brief  Установить SNMP SysLocation
 
-   * @retval
 
-   */
 
- void SNMP_SetSysLocation(SNMP_SYS_LOCATION_t *loc)
 
- {
 
-     snmp_mib2_set_syslocation((u8_t *)loc->location, &loc->len, (sizeof(loc->location) - 1));
 
- }
 
- /**
 
-   * @brief  Установить SNMP SysManagerIP
 
-   * @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);
 
- }
 
- /**
 
-   * @brief  Установить SNMP Object ID
 
-   * @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}};
 
- #elif HARDWARE_BT6707
 
-     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}};
 
- #endif
 
-     snmp_set_device_enterprise_oid(&my_object_id);
 
- }
 
- /**
 
-   * @brief  Вкл/выкл трапы
 
-   * @retval
 
-   */
 
- void SNMP_SetTrapOnOff(uint8_t state)
 
- {
 
-     //snmp_trap_dst_enable(0, (u8_t)state);
 
-     snmp_trap_pduv2_dst_enable(0, (u8_t)state);
 
- }
 
- /********************************* (C) ROTEK **********************************/
 
 
  |