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