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
06734ec6
Commit
06734ec6
authored
Mar 11, 2023
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update code style
parent
582b04a9
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
232 additions
and
384 deletions
+232
-384
ademco.c
ademco.c
+102
-184
ademco.vcxproj
examples/ademco/ademco.vcxproj
+4
-4
ademco_static.vcxproj
examples/ademco_static/ademco_static.vcxproj
+4
-4
ademco_static_mt.vcxproj
examples/ademco_static_mt/ademco_static_mt.vcxproj
+4
-4
server_demo.cpp
examples/server_demo/server_demo.cpp
+17
-23
server_demo.vcxproj
examples/server_demo/server_demo.vcxproj
+4
-0
hb_com.c
hb_com.c
+97
-165
No files found.
ademco.c
View file @
06734ec6
...
...
@@ -4,12 +4,6 @@
* 2022-6-13 rewrited this C version
*/
#ifdef _WIN32
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#endif
#include "ademco.h"
#include <stdio.h>
#include <stdlib.h>
...
...
@@ -26,14 +20,12 @@
#define dline dprintf("%s %d\n", __FILE__, __LINE__);
#define dmsg dline; dprintf
void
ademcoPrint
(
const
ademco_char_t
*
p
,
size_t
len
)
{
void
ademcoPrint
(
const
ademco_char_t
*
p
,
size_t
len
)
{
while
(
len
--
)
{
if
(
isprint
(
*
(
const
uint8_t
*
)
p
))
{
if
(
isprint
(
*
(
const
uint8_t
*
)
p
))
putchar
(
*
p
);
}
else
{
else
printf
(
"
\\
x%02X"
,
*
(
const
uint8_t
*
)
p
);
}
p
++
;
}
printf
(
"
\n
"
);
...
...
@@ -68,8 +60,7 @@ int ademcoIsMachineTypeEvent(AdemcoEvent ademcoEvent) {
||
ademcoEvent
==
EVENT_I_AM_NB_MACHINE
;
}
int
ademcoIsEventNeedControlSource
(
AdemcoEvent
ademcoEvent
)
{
int
ademcoIsEventNeedControlSource
(
AdemcoEvent
ademcoEvent
)
{
return
ademcoEvent
==
EVENT_ARM
||
ademcoEvent
==
EVENT_HALFARM
||
ademcoEvent
==
EVENT_HALFARM_1456
...
...
@@ -79,8 +70,7 @@ int ademcoIsEventNeedControlSource(AdemcoEvent ademcoEvent)
||
ademcoEvent
==
EVENT_PHONE_USER_CANCLE_ALARM
;
}
AdemcoEvent
ademcoGetExceptionEventByResumeEvent
(
AdemcoEvent
resumeEvent
)
{
AdemcoEvent
ademcoGetExceptionEventByResumeEvent
(
AdemcoEvent
resumeEvent
)
{
switch
(
resumeEvent
)
{
case
EVENT_RECONNECT
:
return
EVENT_DISCONNECT
;
case
EVENT_LOST_RECOVER
:
return
EVENT_LOST
;
...
...
@@ -97,8 +87,7 @@ AdemcoEvent ademcoGetExceptionEventByResumeEvent(AdemcoEvent resumeEvent)
}
}
AdemcoEventLevel
ademcoGetEventLevel
(
AdemcoEvent
ademcoEvent
)
{
AdemcoEventLevel
ademcoGetEventLevel
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_ARM
:
case
EVENT_DISARM
:
...
...
@@ -148,8 +137,7 @@ AdemcoEventLevel ademcoGetEventLevel(AdemcoEvent ademcoEvent)
}
}
const
char
*
ademcoEventToString
(
AdemcoEvent
ademcoEvent
)
{
const
char
*
ademcoEventToString
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_ARM
:
return
"ARM"
;
case
EVENT_BURGLAR
:
return
"BURGLAR"
;
...
...
@@ -226,8 +214,7 @@ const char* ademcoEventToString(AdemcoEvent ademcoEvent)
}
}
const
char
*
ademcoEventToStringChinese
(
AdemcoEvent
ademcoEvent
)
{
const
char
*
ademcoEventToStringChinese
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_ARM
:
return
"布防"
;
case
EVENT_BURGLAR
:
return
"盗警"
;
...
...
@@ -342,17 +329,14 @@ static const uint16_t crc16Table[256] = {
0x8201
,
0x42C0
,
0x4380
,
0x8341
,
0x4100
,
0x81C1
,
0x8081
,
0x4040
,
};
uint16_t
ademcoCRC16
(
const
ademco_char_t
*
buff
,
size_t
len
)
{
uint16_t
ademcoCRC16
(
const
ademco_char_t
*
buff
,
size_t
len
)
{
uint16_t
crc
=
0
;
while
(
len
--
)
{
while
(
len
--
)
crc
=
(
crc
>>
8
)
^
crc16Table
[(
crc
^
*
buff
++
)
&
0xFF
];
}
return
crc
;
}
size_t
ademcoAppendDataSegment
(
ademco_char_t
*
buff
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
{
size_t
ademcoAppendDataSegment
(
ademco_char_t
*
buff
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
{
char
*
p
=
(
char
*
)
buff
;
if
(
ademcoEvent
==
EVENT_INVALID_EVENT
)
{
*
p
++
=
'['
;
...
...
@@ -398,8 +382,7 @@ size_t ademcoAppendDataSegment(ademco_char_t* buff, AdemcoId ademcoId, AdemcoEve
}
}
size_t
ademcoAppendDataSegment2
(
AdemcoDataSegment
*
dataSegment
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
{
size_t
ademcoAppendDataSegment2
(
AdemcoDataSegment
*
dataSegment
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
{
dataSegment
->
ademcoId
=
ademcoId
;
dataSegment
->
ademcoEvent
=
ademcoEvent
;
dataSegment
->
gg
=
gg
;
...
...
@@ -407,8 +390,7 @@ size_t ademcoAppendDataSegment2(AdemcoDataSegment* dataSegment, AdemcoId ademcoI
return
dataSegment
->
raw_len
=
ademcoAppendDataSegment
(
dataSegment
->
raw
,
ademcoId
,
ademcoEvent
,
gg
,
zone
);
}
AdemcoParseResult
ademcoParseDataSegment
(
const
ademco_char_t
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
)
{
AdemcoParseResult
ademcoParseDataSegment
(
const
ademco_char_t
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
)
{
if
(
packet_len
==
ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN
&&
packet
[
0
]
==
'['
&&
packet
[
1
]
==
']'
)
{
memset
(
dataSegment
,
0
,
sizeof
(
*
dataSegment
));
strcpy
((
char
*
)
dataSegment
->
raw
,
"[]"
);
...
...
@@ -418,11 +400,10 @@ AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t pac
do
{
const
char
*
p
=
packet
+
2
;
size_t
acct_len
=
packet_len
-
15
;
if
(
acct_len
<
6
)
{
if
(
acct_len
<
6
)
break
;
}
char
temp
[
ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX
]
=
{
0
};
char
temp
[
ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX
]
=
{
0
};
strncpy
(
temp
,
(
const
char
*
)
p
,
acct_len
);
temp
[
acct_len
]
=
'\0'
;
dataSegment
->
ademcoId
=
(
AdemcoId
)
strtoul
(
temp
,
NULL
,
16
);
...
...
@@ -460,8 +441,7 @@ AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t pac
return
RESULT_ERROR
;
}
size_t
ademcoDataSegmentToCongwinFe100
(
ademco_char_t
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
)
{
size_t
ademcoDataSegmentToCongwinFe100
(
ademco_char_t
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
)
{
if
(
dataSegment
->
raw_len
==
ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN
)
{
fe100
[
0
]
=
'\n'
;
fe100
[
1
]
=
'\r'
;
...
...
@@ -484,11 +464,10 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
*
p
++
=
' '
;
// E for open, R for close
if
(
dataSegment
->
ademcoEvent
/
1000
==
1
||
dataSegment
->
ademcoEvent
==
EVENT_HALFARM
)
{
if
(
dataSegment
->
ademcoEvent
/
1000
==
1
||
dataSegment
->
ademcoEvent
==
EVENT_HALFARM
)
*
p
++
=
'E'
;
}
else
{
else
*
p
++
=
'R'
;
}
if
(
dataSegment
->
ademcoEvent
==
EVENT_OFFLINE
)
{
*
p
++
=
'3'
;
...
...
@@ -508,11 +487,10 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
*
p
++
=
'0'
;
*
p
++
=
' '
;
if
(
ademcoIsMachineStatusEvent
(
dataSegment
->
ademcoEvent
))
{
if
(
ademcoIsMachineStatusEvent
(
dataSegment
->
ademcoEvent
))
*
p
++
=
'U'
;
// user event
}
else
{
else
*
p
++
=
'C'
;
// zone event
}
sprintf
(
p
,
"%03d"
,
dataSegment
->
zone
);
p
+=
3
;
...
...
@@ -524,13 +502,11 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
return
0
;
}
void
ademcoXDataInit
(
AdemcoXDataSegment
*
xdata
)
{
void
ademcoXDataInit
(
AdemcoXDataSegment
*
xdata
)
{
memset
(
xdata
,
0
,
sizeof
*
xdata
);
}
int
ademcoXDataConvert
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
)
{
int
ademcoXDataConvert
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
)
{
if
(
!
xdata
)
{
return
ADEMCO_ERR
;
}
if
(
xdata
->
lenghFormat
==
xlf
)
{
return
ADEMCO_OK
;
}
...
...
@@ -538,9 +514,8 @@ int ademcoXDataConvert(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf)
char
raw
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
if
(
xlf
==
TWO_HEX
)
{
if
(
len
+
6
>
ADEMCO_PACKET_XDATA_MAX_LEN
)
{
if
(
len
+
6
>
ADEMCO_PACKET_XDATA_MAX_LEN
)
return
ADEMCO_ERR
;
}
xdata
->
raw
[
5
+
ademcoXDataGetValidContentLen
(
xdata
)]
=
'\0'
;
len
=
ademcoHexStrToArray
((
uint8_t
*
)
raw
,
ademcoXDataGetValidContentAddr
(
xdata
),
0x0F
);
ademcoMakeXData
(
xdata
,
TWO_HEX
,
AdemcoXDataTransform_as_is
,
raw
,
len
);
...
...
@@ -554,38 +529,32 @@ int ademcoXDataConvert(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf)
#ifdef SWIG
static
#endif
const
char
*
ademcoXDataGetValidContentAddr
(
const
AdemcoXDataSegment
*
xdata
)
{
if
(
xdata
->
lenghFormat
==
TWO_HEX
&&
xdata
->
raw_len
>
4
)
{
const
char
*
ademcoXDataGetValidContentAddr
(
const
AdemcoXDataSegment
*
xdata
)
{
if
(
xdata
->
lenghFormat
==
TWO_HEX
&&
xdata
->
raw_len
>
4
)
return
xdata
->
raw
+
3
;
}
else
if
(
xdata
->
lenghFormat
==
FOUR_DECIMAL
&&
xdata
->
raw_len
>
6
)
{
else
if
(
xdata
->
lenghFormat
==
FOUR_DECIMAL
&&
xdata
->
raw_len
>
6
)
return
xdata
->
raw
+
5
;
}
else
{
else
return
NULL
;
}
}
int
ademcoXDataMemcmp
(
const
AdemcoXDataSegment
*
xdata
,
const
void
*
buf
,
size_t
buf_len
)
{
int
ademcoXDataMemcmp
(
const
AdemcoXDataSegment
*
xdata
,
const
void
*
buf
,
size_t
buf_len
)
{
if
(
ademcoXDataGetValidContentLen
(
xdata
)
!=
buf_len
)
return
0
;
const
void
*
p
=
ademcoXDataGetValidContentAddr
(
xdata
);
if
(
!
p
)
return
0
;
return
memcmp
(
p
,
buf
,
buf_len
);
}
size_t
ademcoXDataGetValidContentLen
(
const
AdemcoXDataSegment
*
xdata
)
{
if
(
xdata
->
lenghFormat
==
TWO_HEX
&&
xdata
->
raw_len
>
4
)
{
size_t
ademcoXDataGetValidContentLen
(
const
AdemcoXDataSegment
*
xdata
)
{
if
(
xdata
->
lenghFormat
==
TWO_HEX
&&
xdata
->
raw_len
>
4
)
return
xdata
->
raw_len
-
4
;
}
else
if
(
xdata
->
lenghFormat
==
FOUR_DECIMAL
&&
xdata
->
raw_len
>
6
)
{
else
if
(
xdata
->
lenghFormat
==
FOUR_DECIMAL
&&
xdata
->
raw_len
>
6
)
return
xdata
->
raw_len
-
6
;
}
else
{
else
return
0
;
}
}
size_t
ademcoXDataCopy
(
AdemcoXDataSegment
*
dst
,
const
AdemcoXDataSegment
*
src
)
{
size_t
ademcoXDataCopy
(
AdemcoXDataSegment
*
dst
,
const
AdemcoXDataSegment
*
src
)
{
if
(
dst
&&
src
&&
src
->
raw_len
>
0
)
{
memcpy
(
dst
,
src
,
sizeof
(
AdemcoXDataSegment
));
return
src
->
raw_len
;
...
...
@@ -593,22 +562,18 @@ size_t ademcoXDataCopy(AdemcoXDataSegment* dst, const AdemcoXDataSegment* src)
return
0
;
}
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
ademco_char_t
*
content
,
size_t
len
)
{
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
ademco_char_t
*
content
,
size_t
len
)
{
char
transformed
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
size_t
translen
;
len
&=
0xFFFF
;
translen
=
len
&
0xFFFF
;
if
(
xtr
==
AdemcoXDataTransform_as_is
)
{
if
(
xtr
==
AdemcoXDataTransform_as_is
)
memcpy
(
transformed
,
content
,
len
);
}
else
{
if
(
len
*
2
<
ADEMCO_PACKET_XDATA_MAX_LEN
)
{
translen
=
ademcoHexArrayToStr
(
transformed
,
(
const
uint8_t
*
)
content
,
len
)
&
0xFFFF
;
}
else
{
return
ADEMCO_ERR
;
}
}
else
if
(
len
*
2
<
ADEMCO_PACKET_XDATA_MAX_LEN
)
translen
=
ademcoHexArrayToStr
(
transformed
,
(
const
uint8_t
*
)
content
,
len
)
&
0xFFFF
;
else
return
ADEMCO_ERR
;
xdata
->
lenghFormat
=
xlf
;
if
(
xlf
==
TWO_HEX
&&
translen
+
4
<
ADEMCO_PACKET_XDATA_MAX_LEN
)
{
...
...
@@ -633,13 +598,11 @@ int ademcoMakeXData(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, Adem
*
p
++
=
']'
;
xdata
->
raw_len
=
p
-
xdata
->
raw
;
return
ADEMCO_OK
;
}
else
{
}
else
return
ADEMCO_ERR
;
}
}
int
isAdemcoPacketId
(
const
char
*
standard
,
const
char
*
id
,
size_t
len
)
{
int
isAdemcoPacketId
(
const
char
*
standard
,
const
char
*
id
,
size_t
len
)
{
return
strncmp
(
standard
,
id
,
strlen
(
standard
))
==
0
;
}
...
...
@@ -654,28 +617,21 @@ static const char* const ids[AID_COUNT] = {
ADEMCO_PACKET_ID_REG_RSP
,
};
AdemcoPacketId
getAdemcoPacketId
(
const
char
*
id
,
size_t
len
)
{
for
(
int
i
=
0
;
i
<
AID_COUNT
;
i
++
)
{
if
(
isAdemcoPacketId
(
ids
[
i
],
id
,
len
))
{
AdemcoPacketId
getAdemcoPacketId
(
const
char
*
id
,
size_t
len
)
{
for
(
int
i
=
0
;
i
<
AID_COUNT
;
i
++
)
if
(
isAdemcoPacketId
(
ids
[
i
],
id
,
len
))
return
(
AdemcoPacketId
)(
i
);
}
}
return
AID_INVALID
;
}
const
char
*
admecoPacketIdToString
(
AdemcoPacketId
id
)
{
if
(
0
<=
id
&&
id
<
AID_COUNT
)
{
const
char
*
admecoPacketIdToString
(
AdemcoPacketId
id
)
{
if
(
0
<=
id
&&
id
<
AID_COUNT
)
return
ids
[
id
];
}
else
{
else
return
"Unkown AdemcoPacketId"
;
}
}
static
void
getNowTimestamp
(
char
*
buff
)
{
static
void
getNowTimestamp
(
char
*
buff
)
{
time_t
now
=
time
(
NULL
);
struct
tm
*
tm
=
localtime
(
&
now
);
snprintf
(
buff
,
ADEMCO_PACKET_TIMESTAMP_LEN
+
1
,
"_%02d:%02d:%02d,%02d-%02d-%04d"
,
...
...
@@ -683,8 +639,8 @@ static void getNowTimestamp(char* buff)
tm
->
tm_mon
+
1
,
tm
->
tm_mday
,
tm
->
tm_year
+
1900
);
}
size_t
ademcoMakeEmptyDataPacket
(
ademco_char_t
*
dst_buff
,
size_t
len
,
const
char
*
id
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
size_t
ademcoMakeEmptyDataPacket
(
ademco_char_t
*
dst_buff
,
size_t
len
,
const
char
*
id
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
char
buff
[
ADEMCO_PACKET_MAX_LEN
];
char
*
p
=
buff
;
char
*
pcrc
=
buff
+
1
;
...
...
@@ -728,29 +684,24 @@ size_t ademcoMakeEmptyDataPacket(ademco_char_t* dst_buff, size_t len, const char
memcpy
(
dst_buff
,
buff
,
packet_len
);
dst_buff
[
packet_len
]
=
'\0'
;
// for debug convenience
return
packet_len
;
}
else
{
}
else
return
0
;
}
}
size_t
ademcoMakeNullPacket
(
ademco_char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
size_t
ademcoMakeNullPacket
(
ademco_char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
return
ademcoMakeEmptyDataPacket
(
buff
,
len
,
ADEMCO_PACKET_ID_NULL
,
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeAckPacket
(
ademco_char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
size_t
ademcoMakeAckPacket
(
ademco_char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
return
ademcoMakeEmptyDataPacket
(
buff
,
len
,
ADEMCO_PACKET_ID_ACK
,
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeNakPacket
(
ademco_char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
size_t
ademcoMakeNakPacket
(
ademco_char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
return
ademcoMakeEmptyDataPacket
(
buff
,
len
,
ADEMCO_PACKET_ID_NAK
,
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeHbPacket
(
ademco_char_t
*
dst_buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
const
AdemcoXDataSegment
*
xdata
)
{
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
const
AdemcoXDataSegment
*
xdata
)
{
char
buff
[
ADEMCO_PACKET_MAX_LEN
];
char
*
p
=
buff
;
char
*
pcrc
=
buff
+
1
;
...
...
@@ -801,38 +752,32 @@ size_t ademcoMakeHbPacket(ademco_char_t* dst_buff, size_t len, uint16_t seq, con
return
0
;
}
static
void
copyAcct2AdemcoPacket
(
AdemcoPacket
*
pkt
,
const
char
*
acct
)
{
static
void
copyAcct2AdemcoPacket
(
AdemcoPacket
*
pkt
,
const
char
*
acct
)
{
if
(
acct
)
{
size_t
len
=
strlen
(
acct
);
if
(
len
>
ADEMCO_PACKET_ACCT_MAX_LEN
)
{
if
(
len
>
ADEMCO_PACKET_ACCT_MAX_LEN
)
len
=
ADEMCO_PACKET_ACCT_MAX_LEN
;
}
memcpy
(
pkt
->
acct
,
acct
,
len
);
pkt
->
acct
[
len
]
=
'\0'
;
}
else
{
}
else
pkt
->
acct
[
0
]
=
'\0'
;
}
}
size_t
ademcoMakeNullPacket2
(
AdemcoPacket
*
pkt
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
size_t
ademcoMakeNullPacket2
(
AdemcoPacket
*
pkt
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
pkt
->
seq
=
seq
;
copyAcct2AdemcoPacket
(
pkt
,
acct
);
pkt
->
data
.
ademcoId
=
ademcoId
;
return
pkt
->
raw_len
=
ademcoMakeNullPacket
(
pkt
->
raw
,
sizeof
(
pkt
->
raw
),
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeAckPacket2
(
AdemcoPacket
*
pkt
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
size_t
ademcoMakeAckPacket2
(
AdemcoPacket
*
pkt
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
pkt
->
seq
=
seq
;
copyAcct2AdemcoPacket
(
pkt
,
acct
);
pkt
->
data
.
ademcoId
=
ademcoId
;
return
pkt
->
raw_len
=
ademcoMakeAckPacket
(
pkt
->
raw
,
sizeof
(
pkt
->
raw
),
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeNakPacket2
(
AdemcoPacket
*
pkt
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
size_t
ademcoMakeNakPacket2
(
AdemcoPacket
*
pkt
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
pkt
->
seq
=
seq
;
copyAcct2AdemcoPacket
(
pkt
,
acct
);
pkt
->
data
.
ademcoId
=
ademcoId
;
...
...
@@ -840,8 +785,7 @@ size_t ademcoMakeNakPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, A
}
size_t
ademcoMakeHbPacket2
(
AdemcoPacket
*
pkt
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
const
AdemcoXDataSegment
*
xdata
)
{
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
const
AdemcoXDataSegment
*
xdata
)
{
pkt
->
seq
=
seq
;
copyAcct2AdemcoPacket
(
pkt
,
acct
);
ademcoAppendDataSegment2
(
&
pkt
->
data
,
ademcoId
,
ademcoEvent
,
gg
,
zone
);
...
...
@@ -849,20 +793,18 @@ size_t ademcoMakeHbPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, Ad
pkt
->
xdata
.
lenghFormat
=
xdata
->
lenghFormat
;
memcpy
(
pkt
->
xdata
.
raw
,
xdata
->
raw
,
xdata
->
raw_len
);
pkt
->
xdata
.
raw_len
=
xdata
->
raw_len
;
}
else
{
}
else
memset
(
&
pkt
->
xdata
,
0
,
sizeof
(
*
xdata
));
}
return
pkt
->
raw_len
=
ademcoMakeHbPacket
(
pkt
->
raw
,
sizeof
(
pkt
->
raw
),
seq
,
acct
,
ademcoId
,
ademcoEvent
,
gg
,
zone
,
xdata
);
return
pkt
->
raw_len
=
ademcoMakeHbPacket
(
pkt
->
raw
,
sizeof
(
pkt
->
raw
),
seq
,
acct
,
ademcoId
,
ademcoEvent
,
gg
,
zone
,
xdata
);
}
AdemcoParseResult
ademcoPacketParse
(
const
ademco_char_t
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
)
{
AdemcoParseResult
ademcoPacketParse
(
const
ademco_char_t
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
)
{
if
(
len
<
9
)
{
return
RESULT_NOT_ENOUGH
;
}
do
{
do
{
const
char
*
p
=
buff
;
if
(
*
p
++
!=
ADEMCO_PACKET_PREFIX
)
{
if
(
*
p
++
!=
ADEMCO_PACKET_PREFIX
)
break
;
}
char
temp
[
5
];
...
...
@@ -878,9 +820,8 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
pkt
->
len
=
strtoul
(
temp
,
NULL
,
16
);
p
+=
4
;
size_t
len_needed
=
9
+
pkt
->
len
+
1
;
if
(
len
<
len_needed
)
{
if
(
len
<
len_needed
)
return
RESULT_NOT_ENOUGH
;
}
if
(
len_needed
>=
ADEMCO_PACKET_MAX_LEN
)
{
dline
;
return
RESULT_ERROR
;
...
...
@@ -940,9 +881,9 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
// #acct
const
char
*
pacct
=
++
p
;
while
(
p
<
pcr
&&
*
p
!=
'['
)
{
while
(
p
<
pcr
&&
*
p
!=
'['
)
{
if
(
!
isalnum
(
*
p
))
{
p
=
NULL
;
dline
;
break
;
}
p
++
;
p
++
;
}
if
(
p
==
NULL
||
p
>=
pcr
||
*
p
!=
'['
||
p
-
pacct
>=
ADEMCO_PACKET_ACCT_MAX_LEN
)
{
dline
;
break
;
}
strncpy
(
pkt
->
acct
,
(
const
char
*
)
pacct
,
p
-
pacct
);
...
...
@@ -959,11 +900,9 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
const
char
*
pxdata
=
p
++
;
AdemcoXDataLengthFormat
xlf
=
FOUR_DECIMAL
;
size_t
valid_len
;
for
(
int
i
=
0
;
i
<
4
;
i
++
)
{
if
(
!
isxdigit
(
*
(
uint8_t
*
)(
p
+
i
)))
{
for
(
int
i
=
0
;
i
<
4
;
i
++
)
if
(
!
isxdigit
(
*
(
uint8_t
*
)(
p
+
i
)))
xlf
=
TWO_HEX
;
}
}
if
(
xlf
==
FOUR_DECIMAL
)
{
memcpy
(
temp
,
pxdata
+
1
,
4
);
temp
[
4
]
=
'\0'
;
...
...
@@ -976,7 +915,7 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
if
(
p
>=
pcr
||
*
p
!=
']'
||
*
(
p
+
1
)
!=
'_'
)
{
dline
;
break
;
}
pkt
->
xdata
.
lenghFormat
=
xlf
;
pkt
->
xdata
.
raw_len
=
++
p
-
pxdata
;
pkt
->
xdata
.
raw_len
=
++
p
-
pxdata
;
memcpy
(
pkt
->
xdata
.
raw
,
pxdata
,
pkt
->
xdata
.
raw_len
);
}
else
{
pkt
->
xdata
.
raw_len
=
0
;
...
...
@@ -989,7 +928,7 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
int
ret
=
sscanf
((
const
char
*
)
p
,
"_%02d:%02d:%02d,%02d-%02d-%04d"
,
&
tm
.
tm_hour
,
&
tm
.
tm_min
,
&
tm
.
tm_sec
,
&
tm
.
tm_mon
,
&
tm
.
tm_mday
,
&
tm
.
tm_year
);
if
(
ret
!=
6
)
{
if
(
ret
!=
6
)
{
// wont break
}
...
...
@@ -1005,17 +944,15 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
if
(
p
++
!=
pcr
)
{
dline
;
break
;
}
pkt
->
raw_len
=
*
cb_commited
=
p
-
buff
;
if
(
pkt
->
raw
!=
buff
)
{
if
(
pkt
->
raw
!=
buff
)
memcpy
(
pkt
->
raw
,
buff
,
pkt
->
raw_len
);
}
return
RESULT_OK
;
}
while
(
0
);
return
RESULT_ERROR
;
}
size_t
ademcoHiLoArrayToDecStr
(
ademco_char_t
*
str
,
const
uint8_t
*
arr
,
size_t
len
)
{
size_t
ademcoHiLoArrayToDecStr
(
ademco_char_t
*
str
,
const
uint8_t
*
arr
,
size_t
len
)
{
char
*
p
=
str
;
for
(
size_t
i
=
0
;
i
<
len
;
i
++
)
{
char
c
=
(
arr
[
i
]
>>
4
)
&
0x0F
;
...
...
@@ -1028,21 +965,19 @@ size_t ademcoHiLoArrayToDecStr(ademco_char_t* str, const uint8_t* arr, size_t le
return
p
-
str
;
}
size_t
ademcoDecStrToHiLoArray
(
uint8_t
*
arr
,
size_t
len
,
const
char
*
str
)
{
size_t
ademcoDecStrToHiLoArray
(
uint8_t
*
arr
,
size_t
len
,
const
char
*
str
)
{
char
*
p
=
(
char
*
)
arr
;
size_t
slen
=
str
?
strlen
(
str
)
:
0
;
if
(
slen
>
len
*
2
)
{
if
(
slen
>
len
*
2
)
slen
=
len
*
2
;
}
for
(
size_t
i
=
0
;
i
<
slen
;
i
+=
2
)
{
char
hi
=
str
[
i
];
if
(
'0'
<=
hi
&&
hi
<=
'9'
)
{
if
(
i
+
1
<
slen
)
{
char
lo
=
str
[
i
+
1
];
if
(
'0'
<=
lo
&&
lo
<=
'9'
)
{
if
(
'0'
<=
lo
&&
lo
<=
'9'
)
*
p
++
=
(
hi
<<
4
)
|
(
lo
&
0x0F
);
}
else
{
else
{
*
p
++
=
(
hi
<<
4
)
|
0x0F
;
break
;
}
...
...
@@ -1050,27 +985,23 @@ size_t ademcoDecStrToHiLoArray(uint8_t* arr, size_t len, const char* str)
*
p
++
=
(
hi
<<
4
)
|
0x0F
;
break
;
}
}
else
{
}
else
break
;
}
}
while
((
char
*
)
arr
+
len
>
p
)
{
while
((
char
*
)
arr
+
len
>
p
)
*
p
++
=
0xFF
;
}
return
len
;
}
static
uint8_t
hex2char
(
uint8_t
h
)
{
h
&=
0x0F
;
if
(
h
>
9
)
{
if
(
h
>
9
)
return
'A'
+
h
-
10
;
}
else
{
else
return
'0'
+
h
;
}
}
size_t
ademcoHexArrayToStr
(
char
*
str
,
const
uint8_t
*
arr
,
size_t
len
)
{
size_t
ademcoHexArrayToStr
(
char
*
str
,
const
uint8_t
*
arr
,
size_t
len
)
{
char
*
p
=
str
;
for
(
size_t
i
=
0
;
i
<
len
;
i
++
)
{
*
p
++
=
hex2char
((
arr
[
i
]
>>
4
)
&
0x0F
);
...
...
@@ -1080,82 +1011,69 @@ size_t ademcoHexArrayToStr(char* str, const uint8_t* arr, size_t len)
}
static
uint8_t
char2hex
(
uint8_t
c
)
{
if
(
'0'
<=
c
&&
c
<=
'9'
)
{
if
(
'0'
<=
c
&&
c
<=
'9'
)
return
c
-
'0'
;
}
else
if
(
'A'
<=
c
&&
c
<=
'F'
)
{
else
if
(
'A'
<=
c
&&
c
<=
'F'
)
return
c
-
'A'
+
10
;
}
else
if
(
'a'
<=
c
&&
c
<=
'f'
)
{
else
if
(
'a'
<=
c
&&
c
<=
'f'
)
return
c
-
'a'
+
10
;
}
else
{
else
return
0xFF
;
}
}
size_t
ademcoHexStrToArray
(
uint8_t
*
arr
,
const
char
*
str
,
uint8_t
padding
)
{
size_t
ademcoHexStrToArray
(
uint8_t
*
arr
,
const
char
*
str
,
uint8_t
padding
)
{
uint8_t
*
p
=
arr
;
uint8_t
hi
=
0
,
lo
=
0
;
size_t
slen
=
str
?
strlen
(
str
)
:
0
;
padding
&=
0x0F
;
for
(
size_t
i
=
0
;
i
<
slen
/
2
;
i
++
)
{
char
c
=
str
[
i
*
2
];
if
((
hi
=
char2hex
(
c
))
==
0xFF
)
{
if
((
hi
=
char2hex
(
c
))
==
0xFF
)
return
0
;
}
if
(
i
*
2
+
1
<
slen
)
{
c
=
str
[
i
*
2
+
1
];
if
((
lo
=
char2hex
(
c
))
==
0xFF
)
{
if
((
lo
=
char2hex
(
c
))
==
0xFF
)
return
0
;
}
}
else
{
}
else
lo
=
padding
;
}
*
p
++
=
((
hi
<<
4
)
&
0xF0
)
|
(
lo
&
0x0F
);
}
return
p
-
arr
;
}
size_t
ademcoHexStrToArrayN
(
uint8_t
*
arr
,
const
char
*
str
,
size_t
len
,
uint8_t
padding
)
{
size_t
ademcoHexStrToArrayN
(
uint8_t
*
arr
,
const
char
*
str
,
size_t
len
,
uint8_t
padding
)
{
uint8_t
*
p
=
arr
;
uint8_t
hi
=
0
,
lo
=
0
;
padding
&=
0x0F
;
for
(
size_t
i
=
0
;
i
<
len
/
2
;
i
++
)
{
char
c
=
str
[
i
*
2
];
if
((
hi
=
char2hex
(
c
))
==
0xFF
)
{
if
((
hi
=
char2hex
(
c
))
==
0xFF
)
return
0
;
}
if
(
i
*
2
+
1
<
len
)
{
c
=
str
[
i
*
2
+
1
];
if
((
lo
=
char2hex
(
c
))
==
0xFF
)
{
if
((
lo
=
char2hex
(
c
))
==
0xFF
)
return
0
;
}
}
else
{
}
else
lo
=
padding
;
}
*
p
++
=
((
hi
<<
4
)
&
0xF0
)
|
(
lo
&
0x0F
);
}
return
p
-
arr
;
}
size_t
ademcoHexStrToArrayN_allow_non_hex_str
(
uint8_t
*
arr
,
const
char
*
str
,
size_t
len
,
uint8_t
padding
)
{
size_t
ademcoHexStrToArrayN_allow_non_hex_str
(
uint8_t
*
arr
,
const
char
*
str
,
size_t
len
,
uint8_t
padding
)
{
uint8_t
*
p
=
arr
;
uint8_t
hi
=
0
,
lo
=
0
;
padding
&=
0x0F
;
for
(
size_t
i
=
0
;
i
<
len
/
2
;
i
++
)
{
char
c
=
str
[
i
*
2
];
if
((
hi
=
char2hex
(
c
))
==
0xFF
)
{
if
((
hi
=
char2hex
(
c
))
==
0xFF
)
hi
=
padding
;
}
if
(
i
*
2
+
1
<
len
)
{
c
=
str
[
i
*
2
+
1
];
if
((
lo
=
char2hex
(
c
))
==
0xFF
)
{
if
((
lo
=
char2hex
(
c
))
==
0xFF
)
lo
=
padding
;
}
}
else
{
}
else
lo
=
padding
;
}
*
p
++
=
((
hi
<<
4
)
&
0xF0
)
|
(
lo
&
0x0F
);
}
return
p
-
arr
;
...
...
examples/ademco/ademco.vcxproj
View file @
06734ec6
...
...
@@ -86,7 +86,7 @@
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;_DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
WIN32;_DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -103,7 +103,7 @@
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
WIN32;NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -120,7 +120,7 @@
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
_DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_
CRT_SECURE_NO_WARNINGS;_
DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -137,7 +137,7 @@
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
examples/ademco_static/ademco_static.vcxproj
View file @
06734ec6
...
...
@@ -94,7 +94,7 @@
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -111,7 +111,7 @@
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -128,7 +128,7 @@
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
_DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_
CRT_SECURE_NO_WARNINGS;_
DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -145,7 +145,7 @@
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
examples/ademco_static_mt/ademco_static_mt.vcxproj
View file @
06734ec6
...
...
@@ -94,7 +94,7 @@
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -112,7 +112,7 @@
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -130,7 +130,7 @@
<ClCompile>
<WarningLevel>
Level3
</WarningLevel>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
_DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_
CRT_SECURE_NO_WARNINGS;_
DEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
@@ -148,7 +148,7 @@
<FunctionLevelLinking>
true
</FunctionLevelLinking>
<IntrinsicFunctions>
true
</IntrinsicFunctions>
<SDLCheck>
true
</SDLCheck>
<PreprocessorDefinitions>
NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;
NDEBUG;_LIB;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
<ConformanceMode>
true
</ConformanceMode>
<PrecompiledHeader>
NotUsing
</PrecompiledHeader>
<PrecompiledHeaderFile>
pch.h
</PrecompiledHeaderFile>
...
...
examples/server_demo/server_demo.cpp
View file @
06734ec6
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#ifndef NOMINMAX
#define NOMINMAX
...
...
@@ -28,21 +27,18 @@
#include "../../ademco.h"
void
op_usage
()
{
void
op_usage
()
{
printf
(
"Press A for Arm, D for Disarm, E for Emergency, Q for Quit
\n
"
);
}
void
usage
(
const
char
*
name
)
{
void
usage
(
const
char
*
name
)
{
printf
(
"Usage: %s listening_port
\n
"
,
name
);
op_usage
();
}
constexpr
size_t
BUFF_SIZE
=
4096
;
struct
Buffer
{
struct
Buffer
{
size_t
rpos
;
size_t
wpos
;
char
buff
[
BUFF_SIZE
];
...
...
@@ -60,8 +56,7 @@ std::mutex mutex = {};
std
::
vector
<
AdemcoEvent
>
evntsWaiting4Send
=
{};
char
pwd
[
1024
]
=
{};
int
setNonBlocking
(
SOCKET
socket
)
{
int
setNonBlocking
(
SOCKET
socket
)
{
u_long
lngMode
=
1
;
int
ret
=
ioctl
(
socket
,
FIONBIO
,
(
u_long
*
)
&
lngMode
);
if
(
ret
!=
0
)
{
...
...
@@ -71,9 +66,8 @@ int setNonBlocking(SOCKET socket)
return
ret
;
}
int
main
(
int
argc
,
char
**
argv
)
{
usage
(
argv
[
0
]);
int
main
(
int
argc
,
char
**
argv
)
{
usage
(
argv
[
0
]);
#ifdef _WIN32
WSADATA
wsaData
;
...
...
@@ -97,11 +91,11 @@ int main(int argc, char** argv)
sAddrIn
.
sin_addr
.
s_addr
=
INADDR_ANY
;
auto
serverSock
=
socket
(
AF_INET
,
SOCK_STREAM
,
IPPROTO_TCP
);
int
ret
=
setNonBlocking
(
serverSock
);
int
ret
=
setNonBlocking
(
serverSock
);
if
(
ret
!=
0
)
{
return
ret
;
}
ret
=
bind
(
serverSock
,
(
struct
sockaddr
*
)
&
sAddrIn
,
sizeof
(
sAddrIn
));
ret
=
bind
(
serverSock
,
(
struct
sockaddr
*
)
&
sAddrIn
,
sizeof
(
sAddrIn
));
if
(
ret
!=
0
)
{
fprintf
(
stderr
,
"bind failed %d
\n
"
,
ret
);
return
ret
;
...
...
@@ -129,7 +123,7 @@ int main(int argc, char** argv)
printf
(
"do_accept, select ret=%d
\n
"
,
nfds
);
if
(
nfds
>
0
)
{
FD_CLR
(
serverSock
,
&
rfd
);
clientSock
=
accept
(
serverSock
,
(
struct
sockaddr
*
)
&
sForeignAddrIn
,
&
nLength
);
clientSock
=
accept
(
serverSock
,
(
struct
sockaddr
*
)
&
sForeignAddrIn
,
&
nLength
);
int
ret
=
setNonBlocking
(
clientSock
);
if
(
ret
!=
0
)
{
exit
(
0
);
...
...
@@ -159,7 +153,7 @@ int main(int argc, char** argv)
case
AID_NULL
:
// reply ack
{
char
ack
[
1024
];
in
t
len
=
ademcoMakeAckPacket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
size_
t
len
=
ademcoMakeAckPacket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademcoPrint
(
ack
,
len
);
send
(
clientSock
,
(
const
char
*
)
ack
,
len
,
0
);
break
;
...
...
@@ -233,14 +227,14 @@ int main(int argc, char** argv)
close
(
clientSock
);
clientSock
=
INVALID_SOCKET
;
clientBuffer
.
clear
();
}
else
{
clientBuffer
.
wpos
+=
bytes_transfered
;
clientBuffer
.
wpos
+=
bytes_transfered
;
auto
result
=
do_handle
();
while
(
1
)
{
size_t
bytes_not_commited
=
clientBuffer
.
wpos
-
clientBuffer
.
rpos
;
if
(
bytes_not_commited
==
0
)
{
if
(
clientBuffer
.
wpos
==
BUFF_SIZE
)
{
clientBuffer
.
clear
();
}
if
(
bytes_not_commited
==
0
)
{
if
(
clientBuffer
.
wpos
==
BUFF_SIZE
)
{
clientBuffer
.
clear
();
}
break
;
}
...
...
@@ -249,7 +243,7 @@ int main(int argc, char** argv)
memset
(
clientBuffer
.
buff
+
bytes_not_commited
,
0
,
BUFF_SIZE
-
bytes_not_commited
);
clientBuffer
.
wpos
-=
clientBuffer
.
rpos
;
clientBuffer
.
rpos
=
0
;
result
=
do_handle
();
}
else
{
}
else
{
result
=
do_handle
();
}
...
...
@@ -281,7 +275,7 @@ int main(int argc, char** argv)
printf
(
"S:"
);
ademcoPrint
(
buf
,
len
);
send
(
clientSock
,
(
const
char
*
)
buf
,
len
,
0
);
}
}
evntsWaiting4Send
.
clear
();
}
...
...
examples/server_demo/server_demo.vcxproj
View file @
06734ec6
...
...
@@ -90,6 +90,7 @@
<SDLCheck>
true
</SDLCheck>
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(SolutionDir)..\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
@@ -104,6 +105,7 @@
<SDLCheck>
true
</SDLCheck>
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(SolutionDir)..\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
@@ -116,6 +118,7 @@
<SDLCheck>
true
</SDLCheck>
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(SolutionDir)..\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
@@ -130,6 +133,7 @@
<SDLCheck>
true
</SDLCheck>
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(SolutionDir)..\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<PreprocessorDefinitions>
_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)
</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
hb_com.c
View file @
06734ec6
#
include
"hb_com.h"
#include <string.h>
int
hbGetAvailableZoneProperties
(
HbMachineType
type
,
HbZoneProperty
props
[
12
])
{
int
hbGetAvailableZoneProperties
(
HbMachineType
type
,
HbZoneProperty
props
[
12
])
{
switch
(
type
)
{
case
HMT_WIFI
:
break
;
...
...
@@ -17,13 +16,15 @@ int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12])
}
case
HMT_NETMOD
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_SUB_MACHINE
,
HZP_REMOTE_CONTROL
,
HZP_BUGLAR_HALF
,
HZP_SHIELD
,
HZP_DOOR_RING
,
};
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_SUB_MACHINE
,
HZP_REMOTE_CONTROL
,
HZP_BUGLAR_HALF
,
HZP_SHIELD
,
HZP_DOOR_RING
,
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_LCD
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_SUB_MACHINE
,
HZP_REMOTE_CONTROL
,
HZP_BUGLAR_HALF
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_SUB_MACHINE
,
HZP_REMOTE_CONTROL
,
HZP_BUGLAR_HALF
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
...
...
@@ -35,19 +36,22 @@ int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12])
}
case
HMT_TRUE_COLOR
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_3_SECTION
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_IOT
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
...
...
@@ -68,8 +72,7 @@ int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12])
return
0
;
}
uint16_t
hbZoneMax
(
HbMachineType
type
)
{
uint16_t
hbZoneMax
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_GPRS_IOT
:
case
HMT_GPRS
:
...
...
@@ -101,18 +104,15 @@ uint16_t hbZoneMax(HbMachineType type)
}
}
int
hbIsValidZone
(
HbMachineType
type
,
uint16_t
zone
)
{
int
hbIsValidZone
(
HbMachineType
type
,
uint16_t
zone
)
{
return
ADEMCO_ZONE_FOR_MACHINE_SELF
<=
zone
&&
zone
<=
hbZoneMax
(
type
);
}
int
hbIsValidZoneStrict
(
HbMachineType
type
,
uint16_t
zone
)
{
int
hbIsValidZoneStrict
(
HbMachineType
type
,
uint16_t
zone
)
{
return
ADEMCO_ZONE_MIN
<=
zone
&&
zone
<=
hbZoneMax
(
type
);
}
int
hbMachineIsSelling
(
HbMachineType
type
)
{
int
hbMachineIsSelling
(
HbMachineType
type
)
{
return
type
==
HMT_NETMOD
||
type
==
HMT_GPRS
||
type
==
HMT_GPRS_IOT
...
...
@@ -126,30 +126,25 @@ int hbMachineIsSelling(HbMachineType type)
;
}
int
hbMachineCanArm
(
HbMachineType
type
)
{
int
hbMachineCanArm
(
HbMachineType
type
)
{
return
hbMachineIsSelling
(
type
)
&&
(
type
!=
HMT_NB
);
}
int
hbMachineCanDisarm
(
HbMachineType
type
)
{
int
hbMachineCanDisarm
(
HbMachineType
type
)
{
return
hbMachineIsSelling
(
type
)
&&
(
type
!=
HMT_NB
);
}
int
hbMachineCanEnterSettings
(
HbMachineType
type
)
{
int
hbMachineCanEnterSettings
(
HbMachineType
type
)
{
return
hbMachineIsSelling
(
type
);
}
int
hbMachineCanHalfArm
(
HbMachineType
type
)
{
int
hbMachineCanHalfArm
(
HbMachineType
type
)
{
return
type
==
HMT_NETMOD
||
type
==
HMT_LCD
;
}
int
hbMachineCanReportSignalStrength
(
HbMachineType
type
)
{
int
hbMachineCanReportSignalStrength
(
HbMachineType
type
)
{
return
type
==
HMT_GPRS
||
type
==
HMT_GPRS_IOT
||
type
==
HMT_IOT
...
...
@@ -161,8 +156,7 @@ int hbMachineCanReportSignalStrength(HbMachineType type)
;
}
int
hbMachineCanReportBySMS
(
HbMachineType
type
)
{
int
hbMachineCanReportBySMS
(
HbMachineType
type
)
{
return
type
==
HMT_GPRS
||
type
==
HMT_LCD
||
type
==
HMT_TRUE_COLOR
...
...
@@ -171,46 +165,40 @@ int hbMachineCanReportBySMS(HbMachineType type)
;
}
int
hbMachineHasWiredZone
(
HbMachineType
type
)
{
int
hbMachineHasWiredZone
(
HbMachineType
type
)
{
return
type
==
HMT_NETMOD
||
type
==
HMT_TRUE_COLOR
||
type
==
HMT_3_SECTION
;
}
AdemcoZone
hbWiredZoneMin
(
HbMachineType
type
)
{
AdemcoZone
hbWiredZoneMin
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_NETMOD
:
return
1
;
case
HMT_TRUE_COLOR
:
return
1
;
case
HMT_3_SECTION
:
return
61
;
case
HMT_NETMOD
:
return
1
;
case
HMT_TRUE_COLOR
:
return
1
;
case
HMT_3_SECTION
:
return
61
;
default
:
return
0
;
}
}
AdemcoZone
hbWiredZoneMax
(
HbMachineType
type
)
{
AdemcoZone
hbWiredZoneMax
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_NETMOD
:
return
8
;
case
HMT_TRUE_COLOR
:
return
8
;
case
HMT_3_SECTION
:
return
68
;
case
HMT_NETMOD
:
return
8
;
case
HMT_TRUE_COLOR
:
return
8
;
case
HMT_3_SECTION
:
return
68
;
default
:
return
0
;
}
}
int
hbMachineCanDirectlyWriteZone
(
HbMachineType
type
)
{
int
hbMachineCanDirectlyWriteZone
(
HbMachineType
type
)
{
return
type
==
HMT_NETMOD
;
}
int
hbMachineCanLinkSubMachine
(
HbMachineType
type
)
{
int
hbMachineCanLinkSubMachine
(
HbMachineType
type
)
{
return
type
==
HMT_NETMOD
;
}
int
hbZonePropCanReportLost
(
HbZoneProperty
zp
)
{
int
hbZonePropCanReportLost
(
HbZoneProperty
zp
)
{
switch
(
zp
)
{
case
HZP_BUGLAR
:
case
HZP_EMERGENCY
:
...
...
@@ -224,59 +212,48 @@ int hbZonePropCanReportLost(HbZoneProperty zp)
}
}
void
hbInitMachineTimer
(
HbMachineTimer
*
timer
)
{
void
hbInitMachineTimer
(
HbMachineTimer
*
timer
)
{
memset
(
timer
->
data
,
25
,
sizeof
(
timer
));
}
int
hbIsValidTimePoint
(
HbMachineTimePoint
*
tp
)
{
int
hbIsValidTimePoint
(
HbMachineTimePoint
*
tp
)
{
return
tp
&&
0
<=
tp
->
hour
&&
tp
->
hour
<
24
&&
0
<=
tp
->
minute
&&
tp
->
minute
<
60
;
}
void
hbTimePointToGreenwich
(
HbMachineTimePoint
*
tp
)
{
if
(
tp
&&
tp
->
hour
!=
25
)
{
void
hbTimePointToGreenwich
(
HbMachineTimePoint
*
tp
)
{
if
(
tp
&&
tp
->
hour
!=
25
)
tp
->
hour
=
(
tp
->
hour
+
16
)
%
24
;
}
}
void
hbTimePointFromGreenwich
(
HbMachineTimePoint
*
tp
)
{
if
(
tp
&&
tp
->
hour
!=
25
)
{
void
hbTimePointFromGreenwich
(
HbMachineTimePoint
*
tp
)
{
if
(
tp
&&
tp
->
hour
!=
25
)
tp
->
hour
=
(
tp
->
hour
+
8
)
%
24
;
}
}
int
hbIsValidTimer
(
HbTimer
*
timer
)
{
int
hbIsValidTimer
(
HbTimer
*
timer
)
{
return
timer
&&
hbIsValidTimePoint
(
&
timer
->
armAt
)
&&
hbIsValidTimePoint
(
&
timer
->
disarmAt
);
}
int
hbIsValidMachineTimer
(
HbMachineTimer
*
timer
)
{
int
hbIsValidMachineTimer
(
HbMachineTimer
*
timer
)
{
return
timer
&&
hbIsValidTimer
(
&
timer
->
timer
[
0
])
&&
hbIsValidTimer
(
&
timer
->
timer
[
1
]);
}
void
hbMachineTimerToGreenwich
(
HbMachineTimer
*
timer
)
{
void
hbMachineTimerToGreenwich
(
HbMachineTimer
*
timer
)
{
hbTimePointToGreenwich
(
&
timer
->
timer
[
0
].
armAt
);
hbTimePointToGreenwich
(
&
timer
->
timer
[
0
].
disarmAt
);
hbTimePointToGreenwich
(
&
timer
->
timer
[
1
].
armAt
);
hbTimePointToGreenwich
(
&
timer
->
timer
[
1
].
disarmAt
);
}
void
hbMachineTimerFromGreenwich
(
HbMachineTimer
*
timer
)
{
void
hbMachineTimerFromGreenwich
(
HbMachineTimer
*
timer
)
{
hbTimePointFromGreenwich
(
&
timer
->
timer
[
0
].
armAt
);
hbTimePointFromGreenwich
(
&
timer
->
timer
[
0
].
disarmAt
);
hbTimePointFromGreenwich
(
&
timer
->
timer
[
1
].
armAt
);
hbTimePointFromGreenwich
(
&
timer
->
timer
[
1
].
disarmAt
);
}
AdemcoEvent
hbMachineStatusToAdemcoEvent
(
HbMachineStatus
status
)
{
AdemcoEvent
hbMachineStatusToAdemcoEvent
(
HbMachineStatus
status
)
{
switch
(
status
)
{
case
HMS_ARM
:
return
EVENT_ARM
;
case
HMS_DISARM
:
return
EVENT_DISARM
;
...
...
@@ -286,8 +263,7 @@ AdemcoEvent hbMachineStatusToAdemcoEvent(HbMachineStatus status)
}
}
HbMachineStatus
hbMachineStatusFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
)
{
HbMachineStatus
hbMachineStatusFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_ARM
:
return
HMS_ARM
;
...
...
@@ -304,8 +280,7 @@ HbMachineStatus hbMachineStatusFromAdemcoEvent(AdemcoEvent ademcoEvent)
}
}
AdemcoEvent
hbMachineTypeToAdemcoEvent
(
HbMachineType
type
)
{
AdemcoEvent
hbMachineTypeToAdemcoEvent
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_WIFI
:
return
EVENT_I_AM_WIFI_MACHINE
;
case
HMT_GPRS_IOT
:
return
EVENT_I_AM_GPRS_IOT
;
...
...
@@ -322,8 +297,7 @@ AdemcoEvent hbMachineTypeToAdemcoEvent(HbMachineType type)
}
}
HbMachineType
hbMachineTypeFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
)
{
HbMachineType
hbMachineTypeFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_I_AM_NET_MODULE
:
return
HMT_NETMOD
;
case
EVENT_I_AM_GPRS
:
return
HMT_GPRS
;
...
...
@@ -340,8 +314,7 @@ HbMachineType hbMachineTypeFromAdemcoEvent(AdemcoEvent ademcoEvent)
}
}
AdemcoEvent
hbZonePropertyToAdemcoEvent
(
HbZoneProperty
zp
)
{
AdemcoEvent
hbZonePropertyToAdemcoEvent
(
HbZoneProperty
zp
)
{
switch
(
zp
)
{
case
HZP_BUGLAR
:
case
HZP_BUGLAR_HALF
:
return
EVENT_BURGLAR
;
...
...
@@ -355,8 +328,7 @@ AdemcoEvent hbZonePropertyToAdemcoEvent(HbZoneProperty zp)
}
}
const
char
*
hbMachineStatusToString
(
HbMachineStatus
status
)
{
const
char
*
hbMachineStatusToString
(
HbMachineStatus
status
)
{
switch
(
status
)
{
case
HMS_ARM
:
return
"Arm"
;
case
HMS_HALF_ARM
:
return
"Half-Arm"
;
...
...
@@ -366,8 +338,7 @@ const char* hbMachineStatusToString(HbMachineStatus status)
}
}
const
char
*
hbMachineStatusToStringChinese
(
HbMachineStatus
status
)
{
const
char
*
hbMachineStatusToStringChinese
(
HbMachineStatus
status
)
{
switch
(
status
)
{
case
HMS_ARM
:
return
"布防"
;
case
HMS_HALF_ARM
:
return
"半布防"
;
...
...
@@ -377,8 +348,7 @@ const char* hbMachineStatusToStringChinese(HbMachineStatus status)
}
}
const
char
*
hbMachineTypeToString
(
HbMachineType
type
)
{
const
char
*
hbMachineTypeToString
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_WIFI
:
return
"0 WiFi"
;
case
HMT_CAMERA
:
return
"1 Camera"
;
...
...
@@ -396,8 +366,7 @@ const char* hbMachineTypeToString(HbMachineType type)
}
}
const
char
*
hbMachineTypeToStringChinese
(
HbMachineType
type
)
{
const
char
*
hbMachineTypeToStringChinese
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_WIFI
:
return
"0 WiFi主机"
;
case
HMT_CAMERA
:
return
"1 摄像头主机"
;
...
...
@@ -415,8 +384,7 @@ const char* hbMachineTypeToStringChinese(HbMachineType type)
}
}
const
char
*
hbZonePropertyToString
(
HbZoneProperty
zp
)
{
const
char
*
hbZonePropertyToString
(
HbZoneProperty
zp
)
{
switch
(
zp
)
{
case
HZP_BUGLAR
:
return
"HZP_BUGLAR"
;
case
HZP_EMERGENCY
:
return
"HZP_EMERGENCY"
;
...
...
@@ -438,8 +406,7 @@ const char* hbZonePropertyToString(HbZoneProperty zp)
}
}
const
char
*
hbZonePropertyToStringChinese
(
HbZoneProperty
zp
)
{
const
char
*
hbZonePropertyToStringChinese
(
HbZoneProperty
zp
)
{
switch
(
zp
)
{
case
HZP_BUGLAR
:
return
"匪警全局"
;
case
HZP_EMERGENCY
:
return
"匪警紧急"
;
...
...
@@ -461,29 +428,29 @@ const char* hbZonePropertyToStringChinese(HbZoneProperty zp)
}
}
const
char
*
hbGetZoneFormatString
(
HbMachineType
type
)
{
const
char
*
hbGetZoneFormatString
(
HbMachineType
type
)
{
uint16_t
zone
=
hbZoneMax
(
type
);
if
(
10
<
zone
&&
zone
<
100
)
{
return
"%02d"
;
}
else
if
(
zone
<
1000
)
{
return
"%03d"
;
}
else
{
return
"%d"
;
}
if
(
10
<
zone
&&
zone
<
100
)
return
"%02d"
;
else
if
(
zone
<
1000
)
return
"%03d"
;
else
return
"%d"
;
}
void
hbSum
(
uint8_t
*
data
,
size_t
len
)
{
void
hbSum
(
uint8_t
*
data
,
size_t
len
)
{
uint8_t
sum
=
0
;
uint8_t
*
p
=
data
;
while
(
p
!=
data
+
len
-
1
)
{
while
(
p
!=
data
+
len
-
1
)
sum
+=
*
p
++
;
}
*
p
=
sum
;
}
int
hbCheckSum
(
const
uint8_t
*
data
,
size_t
len
)
{
int
hbCheckSum
(
const
uint8_t
*
data
,
size_t
len
)
{
uint8_t
sum
=
0
;
const
uint8_t
*
p
=
data
;
while
(
p
!=
data
+
len
-
1
)
{
while
(
p
!=
data
+
len
-
1
)
sum
+=
*
p
++
;
}
return
sum
==
*
p
;
}
...
...
@@ -493,8 +460,7 @@ if (cd) { \
memcpy(cd->data, data, len & 0xFF); \
}
HbComRequestType
hbComParseRequest
(
const
uint8_t
*
data
,
size_t
len
,
HbComData
*
cd
)
{
HbComRequestType
hbComParseRequest
(
const
uint8_t
*
data
,
size_t
len
,
HbComData
*
cd
)
{
do
{
if
(
len
<
5
)
{
break
;
}
if
(
data
[
0
]
!=
0xEB
)
{
break
;
}
...
...
@@ -545,7 +511,6 @@ HbComRequestType hbComParseRequest(const uint8_t* data, size_t len, HbComData* c
copy_data_to_com
;
return
HbComReq_AD
;
}
default
:
break
;
}
...
...
@@ -608,14 +573,12 @@ HbComRequestType hbComParseRequest(const uint8_t* data, size_t len, HbComData* c
return
HbComReq_Invalid
;
}
ADEMCO_EXPORT_SYMBOL
HbComRequestType
hbComParseXDataRequest
(
const
AdemcoXDataSegment
*
xdata
,
HbComData
*
cd
)
{
ADEMCO_EXPORT_SYMBOL
HbComRequestType
hbComParseXDataRequest
(
const
AdemcoXDataSegment
*
xdata
,
HbComData
*
cd
)
{
if
(
!
xdata
)
{
return
HbComReq_Invalid
;
}
return
hbComParseRequest
((
const
uint8_t
*
)
ademcoXDataGetValidContentAddr
(
xdata
),
ademcoXDataGetValidContentLen
(
xdata
),
cd
);
}
HbComResponseType
hbComParseResponse
(
const
uint8_t
*
data
,
size_t
len
,
HbComData
*
cd
)
{
HbComResponseType
hbComParseResponse
(
const
uint8_t
*
data
,
size_t
len
,
HbComData
*
cd
)
{
do
{
if
(
len
<
7
)
{
break
;
}
// 所有的 response ,长度最小为 7
if
(
data
[
0
]
!=
0xEB
||
data
[
1
]
!=
0xBA
||
data
[
2
]
!=
0x3F
)
{
break
;
}
...
...
@@ -737,32 +700,27 @@ HbComResponseType hbComParseResponse(const uint8_t* data, size_t len, HbComData*
return
HbComResp_Invalid
;
}
HbComResponseType
hbComParseXDataResponse
(
const
AdemcoXDataSegment
*
xdata
,
HbComData
*
cd
)
{
HbComResponseType
hbComParseXDataResponse
(
const
AdemcoXDataSegment
*
xdata
,
HbComData
*
cd
)
{
if
(
!
xdata
)
{
return
HbComReq_Invalid
;
}
return
hbComParseResponse
((
const
uint8_t
*
)
ademcoXDataGetValidContentAddr
(
xdata
),
ademcoXDataGetValidContentLen
(
xdata
),
cd
);
}
void
hbComMakeReqA0_getMachineStatus
(
HbComData
*
data
)
{
void
hbComMakeReqA0_getMachineStatus
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_A0_data
,
HbComReq_A0_len
);
data
->
len
=
HbComReq_A0_len
;
}
void
hbComMakeReqA1_getMachineZones
(
HbComData
*
data
)
{
void
hbComMakeReqA1_getMachineZones
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_A1_data
,
HbComReq_A1_len
);
data
->
len
=
HbComReq_A1_len
;
}
void
hbComMakeReqA2_getMoreMachineZones
(
HbComData
*
data
)
{
void
hbComMakeReqA2_getMoreMachineZones
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_A2_data
,
HbComReq_A2_len
);
data
->
len
=
HbComReq_A2_len
;
}
void
hbComMakeReqA3_modifyMachineZone
(
HbComData
*
data
,
uint8_t
zone
,
HbZoneProperty
prop
,
HbComReq_A3_op
op
)
{
void
hbComMakeReqA3_modifyMachineZone
(
HbComData
*
data
,
uint8_t
zone
,
HbZoneProperty
prop
,
HbComReq_A3_op
op
)
{
memcpy
(
data
->
data
,
HbComReq_A3_head
,
5
);
data
->
data
[
5
]
=
zone
;
data
->
data
[
6
]
=
prop
;
...
...
@@ -771,22 +729,19 @@ void hbComMakeReqA3_modifyMachineZone(HbComData* data, uint8_t zone, HbZonePrope
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeReqA5_getMachineTimer
(
HbComData
*
data
)
{
void
hbComMakeReqA5_getMachineTimer
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_A5_data
,
HbComReq_A5_len
);
data
->
len
=
HbComReq_A5_len
;
}
void
hbComMakeReqA7_setMachineTimer
(
HbComData
*
data
,
HbMachineTimer
*
timer
)
{
void
hbComMakeReqA7_setMachineTimer
(
HbComData
*
data
,
HbMachineTimer
*
timer
)
{
memcpy
(
data
->
data
,
HbComReq_A7_head
,
5
);
memcpy
(
data
->
data
+
5
,
timer
,
sizeof
(
*
timer
));
data
->
len
=
HbComReq_A7_len
;
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeReqAA_modifyMachineZoneLostConfig
(
HbComData
*
data
,
uint8_t
zone
,
int
on
)
{
void
hbComMakeReqAA_modifyMachineZoneLostConfig
(
HbComData
*
data
,
uint8_t
zone
,
int
on
)
{
memcpy
(
data
->
data
,
HbComReq_AA_head
,
5
);
data
->
data
[
5
]
=
zone
;
data
->
data
[
6
]
=
!!
on
;
...
...
@@ -794,20 +749,17 @@ void hbComMakeReqAA_modifyMachineZoneLostConfig(HbComData* data, uint8_t zone, i
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeReqAC_getMachineZoneLostConfig
(
HbComData
*
data
)
{
void
hbComMakeReqAC_getMachineZoneLostConfig
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_AC_data
,
HbComReq_AC_len
);
data
->
len
=
HbComReq_AC_len
;
}
void
hbComMakeReqAD_getMoreMachineZoneLostConfig
(
HbComData
*
data
)
{
void
hbComMakeReqAD_getMoreMachineZoneLostConfig
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_AD_data
,
HbComReq_AD_len
);
data
->
len
=
HbComReq_AD_len
;
}
void
hbComMakeReqAE_set3SectionMachineStatus
(
HbComData
*
data
,
HbCom_3sec_which
p1
,
HbCom_3sec_status
status
)
{
void
hbComMakeReqAE_set3SectionMachineStatus
(
HbComData
*
data
,
HbCom_3sec_which
p1
,
HbCom_3sec_status
status
)
{
memcpy
(
data
->
data
,
HbComReq_AE_head
,
5
);
data
->
data
[
5
]
=
p1
;
data
->
data
[
6
]
=
status
;
...
...
@@ -815,28 +767,24 @@ void hbComMakeReqAE_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which p
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeReqB0_get3SectionMachineStatus
(
HbComData
*
data
)
{
void
hbComMakeReqB0_get3SectionMachineStatus
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_B0_data
,
HbComReq_B0_len
);
data
->
len
=
HbComReq_B0_len
;
}
void
hbComMakeReqRD_acct
(
HbComData
*
data
)
{
void
hbComMakeReqRD_acct
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComReq_RD_acct_data
,
HbComReq_RD_acct_len
);
data
->
len
=
HbComReq_RD_acct_len
;
}
void
hbComMakeReqWR_acct
(
HbComData
*
data
,
const
char
*
acct
)
{
void
hbComMakeReqWR_acct
(
HbComData
*
data
,
const
char
*
acct
)
{
memcpy
(
data
->
data
,
HbComReq_WR_acct_head
,
5
);
ademcoDecStrToHiLoArray
(
data
->
data
+
5
,
9
,
acct
);
data
->
len
=
HbComReq_WR_acct_len
;
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComResp_A2_Iter_init
(
HbComResp_A2_Iter
*
iter
,
const
HbComData
*
com
)
{
void
hbComResp_A2_Iter_init
(
HbComResp_A2_Iter
*
iter
,
const
HbComData
*
com
)
{
if
(
!
iter
||
!
com
)
return
;
memcpy
(
&
iter
->
com
,
com
,
sizeof
(
HbComData
));
iter
->
i
=
0
;
...
...
@@ -849,19 +797,16 @@ void hbComResp_A2_Iter_init(HbComResp_A2_Iter* iter, const HbComData* com)
}
}
HbComResp_A2_p1
hbComResp_A2_Iter_next
(
HbComResp_A2_Iter
*
iter
,
HbZoneAndProperty
*
zp
)
{
if
(
iter
->
i
==
iter
->
total
)
{
HbComResp_A2_p1
hbComResp_A2_Iter_next
(
HbComResp_A2_Iter
*
iter
,
HbZoneAndProperty
*
zp
)
{
if
(
iter
->
i
==
iter
->
total
)
return
HbComResp_A2_p1_nomore
;
}
zp
->
zone
=
iter
->
com
.
data
[
6
+
iter
->
i
*
2
];
zp
->
prop
=
(
HbZoneProperty
)
iter
->
com
.
data
[
7
+
iter
->
i
*
2
];
iter
->
i
++
;
return
HbComResp_A2_p1_more
;
}
void
hbComMakeRespA0_getMachineStatus
(
HbComData
*
data
,
HbMachineStatus
status
,
HbMachineType
type
)
{
void
hbComMakeRespA0_getMachineStatus
(
HbComData
*
data
,
HbMachineStatus
status
,
HbMachineType
type
)
{
memcpy
(
data
->
data
,
HbComResp_A0_head
,
6
);
data
->
data
[
6
]
=
status
;
data
->
data
[
7
]
=
type
;
...
...
@@ -869,8 +814,7 @@ void hbComMakeRespA0_getMachineStatus(HbComData* data, HbMachineStatus status, H
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespA2_getMachineZones
(
HbComData
*
data
,
size_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
)
&
0xFF
;
...
...
@@ -884,14 +828,12 @@ void hbComMakeRespA2_getMachineZones(HbComData* data, size_t count, AdemcoZone*
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespA3_waitingSignal
(
HbComData
*
data
)
{
void
hbComMakeRespA3_waitingSignal
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComResp_A3_data
,
HbComResp_A3_len
);
data
->
len
=
HbComResp_A3_len
;
}
void
hbComMakeRespA4_modifyMachineZone
(
HbComData
*
data
,
AdemcoZone
zone
,
HbZoneProperty
prop
,
HbComResp_A4_p3
p3
)
{
void
hbComMakeRespA4_modifyMachineZone
(
HbComData
*
data
,
AdemcoZone
zone
,
HbZoneProperty
prop
,
HbComResp_A4_p3
p3
)
{
memcpy
(
data
->
data
,
HbComResp_A4_head
,
6
);
data
->
data
[
6
]
=
zone
&
0xFF
;
data
->
data
[
7
]
=
prop
;
...
...
@@ -900,28 +842,24 @@ void hbComMakeRespA4_modifyMachineZone(HbComData* data, AdemcoZone zone, HbZoneP
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespA6_getMachineTimer
(
HbComData
*
data
,
HbMachineTimer
*
timer
)
{
void
hbComMakeRespA6_getMachineTimer
(
HbComData
*
data
,
HbMachineTimer
*
timer
)
{
memcpy
(
data
->
data
,
HbComResp_A6_head
,
6
);
memcpy
(
data
->
data
+
6
,
timer
->
data
,
sizeof
(
*
timer
));
data
->
len
=
HbComResp_A6_len
;
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespA7_setMachineTimer
(
HbComData
*
data
)
{
void
hbComMakeRespA7_setMachineTimer
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComResp_A7_data
,
HbComResp_A7_len
);
data
->
len
=
HbComResp_A7_len
;
}
void
hbComMakeRespA8_reject
(
HbComData
*
data
)
{
void
hbComMakeRespA8_reject
(
HbComData
*
data
)
{
memcpy
(
data
->
data
,
HbComResp_A8_data
,
HbComResp_A8_len
);
data
->
len
=
HbComResp_A8_len
;
}
void
hbComMakeRespAB_modifyMachineZoneLostConfig
(
HbComData
*
data
,
AdemcoZone
zone
,
HbComResp_AB_p2
p2
)
{
void
hbComMakeRespAB_modifyMachineZoneLostConfig
(
HbComData
*
data
,
AdemcoZone
zone
,
HbComResp_AB_p2
p2
)
{
memcpy
(
data
->
data
,
HbComResp_AB_head
,
6
);
data
->
data
[
6
]
=
zone
&
0xFF
;
data
->
data
[
7
]
=
p2
;
...
...
@@ -929,8 +867,7 @@ void hbComMakeRespAB_modifyMachineZoneLostConfig(HbComData* data, AdemcoZone zon
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespAD_getMachineZoneLostConfig
(
HbComData
*
data
,
HbComResp_AD_p1
p1
,
size_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
))
&
0xFF
;
...
...
@@ -949,8 +886,7 @@ void hbComMakeRespAD_getMachineZoneLostConfig(HbComData* data, HbComResp_AD_p1 p
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComMakeRespAF_set3SectionMachineStatus
(
HbComData
*
data
,
HbCom_3sec_which
p1
,
HbCom_3sec_status
status
)
{
void
hbComMakeRespAF_set3SectionMachineStatus
(
HbComData
*
data
,
HbCom_3sec_which
p1
,
HbCom_3sec_status
status
)
{
memcpy
(
data
->
data
,
HbComResp_AF_head
,
6
);
data
->
data
[
6
]
=
p1
;
data
->
data
[
7
]
=
status
;
...
...
@@ -959,17 +895,13 @@ void hbComMakeRespAF_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which
}
void
hbComMakeRespB1_get3SectionMachineStatus
(
HbComData
*
data
,
HbMachineStatus
statusMachine
,
HbMachineStatus
statusSec1
,
HbMachineStatus
statusSec2
,
HbMachineStatus
statusSec3
)
{
HbMachineStatus
statusSec1
,
HbMachineStatus
statusSec2
,
HbMachineStatus
statusSec3
)
{
memcpy
(
data
->
data
,
HbComResp_B1_head
,
6
);
data
->
data
[
6
]
=
(
statusMachine
<<
6
)
|
(
statusSec1
<<
4
)
|
(
statusSec2
<<
2
)
|
(
statusSec3
);
data
->
len
=
HbComResp_B1_len
;
hbSum
(
data
->
data
,
data
->
len
);
}
void
hbComDataToAdemcoXData
(
const
HbComData
*
const
data
,
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
)
{
void
hbComDataToAdemcoXData
(
const
HbComData
*
const
data
,
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
)
{
ademcoMakeXData
(
xdata
,
xlf
,
xtr
,
(
const
char
*
)
data
->
data
,
data
->
len
);
}
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