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
189eb122
Commit
189eb122
authored
Feb 06, 2023
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
dfb828a6
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
71 additions
and
65 deletions
+71
-65
ademco.c
ademco.c
+13
-13
ademco.h
ademco.h
+22
-17
CSharpDemo.cs
swig/CSharpDemo.cs
+19
-19
JavaDemo.java
swig/JavaDemo.java
+11
-11
libademco.swig
swig/libademco.swig
+1
-0
win_csharp.bat
swig/win_csharp.bat
+1
-1
mkrelease.sh
tools/mkrelease.sh
+4
-4
No files found.
ademco.c
View file @
189eb122
...
...
@@ -26,7 +26,7 @@
#define dline dprintf("%s %d\n", __FILE__, __LINE__);
#define dmsg dline; dprintf
void
ademcoPrint
(
const
char
*
p
,
size_t
len
)
void
ademcoPrint
(
const
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
*
buff
,
size_t
len
)
uint16_t
ademcoCRC16
(
const
char
_t
*
buff
,
size_t
len
)
{
uint16_t
crc
=
0
;
while
(
len
--
)
{
...
...
@@ -343,7 +343,7 @@ uint16_t ademcoCRC16(const char* buff, size_t len)
return
crc
;
}
size_t
ademcoAppendDataSegment
(
char
*
buff
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
)
size_t
ademcoAppendDataSegment
(
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
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
)
AdemcoParseResult
ademcoParseDataSegment
(
const
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* packet, size_t packet_len,
return
RESULT_ERROR
;
}
size_t
ademcoDataSegmentToCongwinFe100
(
char
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
)
size_t
ademcoDataSegmentToCongwinFe100
(
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
*
content
,
size_t
len
)
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
char
_t
*
content
,
size_t
len
)
{
char
transformed
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
size_t
translen
;
...
...
@@ -674,7 +674,7 @@ static void getNowTimestamp(char* buff)
tm
->
tm_mon
+
1
,
tm
->
tm_mday
,
tm
->
tm_year
+
1900
);
}
size_t
ademcoMakeEmptyDataPacket
(
char
*
dst_buff
,
size_t
len
,
const
char
*
id
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
size_t
ademcoMakeEmptyDataPacket
(
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* dst_buff, size_t len, const char* id, uin
}
}
size_t
ademcoMakeNullPacket
(
char
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
size_t
ademcoMakeNullPacket
(
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
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
size_t
ademcoMakeAckPacket
(
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
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
)
size_t
ademcoMakeNakPacket
(
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
*
dst_buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
size_t
ademcoMakeHbPacket
(
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
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
)
AdemcoParseResult
ademcoPacketParse
(
const
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* buff, size_t len, AdemcoPacket*
return
RESULT_ERROR
;
}
size_t
ademcoHiLoArrayToDecStr
(
char
*
str
,
const
uint8_t
*
arr
,
size_t
len
)
size_t
ademcoHiLoArrayToDecStr
(
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 @
189eb122
...
...
@@ -35,6 +35,12 @@
extern
"C"
{
#endif
#ifdef SWIG
#define char_t uint8_t
#else
#define char_t char
#endif
#define ADEMCO_OK 0
#define ADEMCO_ERR -1
...
...
@@ -281,7 +287,7 @@ typedef enum AdemcoParseResult {
// 安定宝协议data段
typedef
struct
AdemcoDataSegment
{
char
raw
[
ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX
];
char
_t
raw
[
ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX
];
size_t
raw_len
;
AdemcoId
ademcoId
;
AdemcoEvent
ademcoEvent
;
...
...
@@ -301,7 +307,7 @@ typedef enum AdemcoXDataTransform {
typedef
struct
AdemcoXDataSegment
{
AdemcoXDataLengthFormat
lenghFormat
;
char
raw
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
char
_t
raw
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
size_t
raw_len
;
}
AdemcoXDataSegment
;
...
...
@@ -343,7 +349,7 @@ typedef struct AdemcoPacket {
AdemcoXDataSegment
xdata
;
time_t
timestamp
;
char
raw
[
ADEMCO_PACKET_MAX_LEN
];
char
_t
raw
[
ADEMCO_PACKET_MAX_LEN
];
size_t
raw_len
;
}
AdemcoPacket
;
...
...
@@ -351,7 +357,7 @@ typedef struct AdemcoPacket {
//////////////////////// Functions ////////////////////////
//! print as HEX
ADEMCO_EXPORT_SYMBOL
void
ademcoPrint
(
const
char
*
buff
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
void
ademcoPrint
(
const
char
_t
*
buff
,
size_t
len
);
//////////////////////// AdemcoEvent functions ////////////////////////
...
...
@@ -373,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
*
packet
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoAppendDataSegment
(
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
*
packet
,
size_t
packet_len
,
AdemcoDataSegment
*
dataSegment
);
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoParseDataSegment
(
const
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
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoDataSegmentToCongwinFe100
(
char
_t
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
);
//////////////////////// AdemcoXDataSegment functions ////////////////////////
...
...
@@ -399,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
*
content
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
AdemcoXDataTransform
xtr
,
const
char
_t
*
content
,
size_t
len
);
//////////////////////// AdemcoPacketId functions ////////////////////////
...
...
@@ -414,11 +420,11 @@ ADEMCO_EXPORT_SYMBOL const char* admecoPacketIdToString(AdemcoPacketId id);
* otherwise return 0
*/
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeEmptyDataPacket
(
char
*
dst_buff
,
size_t
len
,
const
char
*
id
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeNullPacket
(
char
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeAckPacket
(
char
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeNakPacket
(
char
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoMakeHbPacket
(
char
*
buff
,
size_t
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
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
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
const
AdemcoXDataSegment
*
xdata
);
// like upper funcs, store buff and len to pkt->raw, pkt->raw_len
...
...
@@ -429,8 +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
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
);
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoPacketParse
(
const
char_t
*
buff
,
size_t
len
,
AdemcoPacket
*
pkt
,
size_t
*
cb_commited
);
/* CRC16 implementation according to ARC
* Name : CRC-16/ARC
...
...
@@ -443,7 +448,7 @@ ADEMCO_EXPORT_SYMBOL AdemcoParseResult ademcoPacketParse(const char* buff, size_
* Xor constant to output CRC : 0x0000
* Output for "123456789" : 0xBB3D
*/
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC16
(
const
char
*
buff
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC16
(
const
char
_t
*
buff
,
size_t
len
);
// 将一串以高低字节表示的十六进制数组转换为10进制数字符串
// 每个字节的高四位和低四位若不大于9,将该四位表示的数字以10进制ascii码填入str,否则停止
...
...
@@ -451,7 +456,7 @@ ADEMCO_EXPORT_SYMBOL uint16_t ademcoCRC16(const char* 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
*
str
,
const
uint8_t
*
arr
,
size_t
len
);
ADEMCO_EXPORT_SYMBOL
size_t
ademcoHiLoArrayToDecStr
(
char
_t
*
str
,
const
uint8_t
*
arr
,
size_t
len
);
// 将一个10进制数字符串转为高低字节表示的数组,节省空间
// str应只包含'0'~'9',否则失败返回0
...
...
swig/CSharpDemo.cs
View file @
189eb122
...
...
@@ -22,11 +22,11 @@ namespace CSharpDemo
Console
.
WriteLine
(
"test parse"
);
string
str
=
"\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r"
;
byte
[]
raw
=
Encoding
.
ASCII
.
GetBytes
(
str
);
SWIGTYPE_p_
int
cb
=
libademco
.
new_in
tp
();
SWIGTYPE_p_
size_t
cb
=
libademco
.
new_size_
tp
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
raw
,
raw
.
Length
,
pkt
,
cb
);
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
raw
,
(
uint
)
raw
.
Length
,
pkt
,
cb
);
Debug
.
Assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
Debug
.
Assert
(
libademco
.
intp_value
(
cb
)
==
str
.
Length
);
Debug
.
Assert
(
libademco
.
size_tp_value
(
cb
)
==
(
uint
)
str
.
Length
);
Debug
.
Assert
(
pkt
.
crc
==
0xC5C3
);
Debug
.
Assert
(
pkt
.
len
==
0x0053
);
Debug
.
Assert
(
pkt
.
id
==
AdemcoPacketId
.
AID_HB
);
...
...
@@ -36,24 +36,24 @@ namespace CSharpDemo
Debug
.
Assert
(
pkt
.
data
.
ademcoEvent
==
AdemcoEvent
.
EVENT_I_AM_WIRE_MACHINE
);
Debug
.
Assert
(
pkt
.
data
.
gg
==
0
);
Debug
.
Assert
(
pkt
.
data
.
zone
==
0
);
Console
.
WriteLine
(
"res={0:D}, commited={1:D}"
,
res
,
libademco
.
in
tp_value
(
cb
));
Console
.
WriteLine
(
"res={0:D}, commited={1:D}"
,
res
,
libademco
.
size_
tp_value
(
cb
));
}
// test pack
{
Console
.
WriteLine
(
"test pack"
);
byte
[]
buff
=
new
byte
[
1024
];
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
u
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
Debug
.
Assert
(
len
>
0
);
Console
.
WriteLine
(
"len={0:D}"
,
len
);
libademco
.
ademcoPrint
(
buff
,
len
);
Console
.
WriteLine
(
"test parse packed data"
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
SWIGTYPE_p_
int
cb
=
libademco
.
new_in
tp
();
SWIGTYPE_p_
size_t
cb
=
libademco
.
new_size_
tp
();
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
buff
,
len
,
pkt
,
cb
);
Debug
.
Assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
Debug
.
Assert
(
libademco
.
in
tp_value
(
cb
)
==
len
);
Debug
.
Assert
(
libademco
.
size_
tp_value
(
cb
)
==
len
);
Debug
.
Assert
(
pkt
.
id
==
AdemcoPacketId
.
AID_HB
);
Debug
.
Assert
(
pkt
.
seq
==
1
);
Debug
.
Assert
(
pkt
.
acct
==
"861234567890"
);
...
...
@@ -68,7 +68,7 @@ namespace CSharpDemo
{
Console
.
WriteLine
(
"test pack, buff not enough"
);
Byte
[]
buff
=
new
Byte
[
10
];
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
10
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
u
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
10
,
1
,
"861234567890"
,
666666
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
Debug
.
Assert
(
len
==
0
);
}
...
...
@@ -120,7 +120,7 @@ namespace CSharpDemo
TcpClient
client
=
(
TcpClient
)
cli
;
NetworkStream
stream
=
client
.
GetStream
();
AdemcoPacket
pkt
=
new
AdemcoPacket
();
SWIGTYPE_p_
int
cb
=
libademco
.
new_in
tp
();
SWIGTYPE_p_
size_t
cb
=
libademco
.
new_size_
tp
();
byte
[]
buff
=
new
byte
[
0
];
int
nread
=
0
;
uint
ademco_id
=
0
;
...
...
@@ -146,11 +146,11 @@ namespace CSharpDemo
AdemcoParseResult
res
=
AdemcoParseResult
.
RESULT_OK
;
while
(
res
==
AdemcoParseResult
.
RESULT_OK
){
res
=
libademco
.
ademcoPacketParse
(
buff
,
buff
.
Length
,
pkt
,
cb
);
res
=
libademco
.
ademcoPacketParse
(
buff
,
(
uint
)
buff
.
Length
,
pkt
,
cb
);
switch
(
res
){
case
AdemcoParseResult
.
RESULT_OK
:
Console
.
Write
(
"C:"
);
libademco
.
ademcoPrint
(
buff
,
libademco
.
in
tp_value
(
cb
));
buff
=
eat
(
buff
,
libademco
.
in
tp_value
(
cb
));
Console
.
Write
(
"C:"
);
libademco
.
ademcoPrint
(
buff
,
libademco
.
size_
tp_value
(
cb
));
buff
=
eat
(
buff
,
(
int
)
libademco
.
size_
tp_value
(
cb
));
switch
(
pkt
.
id
)
{
case
AdemcoPacketId
.
AID_NULL
:
...
...
@@ -192,18 +192,18 @@ namespace CSharpDemo
static
void
replyAck
(
NetworkStream
stream
,
ushort
seq
,
string
acct
){
byte
[]
buff
=
new
byte
[
1024
];
int
len
=
libademco
.
ademcoMakeAckPacket
(
buff
,
1024
,
seq
,
acct
,
0
);
u
int
len
=
libademco
.
ademcoMakeAckPacket
(
buff
,
1024
,
seq
,
acct
,
0
);
Console
.
Write
(
"S:"
);
libademco
.
ademcoPrint
(
buff
,
len
);
stream
.
Write
(
buff
,
0
,
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
}
static
void
sendArm
(
NetworkStream
stream
,
ushort
seq
,
string
acct
,
uint
ademcoId
){
byte
[]
buff
=
new
byte
[
1024
];
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
u
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_ARM
,
0
,
0
,
null
);
Console
.
Write
(
"S:"
);
libademco
.
ademcoPrint
(
buff
,
len
);
stream
.
Write
(
buff
,
0
,
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
}
static
void
sendDisarm
(
NetworkStream
stream
,
ushort
seq
,
string
acct
,
uint
ademcoId
,
string
pwd
){
...
...
@@ -211,12 +211,12 @@ namespace CSharpDemo
AdemcoXDataSegment
xdata
=
null
;
if
(!
string
.
IsNullOrEmpty
(
pwd
)){
xdata
=
new
AdemcoXDataSegment
();
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
Encoding
.
ASCII
.
GetBytes
(
pwd
),
pwd
.
Length
);
libademco
.
ademcoMakeXData
(
xdata
,
AdemcoXDataLengthFormat
.
TWO_HEX
,
AdemcoXDataTransform
.
AdemcoXDataTransform_as_is
,
Encoding
.
ASCII
.
GetBytes
(
pwd
),
(
uint
)
pwd
.
Length
);
}
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_DISARM
,
0
,
0
,
xdata
);
u
int
len
=
libademco
.
ademcoMakeHbPacket
(
buff
,
1024
,
seq
,
acct
,
ademcoId
,
AdemcoEvent
.
EVENT_DISARM
,
0
,
0
,
xdata
);
Console
.
Write
(
"S:"
);
libademco
.
ademcoPrint
(
buff
,
len
);
stream
.
Write
(
buff
,
0
,
len
);
stream
.
Write
(
buff
,
0
,
(
int
)
len
);
}
}
}
swig/JavaDemo.java
View file @
189eb122
...
...
@@ -85,12 +85,12 @@ public class JavaDemo {
String
data
=
"\nC5C30053\"HENG-BO\"0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019\r"
;
System
.
out
.
println
(
"using data="
+
data
);
AdemcoPacket
pkt
=
new
AdemcoPacket
();
SWIGTYPE_p_
int
cb
=
libademco
.
new_in
tp
();
SWIGTYPE_p_
size_t
cb
=
libademco
.
new_size_
tp
();
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
data
.
getBytes
(),
data
.
length
(),
pkt
,
cb
);
assert
(
res
==
AdemcoParseResult
.
RESULT_OK
);
assert
(
libademco
.
in
tp_value
(
cb
)
==
data
.
length
());
System
.
out
.
println
(
"parse result="
+
res
+
",cb_commited="
+
libademco
.
in
tp_value
(
cb
));
libademco
.
delete_
in
tp
(
cb
);
assert
(
libademco
.
size_
tp_value
(
cb
)
==
data
.
length
());
System
.
out
.
println
(
"parse result="
+
res
+
",cb_commited="
+
libademco
.
size_
tp_value
(
cb
));
libademco
.
delete_
size_
tp
(
cb
);
}
// test pack
...
...
@@ -165,7 +165,7 @@ public class JavaDemo {
SocketChannel
channel
;
byte
[]
buf
=
new
byte
[
0
];
AdemcoPacket
pkt
=
new
AdemcoPacket
();
SWIGTYPE_p_
int
cb
=
libademco
.
new_in
tp
();
SWIGTYPE_p_
size_t
cb
=
libademco
.
new_size_
tp
();
HbMachineType
type
=
HbMachineType
.
HMT_INVALID
;
HbMachineStatus
status
=
HbMachineStatus
.
HMS_INVALID
;
int
seq
=
0
;
...
...
@@ -179,17 +179,17 @@ public class JavaDemo {
public
void
offline
(){
System
.
out
.
println
(
id
()
+
" is offline"
);
libademco
.
delete_
in
tp
(
cb
);
libademco
.
delete_
size_
tp
(
cb
);
}
public
void
onMsg
(
byte
[]
data
)
throws
IOException
{
buf
=
append
(
buf
,
data
);
//System.out.println(printable_bytes(buf));
AdemcoParseResult
res
=
libademco
.
ademcoPacketParse
(
buf
,
buf
.
length
,
pkt
,
cb
);
System
.
out
.
println
(
res
+
", "
+
libademco
.
in
tp_value
(
cb
));
System
.
out
.
println
(
res
+
", "
+
libademco
.
size_
tp_value
(
cb
));
switch
(
res
)
{
case
RESULT_OK:
buf
=
trim
(
buf
,
libademco
.
in
tp_value
(
cb
));
buf
=
trim
(
buf
,
(
int
)
libademco
.
size_
tp_value
(
cb
));
handleMsg
();
break
;
case
RESULT_NOT_ENOUGH:
...
...
@@ -201,8 +201,8 @@ public class JavaDemo {
}
private
byte
[]
getRawWithLen
(){
byte
[]
b
=
new
byte
[
pkt
.
getRaw_len
()];
System
.
arraycopy
(
pkt
.
getRaw
(),
0
,
b
,
0
,
pkt
.
getRaw_len
());
byte
[]
b
=
new
byte
[
(
int
)
pkt
.
getRaw_len
()];
System
.
arraycopy
(
pkt
.
getRaw
(),
0
,
b
,
0
,
(
int
)
pkt
.
getRaw_len
());
return
b
;
}
...
...
@@ -300,7 +300,7 @@ public class JavaDemo {
return
printable_bytes
(
b
,
b
.
length
);
}
public
static
String
printable_bytes
(
byte
[]
b
,
int
length
){
public
static
String
printable_bytes
(
byte
[]
b
,
long
length
){
String
HEX_STRING
=
"0123456789ABCDEF"
;
String
s
=
""
;
for
(
int
i
=
0
;
i
<
length
;
i
++){
...
...
swig/libademco.swig
View file @
189eb122
...
...
@@ -33,6 +33,7 @@ JAVA_ARRAYS_TYPEMAPS(uint8_t, byte, jbyte, Uint8, "[B")
%pointer_functions(int, intp);
%pointer_functions(uint16_t, uint16p);
%pointer_functions(uint32_t, uint32p);
%pointer_functions(size_t, size_tp);
/* Parse the header file to generate wrappers */
%include "../ademco.h"
...
...
swig/win_csharp.bat
View file @
189eb122
mkdir com\hb3344\ademco
"C:\Users\Jack\Downloads\swigwin-4.0.2\swig.exe" -csharp -namespace com.hb3344.ademco -outdir com/hb3344/ademco -o libademco_csharp_wrap.c libademco.swig
cl -c ../ademco.c ../hb_com.c libademco_csharp_wrap.c
libhbcom_csharp_wrap.c
-I"../"
cl -c ../ademco.c ../hb_com.c libademco_csharp_wrap.c -I"../"
cl -LD ademco.obj hb_com.obj libademco_csharp_wrap.obj -o libademco.dll
csc CSharpDemo.cs -recurse:com/hb3344/ademco/*.cs
rem CSharpDemo.exe
tools/mkrelease.sh
View file @
189eb122
...
...
@@ -52,14 +52,14 @@ rm -rf win_csharp
# ubuntu20.04 java
ssh
-t
root@192.168.2.107
"cd /root/projects/ademco_hb && git
reset --hard HEAD && git pull origin c
&& cd swig && export JAVA_HOME='/usr/lib/jvm/java-8-openjdk-amd64' && ./linux_java.sh && cd ../tools && ./linux_java.sh"
ssh
-t
root@192.168.2.107
"cd /root/projects/ademco_hb && git
checkout master && git reset --hard HEAD && git pull origin master
&& cd swig && export JAVA_HOME='/usr/lib/jvm/java-8-openjdk-amd64' && ./linux_java.sh && cd ../tools && ./linux_java.sh"
scp root@192.168.2.107:/root/projects/ademco_hb/tools/linux_java.zip
.
ssh
-t
root@192.168.2.107
"rm -f /root/projects/ademco_hb/tools/linux_java.zip"
# macOS java
ssh
-t
jack@
wangjackdeMacBook-Pro
"cd /Users/jack/projects/ademco_hb && git reset --hard HEAD && git pull origin c
&& cd swig && source ~/.zshrc && export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home' && ./mac_java.sh && cd ../tools && ./mac_java.sh"
scp jack@
wangjackdeMacBook-Pro
:/Users/jack/projects/ademco_hb/tools/mac_java.zip
.
ssh
-t
jack@
wangjackdeMacBook-Pro
"rm -f /Users/jack/projects/ademco_hb/tools/mac_java.zip"
ssh
-t
jack@
JackMacBook-Pro.local
"cd /Users/jack/projects/ademco_hb && git checkout master && git reset --hard HEAD && git pull origin master
&& cd swig && source ~/.zshrc && export JAVA_HOME='/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home' && ./mac_java.sh && cd ../tools && ./mac_java.sh"
scp jack@
JackMacBook-Pro.local
:/Users/jack/projects/ademco_hb/tools/mac_java.zip
.
ssh
-t
jack@
JackMacBook-Pro.local
"rm -f /Users/jack/projects/ademco_hb/tools/mac_java.zip"
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