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
4b4cf3b7
Commit
4b4cf3b7
authored
Jun 29, 2022
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
crc16
parent
28f7410b
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
74 additions
and
63 deletions
+74
-63
ademco.c
c/ademco.c
+45
-51
ademco.h
c/ademco.h
+12
-2
main.c
examples/ademco_demo/main.c
+16
-9
server_demo_libevent_linux.vcxproj.user
...mo_libevent_linux/server_demo_libevent_linux.vcxproj.user
+1
-1
No files found.
c/ademco.c
View file @
4b4cf3b7
...
@@ -273,9 +273,7 @@ const char* ademcoEventToStringChinese(AdemcoEvent ademcoEvent)
...
@@ -273,9 +273,7 @@ const char* ademcoEventToStringChinese(AdemcoEvent ademcoEvent)
}
}
}
}
uint16_t
ademcoCRC8
(
uint8_t
c
,
uint16_t
crc
)
static
const
uint16_t
crc16Table
[
256
]
=
{
{
static
const
uint16_t
crcTable
[]
=
{
/* DEFINE THE FIRST ORDER POLYINOMIAL TABLE */
/* DEFINE THE FIRST ORDER POLYINOMIAL TABLE */
0x0000
,
0xC0C1
,
0xC181
,
0x0140
,
0xC301
,
0x03C0
,
0x0280
,
0xC241
,
0x0000
,
0xC0C1
,
0xC181
,
0x0140
,
0xC301
,
0x03C0
,
0x0280
,
0xC241
,
0xC601
,
0x06C0
,
0x0780
,
0xC741
,
0x0500
,
0xC5C1
,
0xC481
,
0x0440
,
0xC601
,
0x06C0
,
0x0780
,
0xC741
,
0x0500
,
0xC5C1
,
0xC481
,
0x0440
,
...
@@ -309,19 +307,15 @@ uint16_t ademcoCRC8(uint8_t c, uint16_t crc)
...
@@ -309,19 +307,15 @@ uint16_t ademcoCRC8(uint8_t c, uint16_t crc)
0x4E00
,
0x8EC1
,
0x8F81
,
0x4F40
,
0x8D01
,
0x4DC0
,
0x4C80
,
0x8C41
,
0x4E00
,
0x8EC1
,
0x8F81
,
0x4F40
,
0x8D01
,
0x4DC0
,
0x4C80
,
0x8C41
,
0x4400
,
0x84C1
,
0x8581
,
0x4540
,
0x8701
,
0x47C0
,
0x4680
,
0x8641
,
0x4400
,
0x84C1
,
0x8581
,
0x4540
,
0x8701
,
0x47C0
,
0x4680
,
0x8641
,
0x8201
,
0x42C0
,
0x4380
,
0x8341
,
0x4100
,
0x81C1
,
0x8081
,
0x4040
,
0x8201
,
0x42C0
,
0x4380
,
0x8341
,
0x4100
,
0x81C1
,
0x8081
,
0x4040
,
};
};
uint16_t
res
=
(
uint16_t
)(
crc
>>
8
)
^
crcTable
[(
uint8_t
)
c
^
(
uint8_t
)(
crc
&
0xFF
)];
return
res
;
}
uint16_t
ademcoCRC16
(
const
uint8_t
*
buff
,
int
len
,
uint16_t
crc
)
uint16_t
ademcoCRC16
(
const
char
*
buff
,
int
len
)
{
{
uint16_t
CRC
=
crc
;
uint16_t
crc
=
0
;
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
while
(
len
--
)
{
CRC
=
ademcoCRC8
(
buff
[
i
],
CRC
)
;
crc
=
(
crc
>>
8
)
^
crc16Table
[(
crc
^
*
buff
++
)
&
0xFF
]
;
}
}
return
CRC
;
return
crc
;
}
}
int
ademcoAppendDataSegment
(
uint8_t
*
buff
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
int
ademcoAppendDataSegment
(
uint8_t
*
buff
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
...
@@ -642,7 +636,7 @@ int ademcoMakeEmptyDataPacket(uint8_t* dst_buff, int len, const char* id, uint16
...
@@ -642,7 +636,7 @@ int ademcoMakeEmptyDataPacket(uint8_t* dst_buff, int len, const char* id, uint16
int
ademco_len
=
packet_len
-
1
-
4
-
4
-
1
;
int
ademco_len
=
packet_len
-
1
-
4
-
4
-
1
;
snprintf
(
temp
,
5
,
"%04X"
,
ademco_len
);
snprintf
(
temp
,
5
,
"%04X"
,
ademco_len
);
memcpy
(
plen
,
temp
,
4
);
memcpy
(
plen
,
temp
,
4
);
uint16_t
crc
=
ademcoCRC16
(
pid
,
ademco_len
,
0
);
uint16_t
crc
=
ademcoCRC16
(
pid
,
ademco_len
);
snprintf
(
temp
,
5
,
"%04X"
,
crc
);
snprintf
(
temp
,
5
,
"%04X"
,
crc
);
memcpy
(
pcrc
,
temp
,
4
);
memcpy
(
pcrc
,
temp
,
4
);
...
@@ -711,7 +705,7 @@ int ademcoMakeHbPacket(uint8_t* dst_buff, int len, uint16_t seq, const char* acc
...
@@ -711,7 +705,7 @@ int ademcoMakeHbPacket(uint8_t* dst_buff, int len, uint16_t seq, const char* acc
int
ademco_len
=
packet_len
-
1
-
4
-
4
-
1
;
int
ademco_len
=
packet_len
-
1
-
4
-
4
-
1
;
snprintf
(
temp
,
5
,
"%04X"
,
ademco_len
);
snprintf
(
temp
,
5
,
"%04X"
,
ademco_len
);
memcpy
(
plen
,
temp
,
4
);
memcpy
(
plen
,
temp
,
4
);
uint16_t
crc
=
ademcoCRC16
((
const
uint8_t
*
)
pid
,
ademco_len
,
0
);
uint16_t
crc
=
ademcoCRC16
((
const
uint8_t
*
)
pid
,
ademco_len
);
snprintf
(
temp
,
5
,
"%04X"
,
crc
);
snprintf
(
temp
,
5
,
"%04X"
,
crc
);
memcpy
(
pcrc
,
temp
,
4
);
memcpy
(
pcrc
,
temp
,
4
);
...
@@ -809,7 +803,7 @@ AdemcoParseResult ademcoPacketParse(const uint8_t* buff, int len, AdemcoPacket*
...
@@ -809,7 +803,7 @@ AdemcoParseResult ademcoPacketParse(const uint8_t* buff, int len, AdemcoPacket*
break
;
break
;
}
}
pkt
->
crc
=
ademcoCRC16
(
pid
,
pkt
->
len
,
0
);
pkt
->
crc
=
ademcoCRC16
(
pid
,
pkt
->
len
);
if
(
pkt
->
crc
!=
crc
)
{
if
(
pkt
->
crc
!=
crc
)
{
break
;
break
;
}
}
...
...
c/ademco.h
View file @
4b4cf3b7
...
@@ -400,8 +400,18 @@ ADEMCO_EXPORT_SYMBOL int ademcoMakeHbPacket2(AdemcoPacket* pkt, uint16_t seq, co
...
@@ -400,8 +400,18 @@ ADEMCO_EXPORT_SYMBOL int ademcoMakeHbPacket2(AdemcoPacket* pkt, uint16_t seq, co
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoPacketParse
(
const
uint8_t
*
buff
,
int
len
,
AdemcoPacket
*
pkt
,
int
*
cb_commited
);
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoPacketParse
(
const
uint8_t
*
buff
,
int
len
,
AdemcoPacket
*
pkt
,
int
*
cb_commited
);
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC8
(
uint8_t
c
,
uint16_t
crc
);
/* CRC16 implementation according to ARC
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC16
(
const
uint8_t
*
buff
,
int
len
,
uint16_t
crc
);
* Name : CRC-16/ARC
* Alias : ARC, CRC-16, CRC-16/LHA, CRC-IBM
* Width : 16 bit
* Poly : 0x8005 (That is actually x^16 + x^15 + x^2 + 1)
* Initialization : 0x0000
* Reflect Input byte : True
* Reflect Output CRC : True
* Xor constant to output CRC : 0x0000
* Output for "123456789" : 0xBB3D
*/
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC16
(
const
char
*
buff
,
int
len
);
/* Hengbo */
/* Hengbo */
...
...
examples/ademco_demo/main.c
View file @
4b4cf3b7
...
@@ -10,14 +10,27 @@
...
@@ -10,14 +10,27 @@
#endif
#endif
#else // WIN32
#else // WIN32
#ifdef _DEBUG
#ifdef _DEBUG
#pragma comment(lib, "../
Win32/
Debug/ademco.lib")
#pragma comment(lib, "../Debug/ademco.lib")
#else
#else
#pragma comment(lib, "../
Win32/
Release/ademco.lib")
#pragma comment(lib, "../Release/ademco.lib")
#endif
#endif
#endif
#endif
int
main
()
int
main
()
{
{
{
uint16_t
crc
=
ademcoCRC16
(
"0"
,
1
);
crc
=
ademcoCRC16
(
"123456789"
,
9
);
char
data
[]
=
"
\xEB\xBA
"
;
char
data2
[]
=
{
0xEB
,
0xBA
};
int
ret
=
memcmp
(
"
\xEB\xBA
"
,
data2
,
2
);
ret
==
0
;
}
int
cb_commited
=
0
;
int
cb_commited
=
0
;
AdemcoPacket
pkt
;
AdemcoPacket
pkt
;
...
@@ -65,11 +78,5 @@ int main()
...
@@ -65,11 +78,5 @@ int main()
}
}
char
data
[]
=
"
\xEB\xBA
"
;
char
data2
[]
=
{
0xEB
,
0xBA
};
int
ret
=
memcmp
(
"
\xEB\xBA
"
,
data2
,
2
);
ret
==
0
;
}
}
examples/server_demo_libevent_linux/server_demo_libevent_linux.vcxproj.user
View file @
4b4cf3b7
...
@@ -7,6 +7,6 @@
...
@@ -7,6 +7,6 @@
<DebuggerFlavor>
LinuxDebugger
</DebuggerFlavor>
<DebuggerFlavor>
LinuxDebugger
</DebuggerFlavor>
</PropertyGroup>
</PropertyGroup>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x86'"
>
<PropertyGroup
Condition=
"'$(Configuration)|$(Platform)'=='Debug|x86'"
>
<RemoteTarget>
-2108636259;192.168.
1
.168 (username=, port=22, authentication=Password)
</RemoteTarget>
<RemoteTarget>
-2108636259;192.168.
2
.168 (username=, port=22, authentication=Password)
</RemoteTarget>
</PropertyGroup>
</PropertyGroup>
</Project>
</Project>
\ No newline at end of file
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