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
dfb828a6
Commit
dfb828a6
authored
Feb 06, 2023
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
b3052b0c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
200 additions
and
173 deletions
+200
-173
ademco.c
ademco.c
+106
-96
ademco.h
ademco.h
+60
-43
server_demo.cpp
examples/server_demo/server_demo.cpp
+9
-9
hb_com.c
hb_com.c
+14
-14
hb_com.h
hb_com.h
+11
-11
No files found.
ademco.c
View file @
dfb828a6
This diff is collapsed.
Click to expand it.
ademco.h
View file @
dfb828a6
This diff is collapsed.
Click to expand it.
examples/server_demo/server_demo.cpp
View file @
dfb828a6
...
...
@@ -45,7 +45,7 @@ struct Buffer
{
size_t
rpos
;
size_t
wpos
;
uint8_t
buff
[
BUFF_SIZE
];
char
buff
[
BUFF_SIZE
];
Buffer
()
{
clear
();
}
void
clear
()
{
memset
(
this
,
0
,
sizeof
(
Buffer
));
}
...
...
@@ -139,7 +139,7 @@ int main(int argc, char** argv)
};
auto
do_handle
=
[]()
->
AdemcoParseResult
{
AdemcoPacket
pkt
;
in
t
cb
=
0
;
AdemcoPacket
pkt
;
size_
t
cb
=
0
;
AdemcoParseResult
result
=
ademcoPacketParse
(
clientBuffer
.
buff
+
clientBuffer
.
rpos
,
clientBuffer
.
wpos
-
clientBuffer
.
rpos
,
&
pkt
,
...
...
@@ -158,8 +158,8 @@ int main(int argc, char** argv)
case
AID_NULL
:
// reply ack
{
uint8_t
ack
[
1024
];
int
len
=
ademcoMakeAckPacket
(
(
uint8_t
*
)
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
char
ack
[
1024
];
int
len
=
ademcoMakeAckPacket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademcoPrint
(
ack
,
len
);
send
(
clientSock
,
(
const
char
*
)
ack
,
len
,
0
);
break
;
...
...
@@ -174,8 +174,8 @@ int main(int argc, char** argv)
// reply ack
{
uint8_t
ack
[
1024
];
int
len
=
ademcoMakeAckPacket
(
(
uint8_t
*
)
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
char
ack
[
1024
];
int
len
=
ademcoMakeAckPacket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademcoPrint
(
ack
,
len
);
send
(
clientSock
,
(
const
char
*
)
ack
,
len
,
0
);
}
...
...
@@ -218,7 +218,7 @@ int main(int argc, char** argv)
int
bRead
=
FD_ISSET
(
clientSock
,
&
fd_read
);
if
(
!
bRead
)
{
return
;
}
uint8_t
*
temp
=
clientBuffer
.
buff
+
clientBuffer
.
wpos
;
char
*
temp
=
clientBuffer
.
buff
+
clientBuffer
.
wpos
;
size_t
dwLenToRead
=
BUFF_SIZE
-
clientBuffer
.
wpos
;
int
bytes_transfered
=
recv
(
clientSock
,
(
char
*
)
temp
,
(
int
)
dwLenToRead
,
0
);
...
...
@@ -268,11 +268,11 @@ int main(int argc, char** argv)
if
(
clientSock
!=
INVALID_SOCKET
&&
!
evntsWaiting4Send
.
empty
())
{
std
::
lock_guard
<
std
::
mutex
>
lg
(
mutex
);
uint8_t
buf
[
1024
];
char
buf
[
1024
];
for
(
auto
e
:
evntsWaiting4Send
)
{
if
(
e
==
EVENT_DISARM
)
{
AdemcoXDataSegment
xdata
;
ademcoMakeXData
(
&
xdata
,
TWO_HEX
,
AdemcoXDataTransform
::
AdemcoXDataTransform_as_is
,
(
const
uint8_t
*
)
pwd
,
6
);
ademcoMakeXData
(
&
xdata
,
TWO_HEX
,
AdemcoXDataTransform
::
AdemcoXDataTransform_as_is
,
pwd
,
6
);
int
len
=
ademcoMakeHbPacket
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
.
c_str
(),
clientAdemcoId
,
e
,
0
,
0
,
&
xdata
);
printf
(
"S:"
);
ademcoPrint
(
buf
,
len
);
send
(
clientSock
,
(
const
char
*
)
buf
,
len
,
0
);
...
...
hb_com.c
View file @
dfb828a6
...
...
@@ -467,7 +467,7 @@ const char* hbGetZoneFormatString(HbMachineType type)
if
(
10
<
zone
&&
zone
<
100
)
{
return
"%02d"
;
}
else
if
(
zone
<
1000
)
{
return
"%03d"
;
}
else
{
return
"%d"
;
}
}
void
hbSum
(
uint8_t
*
data
,
in
t
len
)
void
hbSum
(
uint8_t
*
data
,
size_
t
len
)
{
uint8_t
sum
=
0
;
uint8_t
*
p
=
data
;
...
...
@@ -477,7 +477,7 @@ void hbSum(uint8_t* data, int len)
*
p
=
sum
;
}
int
hbCheckSum
(
const
uint8_t
*
data
,
in
t
len
)
int
hbCheckSum
(
const
uint8_t
*
data
,
size_
t
len
)
{
uint8_t
sum
=
0
;
const
uint8_t
*
p
=
data
;
...
...
@@ -489,11 +489,11 @@ int hbCheckSum(const uint8_t* data, int len)
#define copy_data_to_com \
if (cd) { \
cd->len = len; \
memcpy(cd->data, data, len); \
cd->len = len
& 0xFF
; \
memcpy(cd->data, data, len
& 0xFF
); \
}
HbComRequestType
hbComParseRequest
(
const
uint8_t
*
data
,
in
t
len
,
HbComData
*
cd
)
HbComRequestType
hbComParseRequest
(
const
uint8_t
*
data
,
size_
t
len
,
HbComData
*
cd
)
{
do
{
if
(
len
<
5
)
{
break
;
}
...
...
@@ -614,7 +614,7 @@ ADEMCO_EXPORT_SYMBOL HbComRequestType hbComParseXDataRequest(const AdemcoXDataSe
return
hbComParseRequest
(
ademcoXDataGetValidContentAddr
(
xdata
),
ademcoXDataGetValidContentLen
(
xdata
),
cd
);
}
HbComResponseType
hbComParseResponse
(
const
uint8_t
*
data
,
in
t
len
,
HbComData
*
cd
)
HbComResponseType
hbComParseResponse
(
const
uint8_t
*
data
,
size_
t
len
,
HbComData
*
cd
)
{
do
{
if
(
len
<
7
)
{
break
;
}
// 所有的 response ,长度最小为 7
...
...
@@ -869,18 +869,18 @@ void hbComMakeRespA0_getMachineStatus(HbComData* data, HbMachineStatus status, H
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespA2_getMachineZones
(
HbComData
*
data
,
in
t
count
,
AdemcoZone
*
zones
,
HbZoneProperty
*
props
,
HbComResp_A2_p1
p1
)
void
hbComMakeRespA2_getMachineZones
(
HbComData
*
data
,
size_
t
count
,
AdemcoZone
*
zones
,
HbZoneProperty
*
props
,
HbComResp_A2_p1
p1
)
{
if
(
count
>
HbComResp_A2_max_zone
)
{
return
;
}
memcpy
(
data
->
data
,
HbComResp_A2_head
,
6
);
data
->
data
[
3
]
=
HbComResp_A2_len_min
+
count
*
2
;
data
->
data
[
3
]
=
(
HbComResp_A2_len_min
+
count
*
2
)
&
0xFF
;
uint8_t
*
p
=
data
->
data
+
6
;
for
(
in
t
i
=
0
;
i
<
count
;
i
++
)
{
for
(
size_
t
i
=
0
;
i
<
count
;
i
++
)
{
*
p
++
=
zones
[
i
]
&
0xFF
;
*
p
++
=
props
[
i
];
}
*
p
++
=
(
count
>
0
)
?
p1
:
HbComResp_A2_p1_nomore
;
data
->
len
=
++
p
-
data
->
data
;
data
->
len
=
(
++
p
-
data
->
data
)
&
0xFF
;
hbSum
(
data
->
data
,
data
->
len
);
}
...
...
@@ -929,14 +929,14 @@ void hbComMakeRespAB_modifyMachineZoneLostConfig(HbComData* data, AdemcoZone zon
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespAD_getMachineZoneLostConfig
(
HbComData
*
data
,
HbComResp_AD_p1
p1
,
in
t
count
,
AdemcoZone
*
zones
,
HbComResp_AD_p2
p2
)
void
hbComMakeRespAD_getMachineZoneLostConfig
(
HbComData
*
data
,
HbComResp_AD_p1
p1
,
size_
t
count
,
AdemcoZone
*
zones
,
HbComResp_AD_p2
p2
)
{
if
(
count
>
HbComResp_AD_max_zone
)
{
return
;
}
memcpy
(
data
->
data
,
HbComResp_AD_head
,
6
);
data
->
data
[
3
]
=
HbComResp_AD_len_min
+
(
p1
==
HbComResp_AD_p1_single
?
count
:
count
*
2
)
;
data
->
data
[
3
]
=
(
HbComResp_AD_len_min
+
(
p1
==
HbComResp_AD_p1_single
?
count
:
count
*
2
))
&
0xFF
;
data
->
data
[
6
]
=
p1
;
uint8_t
*
p
=
data
->
data
+
7
;
for
(
in
t
i
=
0
;
i
<
count
;
i
++
)
{
for
(
size_
t
i
=
0
;
i
<
count
;
i
++
)
{
if
(
p1
==
HbComResp_AD_p1_single
)
{
*
p
++
=
zones
[
i
]
&
0xFF
;
}
else
{
...
...
@@ -945,7 +945,7 @@ void hbComMakeRespAD_getMachineZoneLostConfig(HbComData* data, HbComResp_AD_p1 p
}
}
*
p
++
=
(
count
>
0
)
?
p2
:
HbComResp_AD_p2_nomore
;
data
->
len
=
++
p
-
data
->
data
;
data
->
len
=
(
++
p
-
data
->
data
)
&
0xFF
;
hbSum
(
data
->
data
,
data
->
len
);
}
...
...
hb_com.h
View file @
dfb828a6
...
...
@@ -130,7 +130,7 @@ typedef union HbMachineTimer {
// 串口透传数据
typedef
struct
HbComData
{
uint8_t
data
[
HB_COM_DATA_MAX_LEN
];
in
t
len
;
uint8_
t
len
;
}
HbComData
;
// 发给主机
...
...
@@ -192,7 +192,7 @@ typedef enum HbComResp_A2_p1 {
#define HbComResp_A2_head "\xEB\xBA\x3F\x08\xCC\xA2"
typedef
struct
HbComResp_A2_Iter
{
HbComData
com
;
in
t
i
,
total
;
uint8_
t
i
,
total
;
HbComResp_A2_p1
p1
;
}
HbComResp_A2_Iter
;
...
...
@@ -222,9 +222,9 @@ typedef enum HbComReq_A3_p3 {
#define HbComResp_A4_head "\xEB\xBA\x3F\x0A\xCC\xA4"
typedef
enum
HbComResp_A4_p3
{
HbComResp_A4_p3_fail
=
0x00
,
//! 失败
HbComResp_A4_p3_ok
=
0x01
,
//! 成功
HbComResp_A4_p3_dup
=
0x02
,
//! 失败--重码
HbComResp_A4_p3_ne
=
0x03
,
//! 失败--防区未对码 not exists
HbComResp_A4_p3_ok
=
0x01
,
//! 成功
HbComResp_A4_p3_dup
=
0x02
,
//! 失败--重码
HbComResp_A4_p3_ne
=
0x03
,
//! 失败--防区未对码 not exists
}
HbComResp_A4_p3
;
//! 获取主机定时器 EB AB 3F A5 7A
...
...
@@ -397,13 +397,13 @@ ADEMCO_EXPORT_SYMBOL const char* hbZonePropertyToStringChinese(HbZoneProperty zp
ADEMCO_EXPORT_SYMBOL
const
char
*
hbGetZoneFormatString
(
HbMachineType
type
);
// 累加校验,计算data[0] ~ data[len-2],校验和放在data[len-1]
ADEMCO_EXPORT_SYMBOL
void
hbSum
(
uint8_t
*
data
,
in
t
len
);
ADEMCO_EXPORT_SYMBOL
void
hbSum
(
uint8_t
*
data
,
size_
t
len
);
// 校验和是否正确, return 0 for incorrect, otherwise correct
ADEMCO_EXPORT_SYMBOL
int
hbCheckSum
(
const
uint8_t
*
data
,
in
t
len
);
ADEMCO_EXPORT_SYMBOL
int
hbCheckSum
(
const
uint8_t
*
data
,
size_
t
len
);
ADEMCO_EXPORT_SYMBOL
HbComRequestType
hbComParseRequest
(
const
uint8_t
*
buff
,
in
t
len
,
HbComData
*
cd
);
ADEMCO_EXPORT_SYMBOL
HbComRequestType
hbComParseRequest
(
const
uint8_t
*
buff
,
size_
t
len
,
HbComData
*
cd
);
ADEMCO_EXPORT_SYMBOL
HbComRequestType
hbComParseXDataRequest
(
const
AdemcoXDataSegment
*
xdata
,
HbComData
*
cd
);
ADEMCO_EXPORT_SYMBOL
HbComResponseType
hbComParseResponse
(
const
uint8_t
*
buff
,
in
t
len
,
HbComData
*
cd
);
ADEMCO_EXPORT_SYMBOL
HbComResponseType
hbComParseResponse
(
const
uint8_t
*
buff
,
size_
t
len
,
HbComData
*
cd
);
ADEMCO_EXPORT_SYMBOL
HbComResponseType
hbComParseXDataResponse
(
const
AdemcoXDataSegment
*
xdata
,
HbComData
*
cd
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeReqA0_getMachineStatus
(
HbComData
*
data
);
...
...
@@ -429,7 +429,7 @@ ADEMCO_EXPORT_SYMBOL HbComResp_A2_p1 hbComResp_A2_Iter_next(HbComResp_A2_Iter* i
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespA0_getMachineStatus
(
HbComData
*
data
,
HbMachineStatus
status
,
HbMachineType
type
);
// zones and props length is count
// if count is 0, p1 wil be set to HbComResp_A2_p1_nomore
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespA2_getMachineZones
(
HbComData
*
data
,
in
t
count
,
AdemcoZone
*
zones
,
HbZoneProperty
*
props
,
HbComResp_A2_p1
p1
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespA2_getMachineZones
(
HbComData
*
data
,
size_
t
count
,
AdemcoZone
*
zones
,
HbZoneProperty
*
props
,
HbComResp_A2_p1
p1
);
// 学码开始,等待探测器无线信号中
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespA3_waitingSignal
(
HbComData
*
data
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespA4_modifyMachineZone
(
HbComData
*
data
,
AdemcoZone
zone
,
HbZoneProperty
prop
,
HbComResp_A4_p3
p3
);
...
...
@@ -440,7 +440,7 @@ ADEMCO_EXPORT_SYMBOL void hbComMakeRespA8_reject(HbComData* data);
// ADEMCO_EXPORT_SYMBOL void hbComMakeRespA9_(HbComData* data);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespAB_modifyMachineZoneLostConfig
(
HbComData
*
data
,
AdemcoZone
zone
,
HbComResp_AB_p2
p2
);
// 返回所有失联开的防区
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespAD_getMachineZoneLostConfig
(
HbComData
*
data
,
HbComResp_AD_p1
p1
,
in
t
count
,
AdemcoZone
*
zones
,
HbComResp_AD_p2
p2
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespAD_getMachineZoneLostConfig
(
HbComData
*
data
,
HbComResp_AD_p1
p1
,
size_
t
count
,
AdemcoZone
*
zones
,
HbComResp_AD_p2
p2
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespAF_set3SectionMachineStatus
(
HbComData
*
data
,
HbCom_3sec_which
p1
,
HbCom_3sec_status
status
);
ADEMCO_EXPORT_SYMBOL
void
hbComMakeRespB1_get3SectionMachineStatus
(
HbComData
*
data
,
HbMachineStatus
statusMachine
,
HbMachineStatus
statusSec1
,
HbMachineStatus
statusSec2
,
HbMachineStatus
statusSec3
);
...
...
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