Commit 4fce260a authored by captainwong's avatar captainwong

3.4.10

parent 6d2664fb
# Ademco Change Log # Ademco Change Log
## 3.4.10 2025-3-15 18:24:26
- `CFLAGS` add `-Wpedantic -Wextra -Werror -std=gnu99 -O2`
## 3.4.9 2025-3-8 10:22:48
- fix gcc warnings
- refactor hb zone properties
## 3.4.8 2024-12-27 14:27:42
- add event `1796 SYS_READY`, 主机在自己认为合适的时机发出,可以进行防区同步了
## 3.4.7 2024-12-26 14:05:02
- add `tm_from_str`, `time_from_str`
## 3.4.6 2024-12-19 15:33:56
## 3.4.5 2024-12-16 23:40:10
## 3.4.4 2024-12-6 16:08:40
- add `hb_rf_code 66` for heart beat
## 3.4.3 2024-12-2 16:50:15
- add `ringbuf_linear_readable`, `ringbuf_linear_addr`
## 3.4.2 2024-11-25 10:00:26
- add `ringbuf_skip`
- a few doc updates
## 3.4.1 2024-11-20 13:54:16
## 3.4.0 2024-11-19 17:06:48
## 3.3.1 2024-10-25 21:34:39
## 3.3.0 2024-10-25 15:24:31
## 3.2.3 2024-10-18 15:11:53
## 3.2.2 2024-8-7 15:10:37 ## 3.2.2 2024-8-7 15:10:37
- 解析形为 [#861234567890|3400 00 000] 之类的以账号为安定宝ID的data段,解析结果为安定宝ID为0 - 解析形为 [#861234567890|3400 00 000] 之类的以账号为安定宝ID的data段,解析结果为安定宝ID为0
......
...@@ -84,9 +84,9 @@ bool ademco_is_valid_account(const char* acct) { ...@@ -84,9 +84,9 @@ bool ademco_is_valid_account(const char* acct) {
size_t ADEMCO_BUF_MEMORY_MODIFIER len = 0; size_t ADEMCO_BUF_MEMORY_MODIFIER len = 0;
int ADEMCO_BUF_MEMORY_MODIFIER ishex = 0; int ADEMCO_BUF_MEMORY_MODIFIER ishex = 0;
while (*acct && len < ADEMCO_PACKET_ACCT_MAX_LEN) { while (*acct && len < ADEMCO_PACKET_ACCT_MAX_LEN) {
if (isdigit(*acct)) { if (isdigit((int)*acct)) {
len++; len++;
} else if (isxdigit(*acct) && len < ADEMCO_PACKET_ACCT_MAC_LEN) { } else if (isxdigit((int)*acct) && len < ADEMCO_PACKET_ACCT_MAC_LEN) {
len++; len++;
ishex = 1; ishex = 1;
} else { } else {
...@@ -101,7 +101,7 @@ bool ademco_is_valid_account(const char* acct) { ...@@ -101,7 +101,7 @@ bool ademco_is_valid_account(const char* acct) {
bool ademco_is_valid_password(const char* pwd) { bool ademco_is_valid_password(const char* pwd) {
size_t ADEMCO_BUF_MEMORY_MODIFIER len = 0; size_t ADEMCO_BUF_MEMORY_MODIFIER len = 0;
while (*pwd && len < ADEMCO_PACKET_PWD_MAX_LEN) { while (*pwd && len < ADEMCO_PACKET_PWD_MAX_LEN) {
if (isdigit(*pwd)) { if (isdigit((int)*pwd)) {
len++; len++;
} else { } else {
return false; return false;
...@@ -478,7 +478,7 @@ ademco_parse_result_t ademco_parse_data(const ademco_char_t* packet, size_t pack ...@@ -478,7 +478,7 @@ ademco_parse_result_t ademco_parse_data(const ademco_char_t* packet, size_t pack
if (ademco_data->ademco_id > ADEMCO_ID_SENTINEL) { if (ademco_data->ademco_id > ADEMCO_ID_SENTINEL) {
// ademco_id maybe acct like "861234567890" // ademco_id maybe acct like "861234567890"
ademco_data->ademco_id = ADEMCO_ID_INVALID; ademco_data->ademco_id = ADEMCO_ID_INVALID;
} }
p += acct_len; p += acct_len;
if (*p++ != '|') { if (*p++ != '|') {
...@@ -1426,7 +1426,7 @@ ademco_parse_result_t ademco_parse_packet(const ademco_char_t* buf, ...@@ -1426,7 +1426,7 @@ ademco_parse_result_t ademco_parse_packet(const ademco_char_t* buf,
// #acct // #acct
pacct = ++p; pacct = ++p;
while (p - pacct < ADEMCO_PACKET_ACCT_MAX_LEN && *p != '[') { while (p - pacct < ADEMCO_PACKET_ACCT_MAX_LEN && *p != '[') {
if (!isxdigit(*p)) { if (!isxdigit((int)*p)) {
ADEMCO_FILL_PARSE_ERROR(err, p - buf, "acct contains non-hex characters"); ADEMCO_FILL_PARSE_ERROR(err, p - buf, "acct contains non-hex characters");
*cb_commited += p - buf; *cb_commited += p - buf;
return ADEMCO_PARSE_RESULT_ERROR; return ADEMCO_PARSE_RESULT_ERROR;
...@@ -1629,10 +1629,10 @@ size_t ademco_hilo_array_to_hex_str(ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* st ...@@ -1629,10 +1629,10 @@ size_t ademco_hilo_array_to_hex_str(ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* st
size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
size_t len, size_t len,
const char ADEMCO_BUF_MEMORY_MODIFIER* str) { const char ADEMCO_BUF_MEMORY_MODIFIER* str) {
char ADEMCO_BUF_MEMORY_MODIFIER* p = (char ADEMCO_BUF_MEMORY_MODIFIER*)arr; uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = (uint8_t ADEMCO_BUF_MEMORY_MODIFIER*)arr;
size_t ADEMCO_BUF_MEMORY_MODIFIER i; size_t ADEMCO_BUF_MEMORY_MODIFIER i;
size_t ADEMCO_BUF_MEMORY_MODIFIER slen = str ? strlen(str) : 0; size_t ADEMCO_BUF_MEMORY_MODIFIER slen = str ? strlen(str) : 0;
char ADEMCO_BUF_MEMORY_MODIFIER hi, lo; uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi, lo;
if (slen > len * 2) if (slen > len * 2)
slen = len * 2; slen = len * 2;
for (i = 0; i < slen; i += 2) { for (i = 0; i < slen; i += 2) {
...@@ -1653,7 +1653,7 @@ size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, ...@@ -1653,7 +1653,7 @@ size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
} else } else
break; break;
} }
while ((char ADEMCO_BUF_MEMORY_MODIFIER*)arr + len > p) while (arr + len > p)
*p++ = 0xFF; *p++ = 0xFF;
return len; return len;
} }
...@@ -1661,10 +1661,10 @@ size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, ...@@ -1661,10 +1661,10 @@ size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
size_t ademco_hex_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, size_t ademco_hex_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
size_t len, size_t len,
const char ADEMCO_BUF_MEMORY_MODIFIER* str) { const char ADEMCO_BUF_MEMORY_MODIFIER* str) {
char ADEMCO_BUF_MEMORY_MODIFIER* p = (char ADEMCO_BUF_MEMORY_MODIFIER*)arr; uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = (uint8_t ADEMCO_BUF_MEMORY_MODIFIER*)arr;
size_t ADEMCO_BUF_MEMORY_MODIFIER i; size_t ADEMCO_BUF_MEMORY_MODIFIER i;
size_t ADEMCO_BUF_MEMORY_MODIFIER slen = str ? strlen(str) : 0; size_t ADEMCO_BUF_MEMORY_MODIFIER slen = str ? strlen(str) : 0;
char ADEMCO_BUF_MEMORY_MODIFIER hi, lo; uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi, lo;
if (slen > len * 2) if (slen > len * 2)
slen = len * 2; slen = len * 2;
for (i = 0; i < slen; i += 2) { for (i = 0; i < slen; i += 2) {
...@@ -1686,27 +1686,31 @@ size_t ademco_hex_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, ...@@ -1686,27 +1686,31 @@ size_t ademco_hex_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
break; break;
} }
} }
while ((char ADEMCO_BUF_MEMORY_MODIFIER*)arr + len > p) while (arr + len > p)
*p++ = 0xFF; *p++ = 0xFF;
return len; return len;
} }
size_t ademco_hex_array_to_str(char ADEMCO_BUF_MEMORY_MODIFIER* str, const uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, size_t len) { size_t ademco_hex_array_to_str(char ADEMCO_BUF_MEMORY_MODIFIER* str,
char ADEMCO_BUF_MEMORY_MODIFIER* p = str; const uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
size_t len) {
uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = (uint8_t*)str;
size_t ADEMCO_BUF_MEMORY_MODIFIER i; size_t ADEMCO_BUF_MEMORY_MODIFIER i;
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
*p++ = ademco_hex2char((arr[i] >> 4) & 0x0F); *p++ = ademco_hex2char((arr[i] >> 4) & 0x0F);
*p++ = ademco_hex2char(arr[i] & 0x0F); *p++ = ademco_hex2char(arr[i] & 0x0F);
} }
return p - str; return p - (uint8_t*)str;
} }
size_t ademco_hex_str_to_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, const char ADEMCO_BUF_MEMORY_MODIFIER* str, uint8_t padding) { size_t ademco_hex_str_to_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
const char ADEMCO_BUF_MEMORY_MODIFIER* str,
uint8_t padding) {
uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = arr; uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = arr;
uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi = 0, lo = 0; uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi = 0, lo = 0;
size_t ADEMCO_BUF_MEMORY_MODIFIER i; size_t ADEMCO_BUF_MEMORY_MODIFIER i;
size_t ADEMCO_BUF_MEMORY_MODIFIER slen = str ? strlen(str) : 0; size_t ADEMCO_BUF_MEMORY_MODIFIER slen = str ? strlen(str) : 0;
char ADEMCO_BUF_MEMORY_MODIFIER c; uint8_t ADEMCO_BUF_MEMORY_MODIFIER c;
padding &= 0x0F; padding &= 0x0F;
for (i = 0; i < slen / 2; i++) { for (i = 0; i < slen / 2; i++) {
c = str[i * 2]; c = str[i * 2];
...@@ -1729,7 +1733,7 @@ size_t ademco_hex_str_to_array_n(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, ...@@ -1729,7 +1733,7 @@ size_t ademco_hex_str_to_array_n(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = arr; uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = arr;
uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi = 0, lo = 0; uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi = 0, lo = 0;
size_t ADEMCO_BUF_MEMORY_MODIFIER i; size_t ADEMCO_BUF_MEMORY_MODIFIER i;
char ADEMCO_BUF_MEMORY_MODIFIER c; uint8_t ADEMCO_BUF_MEMORY_MODIFIER c;
padding &= 0x0F; padding &= 0x0F;
for (i = 0; i < len / 2; i++) { for (i = 0; i < len / 2; i++) {
c = str[i * 2]; c = str[i * 2];
...@@ -1753,7 +1757,7 @@ size_t ademco_hex_str_to_array_n_allow_non_hex_str(uint8_t ADEMCO_BUF_MEMORY_MOD ...@@ -1753,7 +1757,7 @@ size_t ademco_hex_str_to_array_n_allow_non_hex_str(uint8_t ADEMCO_BUF_MEMORY_MOD
uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = arr; uint8_t ADEMCO_BUF_MEMORY_MODIFIER* p = arr;
uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi = 0, lo = 0; uint8_t ADEMCO_BUF_MEMORY_MODIFIER hi = 0, lo = 0;
size_t ADEMCO_BUF_MEMORY_MODIFIER i; size_t ADEMCO_BUF_MEMORY_MODIFIER i;
char ADEMCO_BUF_MEMORY_MODIFIER c; uint8_t ADEMCO_BUF_MEMORY_MODIFIER c;
padding &= 0x0F; padding &= 0x0F;
for (i = 0; i < len / 2; i++) { for (i = 0; i < len / 2; i++) {
c = str[i * 2]; c = str[i * 2];
......
...@@ -154,6 +154,7 @@ typedef uint16_t ademco_zone_t; ...@@ -154,6 +154,7 @@ typedef uint16_t ademco_zone_t;
XX(1756, SIM_IS_IOT_CARD, "物联卡") \ XX(1756, SIM_IS_IOT_CARD, "物联卡") \
XX(2756, SIM_IS_IOT_PLATFORM_CARD, "平台物联卡") \ XX(2756, SIM_IS_IOT_PLATFORM_CARD, "平台物联卡") \
XX(3756, SIM_IS_NOT_IOT_CARD, "非物联卡") \ XX(3756, SIM_IS_NOT_IOT_CARD, "非物联卡") \
XX(1796, SYS_READY, "主机稳定") \
XX(1798, WHAT_IS_YOUR_TYPE, "索要主机类型") \ XX(1798, WHAT_IS_YOUR_TYPE, "索要主机类型") \
XX(1799, SIGNAL_STRENGTH_CHANGED, "信号强度") \ XX(1799, SIGNAL_STRENGTH_CHANGED, "信号强度") \
XX(1944, OFFLINE, "主机断线") \ XX(1944, OFFLINE, "主机断线") \
...@@ -612,10 +613,10 @@ ADEMCO_EXPORT_SYMBOL ...@@ -612,10 +613,10 @@ ADEMCO_EXPORT_SYMBOL
uint16_t ademco_crc16(const ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* buf, size_t len); uint16_t ademco_crc16(const ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* buf, size_t len);
#endif #endif
// 0~9, A~F to '0'~'9', 'A'~'F' // 0-9, A-F to '0'-'9', 'A'-'F'
ADEMCO_EXPORT_SYMBOL uint8_t ademco_hex2char(uint8_t h); ADEMCO_EXPORT_SYMBOL uint8_t ademco_hex2char(uint8_t h);
// '0'~'9', 'A'~'F', 'a'~'f' to 0~9, A~F // '0'-'9', 'A'-'F', 'a'-'f' to 0-9, A-F
ADEMCO_EXPORT_SYMBOL uint8_t ademco_char2hex(uint8_t c); ADEMCO_EXPORT_SYMBOL uint8_t ademco_char2hex(uint8_t c);
// like snprintf(str, hex_len * 2 + 1, "%0`hex_len`X", dec) // like snprintf(str, hex_len * 2 + 1, "%0`hex_len`X", dec)
...@@ -636,7 +637,7 @@ size_t ademco_hilo_array_to_dec_str(ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* st ...@@ -636,7 +637,7 @@ size_t ademco_hilo_array_to_dec_str(ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* st
// 将一串以高低字节表示的十六进制数组转换为字符串 // 将一串以高低字节表示的十六进制数组转换为字符串
// 每个字节的高四位和低四位若不大于9,将该四位表示的数字以10进制ascii码填入str,否则: // 每个字节的高四位和低四位若不大于9,将该四位表示的数字以10进制ascii码填入str,否则:
// 若定长6字节包含a~f,说明是WiFi主机 // 若定长6字节包含a-f,说明是WiFi主机
// 返回字符串长度 // 返回字符串长度
// 注意:函数不会在str末尾补 null terminator // 注意:函数不会在str末尾补 null terminator
// 调用者应确保str有足够空间,至少len的2倍,否则会崩溃 // 调用者应确保str有足够空间,至少len的2倍,否则会崩溃
...@@ -648,7 +649,7 @@ size_t ademco_hilo_array_to_hex_str(ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* st ...@@ -648,7 +649,7 @@ size_t ademco_hilo_array_to_hex_str(ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* st
size_t len); size_t len);
// 将一个10进制数字符串转为高低字节表示的数组,节省空间 // 将一个10进制数字符串转为高低字节表示的数组,节省空间
// str应只包含'0'~'9',否则失败返回0 // str应只包含'0'-'9',否则失败返回0
// str长度若大于len * 2,str[len]及之后的内容将被舍弃以避免溢出 // str长度若大于len * 2,str[len]及之后的内容将被舍弃以避免溢出
// 转换后的长度若不满len,则以0xF补满。 // 转换后的长度若不满len,则以0xF补满。
// 示例:输入字符串"123ABC",返回0 // 示例:输入字符串"123ABC",返回0
...@@ -665,7 +666,7 @@ size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, ...@@ -665,7 +666,7 @@ size_t ademco_dec_str_to_hilo_array(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
const char ADEMCO_BUF_MEMORY_MODIFIER* str); const char ADEMCO_BUF_MEMORY_MODIFIER* str);
// 将一个16进制数字符串转为高低字节表示的数组,节省空间 // 将一个16进制数字符串转为高低字节表示的数组,节省空间
// str应只包含'0'~'9', 'A'~'F', 'a'~'f',否则失败返回0 // str应只包含'0'-'9', 'A'-'F', 'a'-'f',否则失败返回0
// str长度若大于len * 2,str[len]及之后的内容将被舍弃以避免溢出 // str长度若大于len * 2,str[len]及之后的内容将被舍弃以避免溢出
// 转换后的长度若不满len,则以0xF补满。 // 转换后的长度若不满len,则以0xF补满。
// 示例:输入字符串"123ABC",len=6, 则 arr 内容为 0x12 0x3a 0xbc 0xff 0xff 0xff // 示例:输入字符串"123ABC",len=6, 则 arr 内容为 0x12 0x3a 0xbc 0xff 0xff 0xff
...@@ -692,7 +693,7 @@ size_t ademco_hex_array_to_str(char ADEMCO_BUF_MEMORY_MODIFIER* str, ...@@ -692,7 +693,7 @@ size_t ademco_hex_array_to_str(char ADEMCO_BUF_MEMORY_MODIFIER* str,
const uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, const uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
size_t len); size_t len);
// 将一串字符串(内容为'0'~'9', 'A'~'F', 'a' ~'f')转为字节流 // 将一串字符串(内容为'0'-'9', 'A'-'F', 'a'-'f')转为字节流
// 若strlen(str)为奇数,以padding补足arr, padding 应 <= 0x0F // 若strlen(str)为奇数,以padding补足arr, padding 应 <= 0x0F
// 若str内包含非hex字符串,返回0 // 若str内包含非hex字符串,返回0
// 调用者应确保arr有足够的容量,至少strlen(str)*2 // 调用者应确保arr有足够的容量,至少strlen(str)*2
...@@ -713,7 +714,7 @@ size_t ademco_hex_str_to_array_n(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr, ...@@ -713,7 +714,7 @@ size_t ademco_hex_str_to_array_n(uint8_t ADEMCO_BUF_MEMORY_MODIFIER* arr,
size_t len, uint8_t padding); size_t len, uint8_t padding);
// 同ademcoHexStrToArrayN,但允许str包含非hex字符, // 同ademcoHexStrToArrayN,但允许str包含非hex字符,
// 即'0'~'9','a'~'f','A'~'F'之外的内容,以 padding 替换 // 即'0'-'9','a'-'f','A'-'F'之外的内容,以 padding 替换
// 示例:str="AB\xFFD", len=4, padding=0x0F, 则 arr=[ 0xAB, 0xFD ], return 2 // 示例:str="AB\xFFD", len=4, padding=0x0F, 则 arr=[ 0xAB, 0xFD ], return 2
// 网线主机 0d 00 命令,接警中心账号部分,有可能是这种 // 网线主机 0d 00 命令,接警中心账号部分,有可能是这种
ADEMCO_EXPORT_SYMBOL ADEMCO_EXPORT_SYMBOL
......
...@@ -7,8 +7,8 @@ ...@@ -7,8 +7,8 @@
*/ */
#define ADEMCO_VERSION_MAJOR 3 #define ADEMCO_VERSION_MAJOR 3
#define ADEMCO_VERSION_MINOR 2 #define ADEMCO_VERSION_MINOR 4
#define ADEMCO_VERSION_PATCH 2 #define ADEMCO_VERSION_PATCH 10
#define ADEMCO_VERSION_IS_RELEASE 1 #define ADEMCO_VERSION_IS_RELEASE 1
#define ADEMCO_VERSION_SUFFIX "" #define ADEMCO_VERSION_SUFFIX ""
......
...@@ -12,104 +12,47 @@ uint8_t hb_get_available_zone_properties_by_type(hb_machine_type_t type, ...@@ -12,104 +12,47 @@ uint8_t hb_get_available_zone_properties_by_type(hb_machine_type_t type,
case HMT_GPRS_IOT: case HMT_GPRS_IOT:
case HMT_GPRS: case HMT_GPRS:
case HMT_WIFI2: { case HMT_WIFI2: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_GPRS_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR,
HZP_EMERGENCY,
HZP_FIRE,
HZP_DURESS,
HZP_GAS,
HZP_WATER,
HZP_REMOTE_CONTROL,
};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_NETMOD: { case HMT_NETMOD: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_NETMOD_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR,
HZP_EMERGENCY,
HZP_FIRE,
HZP_DURESS,
HZP_GAS,
HZP_WATER,
HZP_SUB_MACHINE,
HZP_REMOTE_CONTROL,
HZP_BURGLAR_HALF,
HZP_BYPASS,
HZP_DOOR_RING,
};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_LCD: { case HMT_LCD: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_LCD_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR, HZP_EMERGENCY, HZP_FIRE,
HZP_DURESS, HZP_GAS, HZP_WATER, HZP_SUB_MACHINE,
HZP_REMOTE_CONTROL, HZP_BURGLAR_HALF,
HZP_DOOR_RING, HZP_BYPASS};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_WIRED: { case HMT_WIRED: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_WIRED_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR,
HZP_EMERGENCY,
HZP_FIRE,
HZP_DURESS,
HZP_GAS,
HZP_WATER,
HZP_REMOTE_CONTROL,
};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_TRUE_COLOR: { case HMT_TRUE_COLOR: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_TRUE_COLOR_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR, HZP_EMERGENCY, HZP_FIRE,
HZP_DURESS, HZP_GAS, HZP_WATER, HZP_REMOTE_CONTROL,
HZP_DOOR_RING, HZP_BYPASS};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_THREE_SECTION: { case HMT_THREE_SECTION: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_THREE_SECTION_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR, HZP_EMERGENCY, HZP_FIRE,
HZP_DURESS, HZP_GAS, HZP_WATER, HZP_REMOTE_CONTROL,
HZP_DOOR_RING, HZP_BYPASS};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_IOT: { case HMT_IOT: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_IOT_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR, HZP_EMERGENCY, HZP_FIRE,
HZP_DURESS, HZP_GAS, HZP_WATER, HZP_REMOTE_CONTROL,
HZP_DOOR_RING, HZP_BYPASS};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_GPRS_PHONE: { case HMT_GPRS_PHONE: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_GPRS_PHONE_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR,
HZP_EMERGENCY,
HZP_FIRE,
HZP_DURESS,
HZP_GAS,
HZP_WATER,
HZP_REMOTE_CONTROL,
};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
case HMT_NB: { case HMT_NB: {
hb_zone_property_t ADEMCO_BUF_MEMORY_MODIFIER hzps[] = { const hb_zone_property_t ADEMCO_CONST_MODIFIER hzps[] = HB_NB_MACHINE_SUPPORTED_ZONE_PROPERTIES;
HZP_BURGLAR,
HZP_EMERGENCY,
HZP_FIRE,
HZP_DURESS,
HZP_GAS,
HZP_WATER,
HZP_DOOR_RING,
};
memcpy(props, hzps, sizeof(hzps)); memcpy(props, hzps, sizeof(hzps));
return sizeof(hzps) / sizeof(hb_zone_property_t); return sizeof(hzps) / sizeof(hb_zone_property_t);
} }
...@@ -164,8 +107,7 @@ uint16_t hb_get_max_zone_by_type(hb_machine_type_t type) { ...@@ -164,8 +107,7 @@ uint16_t hb_get_max_zone_by_type(hb_machine_type_t type) {
} }
bool 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) {
return 0 <= zone && return zone <= hb_get_max_zone_by_type(type);
zone <= hb_get_max_zone_by_type(type);
} }
bool 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) {
......
...@@ -7,6 +7,10 @@ ...@@ -7,6 +7,10 @@
extern "C" { extern "C" {
#endif #endif
#if !defined(__C51__) || defined(VSCODE)
#pragma pack(1)
#endif
// 三防区主机状态GG范围 1~3 // 三防区主机状态GG范围 1~3
#define HB_3SECTION_MACHINE_GG_MIN 1 #define HB_3SECTION_MACHINE_GG_MIN 1
#define HB_3SECTION_MACHINE_GG_MAX 3 #define HB_3SECTION_MACHINE_GG_MAX 3
...@@ -123,6 +127,119 @@ typedef union { ...@@ -123,6 +127,119 @@ typedef union {
///////////////////////////// property functions ////////////////////////////// ///////////////////////////// property functions //////////////////////////////
#define HB_GPRS_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_REMOTE_CONTROL, \
}
#define HB_NETMOD_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_SUB_MACHINE, \
HZP_REMOTE_CONTROL, \
HZP_BURGLAR_HALF, \
HZP_BYPASS, \
HZP_DOOR_RING, \
}
#define HB_LCD_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_SUB_MACHINE, \
HZP_REMOTE_CONTROL, \
HZP_BURGLAR_HALF, \
HZP_DOOR_RING, \
HZP_BYPASS, \
}
#define HB_WIRED_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_REMOTE_CONTROL, \
}
#define HB_TRUE_COLOR_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_REMOTE_CONTROL, \
HZP_DOOR_RING, \
HZP_BYPASS, \
}
#define HB_THREE_SECTION_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_REMOTE_CONTROL, \
HZP_DOOR_RING, \
HZP_BYPASS, \
}
#define HB_IOT_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_REMOTE_CONTROL, \
HZP_DOOR_RING, \
HZP_BYPASS, \
}
#define HB_GPRS_PHONE_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_REMOTE_CONTROL, \
}
#define HB_NB_MACHINE_SUPPORTED_ZONE_PROPERTIES \
{ \
HZP_BURGLAR, \
HZP_EMERGENCY, \
HZP_FIRE, \
HZP_DURESS, \
HZP_GAS, \
HZP_WATER, \
HZP_DOOR_RING, \
}
// return available count // return available count
// props must have at least HZP_COUNT slots // props must have at least HZP_COUNT slots
HB_EXPORT_SYMBOL HB_EXPORT_SYMBOL
...@@ -245,6 +362,10 @@ HB_EXPORT_SYMBOL ...@@ -245,6 +362,10 @@ HB_EXPORT_SYMBOL
const char* hb_get_zone_format_str(hb_machine_type_t type); const char* hb_get_zone_format_str(hb_machine_type_t type);
#endif // HB_ENABLE_TO_STRING #endif // HB_ENABLE_TO_STRING
#if !defined(__C51__) || defined(VSCODE)
#pragma pack()
#endif
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif
......
...@@ -23,6 +23,7 @@ extern "C" { ...@@ -23,6 +23,7 @@ extern "C" {
XX(0x40, GAS, "煤气") \ XX(0x40, GAS, "煤气") \
XX(0x50, WATER, "水警") \ XX(0x50, WATER, "水警") \
XX(0x57, NIGHT, "夜间") \ XX(0x57, NIGHT, "夜间") \
XX(0x66, HEART_BEAT, "心跳") \
XX(0x69, SENDER_REBOOT, "发送端重启") \ XX(0x69, SENDER_REBOOT, "发送端重启") \
XX(0x75, DAY, "白天") \ XX(0x75, DAY, "白天") \
XX(0xA5, R_BATTERY_BROKEN, "收电池损坏") \ XX(0xA5, R_BATTERY_BROKEN, "收电池损坏") \
......
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