alarm.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #ifndef ALARM_H
  2. #define ALARM_H
  3. /**
  4. * @file alarm.h
  5. * @brief 报警管理头文件
  6. *
  7. * 本文件定义报警事件的接收、处理、转发等功能接口。
  8. */
  9. #include "common.h"
  10. #include "config.h"
  11. /* 报警类型 */
  12. typedef enum {
  13. ALARM_TYPE_MOVEMENT = 0, /* 移动侦测 */
  14. ALARM_TYPE_VI_DETECTION, /* 视频丢失 */
  15. ALARM_TYPE_VI_MASK, /* 视频遮挡 */
  16. ALARM_TYPE_NETWORK_ABNORMAL, /* 网络异常 */
  17. ALARM_TYPE_DISK_ERROR, /* 硬盘错误 */
  18. ALARM_TYPE_IP_CONFLICT, /* IP冲突 */
  19. ALARM_TYPE_STORAGE_EXCEPTION, /* 存储异常 */
  20. ALARM_TYPE_IO_EXCEPTION, /* IO异常 */
  21. ALARM_TYPE_SIZE_OVERFLOW, /* 容量超限 */
  22. ALARM_TYPE_DARKNESS, /* 场景变更 */
  23. ALARM_TYPE_LINE_DETECTION, /* 越界检测 */
  24. ALARM_TYPE_AREA_DETECTION, /* 区域检测 */
  25. ALARM_TYPE_TAMPERING, /* tampering检测 */
  26. ALARM_TYPE_AUDIO_EXCEPTION, /* 音频异常 */
  27. ALARM_TYPE_THERMAL, /* 热成像报警 */
  28. ALARM_TYPE_CUSTOM_START = 1000, /* 自定义报警类型起始 */
  29. } AlarmType;
  30. /* 报警级别 */
  31. typedef enum {
  32. ALARM_LEVEL_LOW = 0, /* 低级 */
  33. ALARM_LEVEL_MEDIUM, /* 中级 */
  34. ALARM_LEVEL_HIGH, /* 高级 */
  35. ALARM_LEVEL_CRITICAL /* 严重 */
  36. } AlarmLevel;
  37. /* 报警信息结构 */
  38. typedef struct {
  39. char device_id[MAX_DEVICE_ID]; /* 设备ID */
  40. int channel; /* 通道号 */
  41. AlarmType type; /* 报警类型 */
  42. AlarmLevel level; /* 报警级别 */
  43. char description[256]; /* 报警描述 */
  44. char snapshot_path[MAX_PATH_SIZE];/* 快照路径 */
  45. time_t alarm_time; /* 报警时间 */
  46. int alarm_id; /* 报警ID */
  47. int duration; /* 持续时间(秒) */
  48. int is_acknowledged; /* 是否已确认 */
  49. void* raw_data; /* 原始报警数据 */
  50. int raw_data_size; /* 原始数据大小 */
  51. } AlarmInfo;
  52. /* 报警回调函数类型 */
  53. /*
  54. * void (*AlarmDataCB)(AlarmInfo* alarm, void* user_data)
  55. *
  56. * alarm: 报警信息结构指针
  57. * user_data: 用户自定义数据
  58. */
  59. typedef void (*AlarmDataCB)(AlarmInfo* alarm, void* user_data);
  60. /* 报警处理回调 */
  61. typedef void (*AlarmProcessCB)(AlarmInfo* alarm, void* user_data);
  62. /**
  63. * @brief 初始化报警模块
  64. * @return 成功返回SUCCESS, 失败返回FAILURE
  65. *
  66. * 说明: 初始化报警监听服务,注册报警回调函数。
  67. * 对应NET_EALARM_StartListen功能。
  68. */
  69. int alarm_init(void);
  70. /**
  71. * @brief 反初始化报警模块
  72. *
  73. * 说明: 停止报警监听,释放资源。
  74. */
  75. void alarm_cleanup(void);
  76. /**
  77. * @brief 启动报警监听
  78. * @param listen_ip 监听IP地址
  79. * @param listen_port 监听端口
  80. * @param alarm_cb 报警数据回调函数
  81. * @param process_cb 报警处理回调函数
  82. * @param user_data 用户自定义数据
  83. * @return 成功返回SUCCESS, 失败返回FAILURE
  84. *
  85. * 说明: 启动报警监听服务,开始接收设备上报的报警事件。
  86. * 对应NET_EALARM_StartListen功能。
  87. *
  88. * 回调函数说明:
  89. * - alarm_cb: 接收到原始报警数据时调用
  90. * - process_cb: 报警数据处理完成后调用(可在业务线程中处理)
  91. */
  92. int alarm_start_listen(const char* listen_ip, short listen_port,
  93. AlarmDataCB alarm_cb, AlarmProcessCB process_cb,
  94. void* user_data);
  95. /**
  96. * @brief 停止报警监听
  97. *
  98. * 说明: 停止接收报警事件。
  99. */
  100. void alarm_stop_listen(void);
  101. /**
  102. * @brief 发送报警确认
  103. * @param alarm_id 报警ID
  104. * @param device_id 设备ID
  105. * @return 成功返回SUCCESS, 失败返回FAILURE
  106. */
  107. int alarm_acknowledge(int alarm_id, const char* device_id);
  108. /**
  109. * @brief 获取未确认报警列表
  110. * @param alarms 输出报警信息数组
  111. * @param max_alarms 最大报警数
  112. * @return 返回未确认报警数量
  113. */
  114. int alarm_get_unacknowledged(AlarmInfo alarms[], int max_alarms);
  115. /**
  116. * @brief 清除已确认的报警
  117. * @return 成功返回SUCCESS, 失败返回FAILURE
  118. */
  119. int alarm_clear_acknowledged(void);
  120. /**
  121. * @brief 注册报警类型过滤器
  122. * @param types 要监听的报警类型数组
  123. * @param count 类型数量
  124. */
  125. void alarm_register_filter(const AlarmType types[], int count);
  126. /**
  127. * @brief 获取报警统计信息
  128. * @param total 输出总报警数
  129. * @param unack 输出未确认数
  130. * @param today 输出今日报警数
  131. */
  132. void alarm_get_stats(int* total, int* unack, int* today);
  133. #endif /* ALARM_H */