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
759aba27
Commit
759aba27
authored
Feb 07, 2023
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix 'char_t' conflict with spdlog
parent
e700857e
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
33 additions
and
33 deletions
+33
-33
ademco.c
ademco.c
+15
-15
ademco.h
ademco.h
+18
-18
No files found.
ademco.c
View file @
759aba27
...
...
@@ -26,7 +26,7 @@
#define dline dprintf("%s %d\n", __FILE__, __LINE__);
#define dmsg dline; dprintf
void
ademcoPrint
(
const
char_t
*
p
,
size_t
len
)
void
ademcoPrint
(
const
ademco_
char_t
*
p
,
size_t
len
)
{
while
(
len
--
)
{
if
(
isprint
(
*
(
const
uint8_t
*
)
p
))
{
...
...
@@ -334,7 +334,7 @@ static const uint16_t crc16Table[256] = {
0x8201
,
0x42C0
,
0x4380
,
0x8341
,
0x4100
,
0x81C1
,
0x8081
,
0x4040
,
};
uint16_t
ademcoCRC16
(
const
char_t
*
buff
,
size_t
len
)
uint16_t
ademcoCRC16
(
const
ademco_
char_t
*
buff
,
size_t
len
)
{
uint16_t
crc
=
0
;
while
(
len
--
)
{
...
...
@@ -343,7 +343,7 @@ uint16_t ademcoCRC16(const char_t* buff, size_t len)
return
crc
;
}
size_t
ademcoAppendDataSegment
(
char_t
*
buff
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
size_t
ademcoAppendDataSegment
(
ademco_
char_t
*
buff
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
{
char
*
p
=
(
char
*
)
buff
;
if
(
ademcoEvent
==
EVENT_INVALID_EVENT
)
{
...
...
@@ -399,7 +399,7 @@ size_t ademcoAppendDataSegment2(AdemcoDataSegment* dataSegment, AdemcoId ademcoI
return
dataSegment
->
raw_len
=
ademcoAppendDataSegment
(
dataSegment
->
raw
,
ademcoId
,
ademcoEvent
,
gg
,
zone
);
}
AdemcoParseResult
ademcoParseDataSegment
(
const
char_t
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
)
AdemcoParseResult
ademcoParseDataSegment
(
const
ademco_
char_t
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
)
{
if
(
packet_len
==
ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN
&&
packet
[
0
]
==
'['
&&
packet
[
1
]
==
']'
)
{
memset
(
dataSegment
,
0
,
sizeof
(
*
dataSegment
));
...
...
@@ -452,7 +452,7 @@ AdemcoParseResult ademcoParseDataSegment(const char_t* packet, size_t packet_len
return
RESULT_ERROR
;
}
size_t
ademcoDataSegmentToCongwinFe100
(
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
)
{
return
0
;
...
...
@@ -584,7 +584,7 @@ size_t ademcoXDataCopy(AdemcoXDataSegment* dst, const AdemcoXDataSegment* src)
return
0
;
}
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
char_t
*
content
,
size_t
len
)
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
ademco_
char_t
*
content
,
size_t
len
)
{
char
transformed
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
size_t
translen
;
...
...
@@ -603,7 +603,7 @@ int ademcoMakeXData(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, Adem
xdata
->
lenghFormat
=
xlf
;
if
(
xlf
==
TWO_HEX
&&
translen
+
4
<
ADEMCO_PACKET_XDATA_MAX_LEN
)
{
char_t
*
p
=
xdata
->
raw
;
ademco_
char_t
*
p
=
xdata
->
raw
;
*
p
++
=
'['
;
*
p
++
=
(
translen
&
0xFFFF
)
>>
8
;
*
p
++
=
(
translen
&
0xFFFF
)
&
0xFF
;
...
...
@@ -613,7 +613,7 @@ int ademcoMakeXData(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, Adem
xdata
->
raw_len
=
p
-
xdata
->
raw
;
return
ADEMCO_OK
;
}
else
if
(
xlf
==
FOUR_DECIMAL
&&
translen
+
6
<
ADEMCO_PACKET_XDATA_MAX_LEN
)
{
char_t
*
p
=
xdata
->
raw
;
ademco_
char_t
*
p
=
xdata
->
raw
;
*
p
++
=
'['
;
char
temp
[
5
];
snprintf
(
temp
,
sizeof
(
temp
),
"%04zX"
,
translen
&
0xFFFF
);
...
...
@@ -674,7 +674,7 @@ static void getNowTimestamp(char* buff)
tm
->
tm_mon
+
1
,
tm
->
tm_mday
,
tm
->
tm_year
+
1900
);
}
size_t
ademcoMakeEmptyDataPacket
(
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
)
{
uint8_t
buff
[
ADEMCO_PACKET_MAX_LEN
];
uint8_t
*
p
=
buff
;
...
...
@@ -724,22 +724,22 @@ size_t ademcoMakeEmptyDataPacket(char_t* dst_buff, size_t len, const char* id, u
}
}
size_t
ademcoMakeNullPacket
(
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
size_t
ademcoMakeNullPacket
(
ademco_
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
return
ademcoMakeEmptyDataPacket
(
buff
,
len
,
ADEMCO_PACKET_ID_NULL
,
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeAckPacket
(
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
size_t
ademcoMakeAckPacket
(
ademco_
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
return
ademcoMakeEmptyDataPacket
(
buff
,
len
,
ADEMCO_PACKET_ID_ACK
,
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeNakPacket
(
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
size_t
ademcoMakeNakPacket
(
ademco_
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
{
return
ademcoMakeEmptyDataPacket
(
buff
,
len
,
ADEMCO_PACKET_ID_NAK
,
seq
,
acct
,
ademcoId
);
}
size_t
ademcoMakeHbPacket
(
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
)
{
char
buff
[
ADEMCO_PACKET_MAX_LEN
];
...
...
@@ -846,7 +846,7 @@ size_t ademcoMakeHbPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, Ad
return
pkt
->
raw_len
=
ademcoMakeHbPacket
(
pkt
->
raw
,
sizeof
(
pkt
->
raw
),
seq
,
acct
,
ademcoId
,
ademcoEvent
,
gg
,
zone
,
xdata
);
}
AdemcoParseResult
ademcoPacketParse
(
const
char_t
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
)
AdemcoParseResult
ademcoPacketParse
(
const
ademco_
char_t
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
)
{
if
(
len
<
9
)
{
return
RESULT_NOT_ENOUGH
;
}
do
{
...
...
@@ -1006,7 +1006,7 @@ AdemcoParseResult ademcoPacketParse(const char_t* buff, size_t len, AdemcoPacket
return
RESULT_ERROR
;
}
size_t
ademcoHiLoArrayToDecStr
(
char_t
*
str
,
const
uint8_t
*
arr
,
size_t
len
)
size_t
ademcoHiLoArrayToDecStr
(
ademco_
char_t
*
str
,
const
uint8_t
*
arr
,
size_t
len
)
{
char
*
p
=
str
;
for
(
size_t
i
=
0
;
i
<
len
;
i
++
)
{
...
...
ademco.h
View file @
759aba27
...
...
@@ -36,9 +36,9 @@ extern "C" {
#endif
#ifdef SWIG
#define char_t uint8_t
#define
ademco_
char_t uint8_t
#else
#define char_t char
#define
ademco_
char_t char
#endif
#define ADEMCO_OK 0
...
...
@@ -287,7 +287,7 @@ typedef enum AdemcoParseResult {
// 安定宝协议data段
typedef
struct
AdemcoDataSegment
{
char_t
raw
[
ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX
];
ademco_
char_t
raw
[
ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX
];
size_t
raw_len
;
AdemcoId
ademcoId
;
AdemcoEvent
ademcoEvent
;
...
...
@@ -307,7 +307,7 @@ typedef enum AdemcoXDataTransform {
typedef
struct
AdemcoXDataSegment
{
AdemcoXDataLengthFormat
lenghFormat
;
char_t
raw
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
ademco_
char_t
raw
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
size_t
raw_len
;
}
AdemcoXDataSegment
;
...
...
@@ -349,7 +349,7 @@ typedef struct AdemcoPacket {
AdemcoXDataSegment
xdata
;
time_t
timestamp
;
char_t
raw
[
ADEMCO_PACKET_MAX_LEN
];
ademco_
char_t
raw
[
ADEMCO_PACKET_MAX_LEN
];
size_t
raw_len
;
}
AdemcoPacket
;
...
...
@@ -357,7 +357,7 @@ typedef struct AdemcoPacket {
//////////////////////// Functions ////////////////////////
//! print as HEX
ADEMCO_EXPORT_SYMBOL
void
ademcoPrint
(
const
char_t
*
buff
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
void
ademcoPrint
(
const
ademco_
char_t
*
buff
,
size_t
len
);
//////////////////////// AdemcoEvent functions ////////////////////////
...
...
@@ -379,13 +379,13 @@ ADEMCO_EXPORT_SYMBOL const char* ademcoEventToStringChinese(AdemcoEvent ademcoEv
//////////////////////// AdemcoDataSegment functions ////////////////////////
//! make a `DATA` packet and store to `packet`, return length
ADEMCO_EXPORT_SYMBOL
size_t
ademcoAppendDataSegment
(
char_t
*
packet
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoAppendDataSegment
(
ademco_
char_t
*
packet
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
);
//! make a `DATA` packet and store to `dataSegment`, return length
ADEMCO_EXPORT_SYMBOL
size_t
ademcoAppendDataSegment2
(
AdemcoDataSegment
*
dataSegment
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
);
//! parse `DATA` packet, if ok, `dataSegment`'s members will be useful
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoParseDataSegment
(
const
char_t
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
);
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoParseDataSegment
(
const
ademco_
char_t
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
);
// return 0 for empty packet, CONGWIN_FE100_PACKET_LEN for success
ADEMCO_EXPORT_SYMBOL
size_t
ademcoDataSegmentToCongwinFe100
(
char_t
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoDataSegmentToCongwinFe100
(
ademco_
char_t
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
);
//////////////////////// AdemcoXDataSegment functions ////////////////////////
...
...
@@ -405,7 +405,7 @@ ADEMCO_EXPORT_SYMBOL int ademcoXDataMemcmp(const AdemcoXDataSegment* xdata, cons
// copy xdata content from src to dst, return copied length = src.raw_len
ADEMCO_EXPORT_SYMBOL
size_t
ademcoXDataCopy
(
AdemcoXDataSegment
*
dst
,
const
AdemcoXDataSegment
*
src
);
// return ADEMCO_OK for success, return ADEMCO_ERR for len is too long
ADEMCO_EXPORT_SYMBOL
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
char_t
*
content
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
ademco_
char_t
*
content
,
size_t
len
);
//////////////////////// AdemcoPacketId functions ////////////////////////
...
...
@@ -420,11 +420,11 @@ ADEMCO_EXPORT_SYMBOL const char* admecoPacketIdToString(AdemcoPacketId id);
* otherwise return 0
*/
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeEmptyDataPacket
(
char_t
*
dst_buff
,
size_t
len
,
const
char
*
id
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeNullPacket
(
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeAckPacket
(
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeNakPacket
(
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeHbPacket
(
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeEmptyDataPacket
(
ademco_
char_t
*
dst_buff
,
size_t
len
,
const
char
*
id
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeNullPacket
(
ademco_
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeAckPacket
(
ademco_
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeNakPacket
(
ademco_
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeHbPacket
(
ademco_
char_t
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
const
AdemcoXDataSegment
*
xdata
);
// like upper funcs, store buff and len to pkt->raw, pkt->raw_len
...
...
@@ -435,7 +435,7 @@ ADEMCO_EXPORT_SYMBOL size_t ademcoMakeHbPacket2(AdemcoPacket* pkt, uint16_t seq,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
const
AdemcoXDataSegment
*
xdata
);
//! parse a ademco packet, if everything is OK, cb_commited is the packet length
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoPacketParse
(
const
char_t
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
);
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoPacketParse
(
const
ademco_
char_t
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
);
/* CRC16 implementation according to ARC
* Name : CRC-16/ARC
...
...
@@ -448,7 +448,7 @@ ADEMCO_EXPORT_SYMBOL AdemcoParseResult ademcoPacketParse(const char_t* buff, siz
* Xor constant to output CRC : 0x0000
* Output for "123456789" : 0xBB3D
*/
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC16
(
const
char_t
*
buff
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC16
(
const
ademco_
char_t
*
buff
,
size_t
len
);
// 将一串以高低字节表示的十六进制数组转换为10进制数字符串
// 每个字节的高四位和低四位若不大于9,将该四位表示的数字以10进制ascii码填入str,否则停止
...
...
@@ -456,7 +456,7 @@ ADEMCO_EXPORT_SYMBOL uint16_t ademcoCRC16(const char_t* buff, size_t len);
// 注意:函数不会在str末尾补 null terminator
// 调用者应确保str有足够空间,至少len的2倍,否则会崩溃
// 示例:输入数组:0x18 0x24 0x08 0x88 0x10 0x1f 0xff,输出字符串"18240888101"
ADEMCO_EXPORT_SYMBOL
size_t
ademcoHiLoArrayToDecStr
(
char_t
*
str
,
const
uint8_t
*
arr
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoHiLoArrayToDecStr
(
ademco_
char_t
*
str
,
const
uint8_t
*
arr
,
size_t
len
);
// 将一个10进制数字符串转为高低字节表示的数组,节省空间
// str应只包含'0'~'9',否则失败返回0
...
...
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