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
1c5cdc27
Commit
1c5cdc27
authored
Jan 23, 2024
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
2.1.6
parent
431daf57
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
35 changed files
with
1705 additions
and
1472 deletions
+1705
-1472
CHANGELOG.md
CHANGELOG.md
+52
-7
ademco.c
ademco.c
+351
-340
ademco.h
ademco.h
+218
-220
ademco_config.h
ademco_config.h
+2
-2
ademco_version.h
ademco_version.h
+3
-3
串口透传协议.md
docs/串口透传协议.md
+1
-1
gen_event_md.cpp
examples/gen_event_md/gen_event_md.cpp
+41
-41
copy_from_hb.sh
examples/httprelay/copy_from_hb.sh
+4
-3
httprelay.c
examples/httprelay/httprelay.c
+21
-21
httprelay.vcxproj
examples/httprelay/httprelay.vcxproj
+4
-0
dllmain.c
examples/httprelay/uvlib/dllmain.c
+24
-0
mybuf.c
examples/httprelay/uvlib/mybuf.c
+42
-9
mybuf.h
examples/httprelay/uvlib/mybuf.h
+19
-12
uv_httpc.h
examples/httprelay/uvlib/uv_httpc.h
+8
-8
uv_httpd.h
examples/httprelay/uvlib/uv_httpd.h
+12
-11
uv_log.c
examples/httprelay/uvlib/uv_log.c
+3
-2
uv_log.h
examples/httprelay/uvlib/uv_log.h
+13
-10
uv_tcp.h
examples/httprelay/uvlib/uv_tcp.h
+2
-1
uv_tcpclient.c
examples/httprelay/uvlib/uv_tcpclient.c
+6
-8
uv_tcpclient.h
examples/httprelay/uvlib/uv_tcpclient.h
+5
-5
uv_tcpserver.c
examples/httprelay/uvlib/uv_tcpserver.c
+5
-3
uv_tcpserver.h
examples/httprelay/uvlib/uv_tcpserver.h
+7
-7
uvlib.h
examples/httprelay/uvlib/uvlib.h
+23
-10
uvlib_config.h
examples/httprelay/uvlib/uvlib_config.h
+22
-0
uvlib_version.h
examples/httprelay/uvlib/uvlib_version.h
+5
-3
server_demo.cpp
examples/server_demo/server_demo.cpp
+21
-21
hb_com.c
hb_com.c
+360
-323
hb_com.h
hb_com.h
+277
-263
CSharpDemo.cs
swig/CSharpDemo.cs
+48
-44
JavaDemo.java
swig/JavaDemo.java
+46
-46
binding.gyp
swig/binding.gyp
+21
-11
nodejs-demo.js
swig/nodejs-demo.js
+28
-28
win_csharp.bat
swig/win_csharp.bat
+1
-1
win_java.bat
swig/win_java.bat
+1
-1
copy_from_hb.sh
tools/copy_from_hb.sh
+9
-7
No files found.
CHANGELOG.md
View file @
1c5cdc27
# Ademco Change Log
## 2.1.6
-
fix typo of
`hb_machine_timer_to_greenwich`
,
`hb_machine_timer_from_greenwich`
-
fix com request
`A0`
doc, remove
`p3`
## 2.1.5
-
return type of
`hb_get_available_zone_properties_by_type`
changed from
`int`
to
`size_t`
## 2.1.4
-
add
`ADEMCO_ID_MASK`
,
`ADEMCO_ZONE_MASK`
, and
`ADEMCO_GG_MASK`
## 2.1.3
-
fix
`hb_com_resp_a2_p1_t`
typo
## 2.1.2
-
fix
`ademco_parse_packet`
on met invalid timestamp,
`pkt.timestamp`
is not inited
## 2.1.1
## 2.1.0
-
change
`ademco_zone_t`
to
`uint16_t`
-
change
`ademco_gg_t`
to
`uint8_t`
## 2.0.0
-
add
`hb_com_resp_ad_iter_t`
,
`hb_com_resp_ad_iter_init`
and
`hb_com_resp_ad_iter_next`
-
add
`ADEMCO_PACKET_PWD_MIN_LEN`
,
`ADEMCO_PACKET_PWD_MAX_LEN`
-
code styles changed
-
when parse returns
`ADEMCO_PARSE_RESULT_ERROR`
,
`*ate`
will contains length to ignore, caller must drop
`*ate`
bytes of data
## 1.5.1
-
account
minimum length is 6
-
`ademco
IsValidA
ccount`
check length
-
`account`
minimum length is 6
-
`ademco
_is_valid_a
ccount`
check length
## 1.5.0
-
`
HbComResp_A2_Iter
.com`
changed to pointer
-
`
hb_com_resp_a2_iter_t
.com`
changed to pointer
-
update parser for
`timestamp`
-
add
`AdemcoControlSource`
defs
...
...
@@ -28,7 +73,7 @@
-
add
`file`
for parse error
-
fix
`struct tm not initilized`
on parse
-
fix parsing pointer on parse
timestamp
failed
-
fix parsing pointer on parse
`timestamp`
failed
## 1.2.0
...
...
@@ -40,9 +85,9 @@
## 1.1.0
-
ADEMCO_PACKET_ACCT_MAX_LEN
changed from 64 to 18
-
add
ADEMCO_PACKET_ACCT_MAX_LEN
-
hb_com
读写主机账号命令
-
`ADEMCO_PACKET_ACCT_MAX_LEN`
changed from 64 to 18
-
add
`ADEMCO_PACKET_ACCT_MAX_LEN`
-
`hb_com`
读写主机账号命令
## 1.0.0
...
...
ademco.c
View file @
1c5cdc27
This diff is collapsed.
Click to expand it.
ademco.h
View file @
1c5cdc27
This diff is collapsed.
Click to expand it.
ademco_config.h
View file @
1c5cdc27
...
...
@@ -20,9 +20,9 @@
#endif // ADEMCO_EXPORTS
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
#define ademco_char_t uint8_t
typedef
uint8_t
ademco_char_t
;
#else
#define ademco_char_t char
typedef
char
ademco_char_t
;
#endif
#ifndef ADEMCO_ENABLE_CHINESE
...
...
ademco_version.h
View file @
1c5cdc27
...
...
@@ -6,9 +6,9 @@
* evolve between minor releases, but only in a backwards compatible way.
*/
#define ADEMCO_VERSION_MAJOR
1
#define ADEMCO_VERSION_MINOR
5
#define ADEMCO_VERSION_PATCH
1
#define ADEMCO_VERSION_MAJOR
2
#define ADEMCO_VERSION_MINOR
1
#define ADEMCO_VERSION_PATCH
6
#define ADEMCO_VERSION_IS_RELEASE 1
#define ADEMCO_VERSION_SUFFIX ""
...
...
docs/串口透传协议.md
View file @
1c5cdc27
...
...
@@ -21,7 +21,7 @@
|数据|长度|含义|说明|
|---|----|----|----|
|EB BA 3F 07
*P0*
**A0**
*P1 P2
P3*
SUM|10|主机状态回应|
*P0*
:语音;
*P1*
:0布防,1半布防,2撤防,3设置;
*
P2:主机类型|
|EB BA 3F 07
*P0*
**A0**
*P1 P2
*
SUM|8|主机状态回应|
*P0*
:语音;
*P1*
:主机状态;
*P2*
:主机类型|
|EB BA 3F
*PN*
*P0*
**A2**
*[Z, P]x(N-8)/2 P1*
SUM|变长|主机防区数据回应|
*PN*
:表示本条数据内包含多少个字节,最大20x2+8=48个字节,防区/属性字节对的数量最大为20;
<br/>
*P0*
:语音;Z:防区号;P:防区属性;
*P1*
:FF表示没有更多数据了,其他表示还有更多数据|
|EB BA 3F 07
*P0*
**A3**
SUM|7|学码开始回应|
*P0*
:语音。因为学码时主机要等待外部无线信号(用户触发探测器),
<br/>
因此先回应A3表示已经开始学码,学码成功时再回 A4|
|EB BA 3F 0A
*P0*
**A4**
*P1 P2 P3*
SUM|10|修改防区回应|
*P0*
:语音;
*P1*
:防区号;
*P2*
:防区属性;
*P3*
:0失败,1成功,2失败-重码,3失败-空防区|
...
...
examples/gen_event_md/gen_event_md.cpp
View file @
1c5cdc27
...
...
@@ -24,32 +24,32 @@ const char* print_bool(bool b) {
return
b
?
"√"
:
" "
;
// "×";
}
AdemcoEven
t
statusEvents
[]
=
{
ademco_event_
t
statusEvents
[]
=
{
#define XX(name, code, zh) EVENT_##name,
ADEMCO_STATUS_EVENTS_MAP
(
XX
)
#undef XX
};
AdemcoEven
t
alarmEvents
[]
=
{
ademco_event_
t
alarmEvents
[]
=
{
#define XX(name, code, zh) EVENT_##name,
ADEMCO_ALARM_EVENTS_MAP
(
XX
)
#undef XX
};
AdemcoEven
t
excepEvents
[]
=
{
ademco_event_
t
excepEvents
[]
=
{
#define XX(name, code, zh) EVENT_##name,
ADEMCO_EXEPTION_EVENTS_MAP
(
XX
)
ADEMCO_RESUME_EVENTS_MAP
(
XX
)
#undef XX
};
AdemcoEven
t
privateEvents
[]
=
{
ademco_event_
t
privateEvents
[]
=
{
#define XX(name, code, zh) EVENT_##name,
ADEMCO_HB_EVENTS_MAP
(
XX
)
#undef XX
};
AdemcoEven
t
allEvents
[]
=
{
ademco_event_
t
allEvents
[]
=
{
#define XX(name, code, zh) EVENT_##name,
ADEMCO_STATUS_EVENTS_MAP
(
XX
)
ADEMCO_ALARM_EVENTS_MAP
(
XX
)
...
...
@@ -59,26 +59,26 @@ AdemcoEvent allEvents[] = {
#undef XX
};
HbZoneProperty
allZoneProperties
[]
=
{
hb_zone_property_t
allZoneProperties
[]
=
{
#define XX(name, value, str) HZP_##name,
HB_ZONE_PROPERTY_MAP
(
XX
)
#undef XX
};
void
printEvents
(
const
AdemcoEven
t
*
events
,
size_t
len
)
void
printEvents
(
const
ademco_event_
t
*
events
,
size_t
len
)
{
printf
(
"|事件码|含义|en|
\n
|-----|----|--|
\n
"
);
for
(
size_t
i
=
0
;
i
<
len
;
i
++
)
{
auto
e
=
events
[
i
];
printf
(
"|%04d|%s|%s|
\n
"
,
e
,
ademco
EventToStringC
hinese
(
e
),
ademco
EventToS
tring
(
e
));
ademco
_event_to_string_c
hinese
(
e
),
ademco
_event_to_s
tring
(
e
));
}
printf
(
"
\n
"
);
}
const
char
*
get_core_author
(
HbMachineType
t
)
const
char
*
get_core_author
(
hb_machine_type_t
t
)
{
switch
(
t
)
{
case
HMT_WIFI
:
...
...
@@ -100,7 +100,7 @@ const char* get_core_author(HbMachineType t)
return
""
;
}
const
char
*
get_net_author
(
HbMachineType
t
)
const
char
*
get_net_author
(
hb_machine_type_t
t
)
{
switch
(
t
)
{
case
HMT_WIFI
:
...
...
@@ -120,7 +120,7 @@ const char* get_net_author(HbMachineType t)
return
""
;
}
std
::
vector
<
std
::
string
>
get_machine_brands
(
HbMachineType
t
)
std
::
vector
<
std
::
string
>
get_machine_brands
(
hb_machine_type_t
t
)
{
switch
(
t
)
{
case
HMT_WIFI
:
...
...
@@ -152,7 +152,7 @@ std::string brand_to_path(const std::string& brand)
return
{};
}
void
print_machine_brands
(
HbMachineType
t
)
void
print_machine_brands
(
hb_machine_type_t
t
)
{
printf
(
"|<ul>"
);
for
(
auto
brand
:
get_machine_brands
(
t
))
{
...
...
@@ -175,24 +175,24 @@ void print_machineTypes()
"|---------|-------|----|----|-----|----|-------|----|-------|---|----|---|----|
\n
"
);
for
(
auto
e
:
allEvents
)
{
if
(
ademco
IsMachineTypeE
vent
(
e
))
{
auto
t
=
hb
MachineTypeFromAdemcoE
vent
(
e
);
if
(
!
hb
MachineIsSelling
(
t
))
continue
;
printf
(
"|%04d %s"
,
(
int
)
e
,
ademco
EventToStringC
hinese
(
e
));
printf
(
"|%s"
,
hb
MachineTypeToStringC
hinese
(
t
));
printf
(
"|%s"
,
print_bool
(
hb
MachineCanA
rm
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
MachineCanD
isarm
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
MachineCanHalfA
rm
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
MachineCanEnterSettings
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
MachineCanReportSignalS
trength
(
t
)));
printf
(
"|1~%d"
,
hb
ZoneMax
(
t
));
if
(
hb
MachineHasWiredZone
(
t
))
{
printf
(
"|%d~%d"
,
hb
WiredZoneMin
(
t
),
hbWiredZoneM
ax
(
t
));
if
(
ademco
_is_machine_type_e
vent
(
e
))
{
auto
t
=
hb
_machine_type_from_ademco_e
vent
(
e
);
if
(
!
hb
_is_machine_on_sale
(
t
))
continue
;
printf
(
"|%04d %s"
,
(
int
)
e
,
ademco
_event_to_string_c
hinese
(
e
));
printf
(
"|%s"
,
hb
_machine_type_to_string_c
hinese
(
t
));
printf
(
"|%s"
,
print_bool
(
hb
_machine_can_a
rm
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
_machine_can_d
isarm
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
_machine_can_half_a
rm
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
_machine_can_config
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
_machine_can_report_signal_s
trength
(
t
)));
printf
(
"|1~%d"
,
hb
_get_max_zone_by_type
(
t
));
if
(
hb
_machine_has_wired_zones
(
t
))
{
printf
(
"|%d~%d"
,
hb
_wired_zone_min
(
t
),
hb_wired_zone_m
ax
(
t
));
}
else
{
printf
(
"| "
);
}
printf
(
"|%s"
,
print_bool
(
hb
MachineCanReportBySMS
(
t
)));
printf
(
"|%s"
,
print_bool
(
hb
_machine_can_report_by_sms
(
t
)));
printf
(
"|%s"
,
get_core_author
(
t
));
printf
(
"|%s"
,
get_net_author
(
t
));
print_machine_brands
(
t
);
...
...
@@ -211,9 +211,9 @@ void print_imgs()
std
::
map
<
std
::
string
,
std
::
string
>
imgs
;
for
(
auto
e
:
allEvents
)
{
if
(
ademco
IsMachineTypeE
vent
(
e
))
{
auto
t
=
hb
MachineTypeFromAdemcoE
vent
(
e
);
if
(
!
hb
MachineIsSelling
(
t
))
continue
;
if
(
ademco
_is_machine_type_e
vent
(
e
))
{
auto
t
=
hb
_machine_type_from_ademco_e
vent
(
e
);
if
(
!
hb
_is_machine_on_sale
(
t
))
continue
;
for
(
auto
brand
:
get_machine_brands
(
t
))
{
auto
path
=
brand_to_path
(
brand
);
...
...
@@ -230,7 +230,7 @@ void print_imgs()
printf
(
"
\n\n
"
);
}
bool
zprop_is_contain
(
HbZoneProperty
*
props
,
int
count
,
HbZoneProperty
prop
)
{
bool
zprop_is_contain
(
hb_zone_property_t
*
props
,
int
count
,
hb_zone_property_t
prop
)
{
for
(
int
i
=
0
;
i
<
count
;
i
++
)
{
if
(
props
[
i
]
==
prop
)
return
true
;
}
...
...
@@ -244,8 +244,8 @@ void print_available_zone_props()
//auto all_props = getAvailableZoneProperties();
auto
print_prop
=
[](
HbZoneProperty
zp
)
{
printf
(
"%02X %s"
,
zp
,
hb
ZonePropertyToStringC
hinese
(
zp
));
auto
print_prop
=
[](
hb_zone_property_t
zp
)
{
printf
(
"%02X %s"
,
zp
,
hb
_zone_property_to_string_c
hinese
(
zp
));
};
...
...
@@ -266,7 +266,7 @@ void print_available_zone_props()
printf
(
"|失联支持"
);
for
(
auto
zp
:
allZoneProperties
)
{
printf
(
"|%s"
,
print_bool
(
hb
ZonePropCanReportL
ost
(
zp
)));
printf
(
"|%s"
,
print_bool
(
hb
_zone_can_report_l
ost
(
zp
)));
}
printf
(
"|
\n\n
"
);
...
...
@@ -286,14 +286,14 @@ void print_available_zone_props()
printf
(
"|
\n
"
);
for
(
auto
e
:
allEvents
)
{
if
(
ademco
IsMachineTypeE
vent
(
e
))
{
auto
t
=
hb
MachineTypeFromAdemcoE
vent
(
e
);
if
(
!
hb
MachineIsSelling
(
t
))
continue
;
if
(
ademco
_is_machine_type_e
vent
(
e
))
{
auto
t
=
hb
_machine_type_from_ademco_e
vent
(
e
);
if
(
!
hb
_is_machine_on_sale
(
t
))
continue
;
printf
(
"|%04d"
,
(
int
)
e
);
printf
(
"|%d"
,
(
int
)
t
);
print_machine_brands
(
t
);
HbZoneProperty
avail_props
[
12
];
int
count
=
hb
GetAvailableZoneProperties
(
t
,
avail_props
);
hb_zone_property_t
avail_props
[
HZP_COUNT
];
int
count
=
hb
_get_available_zone_properties_by_type
(
t
,
avail_props
);
for
(
auto
zp
:
allZoneProperties
)
{
printf
(
"|%s"
,
print_bool
(
zprop_is_contain
(
avail_props
,
count
,
zp
)));
}
...
...
@@ -367,7 +367,7 @@ void print_g250_alarm_codes()
//};
//for (auto code : codes) {
// printf("|%02X|%04d|%s|\n", code, ademcoEventFromCode(code), jlib::win32::utf16_to_mbcs(ademco
EventToStringC
hinese(ademcoEventFromCode(code), false)).c_str());
// printf("|%02X|%04d|%s|\n", code, ademcoEventFromCode(code), jlib::win32::utf16_to_mbcs(ademco
_event_to_string_c
hinese(ademcoEventFromCode(code), false)).c_str());
//}
}
...
...
examples/httprelay/copy_from_hb.sh
View file @
1c5cdc27
...
...
@@ -6,6 +6,7 @@ CURRENT_DIR=$( cd "$(dirname "${BASH_SOURCE[0]}")" ; pwd -P )
cd
${
CURRENT_DIR
}
mkdir
-p
./uvlib
cp
-r
/g/dev_libs/ademco/uvlib/llhttp ./uvlib/
cp
/g/dev_libs/ademco/uvlib/
*
.h ./uvlib/
cp
/g/dev_libs/ademco/uvlib/
*
.c ./uvlib/
\ No newline at end of file
repo
=
/h/dev_hb/libhb
cp
-r
${
repo
}
/uvlib/llhttp ./uvlib/
cp
${
repo
}
/uvlib/
*
.h ./uvlib/
cp
${
repo
}
/uvlib/
*
.c ./uvlib/
\ No newline at end of file
examples/httprelay/httprelay.c
View file @
1c5cdc27
...
...
@@ -8,9 +8,9 @@
typedef
struct
machine_info_s
{
char
acct
[
ADEMCO_PACKET_ACCT_MAX_LEN
+
1
];
AdemcoId
ademcoI
d
;
HbMachineType
type
;
HbMachineStatus
status
;
ademco_id_t
ademco_i
d
;
hb_machine_type_t
type
;
hb_machine_status_t
status
;
}
machine_info_t
;
struct
{
...
...
@@ -81,7 +81,7 @@ int post(const char* json) {
return
0
;
}
int
relay
(
const
char
*
acct
,
AdemcoEvent
ademco_event
,
AdemcoZone
zone
,
AdemcoGG
gg
)
{
int
relay
(
const
char
*
acct
,
ademco_event_t
ademco_event
,
ademco_zone_t
zone
,
ademco_gg_t
gg
)
{
cJSON
*
json
=
NULL
;
char
*
string
=
NULL
;
int
r
=
0
;
...
...
@@ -110,7 +110,7 @@ void on_tcp_connection(uv_tcpserver_client_context_t* client, int connected) {
if
(
connected
)
{
machine_info_t
*
machine
=
malloc
(
sizeof
(
machine_info_t
));
memset
(
machine
->
acct
,
'\0'
,
sizeof
(
machine
->
acct
));
machine
->
ademco
I
d
=
0
;
machine
->
ademco
_i
d
=
0
;
machine
->
type
=
HMT_INVALID
;
machine
->
status
=
HMS_INVALID
;
client
->
data
=
machine
;
...
...
@@ -123,51 +123,51 @@ void on_tcp_connection(uv_tcpserver_client_context_t* client, int connected) {
}
uv_tcp_parse_result_t
on_tcp_parse
(
uv_tcpserver_client_context_t
*
client
,
const
char
*
buf
,
size_t
len
,
size_t
*
ate
)
{
AdemcoPacke
t
pkt
;
AdemcoParseResult
res
=
ademcoPacketParse
(
buf
,
len
,
&
pkt
,
ate
,
NULL
);
ademco_packet_
t
pkt
;
ademco_parse_result_t
res
=
ademco_parse_packet
(
buf
,
len
,
&
pkt
,
ate
,
NULL
);
switch
(
res
)
{
case
RESULT_OK
:
case
ADEMCO_PARSE_
RESULT_OK
:
switch
(
pkt
.
id
)
{
case
AID_NULL
:
case
AID_HB
:
case
AID_ADM_CID
:
printf
(
"C:"
);
ademco
P
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
ademco
_p
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
if
(((
machine_info_t
*
)(
client
->
data
))
->
acct
[
0
]
==
'\0'
)
{
strcpy
(((
machine_info_t
*
)(
client
->
data
))
->
acct
,
pkt
.
acct
);
relay
(
pkt
.
acct
,
EVENT_ONLINE
,
0
,
0
);
}
if
(
pkt
.
data
.
ademco
I
d
)
{
((
machine_info_t
*
)(
client
->
data
))
->
ademco
Id
=
pkt
.
data
.
ademcoI
d
;
if
(
pkt
.
data
.
ademco
_i
d
)
{
((
machine_info_t
*
)(
client
->
data
))
->
ademco
_id
=
pkt
.
data
.
ademco_i
d
;
}
if
(
ademco
IsMachineStatusEvent
(
pkt
.
data
.
ademcoE
vent
))
{
((
machine_info_t
*
)(
client
->
data
))
->
status
=
hb
MachineStatusFromAdemcoEvent
(
pkt
.
data
.
ademcoE
vent
);
if
(
ademco
_is_machine_status_event
(
pkt
.
data
.
ademco_e
vent
))
{
((
machine_info_t
*
)(
client
->
data
))
->
status
=
hb
_machine_status_from_ademco_event
(
pkt
.
data
.
ademco_e
vent
);
}
if
(
ademco
IsMachineTypeEvent
(
pkt
.
data
.
ademcoE
vent
))
{
((
machine_info_t
*
)(
client
->
data
))
->
type
=
hb
MachineTypeFromAdemcoEvent
(
pkt
.
data
.
ademcoE
vent
);
if
(
ademco
_is_machine_type_event
(
pkt
.
data
.
ademco_e
vent
))
{
((
machine_info_t
*
)(
client
->
data
))
->
type
=
hb
_machine_type_from_ademco_event
(
pkt
.
data
.
ademco_e
vent
);
}
if
(
pkt
.
data
.
ademco
E
vent
!=
EVENT_INVALID_EVENT
&&
((
machine_info_t
*
)(
client
->
data
))
->
acct
[
0
]
!=
'\0'
)
{
relay
(((
machine_info_t
*
)(
client
->
data
))
->
acct
,
pkt
.
data
.
ademco
E
vent
,
pkt
.
data
.
zone
,
pkt
.
data
.
gg
);
if
(
pkt
.
data
.
ademco
_e
vent
!=
EVENT_INVALID_EVENT
&&
((
machine_info_t
*
)(
client
->
data
))
->
acct
[
0
]
!=
'\0'
)
{
relay
(((
machine_info_t
*
)(
client
->
data
))
->
acct
,
pkt
.
data
.
ademco
_e
vent
,
pkt
.
data
.
zone
,
pkt
.
data
.
gg
);
}
ademco
MakeAckPacket2
(
&
pkt
,
pkt
.
seq
,
pkt
.
acct
,
pkt
.
data
.
ademcoI
d
);
ademco
_make_ack_packet2
(
&
pkt
,
pkt
.
seq
,
pkt
.
acct
,
pkt
.
data
.
ademco_i
d
);
uv_tcpserver_send_to_cli
(
client
,
pkt
.
raw
,
pkt
.
raw_len
);
printf
(
"S:"
);
ademco
P
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
ademco
_p
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
break
;
}
return
uv_tcp_parse_ok
;
break
;
case
RESULT_NOT_ENOUGH
:
case
ADEMCO_PARSE_
RESULT_NOT_ENOUGH
:
return
uv_tcp_parse_not_enough
;
break
;
case
RESULT_ERROR
:
case
ADEMCO_PARSE_
RESULT_ERROR
:
return
uv_tcp_parse_error
;
break
;
default:
...
...
examples/httprelay/httprelay.vcxproj
View file @
1c5cdc27
...
...
@@ -90,6 +90,7 @@
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(DEVLIBS);.\uvlib\llhttp\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<AdditionalOptions>
/source-charset:utf-8 %(AdditionalOptions)
</AdditionalOptions>
<MultiProcessorCompilation>
true
</MultiProcessorCompilation>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
@@ -106,6 +107,7 @@
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(DEVLIBS);.\uvlib\llhttp\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<AdditionalOptions>
/source-charset:utf-8 %(AdditionalOptions)
</AdditionalOptions>
<MultiProcessorCompilation>
true
</MultiProcessorCompilation>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
@@ -122,6 +124,7 @@
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(DEVLIBS);.\uvlib\llhttp\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<AdditionalOptions>
/source-charset:utf-8 %(AdditionalOptions)
</AdditionalOptions>
<MultiProcessorCompilation>
true
</MultiProcessorCompilation>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
@@ -138,6 +141,7 @@
<ConformanceMode>
true
</ConformanceMode>
<AdditionalIncludeDirectories>
$(DEVLIBS);.\uvlib\llhttp\include;%(AdditionalIncludeDirectories)
</AdditionalIncludeDirectories>
<AdditionalOptions>
/source-charset:utf-8 %(AdditionalOptions)
</AdditionalOptions>
<MultiProcessorCompilation>
true
</MultiProcessorCompilation>
</ClCompile>
<Link>
<SubSystem>
Console
</SubSystem>
...
...
examples/httprelay/uvlib/dllmain.c
0 → 100644
View file @
1c5cdc27
// dllmain.c : Defines the entry point for the DLL application.
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
// Windows Header Files
#include <windows.h>
BOOL
APIENTRY
DllMain
(
HMODULE
hModule
,
DWORD
ul_reason_for_call
,
LPVOID
lpReserved
)
{
(
void
)
hModule
;
(
void
)
lpReserved
;
switch
(
ul_reason_for_call
)
{
case
DLL_PROCESS_ATTACH
:
case
DLL_THREAD_ATTACH
:
case
DLL_THREAD_DETACH
:
case
DLL_PROCESS_DETACH
:
break
;
}
return
TRUE
;
}
#endif
examples/httprelay/uvlib/mybuf.c
View file @
1c5cdc27
...
...
@@ -59,16 +59,27 @@ void mybuf_append(mybuf_t* buf, const char* data, size_t len) {
}
void
mybuf_append_hexdump
(
mybuf_t
*
buf
,
const
char
*
data
,
size_t
len
,
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
)
{
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
,
const
char
*
newline
)
{
size_t
addr
=
0
;
if
(
!
newline
)
{
newline
=
"
\n
"
;
}
if
(
show_header
)
{
if
(
show_address
)
mybuf_cat_printf
(
buf
,
"
addr
"
);
mybuf_cat_printf
(
buf
,
"
ADDR |
"
);
mybuf_cat_printf
(
buf
,
"00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E OF"
);
if
(
show_ascii
)
{
mybuf_cat_printf
(
buf
,
" 0123456789ABCDEF"
);
}
mybuf_cat_printf
(
buf
,
"
\n
"
);
if
(
show_ascii
)
mybuf_cat_printf
(
buf
,
" | 0123456789ABCDEF"
);
mybuf_cat_printf
(
buf
,
"%s"
,
newline
);
if
(
show_address
)
mybuf_cat_printf
(
buf
,
"-----+------------------------------------------------"
);
else
mybuf_cat_printf
(
buf
,
"---------------------------------------------------"
);
if
(
show_ascii
)
mybuf_cat_printf
(
buf
,
"-+-----------------"
);
mybuf_cat_printf
(
buf
,
"%s"
,
newline
);
}
if
(
def_ascii
<
32
||
def_ascii
>
126
)
{
def_ascii
=
'.'
;
// default ascii
...
...
@@ -76,7 +87,7 @@ void mybuf_append_hexdump(mybuf_t* buf, const char* data, size_t len,
for
(
size_t
i
=
0
;
i
<
len
;
i
++
)
{
if
(
show_address
)
{
if
(
i
%
16
==
0
)
{
mybuf_cat_printf
(
buf
,
"%04zX "
,
addr
);
mybuf_cat_printf
(
buf
,
"%04zX
|
"
,
addr
);
addr
+=
16
;
}
}
...
...
@@ -96,9 +107,9 @@ void mybuf_append_hexdump(mybuf_t* buf, const char* data, size_t len,
mybuf_cat_printf
(
buf
,
"%c"
,
def_ascii
);
}
}
mybuf_cat_printf
(
buf
,
"
\n
"
);
mybuf_cat_printf
(
buf
,
"
%s"
,
newline
);
}
else
{
mybuf_cat_printf
(
buf
,
"
\n
"
);
mybuf_cat_printf
(
buf
,
"
%s"
,
newline
);
}
}
}
...
...
@@ -149,3 +160,25 @@ void mybuf_clear_append(mybuf_t* buf, const char* data, size_t len) {
mybuf_append
(
buf
,
tmp
.
buf
,
tmp
.
size
);
mybuf_clear
(
&
tmp
);
}
char
*
mybuf_to_string
(
mybuf_t
*
buf
)
{
size_t
len
=
buf
->
size
;
if
(
len
==
0
)
{
char
*
str
=
(
char
*
)
malloc
(
1
);
fatal_if_null
(
str
);
str
[
0
]
=
'\0'
;
return
str
;
}
if
(
buf
->
buf
[
len
-
1
]
==
'\0'
)
{
len
--
;
}
char
*
str
=
(
char
*
)
malloc
(
len
+
1
);
fatal_if_null
(
str
);
memcpy
(
str
,
buf
->
buf
,
len
);
str
[
len
]
=
'\0'
;
return
str
;
}
void
mybuf_free
(
char
*
str
)
{
free
(
str
);
}
examples/httprelay/uvlib/mybuf.h
View file @
1c5cdc27
...
...
@@ -3,6 +3,7 @@
#pragma once
#include "uvlib_config.h"
#include <stddef.h> // size_t
#ifdef __cplusplus
...
...
@@ -23,31 +24,37 @@ typedef struct {
size_t
size
,
capacity
;
}
mybuf_t
;
void
mybuf_init
(
mybuf_t
*
buf
);
size_t
mybuf_space
(
mybuf_t
*
buf
);
void
mybuf_reserve
(
mybuf_t
*
buf
,
size_t
size
);
void
mybuf_append
(
mybuf_t
*
buf
,
const
char
*
data
,
size_t
len
);
UVLIB_EXPORT_SYMBOL
void
mybuf_init
(
mybuf_t
*
buf
);
UVLIB_EXPORT_SYMBOL
size_t
mybuf_space
(
mybuf_t
*
buf
);
UVLIB_EXPORT_SYMBOL
void
mybuf_reserve
(
mybuf_t
*
buf
,
size_t
size
);
UVLIB_EXPORT_SYMBOL
void
mybuf_append
(
mybuf_t
*
buf
,
const
char
*
data
,
size_t
len
);
/*
* append hex dump to mybuf
* show_header: show 00~0F address header, default is 0
* show_address: show 0000~FFFF address on left
* show_ascii: show ascii on right if can print, default is 0
* def_ascii: when show_ascii but can't print, show def_ascii instead, default is '?'
* def_ascii: when show_ascii but can't print, show def_ascii instead, default is '.'
* newline: default is "\n"
*/
void
mybuf_append_hexdump
(
mybuf_t
*
buf
,
const
char
*
data
,
size_t
len
,
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
);
UVLIB_EXPORT_SYMBOL
void
mybuf_append_hexdump
(
mybuf_t
*
buf
,
const
char
*
data
,
size_t
len
,
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
,
const
char
*
newline
);
#ifdef __GNUC__
void
mybuf_cat_printf
(
mybuf_t
*
buf
,
const
char
*
fmt
,
...)
UVLIB_EXPORT_SYMBOL
void
mybuf_cat_printf
(
mybuf_t
*
buf
,
const
char
*
fmt
,
...)
__attribute__
((
format
(
printf
,
2
,
3
)));
#else
void
mybuf_cat_printf
(
mybuf_t
*
buf
,
const
char
*
fmt
,
...);
UVLIB_EXPORT_SYMBOL
void
mybuf_cat_printf
(
mybuf_t
*
buf
,
const
char
*
fmt
,
...);
#endif
void
mybuf_clear
(
mybuf_t
*
buf
);
UVLIB_EXPORT_SYMBOL
void
mybuf_clear
(
mybuf_t
*
buf
);
// safe to call me when data in buf
void
mybuf_clear_append
(
mybuf_t
*
buf
,
const
char
*
data
,
size_t
len
);
UVLIB_EXPORT_SYMBOL
void
mybuf_clear_append
(
mybuf_t
*
buf
,
const
char
*
data
,
size_t
len
);
// call mybuf_free to free string
UVLIB_EXPORT_SYMBOL
char
*
mybuf_to_string
(
mybuf_t
*
buf
);
UVLIB_EXPORT_SYMBOL
void
mybuf_free
(
char
*
str
);
#ifdef __cplusplus
}
...
...
examples/httprelay/uvlib/uv_httpc.h
View file @
1c5cdc27
...
...
@@ -40,16 +40,16 @@ typedef struct uv_httpc_response_s {
typedef
void
(
*
uv_httpc_on_response_t
)(
uv_httpc_t
*
httpc
,
uv_httpc_response_t
*
res
);
int
uv_httpc_create
(
uv_httpc_t
**
httpc
,
uv_loop_t
*
loop
,
const
char
*
host
,
const
char
*
port
,
UVLIB_EXPORT_SYMBOL
int
uv_httpc_create
(
uv_httpc_t
**
httpc
,
uv_loop_t
*
loop
,
const
char
*
host
,
const
char
*
port
,
uv_httpc_on_response_t
on_response
);
int
uv_httpc_post
(
uv_httpc_t
*
httpc
,
const
char
*
url
,
uv_httpc_headers_t
*
headers
,
UVLIB_EXPORT_SYMBOL
int
uv_httpc_post
(
uv_httpc_t
*
httpc
,
const
char
*
url
,
uv_httpc_headers_t
*
headers
,
const
char
*
data
,
size_t
len
,
int
timeout
);
int
uv_httpc_stop
(
uv_httpc_t
*
httpc
);
void
uv_httpc_free
(
uv_httpc_t
*
httpc
);
uv_httpc_headers_t
*
uv_httpc_headers_append
(
uv_httpc_headers_t
*
headers
,
char
*
data
);
uv_httpc_headers_t
*
uv_httpc_headers_append_nodup
(
uv_httpc_headers_t
*
headers
,
char
*
data
);
uv_httpc_headers_t
*
uv_httpc_headers_dup
(
uv_httpc_headers_t
*
headers
);
void
uv_httpc_headers_free_all
(
uv_httpc_headers_t
*
headers
,
int
freedata
);
UVLIB_EXPORT_SYMBOL
int
uv_httpc_stop
(
uv_httpc_t
*
httpc
);
UVLIB_EXPORT_SYMBOL
void
uv_httpc_free
(
uv_httpc_t
*
httpc
);
UVLIB_EXPORT_SYMBOL
uv_httpc_headers_t
*
uv_httpc_headers_append
(
uv_httpc_headers_t
*
headers
,
char
*
data
);
UVLIB_EXPORT_SYMBOL
uv_httpc_headers_t
*
uv_httpc_headers_append_nodup
(
uv_httpc_headers_t
*
headers
,
char
*
data
);
UVLIB_EXPORT_SYMBOL
uv_httpc_headers_t
*
uv_httpc_headers_dup
(
uv_httpc_headers_t
*
headers
);
UVLIB_EXPORT_SYMBOL
void
uv_httpc_headers_free_all
(
uv_httpc_headers_t
*
headers
,
int
freedata
);
#ifdef WEUV_TEST
int
uv_httpc_test_main
(
int
argc
,
char
**
argv
);
...
...
examples/httprelay/uvlib/uv_httpd.h
View file @
1c5cdc27
...
...
@@ -3,6 +3,7 @@
#pragma once
#include "uvlib_config.h"
#include <uv.h>
#include "llhttp/include/llhttp.h"
...
...
@@ -41,24 +42,24 @@ typedef struct uv_httpd_server_s uv_httpd_server_t;
typedef
void
(
*
on_request_t
)(
uv_httpd_server_t
*
server
,
uv_httpd_client_t
*
client
,
uv_httpd_request_t
*
req
);
void
nprintf
(
const
char
*
msg
,
size_t
len
,
int
newline
);
int
string_ncmp
(
const
char
*
s1
,
size_t
len1
,
const
char
*
s2
,
size_t
len2
);
int
string0_ncmp
(
const
char
*
s1
,
const
char
*
s2
,
size_t
len2
);
int
string_nicmp
(
const
char
*
s1
,
size_t
len1
,
const
char
*
s2
,
size_t
len2
);
int
string0_nicmp
(
const
char
*
s1
,
const
char
*
s2
,
size_t
len2
);
UVLIB_EXPORT_SYMBOL
void
nprintf
(
const
char
*
msg
,
size_t
len
,
int
newline
);
UVLIB_EXPORT_SYMBOL
int
string_ncmp
(
const
char
*
s1
,
size_t
len1
,
const
char
*
s2
,
size_t
len2
);
UVLIB_EXPORT_SYMBOL
int
string0_ncmp
(
const
char
*
s1
,
const
char
*
s2
,
size_t
len2
);
UVLIB_EXPORT_SYMBOL
int
string_nicmp
(
const
char
*
s1
,
size_t
len1
,
const
char
*
s2
,
size_t
len2
);
UVLIB_EXPORT_SYMBOL
int
string0_nicmp
(
const
char
*
s1
,
const
char
*
s2
,
size_t
len2
);
// enable `printf`s, default is disabled
void
uv_httpd_enable_printf
(
int
enable
);
UVLIB_EXPORT_SYMBOL
void
uv_httpd_enable_printf
(
int
enable
);
// return 0 for success, otherwise it is `uv_errno_t`
// if your want to use a existing `uv_loop_t`, pass it by `loop`
// otherwise a new `uv_loop_t` will be created.
int
uv_httpd_create
(
uv_httpd_server_t
**
server
,
uv_loop_t
*
loop
,
on_request_t
on_request
);
void
uv_httpd_stop
(
uv_httpd_server_t
*
server
);
void
uv_httpd_free
(
uv_httpd_server_t
*
server
);
UVLIB_EXPORT_SYMBOL
int
uv_httpd_create
(
uv_httpd_server_t
**
server
,
uv_loop_t
*
loop
,
on_request_t
on_request
);
UVLIB_EXPORT_SYMBOL
void
uv_httpd_stop
(
uv_httpd_server_t
*
server
);
UVLIB_EXPORT_SYMBOL
void
uv_httpd_free
(
uv_httpd_server_t
*
server
);
// return 0 for success, otherwise it is uv_errno_t
int
uv_httpd_listen
(
uv_httpd_server_t
*
server
,
const
char
*
ip
,
int
port
);
UVLIB_EXPORT_SYMBOL
int
uv_httpd_listen
(
uv_httpd_server_t
*
server
,
const
char
*
ip
,
int
port
);
// return 0 for success, otherwise it is uv_errno_t
int
uv_httpd_write_response
(
uv_httpd_client_t
*
client
,
char
*
response
,
size_t
len
);
UVLIB_EXPORT_SYMBOL
int
uv_httpd_write_response
(
uv_httpd_client_t
*
client
,
char
*
response
,
size_t
len
);
struct
uv_httpd_server_s
{
...
...
examples/httprelay/uvlib/uv_log.c
View file @
1c5cdc27
...
...
@@ -73,12 +73,13 @@ void uv_log_raw(uv_log_level_t level, const char* msg) {
}
void
uv_log_hexdump
(
uv_log_level_t
level
,
const
char
*
buf
,
size_t
len
,
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
)
{
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
,
const
char
*
newline
)
{
mybuf_t
mybuf
;
if
(
level
<
g_level
||
level
>
uv_log_level_fatal
)
return
;
mybuf_init
(
&
mybuf
);
mybuf_cat_printf
(
&
mybuf
,
"hex dump of %p, len=%zu
\n
"
,
buf
,
len
);
mybuf_append_hexdump
(
&
mybuf
,
buf
,
len
,
show_header
,
show_address
,
show_ascii
,
def_ascii
);
mybuf_append_hexdump
(
&
mybuf
,
buf
,
len
,
show_header
,
show_address
,
show_ascii
,
def_ascii
,
newline
);
uv_log_raw
(
level
,
mybuf
.
buf
);
mybuf_clear
(
&
mybuf
);
}
...
...
examples/httprelay/uvlib/uv_log.h
View file @
1c5cdc27
...
...
@@ -3,6 +3,7 @@
#pragma once
#include "uvlib_config.h"
#include <stdlib.h>
#ifdef __cplusplus
...
...
@@ -28,23 +29,25 @@ typedef enum {
uv_log_level_invalid
=
1
<<
11
,
}
uv_log_level_t
;
uv_log_level_t
uv_log_level_from_string
(
const
char
*
str
);
const
char
*
uv_log_level_to_string
(
uv_log_level_t
level
);
void
uv_log_set_level
(
uv_log_level_t
level
);
void
uv_log_set_log_file
(
const
char
*
file
);
uv_log_level_t
uv_log_get_level
();
void
uv_log
(
uv_log_level_t
level
,
const
char
*
fmt
,
...);
void
uv_log_raw
(
uv_log_level_t
level
,
const
char
*
msg
);
UVLIB_EXPORT_SYMBOL
uv_log_level_t
uv_log_level_from_string
(
const
char
*
str
);
UVLIB_EXPORT_SYMBOL
const
char
*
uv_log_level_to_string
(
uv_log_level_t
level
);
UVLIB_EXPORT_SYMBOL
void
uv_log_set_level
(
uv_log_level_t
level
);
UVLIB_EXPORT_SYMBOL
void
uv_log_set_log_file
(
const
char
*
file
);
UVLIB_EXPORT_SYMBOL
uv_log_level_t
uv_log_get_level
();
UVLIB_EXPORT_SYMBOL
void
uv_log
(
uv_log_level_t
level
,
const
char
*
fmt
,
...);
UVLIB_EXPORT_SYMBOL
void
uv_log_raw
(
uv_log_level_t
level
,
const
char
*
msg
);
/**
* log hex dump
* show_header: show 00~0F address header, default is 0
* show_address: show 0000~FFFF address on left
* show_ascii: show ascii on right if can print, default is 0
* def_ascii: when show_ascii but can't print, show def_ascii instead, default is '?'
* def_ascii: when show_ascii but can't print, show def_ascii instead, default is '.'
* newline: default is "\n"
*/
void
uv_log_hexdump
(
uv_log_level_t
level
,
const
char
*
buf
,
size_t
len
,
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
);
UVLIB_EXPORT_SYMBOL
void
uv_log_hexdump
(
uv_log_level_t
level
,
const
char
*
buf
,
size_t
len
,
int
show_header
,
int
show_address
,
int
show_ascii
,
char
def_ascii
,
const
char
*
newline
);
#define uvlog_all(...) uv_log(uv_log_level_all, __VA_ARGS__)
#define uvlog_verbose(...) uv_log(uv_log_level_verbose, __VA_ARGS__)
...
...
examples/httprelay/uvlib/uv_tcp.h
View file @
1c5cdc27
...
...
@@ -4,6 +4,7 @@
#pragma once
#include <uv.h>
#include "uvlib_config.h"
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -15,7 +16,7 @@ typedef enum {
uv_tcp_parse_error
,
}
uv_tcp_parse_result_t
;
int
getpeeraddr
(
uv_tcp_t
*
tcp
,
char
*
ip
,
size_t
len
,
uint16_t
*
port
);
UVLIB_EXPORT_SYMBOL
int
getpeeraddr
(
uv_tcp_t
*
tcp
,
char
*
ip
,
size_t
len
,
uint16_t
*
port
);
#ifdef __cplusplus
}
...
...
examples/httprelay/uvlib/uv_tcpclient.c
View file @
1c5cdc27
...
...
@@ -90,7 +90,7 @@ static void on_read(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
if
(
cli
->
settings
->
on_parse
)
{
cli
->
buf
.
size
+=
nread
;
size_t
cb
,
total
=
cli
->
buf
.
size
;
size_t
cb
=
0
,
total
=
cli
->
buf
.
size
;
const
char
*
p
=
cli
->
buf
.
buf
;
uv_tcp_parse_result_t
r
=
cli
->
settings
->
on_parse
(
cli
,
p
,
total
,
&
cb
);
while
(
r
==
uv_tcp_parse_ok
&&
total
>
0
)
{
...
...
@@ -100,14 +100,12 @@ static void on_read(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
r
=
cli
->
settings
->
on_parse
(
cli
,
p
,
total
,
&
cb
);
}
if
(
r
==
uv_tcp_parse_error
)
{
mybuf_clear
(
&
cli
->
buf
);
}
else
if
(
p
!=
cli
->
buf
.
buf
)
{
p
+=
cb
;
total
-=
cb
;
}
if
(
p
!=
cli
->
buf
.
buf
)
{
if
(
total
>
0
)
{
mybuf_t
buf
;
mybuf_init
(
&
buf
);
mybuf_append
(
&
buf
,
p
,
total
);
mybuf_clear
(
&
cli
->
buf
);
mybuf_append
(
&
cli
->
buf
,
buf
.
buf
,
buf
.
size
);
mybuf_clear_append
(
&
cli
->
buf
,
p
,
total
);
}
else
{
mybuf_clear
(
&
cli
->
buf
);
}
...
...
examples/httprelay/uvlib/uv_tcpclient.h
View file @
1c5cdc27
...
...
@@ -17,11 +17,11 @@ typedef uv_tcp_parse_result_t (*uv_tcpclient_on_parse_t)(uv_tcpclient_t* client,
typedef
void
(
*
uv_tcpclient_on_connect_t
)(
uv_tcpclient_t
*
client
,
int
connected
);
typedef
void
(
*
uv_tcpclient_on_closed_t
)(
uv_tcpclient_t
*
client
);
int
uv_tcpclient_new
(
uv_tcpclient_t
**
client
,
uv_loop_t
*
loop
,
uv_tcpclient_settings_t
*
settings
);
int
uv_tcpclient_start
(
uv_tcpclient_t
*
client
,
const
char
*
domain
,
const
char
*
port
);
void
uv_tcpclient_send
(
uv_tcpclient_t
*
client
,
const
char
*
buf
,
size_t
len
);
void
uv_tcpclient_stop
(
uv_tcpclient_t
*
client
);
void
uv_tcpclient_free
(
uv_tcpclient_t
*
client
);
UVLIB_EXPORT_SYMBOL
int
uv_tcpclient_new
(
uv_tcpclient_t
**
client
,
uv_loop_t
*
loop
,
uv_tcpclient_settings_t
*
settings
);
UVLIB_EXPORT_SYMBOL
int
uv_tcpclient_start
(
uv_tcpclient_t
*
client
,
const
char
*
domain
,
const
char
*
port
);
UVLIB_EXPORT_SYMBOL
void
uv_tcpclient_send
(
uv_tcpclient_t
*
client
,
const
char
*
buf
,
size_t
len
);
UVLIB_EXPORT_SYMBOL
void
uv_tcpclient_stop
(
uv_tcpclient_t
*
client
);
UVLIB_EXPORT_SYMBOL
void
uv_tcpclient_free
(
uv_tcpclient_t
*
client
);
struct
uv_tcpclient_settings_s
{
uv_tcpclient_on_connect_t
on_connect
;
...
...
examples/httprelay/uvlib/uv_tcpserver.c
View file @
1c5cdc27
...
...
@@ -39,7 +39,7 @@ static void on_read(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
if
(
cli
->
server
->
settings
->
on_parse
)
{
cli
->
buf
.
size
+=
nread
;
size_t
cb
,
total
=
cli
->
buf
.
size
;
size_t
cb
=
0
,
total
=
cli
->
buf
.
size
;
const
char
*
p
=
cli
->
buf
.
buf
;
uv_tcp_parse_result_t
r
=
cli
->
server
->
settings
->
on_parse
(
cli
,
p
,
total
,
&
cb
);
while
(
r
==
uv_tcp_parse_ok
&&
total
>
0
)
{
...
...
@@ -49,8 +49,10 @@ static void on_read(uv_stream_t* stream, ssize_t nread, const uv_buf_t* buf) {
r
=
cli
->
server
->
settings
->
on_parse
(
cli
,
p
,
total
,
&
cb
);
}
if
(
r
==
uv_tcp_parse_error
)
{
mybuf_clear
(
&
cli
->
buf
);
}
else
if
(
p
!=
cli
->
buf
.
buf
)
{
p
+=
cb
;
total
-=
cb
;
}
if
(
p
!=
cli
->
buf
.
buf
)
{
if
(
total
>
0
)
{
mybuf_clear_append
(
&
cli
->
buf
,
p
,
total
);
}
else
{
...
...
examples/httprelay/uvlib/uv_tcpserver.h
View file @
1c5cdc27
...
...
@@ -20,14 +20,14 @@ typedef uv_tcp_parse_result_t (*uv_tcpserver_on_parse_t)(uv_tcpserver_client_con
typedef
void
(
*
uv_tcpserver_on_server_shutdown_t
)(
uv_tcpserver_t
*
server
);
typedef
struct
uv_tcpserver_settings_s
uv_tcpserver_settings_t
;
int
uv_tcpserver_create
(
uv_tcpserver_t
**
server
,
uv_loop_t
*
loop
,
uv_tcpserver_settings_t
*
settings
);
int
uv_tcpserver_start_listen
(
uv_tcpserver_t
*
server
,
const
char
*
listen_addr
,
int
listen_port
);
void
uv_tcpserver_stop
(
uv_tcpserver_t
*
server
);
void
uv_tcpserver_free
(
uv_tcpserver_t
*
server
);
void
uv_tcpserver_close_cli
(
uv_tcpserver_client_context_t
*
cli
);
UVLIB_EXPORT_SYMBOL
int
uv_tcpserver_create
(
uv_tcpserver_t
**
server
,
uv_loop_t
*
loop
,
uv_tcpserver_settings_t
*
settings
);
UVLIB_EXPORT_SYMBOL
int
uv_tcpserver_start_listen
(
uv_tcpserver_t
*
server
,
const
char
*
listen_addr
,
int
listen_port
);
UVLIB_EXPORT_SYMBOL
void
uv_tcpserver_stop
(
uv_tcpserver_t
*
server
);
UVLIB_EXPORT_SYMBOL
void
uv_tcpserver_free
(
uv_tcpserver_t
*
server
);
UVLIB_EXPORT_SYMBOL
void
uv_tcpserver_close_cli
(
uv_tcpserver_client_context_t
*
cli
);
// cli must be diconnected already, safe pattern is call this function in callback `on_connect` with `connected = 0`
void
uv_tcpserver_free_cli_ctx
(
uv_tcpserver_client_context_t
*
cli
);
int
uv_tcpserver_send_to_cli
(
uv_tcpserver_client_context_t
*
cli
,
const
char
*
buf
,
size_t
len
);
UVLIB_EXPORT_SYMBOL
void
uv_tcpserver_free_cli_ctx
(
uv_tcpserver_client_context_t
*
cli
);
UVLIB_EXPORT_SYMBOL
int
uv_tcpserver_send_to_cli
(
uv_tcpserver_client_context_t
*
cli
,
const
char
*
buf
,
size_t
len
);
struct
uv_tcpserver_s
{
void
*
data
;
...
...
examples/httprelay/uvlib/uvlib.h
View file @
1c5cdc27
...
...
@@ -14,27 +14,40 @@
#ifdef _WIN32
#
define UVLIB_DIR "G:/dev_libs/ademco/"
#
ifdef UVLIB_LOAD_DLL
#ifdef UVLIB_USE_MT
#define UVLIB_NAME "uvlib_mt.lib"
#else
#define UVLIB_NAME "uvlib.lib"
#endif
#define LIB_DIR "H:/dev_hb/libhb/"
#define LIB_NAME "uvlib.lib"
#elif defined(UVLIB_LINK_STATIC)
#define LIB_DIR "H:/dev_hb/libhb/"
#define LIB_NAME "uvlib_s.lib"
#elif defined(UVLIB_LINK_STATIC_MT)
#define LIB_DIR "H:/dev_hb/libhb/"
#define LIB_NAME "uvlib_smt.lib"
#endif // UVLIB_LOAD_DLL
#if defined(LIB_DIR) && defined(LIB_NAME)
#ifdef _WIN64
#ifdef _DEBUG
#pragma comment(lib,
UVLIB_DIR "x64/Debug/" UV
LIB_NAME)
#pragma comment(lib,
LIB_DIR "x64/Debug/"
LIB_NAME)
#else
#pragma comment(lib,
UVLIB_DIR "x64/Release/" UV
LIB_NAME)
#pragma comment(lib,
LIB_DIR "x64/Release/"
LIB_NAME)
#endif
#else // WIN32
#ifdef _DEBUG
#pragma comment(lib,
UVLIB_DIR "Debug/" UV
LIB_NAME)
#pragma comment(lib,
LIB_DIR "Debug/"
LIB_NAME)
#else
#pragma comment(lib,
UVLIB_DIR "Release/" UV
LIB_NAME)
#pragma comment(lib,
LIB_DIR "Release/"
LIB_NAME)
#endif
#endif
#undef LIB_DIR
#undef LIB_NAME
#endif // defined(LIB_DIR) && defined(LIB_NAME)
#endif // _WIN32
...
...
examples/httprelay/uvlib/uvlib_config.h
0 → 100644
View file @
1c5cdc27
#ifndef __UVLIB_CONFIG_H__
#define __UVLIB_CONFIG_H__
#pragma once
#ifdef UVLIB_EXPORTS
#if defined __GNUC__
#define UVLIB_EXPORT_SYMBOL __attribute__((visibility("default")))
#elif defined(_MSC_VER)
#define UVLIB_EXPORT_SYMBOL __declspec(dllexport)
#else
#define UVLIB_EXPORT_SYMBOL
#endif
#else
#define UVLIB_EXPORT_SYMBOL
#endif
#endif
examples/httprelay/uvlib/uvlib_version.h
View file @
1c5cdc27
#ifndef __UVLIB_VERSION_H__
#define __UVLIB_VERSION_H__
#include "uvlib_config.h"
#ifdef __cplusplus
extern
"C"
{
#endif
...
...
@@ -12,7 +14,7 @@ extern "C" {
#define UVLIB_VERSION_MAJOR 1
#define UVLIB_VERSION_MINOR 0
#define UVLIB_VERSION_PATCH
0
#define UVLIB_VERSION_PATCH
4
#define UVLIB_VERSION_IS_RELEASE 1
#define UVLIB_VERSION_SUFFIX ""
...
...
@@ -20,8 +22,8 @@ extern "C" {
(
UVLIB_VERSION_MINOR
<<
8
)
|
\
(
UVLIB_VERSION_PATCH
))
unsigned
int
uvlib_version
(
void
);
const
char
*
uvlib_version_string
(
void
);
UVLIB_EXPORT_SYMBOL
unsigned
int
uvlib_version
(
void
);
UVLIB_EXPORT_SYMBOL
const
char
*
uvlib_version_string
(
void
);
#ifdef __cplusplus
}
...
...
examples/server_demo/server_demo.cpp
View file @
1c5cdc27
...
...
@@ -50,10 +50,10 @@ struct Buffer {
SOCKET
clientSock
=
INVALID_SOCKET
;
Buffer
clientBuffer
=
{};
std
::
string
clientAcct
=
{};
AdemcoId
clientAdemcoId
=
0
;
ademco_id_t
clientAdemcoId
=
0
;
std
::
mutex
mutex
=
{};
std
::
vector
<
AdemcoEven
t
>
evntsWaiting4Send
=
{};
std
::
vector
<
ademco_event_
t
>
evntsWaiting4Send
=
{};
char
pwd
[
1024
]
=
{};
int
setNonBlocking
(
SOCKET
socket
)
{
...
...
@@ -132,20 +132,20 @@ int main(int argc, char** argv) {
}
};
auto
do_handle
=
[]()
->
AdemcoParseResul
t
{
AdemcoPacke
t
pkt
;
size_t
cb
=
0
;
AdemcoParseResult
result
=
ademcoPacketParse
(
clientBuffer
.
buff
+
clientBuffer
.
rpos
,
auto
do_handle
=
[]()
->
ademco_parse_result_
t
{
ademco_packet_
t
pkt
;
size_t
cb
=
0
;
ademco_parse_result_t
result
=
ademco_parse_packet
(
clientBuffer
.
buff
+
clientBuffer
.
rpos
,
clientBuffer
.
wpos
-
clientBuffer
.
rpos
,
&
pkt
,
&
cb
,
nullptr
);
switch
(
result
)
{
case
AdemcoParseResult
:
:
RESULT_OK
:
case
ademco_parse_result_t
:
:
ADEMCO_PARSE_
RESULT_OK
:
{
clientBuffer
.
rpos
+=
cb
;
//printf("id=%s\n", ap.id_.data());
printf
(
"C:"
);
ademco
P
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
printf
(
"C:"
);
ademco
_p
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
switch
(
pkt
.
id
)
{
case
AID_ACK
:
// success
...
...
@@ -154,8 +154,8 @@ int main(int argc, char** argv) {
case
AID_NULL
:
// reply ack
{
char
ack
[
1024
];
size_t
len
=
ademco
MakeAckP
acket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademco
P
rint
(
ack
,
len
);
size_t
len
=
ademco
_make_ack_p
acket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademco
_p
rint
(
ack
,
len
);
send
(
clientSock
,
(
const
char
*
)
ack
,
len
,
0
);
break
;
}
...
...
@@ -164,14 +164,14 @@ int main(int argc, char** argv) {
case
AID_ADM_CID
:
{
clientAcct
=
pkt
.
acct
;
clientAdemcoId
=
pkt
.
data
.
ademco
I
d
;
clientAdemcoId
=
pkt
.
data
.
ademco
_i
d
;
// handle event
// reply ack
{
char
ack
[
1024
];
int
len
=
ademco
MakeAckP
acket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademco
P
rint
(
ack
,
len
);
int
len
=
ademco
_make_ack_p
acket
(
ack
,
sizeof
(
ack
),
pkt
.
seq
,
pkt
.
acct
,
0
);
printf
(
"S:"
);
ademco
_p
rint
(
ack
,
len
);
send
(
clientSock
,
(
const
char
*
)
ack
,
len
,
0
);
}
...
...
@@ -184,11 +184,11 @@ int main(int argc, char** argv) {
break
;
}
case
AdemcoParseResult
:
:
RESULT_NOT_ENOUGH
:
case
ademco_parse_result_t
:
:
ADEMCO_PARSE_
RESULT_NOT_ENOUGH
:
// do nothing
break
;
case
AdemcoParseResult
:
:
RESULT_ERROR
:
case
ademco_parse_result_t
:
:
ADEMCO_PARSE_
RESULT_ERROR
:
default:
// error handle, e.g. clear buff
clientBuffer
.
clear
();
...
...
@@ -248,7 +248,7 @@ int main(int argc, char** argv) {
result
=
do_handle
();
}
if
(
result
==
AdemcoParseResult
::
RESULT_NOT_ENOUGH
)
{
break
;
}
if
(
result
==
ademco_parse_result_t
::
ADEMCO_PARSE_
RESULT_NOT_ENOUGH
)
{
break
;
}
}
}
};
...
...
@@ -266,14 +266,14 @@ int main(int argc, char** argv) {
char
buf
[
1024
];
for
(
auto
e
:
evntsWaiting4Send
)
{
if
(
e
==
EVENT_DISARM
)
{
AdemcoXDataSegmen
t
xdata
;
ademco
MakeXData
(
&
xdata
,
TWO_HEX
,
AdemcoXDataTransform
::
AdemcoXDataTransform_as_is
,
pwd
,
6
);
int
len
=
ademco
MakeHbP
acket
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
.
c_str
(),
clientAdemcoId
,
e
,
0
,
0
,
&
xdata
);
printf
(
"S:"
);
ademco
P
rint
(
buf
,
len
);
ademco_xdata_
t
xdata
;
ademco
_make_xdata
(
&
xdata
,
ADEMCO_XDATA_LENGTH_FMT_TWO_HEX
,
ADEMCO_XDATA_TRANSFORM_AS_IS
,
pwd
,
6
);
int
len
=
ademco
_make_hb_p
acket
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
.
c_str
(),
clientAdemcoId
,
e
,
0
,
0
,
&
xdata
);
printf
(
"S:"
);
ademco
_p
rint
(
buf
,
len
);
send
(
clientSock
,
(
const
char
*
)
buf
,
len
,
0
);
}
else
{
int
len
=
ademco
MakeHbP
acket
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
.
c_str
(),
clientAdemcoId
,
e
,
0
,
0
,
nullptr
);
printf
(
"S:"
);
ademco
P
rint
(
buf
,
len
);
int
len
=
ademco
_make_hb_p
acket
(
buf
,
sizeof
(
buf
),
1
,
clientAcct
.
c_str
(),
clientAdemcoId
,
e
,
0
,
0
,
nullptr
);
printf
(
"S:"
);
ademco
_p
rint
(
buf
,
len
);
send
(
clientSock
,
(
const
char
*
)
buf
,
len
,
0
);
}
...
...
hb_com.c
View file @
1c5cdc27
This diff is collapsed.
Click to expand it.
hb_com.h
View file @
1c5cdc27
This diff is collapsed.
Click to expand it.
swig/CSharpDemo.cs
View file @
1c5cdc27
This diff is collapsed.
Click to expand it.
swig/JavaDemo.java
View file @
1c5cdc27
This diff is collapsed.
Click to expand it.
swig/binding.gyp
View file @
1c5cdc27
...
...
@@ -6,7 +6,17 @@
"libademco_wrap.cxx",
"../ademco.c",
"../hb_com.c",
]
],
'conditions': [
['OS=="win"', {
'msvs_settings': {
'VCCLCompilerTool': {
"AdditionalOptions": [
"/source-charset:utf-8",
]},
},
}],
],
}
]
}
\ No newline at end of file
swig/nodejs-demo.js
View file @
1c5cdc27
...
...
@@ -3,7 +3,7 @@ const assert = require('assert');
const
libname
=
process
.
platform
===
"win32"
?
"libademco_js"
:
"ademco_js"
;
const
libademco
=
require
(
`./build/Release/
${
libname
}
`
);
libademco
.
ademco
P
rint
(
"hello nodejs"
,
"hello nodejs"
.
length
);
libademco
.
ademco
_p
rint
(
"hello nodejs"
,
"hello nodejs"
.
length
);
console
.
log
(
libademco
);
...
...
@@ -11,17 +11,17 @@ function test_parse() {
console
.
log
(
"test parse..."
);
var
str
=
"
\n
C5C30053
\"
HENG-BO
\"
0000R000000L000000#90219125916578[#000000|1737 00 000]_09:11:19,08-05-2019
\
r"
;
var
cb
=
libademco
.
new_size_tp
();
var
pkt
=
new
libademco
.
AdemcoPacke
t
();
var
res
=
libademco
.
ademco
PacketParse
(
str
,
str
.
length
,
pkt
,
cb
,
null
);
assert
.
strictEqual
(
res
,
libademco
.
RESULT_OK
);
var
pkt
=
new
libademco
.
ademco_packet_
t
();
var
res
=
libademco
.
ademco
_parse_packet
(
str
,
str
.
length
,
pkt
,
cb
,
null
);
assert
.
strictEqual
(
res
,
libademco
.
ADEMCO_PARSE_
RESULT_OK
);
assert
.
strictEqual
(
libademco
.
size_tp_value
(
cb
),
str
.
length
);
assert
.
strictEqual
(
pkt
.
crc
,
0xC5C3
);
assert
.
strictEqual
(
pkt
.
len
,
0x0053
);
assert
.
strictEqual
(
pkt
.
id
,
libademco
.
AID_HB
);
assert
.
strictEqual
(
pkt
.
seq
,
0
);
assert
.
strictEqual
(
pkt
.
acct
,
"90219125916578"
);
assert
.
strictEqual
(
pkt
.
data
.
ademco
I
d
,
0
);
assert
.
strictEqual
(
pkt
.
data
.
ademco
E
vent
,
libademco
.
EVENT_I_AM_WIRE_MACHINE
);
assert
.
strictEqual
(
pkt
.
data
.
ademco
_i
d
,
0
);
assert
.
strictEqual
(
pkt
.
data
.
ademco
_e
vent
,
libademco
.
EVENT_I_AM_WIRE_MACHINE
);
assert
.
strictEqual
(
pkt
.
data
.
gg
,
0
);
assert
.
strictEqual
(
pkt
.
data
.
zone
,
0
);
console
.
log
(
"res=%d, commited=%d"
,
res
,
libademco
.
size_tp_value
(
cb
));
...
...
@@ -29,22 +29,22 @@ function test_parse() {
function
test_pack
()
{
console
.
log
(
"test pack"
);
var
pkt
=
new
libademco
.
AdemcoPacke
t
();
libademco
.
ademco
MakeHbP
acket2
(
pkt
,
1
,
"861234567890"
,
666666
,
libademco
.
EVENT_ARM
,
0
,
0
,
null
);
var
pkt
=
new
libademco
.
ademco_packet_
t
();
libademco
.
ademco
_make_hb_p
acket2
(
pkt
,
1
,
"861234567890"
,
666666
,
libademco
.
EVENT_ARM
,
0
,
0
,
null
);
console
.
log
(
"len=%d"
,
pkt
.
raw_len
);
libademco
.
ademco
P
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
libademco
.
ademco
_p
rint
(
pkt
.
raw
,
pkt
.
raw_len
);
console
.
log
(
"test parse packed data"
);
var
pkt2
=
new
libademco
.
AdemcoPacke
t
();
var
pkt2
=
new
libademco
.
ademco_packet_
t
();
var
cb
=
libademco
.
new_size_tp
();
var
res
=
libademco
.
ademco
PacketParse
(
pkt
.
raw
,
pkt
.
raw_len
,
pkt2
,
cb
,
null
);
assert
.
strictEqual
(
res
,
libademco
.
RESULT_OK
);
var
res
=
libademco
.
ademco
_parse_packet
(
pkt
.
raw
,
pkt
.
raw_len
,
pkt2
,
cb
,
null
);
assert
.
strictEqual
(
res
,
libademco
.
ADEMCO_PARSE_
RESULT_OK
);
assert
.
strictEqual
(
libademco
.
size_tp_value
(
cb
),
pkt
.
raw_len
);
assert
.
strictEqual
(
pkt2
.
id
,
libademco
.
AID_HB
);
assert
.
strictEqual
(
pkt2
.
seq
,
1
);
assert
.
strictEqual
(
pkt2
.
acct
,
"861234567890"
);
assert
.
strictEqual
(
pkt2
.
data
.
ademco
I
d
,
666666
);
assert
.
strictEqual
(
pkt2
.
data
.
ademco
E
vent
,
libademco
.
EVENT_ARM
);
assert
.
strictEqual
(
pkt2
.
data
.
ademco
_i
d
,
666666
);
assert
.
strictEqual
(
pkt2
.
data
.
ademco
_e
vent
,
libademco
.
EVENT_ARM
);
assert
.
strictEqual
(
pkt2
.
data
.
gg
,
0
);
assert
.
strictEqual
(
pkt2
.
data
.
zone
,
0
);
}
...
...
@@ -56,11 +56,11 @@ class AlarmHost {
this
.
address
=
socket
.
address
().
address
;
this
.
port
=
socket
.
address
().
port
;
this
.
buf
=
null
;
this
.
inpkt
=
new
libademco
.
AdemcoPacke
t
();
this
.
outpkt
=
new
libademco
.
AdemcoPacke
t
();
this
.
parseErr
=
new
libademco
.
AdemcoParseError
();
this
.
inpkt
=
new
libademco
.
ademco_packet_
t
();
this
.
outpkt
=
new
libademco
.
ademco_packet_
t
();
this
.
parseErr
=
new
libademco
.
ademco_parse_error_t
();
this
.
cb
=
libademco
.
new_size_tp
();
this
.
ademco
I
d
=
0
;
this
.
ademco
_i
d
=
0
;
this
.
acct
=
''
;
this
.
seq
=
1
;
...
...
@@ -69,14 +69,14 @@ class AlarmHost {
chunk
=
Buffer
.
concat
([
this
.
buf
,
chunk
]);
}
let
res
=
libademco
.
ademco
PacketParse
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
,
this
.
parseErr
);
while
(
res
===
libademco
.
RESULT_OK
)
{
let
res
=
libademco
.
ademco
_parse_packet
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
,
this
.
parseErr
);
while
(
res
===
libademco
.
ADEMCO_PARSE_
RESULT_OK
)
{
chunk
=
chunk
.
slice
(
libademco
.
size_tp_value
(
this
.
cb
));
this
.
handleMsg
();
res
=
libademco
.
ademco
PacketParse
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
,
this
.
parseErr
);
res
=
libademco
.
ademco
_parse_packet
(
chunk
.
toString
(),
chunk
.
length
,
this
.
inpkt
,
this
.
cb
,
this
.
parseErr
);
}
if
(
res
===
libademco
.
RESULT_ERROR
)
{
if
(
res
===
libademco
.
ADEMCO_PARSE_
RESULT_ERROR
)
{
console
.
log
(
'parse error at line=%d, msg=%s'
,
this
.
parseErr
.
line
,
this
.
parseErr
.
msg
);
chunk
=
null
;
}
...
...
@@ -93,7 +93,7 @@ class AlarmHost {
handleMsg
()
{
console
.
log
(
this
.
tag
()
+
':'
);
libademco
.
ademco
P
rint
(
this
.
inpkt
.
raw
,
this
.
inpkt
.
raw_len
);
libademco
.
ademco
_p
rint
(
this
.
inpkt
.
raw
,
this
.
inpkt
.
raw_len
);
switch
(
this
.
inpkt
.
id
)
{
case
libademco
.
AID_NULL
:
...
...
@@ -104,7 +104,7 @@ class AlarmHost {
case
libademco
.
AID_HB
:
case
libademco
.
AID_ADM_CID
:
this
.
acct
=
this
.
inpkt
.
acct
;
this
.
ademco
Id
=
this
.
inpkt
.
data
.
ademcoI
d
;
this
.
ademco
_id
=
this
.
inpkt
.
data
.
ademco_i
d
;
this
.
sendAck
(
this
.
inpkt
.
seq
);
break
;
...
...
@@ -117,16 +117,16 @@ class AlarmHost {
if
(
this
.
acct
)
{
str
+=
' acct='
+
this
.
acct
;
}
if
(
this
.
ademco
I
d
)
{
str
+=
' ademco_id='
+
this
.
ademco
I
d
;
if
(
this
.
ademco
_i
d
)
{
str
+=
' ademco_id='
+
this
.
ademco
_i
d
;
}
return
str
;
}
sendAck
(
seq
)
{
libademco
.
ademco
MakeAckPacket2
(
this
.
outpkt
,
seq
,
this
.
acct
,
this
.
ademcoI
d
);
libademco
.
ademco
_make_ack_packet2
(
this
.
outpkt
,
seq
,
this
.
acct
,
this
.
ademco_i
d
);
console
.
log
(
'server reply:'
);
libademco
.
ademco
P
rint
(
this
.
outpkt
.
raw
,
this
.
outpkt
.
raw_len
);
libademco
.
ademco
_p
rint
(
this
.
outpkt
.
raw
,
this
.
outpkt
.
raw_len
);
this
.
socket
.
write
(
Buffer
.
from
(
this
.
outpkt
.
raw
,
this
.
outpkt
.
raw_len
));
}
...
...
swig/win_csharp.bat
View file @
1c5cdc27
mkdir com\hb3344\ademco
"E:\local_program\swig\swigwin-4.1.1\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 -I"../"
cl -c ../ademco.c ../hb_com.c libademco_csharp_wrap.c -I"../"
/source-charset:utf-8
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
swig/win_java.bat
View file @
1c5cdc27
mkdir com\hb3344\ademco
"E:\local_program\swig\swigwin-4.1.1\swig.exe" -java -package com.hb3344.ademco -outdir com/hb3344/ademco -o libademco_java_wrap.c libademco.swig
cl -c ../ademco.c ../hb_com.c libademco_java_wrap.c -I"../" -I"%JAVA_HOME%include" -I"%JAVA_HOME%include/win32"
cl -c ../ademco.c ../hb_com.c libademco_java_wrap.c -I"../" -I"%JAVA_HOME%include" -I"%JAVA_HOME%include/win32"
/source-charset:utf-8
cl -LD ademco.obj hb_com.obj libademco_java_wrap.obj -o ademco_java.dll
javac -encoding utf-8 JavaDemo.java
rem java JavaDemo
tools/copy_from_hb.sh
View file @
1c5cdc27
...
...
@@ -5,11 +5,13 @@ set -e
CURRENT_DIR
=
$(
cd
"
$(
dirname
"
${
BASH_SOURCE
[0]
}
"
)
"
;
pwd
-P
)
cd
$CURRENT_DIR
cp
-f
/g/dev_libs/ademco/hb/ademco.h ../
cp
-f
/g/dev_libs/ademco/hb/ademco.c ../
cp
-f
/g/dev_libs/ademco/hb/hb_com.h ../
cp
-f
/g/dev_libs/ademco/hb/hb_com.c ../
cp
-f
/g/dev_libs/ademco/hb/ademco_version.h ../
cp
-f
/g/dev_libs/ademco/hb/ademco_config.h ../
cp
-f
/g/dev_libs/ademco/hb/CHANGELOG.md ../
repo
=
/h/dev_hb/libhb/libhb
cp
-f
${
repo
}
/ademco.h ../
cp
-f
${
repo
}
/ademco.c ../
cp
-f
${
repo
}
/hb_com.h ../
cp
-f
${
repo
}
/hb_com.c ../
cp
-f
${
repo
}
/ademco_version.h ../
cp
-f
${
repo
}
/ademco_config.h ../
cp
-f
${
repo
}
/CHANGELOG.md ../
sed
-i
'/\[hb\]/d'
../CHANGELOG.md
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