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
12f3d345
Commit
12f3d345
authored
Jun 15, 2022
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
make reqs
parent
3743b11f
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
116 additions
and
15 deletions
+116
-15
ademco.c
c/ademco.c
+95
-4
ademco.h
c/ademco.h
+20
-11
ademco.vcxproj
examples/ademco/ademco.vcxproj
+1
-0
No files found.
c/ademco.c
View file @
12f3d345
...
@@ -1473,6 +1473,90 @@ HbComResponseType hbComParseResponse(const uint8_t* data, int len)
...
@@ -1473,6 +1473,90 @@ HbComResponseType hbComParseResponse(const uint8_t* data, int len)
return
HbComResp_Invalid
;
return
HbComResp_Invalid
;
}
}
void
hbComMakeReqA0_getMachineStatus
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_A0_data
,
HbComReq_A0_len
);
}
void
hbComMakeReqA1_getMachineZones
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_A1_data
,
HbComReq_A1_len
);
}
void
hbComMakeReqA2_getMoreMachineZones
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_A2_data
,
HbComReq_A2_len
);
}
void
hbComMakeReqA3_modifyMachineZone
(
AdemcoXDataSegment
*
xdata
,
uint8_t
zone
,
HbZoneProperty
prop
,
HbComReq_A3_op
op
)
{
uint8_t
req
[
HbComReq_A3_len
]
=
HbComReq_A3_head
;
req
[
5
]
=
zone
;
req
[
6
]
=
prop
;
req
[
7
]
=
op
;
hbSum
(
req
,
HbComReq_A3_len
);
ademcoMakeXData
(
xdata
,
TWO_HEX
,
req
,
HbComReq_A3_len
);
}
void
hbComMakeReqA5_getMachineTimer
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_A5_data
,
HbComReq_A5_len
);
}
void
hbComMakeReqA7_setMachineTimer
(
AdemcoXDataSegment
*
xdata
,
HbMachineTimer
*
timer
)
{
uint8_t
req
[
HbComReq_A7_len
]
=
HbComReq_A7_head
;
memcpy
(
req
+
5
,
timer
,
sizeof
(
*
timer
));
hbSum
(
req
,
HbComReq_A7_len
);
ademcoMakeXData
(
xdata
,
TWO_HEX
,
req
,
HbComReq_A7_len
);
}
void
hbComMakeReqAA_modifyMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
,
uint8_t
zone
,
int
on
)
{
uint8_t
req
[
HbComReq_AA_len
]
=
HbComReq_AA_head
;
req
[
5
]
=
zone
;
req
[
6
]
=
!!
on
;
hbSum
(
req
,
HbComReq_AA_len
);
ademcoMakeXData
(
xdata
,
TWO_HEX
,
req
,
HbComReq_AA_len
);
}
void
hbComMakeReqAC_getMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_AC_data
,
HbComReq_AC_len
);
}
void
hbComMakeReqAD_getMoreMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_AD_data
,
HbComReq_AD_len
);
}
void
hbComMakeReqAE_set3SectionMachineStatus
(
AdemcoXDataSegment
*
xdata
,
HbComReq_AE_P1
p1
,
uint8_t
p2
)
{
uint8_t
req
[
HbComReq_AE_len
]
=
HbComReq_AE_head
;
req
[
5
]
=
p1
;
req
[
6
]
=
p2
;
hbSum
(
req
,
HbComReq_AE_len
);
ademcoMakeXData
(
xdata
,
TWO_HEX
,
req
,
HbComReq_AE_len
);
}
void
hbComMakeReqB0_get3SectionMachineStatus
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_B0_data
,
HbComReq_B0_len
);
}
void
hbComMakeReqRD_acct
(
AdemcoXDataSegment
*
xdata
)
{
ademcoMakeXData
(
xdata
,
TWO_HEX
,
HbComReq_RD_acct_data
,
HbComReq_RD_acct_len
);
}
void
hbComMakeReqWR_acct
(
AdemcoXDataSegment
*
xdata
,
const
char
*
acct
)
{
uint8_t
req
[
HbComReq_WR_acct_len
]
=
HbComReq_WR_acct_head
;
hbDecStrToHiLoArray
(
req
+
5
,
9
,
acct
);
hbSum
(
req
,
HbComReq_AE_len
);
ademcoMakeXData
(
xdata
,
TWO_HEX
,
req
,
HbComReq_AE_len
);
}
int
hbHiLoArrayToDecStr
(
char
*
str
,
const
uint8_t
*
arr
,
int
len
)
int
hbHiLoArrayToDecStr
(
char
*
str
,
const
uint8_t
*
arr
,
int
len
)
{
{
char
*
p
=
str
;
char
*
p
=
str
;
...
@@ -1487,13 +1571,17 @@ int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len)
...
@@ -1487,13 +1571,17 @@ int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len)
return
p
-
str
;
return
p
-
str
;
}
}
int
hbDecStrToHiLoArray
(
uint8_t
*
arr
,
const
char
*
str
,
int
len
)
int
hbDecStrToHiLoArray
(
uint8_t
*
arr
,
int
len
,
const
char
*
str
)
{
{
uint8_t
*
p
=
arr
;
uint8_t
*
p
=
arr
;
for
(
int
i
=
0
;
i
<
len
;
i
+=
2
)
{
int
slen
=
strlen
(
str
);
if
(
slen
>
len
*
2
)
{
return
0
;
}
for
(
int
i
=
0
;
i
<
slen
;
i
+=
2
)
{
char
hi
=
str
[
i
];
char
hi
=
str
[
i
];
if
(
'0'
<=
hi
&&
hi
<=
'9'
)
{
if
(
'0'
<=
hi
&&
hi
<=
'9'
)
{
if
(
i
<
len
)
{
if
(
i
+
1
<
s
len
)
{
char
lo
=
str
[
i
+
1
];
char
lo
=
str
[
i
+
1
];
if
(
'0'
<=
lo
&&
lo
<=
'9'
)
{
if
(
'0'
<=
lo
&&
lo
<=
'9'
)
{
*
p
++
=
(
hi
<<
4
)
|
(
lo
&
0x0F
);
*
p
++
=
(
hi
<<
4
)
|
(
lo
&
0x0F
);
...
@@ -1509,7 +1597,10 @@ int hbDecStrToHiLoArray(uint8_t* arr, const char* str, int len)
...
@@ -1509,7 +1597,10 @@ int hbDecStrToHiLoArray(uint8_t* arr, const char* str, int len)
break
;
break
;
}
}
}
}
return
p
-
arr
;
while
(
p
-
arr
<
len
)
{
*
p
++
=
0xFF
;
}
return
len
;
}
}
c/ademco.h
View file @
12f3d345
...
@@ -399,11 +399,12 @@ static inline int hbIsValid3SectionMachineGG(AdemcoGG gg) {
...
@@ -399,11 +399,12 @@ static inline int hbIsValid3SectionMachineGG(AdemcoGG gg) {
return
HB_3SECTION_MACHINE_GG_MIN
<=
gg
&&
gg
<=
HB_3SECTION_MACHINE_GG_MAX
;
return
HB_3SECTION_MACHINE_GG_MIN
<=
gg
&&
gg
<=
HB_3SECTION_MACHINE_GG_MAX
;
}
}
//! 主机状态
typedef
enum
HbMachineStatus
{
typedef
enum
HbMachineStatus
{
HMS_ARM
,
HMS_ARM
,
// 布防
HMS_HALF_ARM
,
HMS_HALF_ARM
,
// 半布防
HMS_DISARM
,
HMS_DISARM
,
// 撤防
HMS_SETTING
,
HMS_SETTING
,
// 设置
HMS_COUNT
,
HMS_COUNT
,
HMS_INVALID
=
-
1
,
HMS_INVALID
=
-
1
,
}
HbMachineStatus
;
}
HbMachineStatus
;
...
@@ -624,12 +625,18 @@ typedef enum HbComReq_A3_op {
...
@@ -624,12 +625,18 @@ typedef enum HbComReq_A3_op {
#define HbComResp_AD_p1_double 0xF1 // 防区号以双字节表示
#define HbComResp_AD_p1_double 0xF1 // 防区号以双字节表示
#define HbComResp_AD_head "\xEB\xBA\x3F\x09\xCC\xAD"
#define HbComResp_AD_head "\xEB\xBA\x3F\x09\xCC\xAD"
#define HbCom_3sec_
disarm 0x00 // 三区段主机撤
防(命令或状态)
#define HbCom_3sec_
arm 0x00 // 三区段主机布
防(命令或状态)
#define HbCom_3sec_
arm 0x01 // 三区段主机布
防(命令或状态)
#define HbCom_3sec_
disarm 0x01 // 三区段主机撤
防(命令或状态)
//! 三区段主机布撤防命令 EB CB 3F 08 AE P1 P2 SUM
//! 三区段主机布撤防命令 EB CB 3F 08 AE P1 P2 SUM
#define HbComReq_AE_len 8
#define HbComReq_AE_len 8
#define HbComReq_AE_head "\xEB\xCB\x3F\x08\xAE"
#define HbComReq_AE_head "\xEB\xCB\x3F\x08\xAE"
typedef
enum
HbComReq_AE_P1
{
HbComReq_AE_P1_machine
,
// 对主机布撤防
HbComReq_AE_P1_section1
,
// 对区段1布撤防
HbComReq_AE_P1_section2
,
// 对区段2布撤防
HbComReq_AE_P1_section3
,
// 对区段3布撤防
}
HbComReq_AE_P1
;
//! 三区段主机布撤防命令回应 EB BA 3F 08 P0 AF P1 P2 SUM
//! 三区段主机布撤防命令回应 EB BA 3F 08 P0 AF P1 P2 SUM
#define HbComResp_AF_len 9
#define HbComResp_AF_len 9
...
@@ -729,18 +736,20 @@ ADEMCO_EXPORT_SYMBOL void hbComMakeReqA7_setMachineTimer(AdemcoXDataSegment* xda
...
@@ -729,18 +736,20 @@ ADEMCO_EXPORT_SYMBOL void hbComMakeReqA7_setMachineTimer(AdemcoXDataSegment* xda
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAA_modifyMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
,
uint8_t
zone
,
int
on
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAA_modifyMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
,
uint8_t
zone
,
int
on
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAC_getMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAC_getMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAD_getMoreMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAD_getMoreMachineZoneLostConfig
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAE_set3SectionMachineStatus
(
AdemcoXDataSegment
*
xdata
,
HbMachineStatus
statusMachine
,
// p2 must be HbCom_3sec_arm or HbCom_3sec_disarm
HbMachineStatus
statusSec1
,
HbMachineStatus
statusSec2
,
HbMachineStatus
statusSec3
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqAE_set3SectionMachineStatus
(
AdemcoXDataSegment
*
xdata
,
HbComReq_AE_P1
p1
,
uint8_t
p2
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqB0_get3SectionMachineStatus
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqB0_get3SectionMachineStatus
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqRD_acct
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqRD_acct
(
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqWR_acct
(
AdemcoXDataSegment
*
xdata
,
const
char
*
acct
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqWR_acct
(
AdemcoXDataSegment
*
xdata
,
const
char
*
acct
);
// 将一串以高低字节表示的十六进制数组转换为10进制数字符串,遇0xf或非'0'~'9'字符停止,返回字符串长度
// 将一串以高低字节表示的十六进制数组转换为10进制数字符串,遇0xf或非'0'~'9'字符停止,返回字符串长度
// 示例:输入数组:0x18 0x24 0x08 0x88 0x10 0x1f
,
0xff,输出字符串"18240888101"
// 示例:输入数组:0x18 0x24 0x08 0x88 0x10 0x1f 0xff,输出字符串"18240888101"
ADEMCO_EXPORT_SYMBOL
int
hbHiLoArrayToDecStr
(
char
*
str
,
const
uint8_t
*
arr
,
int
len
);
ADEMCO_EXPORT_SYMBOL
int
hbHiLoArrayToDecStr
(
char
*
str
,
const
uint8_t
*
arr
,
int
len
);
// 将一个10进制数字符串转为高低字节表示的数组,节省空间,返回数组长度
// 将一个10进制数字符串转为高低字节表示的数组,节省空间,转换后的长度若不满len,则以0xF补满。str长度不能大于len * 2
ADEMCO_EXPORT_SYMBOL
int
hbDecStrToHiLoArray
(
uint8_t
*
arr
,
const
char
*
str
,
int
len
);
// 示例:输入字符串 "18240888101", len=9, 则arr内容为 0x18 0x24 0x08 0x88 0x10 0x1f 0xff 0xff 0xff, return 9
// 输入字符串 "12345678901234567890", len=9, 则失败返回0
ADEMCO_EXPORT_SYMBOL
int
hbDecStrToHiLoArray
(
uint8_t
*
arr
,
int
len
,
const
char
*
str
);
#ifdef __cplusplus
#ifdef __cplusplus
...
...
examples/ademco/ademco.vcxproj
View file @
12f3d345
...
@@ -124,6 +124,7 @@
...
@@ -124,6 +124,7 @@
<ConformanceMode>
true
</ConformanceMode>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
<LanguageStandard_C>
Default
</LanguageStandard_C>
</ClCompile>
</ClCompile>
<Link>
<Link>
<SubSystem>
Windows
</SubSystem>
<SubSystem>
Windows
</SubSystem>
...
...
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