Commit 38c60906 authored by captainwong's avatar captainwong

releasing

parent 2eb71ce1
# Ademco Change Log
## 3.2.2 2024-8-7 15:10:37
- 解析形为 [#861234567890|3400 00 000] 之类的以账号为安定宝ID的data段,解析结果为安定宝ID为0
## 3.2.1 2024-8-7 14:29:35
- 修复安定宝协议data段 #acct 生成错误的bug
## 3.2.0 2024-8-4 22:16:32
- 全面支持 C51/gcc-avr/msvc/gcc 等编译器
## 3.1.0 2024-7-11 02:24:14
## 3.0.0 2024-7-1 06:19:01
- 可在 windows/linux/c51/avr 环境下编译
## 2.7.3 2024-6-28 19:32:18
- change `XX` sequence
## 2.7.2 2024-6-25 10:18:16
## 2.7.1 2024-6-4 16:34:48
## 2.7.0 2024-6-4 15:24:15
- shrink `ademco_packet_t` size
......
This diff is collapsed.
This diff is collapsed.
......@@ -15,7 +15,7 @@
#define ADEMCO_EXPORT_SYMBOL
#endif // ADEMCO_EXPORTS
#endif // ADEMCO_EXPORTS
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
typedef uint8_t ademco_char_t;
......@@ -40,6 +40,14 @@ typedef char ademco_char_t;
#define ADEMCO_ENABLE_PARSE_ERROR 1
#endif
#ifndef UNUSED
#ifdef __C51__
#define UNUSED(x) ((x) = (x))
#else
#define UNUSED(x) ((void)(x))
#endif // __C51__
#endif // UNUSED
#if ADEMCO_ENABLE_PARSE_ERROR
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_) \
do { \
......@@ -51,25 +59,125 @@ typedef char ademco_char_t;
} \
} while (0);
#else
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_)
#endif // ADEMCO_ENABLE_PARSE_ERROR
#ifdef ADEMCO_USE_CUSTOM_TIME_T
extern time_t ademco_get_time_t(time_t* t);
#endif // ADEMCO_USE_CUSTOM_TIME_T
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_) \
do { \
UNUSED(err); \
} while (0)
#endif // ADEMCO_ENABLE_PARSE_ERROR
// armclang v6 `gmtime` always return NULL
#ifndef ADEMCO_DISABLE_GMTIME
#ifdef __ARMCC_VERSION
#define ADEMCO_DISABLE_GMTIME 1
#else // __ARMCC_VERSION
#define ADEMCO_DISABLE_GMTIME 0
#endif
#endif // __ARMCC_VERSION
#endif // ADEMCO_DISABLE_GMTIME
// embedded system may not have enough stack space
// declare these macros to use static/unique buffer for parse/make functions
#ifndef ADEMCO_USE_STATIC_BUF
#define ADEMCO_USE_STATIC_BUF 0
#endif
#ifndef ADEMCO_USE_UNIQUE_BUF
#define ADEMCO_USE_UNIQUE_BUF 0
#endif
// under C51, we need to use xdata for buffer
#if defined(__C51__) && !defined(ADEMCO_BUF_MEMORY_MODIFIER)
#define ADEMCO_BUF_MEMORY_MODIFIER xdata
#else
#define ADEMCO_BUF_MEMORY_MODIFIER
#endif
// under C51, we may need to use code for const data
#if defined(__C51__) && !defined(ADEMCO_CONST_MODIFIER)
#define ADEMCO_CONST_MODIFIER code
#else
#define ADEMCO_CONST_MODIFIER
#endif
// make this lib can be used in C51
#ifdef __C51__
#define INTERRUPT(n) interrupt n
#define USING(n) using n
#define declare_sbit(pin, name) sbit name = pin
#ifdef VSCODE
// make vscode happy
// in the .vscode/c_cpp_properties.json, add "defines": ["VSCODE"]
// to suppress the warning
#define data
#define xdata
#define bdata
#define idata
#define pdata
#define code
#define small
#define sfr unsigned char
#define sbit unsigned char
#define bit unsigned char
#define reentrant
#define INTERRUPT(n)
#define USING(n)
#define declare_sbit(pin, name) sbit name = 0
#endif // VSCODE
#endif
// Keil C51 and ICCAVR do not have stdint.h, time.h, stdbool.h, that's all we need
#if defined(__C51__) || defined(_AVR)
// stdint
#include "ademco_stdint.h"
// bool
#ifndef __bool_true_false_are_defined
#ifdef __C51__ // C51 can use bit as bool
typedef bit bool;
#else // AVR can use unsigned char as bool
typedef unsigned char bool;
#endif
#define true 1
#define false 0
#define __bool_true_false_are_defined
#endif // __bool_true_false_are_defined
// NULL
#ifndef NULL
#define NULL ((void*)0)
#endif
// we need our own implementation of time.h
#define ADMECO_ENABLE_CUSTOM_TIME
#include "ademco_time.h"
#else // suppose we are in a normal environment, and these headers are available
// gcc-avr has these headers
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <time.h>
#endif // __C51__ || _AVR
// C51 doesn't have the with `n` version functions in stdio.h
#if defined(__C51__) && defined(ADEMCO_ENABLE_STDIO)
#define ADEMCO_ENABLE_CUSTOM_STDIO
#include "ademco_stdio.h"
#endif // defined(__C51__) && defined(ADEMCO_ENABLE_STDIO)
// CRC16 table maybe too big for embedded system, user can use external CRC16 function,
// like read it from e2prom or flash to save code space.
// to enable this featuer, define `ADEMCO_USE_EXTERNAL_CRC16`, and implement `ademco_crc16` function.
#ifdef ADEMCO_USE_EXTERNAL_CRC16
#ifdef __cplusplus
extern "C" {
#endif
uint16_t ademco_crc16(const ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* buf, size_t len);
#ifdef __cplusplus
}
#endif
#endif // ADEMCO_USE_EXTERNAL_CRC16
#endif // __ADEMCO_CONFIG_H__
......@@ -6,9 +6,9 @@
* evolve between minor releases, but only in a backwards compatible way.
*/
#define ADEMCO_VERSION_MAJOR 2
#define ADEMCO_VERSION_MINOR 7
#define ADEMCO_VERSION_PATCH 0
#define ADEMCO_VERSION_MAJOR 3
#define ADEMCO_VERSION_MINOR 2
#define ADEMCO_VERSION_PATCH 2
#define ADEMCO_VERSION_IS_RELEASE 1
#define ADEMCO_VERSION_SUFFIX ""
......
......@@ -23,32 +23,32 @@ const char* print_bool(bool b) {
}
ademco_event_t statusEvents[] = {
#define XX(name, code, zh) EVENT_##name,
#define XX(code, name, zh) EVENT_##name,
ADEMCO_STATUS_EVENTS_MAP(XX)
#undef XX
};
ademco_event_t alarmEvents[] = {
#define XX(name, code, zh) EVENT_##name,
#define XX(code, name, zh) EVENT_##name,
ADEMCO_ALARM_EVENTS_MAP(XX)
#undef XX
};
ademco_event_t excepEvents[] = {
#define XX(name, code, zh) EVENT_##name,
#define XX(code, name, zh) EVENT_##name,
ADEMCO_EXEPTION_EVENTS_MAP(XX)
ADEMCO_EXEPTION_RECOVER_EVENTS_MAP(XX)
#undef XX
};
ademco_event_t privateEvents[] = {
#define XX(name, code, zh) EVENT_##name,
#define XX(code, name, zh) EVENT_##name,
ADEMCO_HB_EVENTS_MAP(XX)
#undef XX
};
ademco_event_t allEvents[] = {
#define XX(name, code, zh) EVENT_##name,
#define XX(code, name, zh) EVENT_##name,
ADEMCO_STATUS_EVENTS_MAP(XX)
ADEMCO_ALARM_EVENTS_MAP(XX)
ADEMCO_ALARM_RECOVER_EVENTS_MAP(XX)
......@@ -59,7 +59,7 @@ ademco_event_t allEvents[] = {
};
hb_zone_property_t allZoneProperties[] = {
#define XX(name, value, str) HZP_##name,
#define XX(value, name, str) HZP_##name,
HB_ZONE_PROPERTY_MAP(XX)
#undef XX
};
......@@ -391,7 +391,7 @@ void gen_sources() {
printf("%s\n", comment);
printf("|zone|name|source|\n");
printf("|----|----|------|\n");
#define XX(name, code, zh) \
#define XX(code, name, zh) \
printf("|%d|%s|%s|\n", code, #name, zh);
ADEMCO_CONTROL_SOURCES_MAP(XX)
#undef XX
......
......@@ -111,6 +111,7 @@ end:
void on_tcp_connection(uv_tcpserver_client_context_t* client, int connected) {
if (connected) {
machine_info_t* machine = malloc(sizeof(machine_info_t));
fatal_if_null(machine);
memset(machine->acct, '\0', sizeof(machine->acct));
machine->ademco_id = 0;
machine->type = HMT_INVALID;
......
#ifndef __HB_CONFIG_H__
#define __HB_CONFIG_H__
#include "ademco_config.h"
#ifdef HB_EXPORTS
#if defined __GNUC__
......@@ -38,4 +40,8 @@
#define HB_ENABLE_CHINESE 0
#endif // HB_ENABLE_TO_STRING
#endif
#ifndef HB_ENABLE_TIMER_ARM_STAY
#define HB_ENABLE_TIMER_ARM_STAY 1
#endif // HB_ENABLE_TIMER_ARM_STAY
#endif // __HB_CONFIG_H__
This diff is collapsed.
#ifndef __HB_CORE_H__
#define __HB_CORE_H__
#include <stdint.h>
#include "hb_config.h"
#ifdef __cplusplus
......@@ -20,10 +18,10 @@ extern "C" {
// 主机状态表
#define HB_MACHINE_STATUS_MAP(XX) \
XX(ARM_AWAY, 0, "离家布防") \
XX(ARM_STAY, 1, "留守布防") \
XX(DISARM, 2, "撤防") \
XX(SETTING, 3, "设置")
XX(0, ARM_AWAY, "ARM_AWAY") \
XX(1, ARM_STAY, "ARM_STAY") \
XX(2, DISARM, "DISARM") \
XX(3, SETTING, "SETTING")
// 主机状态与安定宝事件码对照表
#define HMS_EVENT_MAP(XX) \
......@@ -34,7 +32,7 @@ extern "C" {
// 主机状态
typedef enum hb_machine_status_t {
#define XX(name, value, str) HMS_##name = value,
#define XX(value, name, str) HMS_##name = value,
HB_MACHINE_STATUS_MAP(XX)
#undef XX
// valid count
......@@ -45,38 +43,23 @@ typedef enum hb_machine_status_t {
// 主机类型表
#define HB_MACHINE_TYPE_MAP(XX) \
XX(WIFI, 0, "WiFi主机") \
XX(CAMERA, 1, "网络摄像机") \
XX(GPRS_IOT, 2, "简化物联卡主机") \
XX(NETMOD, 3, "网络模块主机") \
XX(GPRS, 4, "GPRS主机") \
XX(LCD, 5, "液晶主机") \
XX(WIRED, 6, "网线主机") \
XX(TRUE_COLOR, 7, "真彩主机") \
XX(THREE_SECTION, 8, "三区段主机") \
XX(IOT, 9, "物联卡主机") \
XX(GPRS_PHONE, 10, "GPRS主机可电话") \
XX(NB, 11, "NB报警接收主机") \
XX(WIFI2, 12, "WiFi主机新版")
// 主机类型与安定宝事件码对照表
#define HMT_EVENT_MAP(XX) \
XX(HMT_WIFI, EVENT_I_AM_WIFI) \
XX(HMT_GPRS_IOT, EVENT_I_AM_GPRS_IOT) \
XX(HMT_NETMOD, EVENT_I_AM_NET_MODULE) \
XX(HMT_GPRS, EVENT_I_AM_GPRS) \
XX(HMT_LCD, EVENT_I_AM_LCD) \
XX(HMT_WIRED, EVENT_I_AM_WIRE) \
XX(HMT_TRUE_COLOR, EVENT_I_AM_TRUE_COLOR) \
XX(HMT_THREE_SECTION, EVENT_I_AM_3_SECTION) \
XX(HMT_IOT, EVENT_I_AM_IOT) \
XX(HMT_GPRS_PHONE, EVENT_I_AM_GPRS_PHONE) \
XX(HMT_NB, EVENT_I_AM_NB) \
XX(HMT_WIFI2, EVENT_I_AM_WIFI2)
XX(0, WIFI, "WiFi主机") \
XX(1, CAMERA, "摄像头主机") \
XX(2, GPRS_IOT, "简化物联卡主机") \
XX(3, NETMOD, "网络模块主机") \
XX(4, GPRS, "GPRS主机") \
XX(5, LCD, "液晶主机") \
XX(6, WIRED, "网线主机") \
XX(7, TRUE_COLOR, "真彩主机") \
XX(8, THREE_SECTION, "三区段主机") \
XX(9, IOT, "物联卡主机") \
XX(10, GPRS_PHONE, "GPRS主机可电话") \
XX(11, NB, "NB报警接收主机") \
XX(12, WIFI2, "WiFi主机新版")
// 主机类型
typedef enum hb_machine_type_t {
#define XX(name, value, str) HMT_##name = value,
#define XX(value, name, str) HMT_##name = value,
HB_MACHINE_TYPE_MAP(XX)
#undef XX
// valid count
......@@ -86,28 +69,28 @@ typedef enum hb_machine_type_t {
} hb_machine_type_t;
// 防区属性表
// 2024年8月2日21:37:14 删除 0x0F 旁路防区,修改 9 屏蔽防区为旁路防区:旁路即屏蔽
#define HB_ZONE_PROPERTY_MAP(XX) \
XX(BURGLAR, 0, "匪警全局") \
XX(EMERGENCY, 1, "匪警紧急") \
XX(FIRE, 2, "火警防区") \
XX(DURESS, 3, "胁迫防区") \
XX(GAS, 4, "燃气防区") \
XX(WATER, 5, "淹水防区") \
XX(SUB_MACHINE, 6, "分机") \
XX(REMOTE_CONTROL, 7, "遥控器") \
XX(BURGLAR_HALF, 8, "匪警半局") \
XX(SHIELD, 9, "屏蔽防区") \
XX(DOOR_RING, 0x0A, "门铃防区") \
XX(BYPASS, 0x0F, "旁路防区")
XX(0, BURGLAR, "匪警全局") \
XX(1, EMERGENCY, "匪警紧急") \
XX(2, FIRE, "火警防区") \
XX(3, DURESS, "胁迫防区") \
XX(4, GAS, "燃气防区") \
XX(5, WATER, "淹水防区") \
XX(6, SUB_MACHINE, "分机") \
XX(7, REMOTE_CONTROL, "遥控器") \
XX(8, BURGLAR_HALF, "匪警半局") \
XX(9, BYPASS, "旁路防区") \
XX(10, DOOR_RING, "门铃防区")
// 防区属性
typedef enum hb_zone_property_t {
#define XX(name, value, str) HZP_##name = value,
#define XX(value, name, str) HZP_##name = value,
HB_ZONE_PROPERTY_MAP(XX)
#undef XX
// valid count
HZP_COUNT = 12,
HZP_COUNT = 11,
// invalid
HZP_INVALID = 0xFF,
} hb_zone_property_t;
......@@ -124,66 +107,75 @@ typedef struct {
} hb_machine_time_point_t;
typedef struct {
#if HB_ENABLE_TIMER_ARM_STAY
uint8_t arm_what; // 0: arm away, 1: arm stay
#define HB_TIMER_ARM_WHAT_ARM_AWAY 0
#define HB_TIMER_ARM_WHAT_ARM_STAY 1
#endif
hb_machine_time_point_t arm_at;
hb_machine_time_point_t disarm_at;
} hb_machine_timer_one_t;
typedef union {
hb_machine_timer_one_t timer[2]; // 2 set of timer
uint8_t dat[8];
uint8_t dat[sizeof(hb_machine_timer_one_t) * 2];
} hb_machine_timer_t;
///////////////////////////// property functions //////////////////////////////
// return available count
// props must have at least HZP_COUNT items
// props must have at least HZP_COUNT slots
HB_EXPORT_SYMBOL
uint8_t hb_get_available_zone_properties_by_type(hb_machine_type_t type,
hb_zone_property_t props[HZP_COUNT]);
// 根据主机类型判断是否支持该属性
HB_EXPORT_SYMBOL
bool hb_machine_supports_zone_property(hb_machine_type_t type, hb_zone_property_t prop);
// 最大防区号根据型号不同而不同
HB_EXPORT_SYMBOL
uint16_t hb_get_max_zone_by_type(hb_machine_type_t type);
// 防区号是否合法(可以包含0防区)
HB_EXPORT_SYMBOL
uint8_t hb_is_valid_zone_by_type(hb_machine_type_t type, uint16_t zone);
bool hb_is_valid_zone_by_type(hb_machine_type_t type, uint16_t zone);
// 防区号是否合法(不可以可以包含0防区)
HB_EXPORT_SYMBOL
uint8_t hb_is_valid_zone_by_type_strict(hb_machine_type_t type, uint16_t zone);
bool hb_is_valid_zone_by_type_strict(hb_machine_type_t type, uint16_t zone);
// 主机是否已投产使用
HB_EXPORT_SYMBOL
uint8_t hb_is_machine_on_sale(hb_machine_type_t type);
bool hb_is_machine_on_sale(hb_machine_type_t type);
// 主机是否具有离家布防功能
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_arm_away(hb_machine_type_t type);
bool hb_machine_can_arm_away(hb_machine_type_t type);
// 主机是否具有撤防功能
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_disarm(hb_machine_type_t type);
bool hb_machine_can_disarm(hb_machine_type_t type);
// 主机是否可以进入设置状态
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_config(hb_machine_type_t type);
bool hb_machine_can_config(hb_machine_type_t type);
// 主机是否具有留守布防功能
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_arm_stay(hb_machine_type_t type);
bool hb_machine_can_arm_stay(hb_machine_type_t type);
// 主机是否可以报告信号强度
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_report_signal_strength(hb_machine_type_t type);
bool hb_machine_can_report_signal_strength(hb_machine_type_t type);
// 主机本身是否可以短信报警(不算通过服务如阿里语音等)
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_report_by_sms(hb_machine_type_t type);
bool hb_machine_can_report_by_sms(hb_machine_type_t type);
// 主机是否支持有线防区
HB_EXPORT_SYMBOL
uint8_t hb_machine_has_wired_zones(hb_machine_type_t type);
bool hb_machine_has_wired_zones(hb_machine_type_t type);
// 主机最小有线防区号
HB_EXPORT_SYMBOL
......@@ -195,16 +187,16 @@ uint16_t hb_wired_zone_max(hb_machine_type_t type);
// 主机是否可以直接写入防区数据(无需对码)
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_write_zone(hb_machine_type_t type);
bool hb_machine_can_write_zone(hb_machine_type_t type);
// 主机是否可以挂载分机
HB_EXPORT_SYMBOL
uint8_t hb_machine_can_link_sub_machine(hb_machine_type_t type);
bool hb_machine_can_link_sub_machine(hb_machine_type_t type);
// 根据防区属性判断是否支持失联报告
// 失联报告是主机侧实现的跟防区属性没关系,但是人为限制了只有以下属性的才可以设置
HB_EXPORT_SYMBOL
uint8_t hb_zone_can_report_lost(hb_zone_property_t zp);
bool hb_zone_can_report_lost(hb_zone_property_t zp);
///////////////////////////// timer functions /////////////////////////////////
......@@ -215,19 +207,20 @@ HB_EXPORT_SYMBOL
void hb_machine_timer_init(hb_machine_timer_t* timer);
HB_EXPORT_SYMBOL
uint8_t hb_is_valid_time_point(hb_machine_time_point_t* tp);
uint8_t hb_is_valid_time_point(const hb_machine_time_point_t* tp);
HB_EXPORT_SYMBOL
uint8_t hb_time_point_equal(hb_machine_time_point_t* tp1, hb_machine_time_point_t* tp2);
uint8_t hb_time_point_equal(const hb_machine_time_point_t* tp1, const hb_machine_time_point_t* tp2);
HB_EXPORT_SYMBOL
uint8_t hb_is_valid_timer_one(hb_machine_timer_one_t* timer);
uint8_t hb_is_valid_timer_one(const hb_machine_timer_one_t* timer);
HB_EXPORT_SYMBOL
uint8_t hb_is_valid_machine_timer(hb_machine_timer_t* timer);
uint8_t hb_is_valid_machine_timer(const hb_machine_timer_t* timer);
///////////////////////////// helper functions ////////////////////////////////
#if HB_ENABLE_TO_STRING
HB_EXPORT_SYMBOL
const char* hb_machine_status_to_string(hb_machine_status_t status);
......@@ -250,6 +243,7 @@ const char* hb_zone_property_to_string_chinese(hb_zone_property_t zp);
HB_EXPORT_SYMBOL
const char* hb_get_zone_format_str(hb_machine_type_t type);
#endif // HB_ENABLE_TO_STRING
#ifdef __cplusplus
}
......
......@@ -99,8 +99,8 @@ ademco_event_t hb_rf_code_to_ademco_event(uint8_t rf_code) {
case HB_RF_CODE_S_BATTERY_LOW:
case HB_RF_CODE_R_BATTERY_LOW:
return EVENT_LOW_BATTERY;
case HB_RF_CODE_S_BATTERY_BROKE:
case HB_RF_CODE_R_BATTERY_BROKE:
case HB_RF_CODE_S_BATTERY_BROKEN:
case HB_RF_CODE_R_BATTERY_BROKEN:
return EVENT_BAD_BATTERY;
case HB_RF_CODE_BATTERY_RECOVER:
return EVENT_LOW_BATTERY_RECOVER;
......@@ -122,8 +122,8 @@ ademco_event_t hb_rf_code_to_ademco_event(uint8_t rf_code) {
return EVENT_SUB_MACHINE_POWER_EXCEPTION;
case HB_RF_CODE_SM_POWER_RECOVER:
return EVENT_SUB_MACHINE_POWER_RECOVER;
case HB_RF_CODE_AC_BROKE:
return EVENT_AC_BROKE;
case HB_RF_CODE_AC_BROKEN:
return EVENT_AC_BROKEN;
case HB_RF_CODE_AC_RECOVER:
return EVENT_AC_RECOVER;
......
......@@ -9,6 +9,21 @@
extern "C" {
#endif
// 主机类型与安定宝事件码对照表
#define HMT_EVENT_MAP(XX) \
XX(HMT_WIFI, EVENT_I_AM_WIFI) \
XX(HMT_GPRS_IOT, EVENT_I_AM_GPRS_IOT) \
XX(HMT_NETMOD, EVENT_I_AM_NET_MODULE) \
XX(HMT_GPRS, EVENT_I_AM_GPRS) \
XX(HMT_LCD, EVENT_I_AM_LCD) \
XX(HMT_WIRED, EVENT_I_AM_WIRE) \
XX(HMT_TRUE_COLOR, EVENT_I_AM_TRUE_COLOR) \
XX(HMT_THREE_SECTION, EVENT_I_AM_3_SECTION) \
XX(HMT_IOT, EVENT_I_AM_IOT) \
XX(HMT_GPRS_PHONE, EVENT_I_AM_GPRS_PHONE) \
XX(HMT_NB, EVENT_I_AM_NB) \
XX(HMT_WIFI2, EVENT_I_AM_WIFI2)
// 防区属性与安定宝事件码对照表
#define HZP_EVENT_MAP(XX) \
XX(HZP_BURGLAR, EVENT_BURGLAR) \
......
#ifndef __HB_RF_H__
#define __HB_RF_H__
#include <stdint.h>
#include "hb_config.h"
#ifdef __cplusplus
extern "C" {
#endif
#define HB_INVALID_RF_ADDR 0xFFFF
#define hb_is_valid_rf_addr(addr) ((0 < (addr)) && ((addr) < 0xFFFF))
// 无线命令码
// Note: 工程主机删除所有探头会报 E0,其他都是探头无线码
#define HB_RF_CODE_MAP(XX) \
XX(0x00, BURGLAR, "报警") \
XX(0x01, ARM, "布防") \
......@@ -22,13 +25,13 @@ extern "C" {
XX(0x57, NIGHT, "夜间") \
XX(0x69, SENDER_REBOOT, "发送端重启") \
XX(0x75, DAY, "白天") \
XX(0xA5, R_BATTERY_BROKE, "收电池损坏") \
XX(0xA5, R_BATTERY_BROKEN, "收电池损坏") \
XX(0xA8, DOOR_RING, "门铃") \
XX(0xAB, S_BATTERY_LOW, "发低电") \
XX(0xAC, R_BATTERY_LOW, "收低电") \
XX(0xAD, BATTERY_RECOVER, "复电") \
XX(0xAE, S_BATTERY_BROKE, "发电池损坏") \
XX(0xB0, AC_BROKE, "AC掉电") \
XX(0xAE, S_BATTERY_BROKEN, "发电池损坏") \
XX(0xB0, AC_BROKEN, "AC掉电") \
XX(0xB1, AC_RECOVER, "AC恢复") \
XX(0xBA, TAMPER, "防拆") \
XX(0xBB, SLEEP, "电池电压小于3V,终端进入休眠") \
......@@ -42,6 +45,7 @@ extern "C" {
XX(0xCE, SM_EXCEPTION, "分机产生异常信息") \
XX(0xCF, SM_EXCEPT_RECOVER, "分机恢复异常信息") \
XX(0xDD, QUERY, "查询分机状态") \
XX(0xE0, DELETED_ALL_SENSOR, "已删除所有传感器") \
XX(0xED, SHUTDOWN, "关机")
// 无线命令码
......
......@@ -168,11 +168,11 @@ namespace CSharpDemo
replyAck(stream, pkt.seq, pkt.acct);
acct = pkt.acct;
ademco_id = pkt.dat.ademco_id;
if (libademco.ademco_is_machine_type_event(pkt.dat.ademco_event) != 0)
if (libademco.ademco_is_machine_type_event(pkt.dat.ademco_event))
{
type = libademco.hb_machine_type_from_ademco_event(pkt.dat.ademco_event);
}
if (libademco.ademco_is_machine_status_event(pkt.dat.ademco_event) != 0)
if (libademco.ademco_is_machine_status_event(pkt.dat.ademco_event))
{
status = libademco.hb_machine_status_from_ademco_event(pkt.dat.ademco_event);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment