/********************************* (C) РОТЕК ***********************************
 * @module  trap_api
 * @file    trap_api.h
 * @version 1.0.0
 * @date    XX.XX.XXXX
 * $brief   trap_api
 *******************************************************************************
 * @history     Version  Author         Comment
 * XX.XX.XXXX   1.0.0    Telenkov D.A.  First release.
 *******************************************************************************
 */

/* Define to prevent recursive  ----------------------------------------------*/
#ifndef TRAP_API_H
#define TRAP_API_H

#include <stdbool.h>

typedef enum
{
  SIMPLE_TRAP = 0,
  VARBIND_TRAP,
  
} TRAP_TYPE_t;

typedef enum
{
  FW_VERSION_UPDATE = 1,
  FW_VERSION_UPDATED,
  DEVICE_RESTORED,
  DEVICE_REBOOTED,
  DI0_NORM,
  DI0_ALARM,
  DO0_TOGGLED,
  DO1_TOGGLED,
  BATTERY_TEMPERATURE_NORM,
  BATTERY_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,
} TRAP_LIST_t;

/**
  * @brief  
  */
typedef struct
{
  TRAP_LIST_t listName;
  uint8_t  trapId;     // ID в ветке traps
  uint8_t  varbindId;  // ID присоединенной переменной 
  bool     trapEnable; // false - отправка трапа не разрешена, true - отправка разрешена
  void     (*handle)(char*, uint8_t*); 
  
} TRAP_t;

/**
  * @brief  Отправка обычного трапа с сообщением, зарегистрированного в базе.
  */
bool SNMP_SendMessageTrap(TRAP_t trap, char* msg, uint8_t len);

/**
  * @brief  Отправка трапа с переменной, зарегистрированного в базе.
  * @retval 
  */
bool SNMP_SendVarbindTrap(TRAP_t *trap);

/**
  * @brief  Инициализация базы трапов
  */
void SNMP_InitTrapsBase(void);

/**
  * @brief  Отправка трапа, зарегистрированного в базе
  */
bool SNMP_SendTrap(TRAP_t trap);


#endif /* #ifndef TRAP_API_H */

/********************************* (C) РОТЕК **********************************/
