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
Hide 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,55 +273,49 @@ const char* ademcoEventToStringChinese(AdemcoEvent ademcoEvent)
...
@@ -273,55 +273,49 @@ const char* ademcoEventToStringChinese(AdemcoEvent ademcoEvent)
}
}
}
}
uint16_t
ademcoCRC8
(
uint8_t
c
,
uint16_t
crc
)
static
const
uint16_t
crc16Table
[
256
]
=
{
{
/* DEFINE THE FIRST ORDER POLYINOMIAL TABLE */
static
const
uint16_t
crcTable
[]
=
{
0x0000
,
0xC0C1
,
0xC181
,
0x0140
,
0xC301
,
0x03C0
,
0x0280
,
0xC241
,
/* DEFINE THE FIRST ORDER POLYINOMIAL TABLE */
0xC601
,
0x06C0
,
0x0780
,
0xC741
,
0x0500
,
0xC5C1
,
0xC481
,
0x0440
,
0x0000
,
0xC0C1
,
0xC181
,
0x0140
,
0xC301
,
0x03C0
,
0x0280
,
0xC241
,
0xCC01
,
0x0CC0
,
0x0D80
,
0xCD41
,
0x0F00
,
0xCFC1
,
0xCE81
,
0x0E40
,
0xC601
,
0x06C0
,
0x0780
,
0xC741
,
0x0500
,
0xC5C1
,
0xC481
,
0x0440
,
0x0A00
,
0xCAC1
,
0xCB81
,
0x0B40
,
0xC901
,
0x09C0
,
0x0880
,
0xC841
,
0xCC01
,
0x0CC0
,
0x0D80
,
0xCD41
,
0x0F00
,
0xCFC1
,
0xCE81
,
0x0E40
,
0xD801
,
0x18C0
,
0x1980
,
0xD941
,
0x1B00
,
0xDBC1
,
0xDA81
,
0x1A40
,
0x0A00
,
0xCAC1
,
0xCB81
,
0x0B40
,
0xC901
,
0x09C0
,
0x0880
,
0xC841
,
0x1E00
,
0xDEC1
,
0xDF81
,
0x1F40
,
0xDD01
,
0x1DC0
,
0x1C80
,
0xDC41
,
0xD801
,
0x18C0
,
0x1980
,
0xD941
,
0x1B00
,
0xDBC1
,
0xDA81
,
0x1A40
,
0x1400
,
0xD4C1
,
0xD581
,
0x1540
,
0xD701
,
0x17C0
,
0x1680
,
0xD641
,
0x1E00
,
0xDEC1
,
0xDF81
,
0x1F40
,
0xDD01
,
0x1DC0
,
0x1C80
,
0xDC41
,
0xD201
,
0x12C0
,
0x1380
,
0xD341
,
0x1100
,
0xD1C1
,
0xD081
,
0x1040
,
0x1400
,
0xD4C1
,
0xD581
,
0x1540
,
0xD701
,
0x17C0
,
0x1680
,
0xD641
,
0xF001
,
0x30C0
,
0x3180
,
0xF141
,
0x3300
,
0xF3C1
,
0xF281
,
0x3240
,
0xD201
,
0x12C0
,
0x1380
,
0xD341
,
0x1100
,
0xD1C1
,
0xD081
,
0x1040
,
0x3600
,
0xF6C1
,
0xF781
,
0x3740
,
0xF501
,
0x35C0
,
0x3480
,
0xF441
,
0xF001
,
0x30C0
,
0x3180
,
0xF141
,
0x3300
,
0xF3C1
,
0xF281
,
0x3240
,
0x3C00
,
0xFCC1
,
0xFD81
,
0x3D40
,
0xFF01
,
0x3FC0
,
0x3E80
,
0xFE41
,
0x3600
,
0xF6C1
,
0xF781
,
0x3740
,
0xF501
,
0x35C0
,
0x3480
,
0xF441
,
0xFA01
,
0x3AC0
,
0x3B80
,
0xFB41
,
0x3900
,
0xF9C1
,
0xF881
,
0x3840
,
0x3C00
,
0xFCC1
,
0xFD81
,
0x3D40
,
0xFF01
,
0x3FC0
,
0x3E80
,
0xFE41
,
0x2800
,
0xE8C1
,
0xE981
,
0x2940
,
0xEB01
,
0x2BC0
,
0x2A80
,
0xEA41
,
0xFA01
,
0x3AC0
,
0x3B80
,
0xFB41
,
0x3900
,
0xF9C1
,
0xF881
,
0x3840
,
0xEE01
,
0x2EC0
,
0x2F80
,
0xEF41
,
0x2D00
,
0xEDC1
,
0xEC81
,
0x2C40
,
0x2800
,
0xE8C1
,
0xE981
,
0x2940
,
0xEB01
,
0x2BC0
,
0x2A80
,
0xEA41
,
0xE401
,
0x24C0
,
0x2580
,
0xE541
,
0x2700
,
0xE7C1
,
0xE681
,
0x2640
,
0xEE01
,
0x2EC0
,
0x2F80
,
0xEF41
,
0x2D00
,
0xEDC1
,
0xEC81
,
0x2C40
,
0x2200
,
0xE2C1
,
0xE381
,
0x2340
,
0xE101
,
0x21C0
,
0x2080
,
0xE041
,
0xE401
,
0x24C0
,
0x2580
,
0xE541
,
0x2700
,
0xE7C1
,
0xE681
,
0x2640
,
0xA001
,
0x60C0
,
0x6180
,
0xA141
,
0x6300
,
0xA3C1
,
0xA281
,
0x6240
,
0x2200
,
0xE2C1
,
0xE381
,
0x2340
,
0xE101
,
0x21C0
,
0x2080
,
0xE041
,
0x6600
,
0xA6C1
,
0xA781
,
0x6740
,
0xA501
,
0x65C0
,
0x6480
,
0xA441
,
0xA001
,
0x60C0
,
0x6180
,
0xA141
,
0x6300
,
0xA3C1
,
0xA281
,
0x6240
,
0x6C00
,
0xACC1
,
0xAD81
,
0x6D40
,
0xAF01
,
0x6FC0
,
0x6E80
,
0xAE41
,
0x6600
,
0xA6C1
,
0xA781
,
0x6740
,
0xA501
,
0x65C0
,
0x6480
,
0xA441
,
0xAA01
,
0x6AC0
,
0x6B80
,
0xAB41
,
0x6900
,
0xA9C1
,
0xA881
,
0x6840
,
0x6C00
,
0xACC1
,
0xAD81
,
0x6D40
,
0xAF01
,
0x6FC0
,
0x6E80
,
0xAE41
,
0x7800
,
0xB8C1
,
0xB981
,
0x7940
,
0xBB01
,
0x7BC0
,
0x7A80
,
0xBA41
,
0xAA01
,
0x6AC0
,
0x6B80
,
0xAB41
,
0x6900
,
0xA9C1
,
0xA881
,
0x6840
,
0xBE01
,
0x7EC0
,
0x7F80
,
0xBF41
,
0x7D00
,
0xBDC1
,
0xBC81
,
0x7C40
,
0x7800
,
0xB8C1
,
0xB981
,
0x7940
,
0xBB01
,
0x7BC0
,
0x7A80
,
0xBA41
,
0xB401
,
0x74C0
,
0x7580
,
0xB541
,
0x7700
,
0xB7C1
,
0xB681
,
0x7640
,
0xBE01
,
0x7EC0
,
0x7F80
,
0xBF41
,
0x7D00
,
0xBDC1
,
0xBC81
,
0x7C40
,
0x7200
,
0xB2C1
,
0xB381
,
0x7340
,
0xB101
,
0x71C0
,
0x7080
,
0xB041
,
0xB401
,
0x74C0
,
0x7580
,
0xB541
,
0x7700
,
0xB7C1
,
0xB681
,
0x7640
,
0x5000
,
0x90C1
,
0x9181
,
0x5140
,
0x9301
,
0x53C0
,
0x5280
,
0x9241
,
0x7200
,
0xB2C1
,
0xB381
,
0x7340
,
0xB101
,
0x71C0
,
0x7080
,
0xB041
,
0x9601
,
0x56C0
,
0x5780
,
0x9741
,
0x5500
,
0x95C1
,
0x9481
,
0x5440
,
0x5000
,
0x90C1
,
0x9181
,
0x5140
,
0x9301
,
0x53C0
,
0x5280
,
0x9241
,
0x9C01
,
0x5CC0
,
0x5D80
,
0x9D41
,
0x5F00
,
0x9FC1
,
0x9E81
,
0x5E40
,
0x9601
,
0x56C0
,
0x5780
,
0x9741
,
0x5500
,
0x95C1
,
0x9481
,
0x5440
,
0x5A00
,
0x9AC1
,
0x9B81
,
0x5B40
,
0x9901
,
0x59C0
,
0x5880
,
0x9841
,
0x9C01
,
0x5CC0
,
0x5D80
,
0x9D41
,
0x5F00
,
0x9FC1
,
0x9E81
,
0x5E40
,
0x8801
,
0x48C0
,
0x4980
,
0x8941
,
0x4B00
,
0x8BC1
,
0x8A81
,
0x4A40
,
0x5A00
,
0x9AC1
,
0x9B81
,
0x5B40
,
0x9901
,
0x59C0
,
0x5880
,
0x9841
,
0x4E00
,
0x8EC1
,
0x8F81
,
0x4F40
,
0x8D01
,
0x4DC0
,
0x4C80
,
0x8C41
,
0x8801
,
0x48C0
,
0x4980
,
0x8941
,
0x4B00
,
0x8BC1
,
0x8A81
,
0x4A40
,
0x4400
,
0x84C1
,
0x8581
,
0x4540
,
0x8701
,
0x47C0
,
0x4680
,
0x8641
,
0x4E00
,
0x8EC1
,
0x8F81
,
0x4F40
,
0x8D01
,
0x4DC0
,
0x4C80
,
0x8C41
,
0x8201
,
0x42C0
,
0x4380
,
0x8341
,
0x4100
,
0x81C1
,
0x8081
,
0x4040
,
0x4400
,
0x84C1
,
0x8581
,
0x4540
,
0x8701
,
0x47C0
,
0x4680
,
0x8641
,
};
0x8201
,
0x42C0
,
0x4380
,
0x8341
,
0x4100
,
0x81C1
,
0x8081
,
0x4040
,
};
uint16_t
ademcoCRC16
(
const
char
*
buff
,
int
len
)
{
uint16_t
res
=
(
uint16_t
)(
crc
>>
8
)
^
crcTable
[(
uint8_t
)
c
^
(
uint8_t
)(
crc
&
0xFF
)];
uint16_t
crc
=
0
;
return
res
;
while
(
len
--
)
{
}
crc
=
(
crc
>>
8
)
^
crc16Table
[(
crc
^
*
buff
++
)
&
0xFF
];
uint16_t
ademcoCRC16
(
const
uint8_t
*
buff
,
int
len
,
uint16_t
crc
)
{
uint16_t
CRC
=
crc
;
for
(
int
i
=
0
;
i
<
len
;
i
++
)
{
CRC
=
ademcoCRC8
(
buff
[
i
],
CRC
);
}
}
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
;
...
@@ -64,12 +77,6 @@ int main()
...
@@ -64,12 +77,6 @@ int main()
assert
(
cb_commited
==
len
);
assert
(
cb_commited
==
len
);
}
}
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