Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
A
ademco_hb
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
captainwong
ademco_hb
Commits
4fce260a
Commit
4fce260a
authored
Apr 13, 2025
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
3.4.10
parent
6d2664fb
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
229 additions
and
95 deletions
+229
-95
CHANGELOG.md
CHANGELOG.md
+65
-0
ademco.c
ademco.c
+22
-18
ademco.h
ademco.h
+8
-7
ademco_version.h
ademco_version.h
+2
-2
hb_core.c
hb_core.c
+10
-68
hb_core.h
hb_core.h
+121
-0
hb_rf.h
hb_rf.h
+1
-0
No files found.
CHANGELOG.md
View file @
4fce260a
# 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
-
解析形为
[
#861234567890|3400 00 000
]
之类的以账号为安定宝ID的data段,解析结果为安定宝ID为0
...
...
ademco.c
View file @
4fce260a
...
...
@@ -84,9 +84,9 @@ bool ademco_is_valid_account(const char* acct) {
size_t
ADEMCO_BUF_MEMORY_MODIFIER
len
=
0
;
int
ADEMCO_BUF_MEMORY_MODIFIER
ishex
=
0
;
while
(
*
acct
&&
len
<
ADEMCO_PACKET_ACCT_MAX_LEN
)
{
if
(
isdigit
(
*
acct
))
{
if
(
isdigit
(
(
int
)
*
acct
))
{
len
++
;
}
else
if
(
isxdigit
(
*
acct
)
&&
len
<
ADEMCO_PACKET_ACCT_MAC_LEN
)
{
}
else
if
(
isxdigit
(
(
int
)
*
acct
)
&&
len
<
ADEMCO_PACKET_ACCT_MAC_LEN
)
{
len
++
;
ishex
=
1
;
}
else
{
...
...
@@ -101,7 +101,7 @@ bool ademco_is_valid_account(const char* acct) {
bool
ademco_is_valid_password
(
const
char
*
pwd
)
{
size_t
ADEMCO_BUF_MEMORY_MODIFIER
len
=
0
;
while
(
*
pwd
&&
len
<
ADEMCO_PACKET_PWD_MAX_LEN
)
{
if
(
isdigit
(
*
pwd
))
{
if
(
isdigit
(
(
int
)
*
pwd
))
{
len
++
;
}
else
{
return
false
;
...
...
@@ -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
)
{
// ademco_id maybe acct like "861234567890"
ademco_data
->
ademco_id
=
ADEMCO_ID_INVALID
;
}
}
p
+=
acct_len
;
if
(
*
p
++
!=
'|'
)
{
...
...
@@ -1426,7 +1426,7 @@ ademco_parse_result_t ademco_parse_packet(const ademco_char_t* buf,
// #acct
pacct
=
++
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"
);
*
cb_commited
+=
p
-
buf
;
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
size_t
ademco_dec_str_to_hilo_array
(
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
*
arr
,
size_t
len
,
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
slen
=
str
?
strlen
(
str
)
:
0
;
char
ADEMCO_BUF_MEMORY_MODIFIER
hi
,
lo
;
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
hi
,
lo
;
if
(
slen
>
len
*
2
)
slen
=
len
*
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,
}
else
break
;
}
while
(
(
char
ADEMCO_BUF_MEMORY_MODIFIER
*
)
arr
+
len
>
p
)
while
(
arr
+
len
>
p
)
*
p
++
=
0xFF
;
return
len
;
}
...
...
@@ -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
len
,
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
slen
=
str
?
strlen
(
str
)
:
0
;
char
ADEMCO_BUF_MEMORY_MODIFIER
hi
,
lo
;
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
hi
,
lo
;
if
(
slen
>
len
*
2
)
slen
=
len
*
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,
break
;
}
}
while
(
(
char
ADEMCO_BUF_MEMORY_MODIFIER
*
)
arr
+
len
>
p
)
while
(
arr
+
len
>
p
)
*
p
++
=
0xFF
;
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
)
{
char
ADEMCO_BUF_MEMORY_MODIFIER
*
p
=
str
;
size_t
ademco_hex_array_to_str
(
char
ADEMCO_BUF_MEMORY_MODIFIER
*
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
;
for
(
i
=
0
;
i
<
len
;
i
++
)
{
*
p
++
=
ademco_hex2char
((
arr
[
i
]
>>
4
)
&
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
hi
=
0
,
lo
=
0
;
size_t
ADEMCO_BUF_MEMORY_MODIFIER
i
;
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
;
for
(
i
=
0
;
i
<
slen
/
2
;
i
++
)
{
c
=
str
[
i
*
2
];
...
...
@@ -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
hi
=
0
,
lo
=
0
;
size_t
ADEMCO_BUF_MEMORY_MODIFIER
i
;
char
ADEMCO_BUF_MEMORY_MODIFIER
c
;
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
c
;
padding
&=
0x0F
;
for
(
i
=
0
;
i
<
len
/
2
;
i
++
)
{
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
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
*
p
=
arr
;
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
hi
=
0
,
lo
=
0
;
size_t
ADEMCO_BUF_MEMORY_MODIFIER
i
;
char
ADEMCO_BUF_MEMORY_MODIFIER
c
;
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
c
;
padding
&=
0x0F
;
for
(
i
=
0
;
i
<
len
/
2
;
i
++
)
{
c
=
str
[
i
*
2
];
...
...
ademco.h
View file @
4fce260a
...
...
@@ -154,6 +154,7 @@ typedef uint16_t ademco_zone_t;
XX(1756, SIM_IS_IOT_CARD, "物联卡") \
XX(2756, SIM_IS_IOT_PLATFORM_CARD, "平台物联卡") \
XX(3756, SIM_IS_NOT_IOT_CARD, "非物联卡") \
XX(1796, SYS_READY, "主机稳定") \
XX(1798, WHAT_IS_YOUR_TYPE, "索要主机类型") \
XX(1799, SIGNAL_STRENGTH_CHANGED, "信号强度") \
XX(1944, OFFLINE, "主机断线") \
...
...
@@ -612,10 +613,10 @@ ADEMCO_EXPORT_SYMBOL
uint16_t
ademco_crc16
(
const
ademco_char_t
ADEMCO_BUF_MEMORY_MODIFIER
*
buf
,
size_t
len
);
#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
);
// '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
);
// 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
// 将一串以高低字节表示的十六进制数组转换为字符串
// 每个字节的高四位和低四位若不大于9,将该四位表示的数字以10进制ascii码填入str,否则:
// 若定长6字节包含a
~
f,说明是WiFi主机
// 若定长6字节包含a
-
f,说明是WiFi主机
// 返回字符串长度
// 注意:函数不会在str末尾补 null terminator
// 调用者应确保str有足够空间,至少len的2倍,否则会崩溃
...
...
@@ -648,7 +649,7 @@ size_t ademco_hilo_array_to_hex_str(ademco_char_t ADEMCO_BUF_MEMORY_MODIFIER* st
size_t
len
);
// 将一个10进制数字符串转为高低字节表示的数组,节省空间
// str应只包含'0'
~
'9',否则失败返回0
// str应只包含'0'
-
'9',否则失败返回0
// str长度若大于len * 2,str[len]及之后的内容将被舍弃以避免溢出
// 转换后的长度若不满len,则以0xF补满。
// 示例:输入字符串"123ABC",返回0
...
...
@@ -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
);
// 将一个16进制数字符串转为高低字节表示的数组,节省空间
// str应只包含'0'
~'9', 'A'~'F', 'a'~
'f',否则失败返回0
// str应只包含'0'
-'9', 'A'-'F', 'a'-
'f',否则失败返回0
// str长度若大于len * 2,str[len]及之后的内容将被舍弃以避免溢出
// 转换后的长度若不满len,则以0xF补满。
// 示例:输入字符串"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,
const
uint8_t
ADEMCO_BUF_MEMORY_MODIFIER
*
arr
,
size_t
len
);
// 将一串字符串(内容为'0'
~'9', 'A'~'F', 'a' ~
'f')转为字节流
// 将一串字符串(内容为'0'
-'9', 'A'-'F', 'a'-
'f')转为字节流
// 若strlen(str)为奇数,以padding补足arr, padding 应 <= 0x0F
// 若str内包含非hex字符串,返回0
// 调用者应确保arr有足够的容量,至少strlen(str)*2
...
...
@@ -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
);
// 同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
// 网线主机 0d 00 命令,接警中心账号部分,有可能是这种
ADEMCO_EXPORT_SYMBOL
...
...
ademco_version.h
View file @
4fce260a
...
...
@@ -7,8 +7,8 @@
*/
#define ADEMCO_VERSION_MAJOR 3
#define ADEMCO_VERSION_MINOR
2
#define ADEMCO_VERSION_PATCH
2
#define ADEMCO_VERSION_MINOR
4
#define ADEMCO_VERSION_PATCH
10
#define ADEMCO_VERSION_IS_RELEASE 1
#define ADEMCO_VERSION_SUFFIX ""
...
...
hb_core.c
View file @
4fce260a
...
...
@@ -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
:
case
HMT_WIFI2
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
HZP_BURGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_GPRS_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_NETMOD
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
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
,
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_NETMOD_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_LCD
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
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
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_LCD_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_WIRED
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
HZP_BURGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_WIRED_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_TRUE_COLOR
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
HZP_BURGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_DOOR_RING
,
HZP_BYPASS
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_TRUE_COLOR_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_THREE_SECTION
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
HZP_BURGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_DOOR_RING
,
HZP_BYPASS
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_THREE_SECTION_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_IOT
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
HZP_BURGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_DOOR_RING
,
HZP_BYPASS
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_IOT_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_GPRS_PHONE
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
HZP_BURGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_GPRS_PHONE_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
hb_zone_property_t
);
}
case
HMT_NB
:
{
hb_zone_property_t
ADEMCO_BUF_MEMORY_MODIFIER
hzps
[]
=
{
HZP_BURGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_DOOR_RING
,
};
const
hb_zone_property_t
ADEMCO_CONST_MODIFIER
hzps
[]
=
HB_NB_MACHINE_SUPPORTED_ZONE_PROPERTIES
;
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
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) {
}
bool
hb_is_valid_zone_by_type
(
hb_machine_type_t
type
,
uint16_t
zone
)
{
return
0
<=
zone
&&
zone
<=
hb_get_max_zone_by_type
(
type
);
return
zone
<=
hb_get_max_zone_by_type
(
type
);
}
bool
hb_is_valid_zone_by_type_strict
(
hb_machine_type_t
type
,
uint16_t
zone
)
{
...
...
hb_core.h
View file @
4fce260a
...
...
@@ -7,6 +7,10 @@
extern
"C"
{
#endif
#if !defined(__C51__) || defined(VSCODE)
#pragma pack(1)
#endif
// 三防区主机状态GG范围 1~3
#define HB_3SECTION_MACHINE_GG_MIN 1
#define HB_3SECTION_MACHINE_GG_MAX 3
...
...
@@ -123,6 +127,119 @@ typedef union {
///////////////////////////// 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
// props must have at least HZP_COUNT slots
HB_EXPORT_SYMBOL
...
...
@@ -245,6 +362,10 @@ HB_EXPORT_SYMBOL
const
char
*
hb_get_zone_format_str
(
hb_machine_type_t
type
);
#endif // HB_ENABLE_TO_STRING
#if !defined(__C51__) || defined(VSCODE)
#pragma pack()
#endif
#ifdef __cplusplus
}
#endif
...
...
hb_rf.h
View file @
4fce260a
...
...
@@ -23,6 +23,7 @@ extern "C" {
XX
(
0x40
,
GAS
,
"煤气"
)
\
XX
(
0x50
,
WATER
,
"水警"
)
\
XX
(
0x57
,
NIGHT
,
"夜间"
)
\
XX
(
0x66
,
HEART_BEAT
,
"心跳"
)
\
XX
(
0x69
,
SENDER_REBOOT
,
"发送端重启"
)
\
XX
(
0x75
,
DAY
,
"白天"
)
\
XX
(
0xA5
,
R_BATTERY_BROKEN
,
"收电池损坏"
)
\
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment