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
38c60906
Commit
38c60906
authored
8 months ago
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
releasing
parent
2eb71ce1
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
884 additions
and
610 deletions
+884
-610
CHANGELOG.md
CHANGELOG.md
+37
-0
ademco.c
ademco.c
+402
-324
ademco.h
ademco.h
+164
-149
ademco_config.h
ademco_config.h
+117
-9
ademco_version.h
ademco_version.h
+3
-3
gen_event_md.cpp
examples/gen_event_md/gen_event_md.cpp
+7
-7
httprelay.c
examples/httprelay/httprelay.c
+1
-0
hb_config.h
hb_config.h
+7
-1
hb_core.c
hb_core.c
+53
-37
hb_core.h
hb_core.h
+63
-69
hb_core_ademco.c
hb_core_ademco.c
+4
-4
hb_core_ademco.h
hb_core_ademco.h
+15
-0
hb_rf.h
hb_rf.h
+9
-5
CSharpDemo.cs
swig/CSharpDemo.cs
+2
-2
No files found.
CHANGELOG.md
View file @
38c60906
# Ademco Change Log
# Ademco Change Log
## 3.2.2 2024-8-7 15:10:37
-
解析形为
[
#861234567890|3400 00 000
]
之类的以账号为安定宝ID的data段,解析结果为安定宝ID为0
## 3.2.1 2024-8-7 14:29:35
-
修复安定宝协议data段 #acct 生成错误的bug
## 3.2.0 2024-8-4 22:16:32
-
全面支持 C51/gcc-avr/msvc/gcc 等编译器
## 3.1.0 2024-7-11 02:24:14
## 3.0.0 2024-7-1 06:19:01
-
可在 windows/linux/c51/avr 环境下编译
## 2.7.3 2024-6-28 19:32:18
-
change
`XX`
sequence
## 2.7.2 2024-6-25 10:18:16
## 2.7.1 2024-6-4 16:34:48
## 2.7.0 2024-6-4 15:24:15
## 2.7.0 2024-6-4 15:24:15
-
shrink
`ademco_packet_t`
size
-
shrink
`ademco_packet_t`
size
...
...
This diff is collapsed.
Click to expand it.
ademco.c
View file @
38c60906
This diff is collapsed.
Click to expand it.
ademco.h
View file @
38c60906
This diff is collapsed.
Click to expand it.
ademco_config.h
View file @
38c60906
...
@@ -40,6 +40,14 @@ typedef char ademco_char_t;
...
@@ -40,6 +40,14 @@ typedef char ademco_char_t;
#define ADEMCO_ENABLE_PARSE_ERROR 1
#define ADEMCO_ENABLE_PARSE_ERROR 1
#endif
#endif
#ifndef UNUSED
#ifdef __C51__
#define UNUSED(x) ((x) = (x))
#else
#define UNUSED(x) ((void)(x))
#endif // __C51__
#endif // UNUSED
#if ADEMCO_ENABLE_PARSE_ERROR
#if ADEMCO_ENABLE_PARSE_ERROR
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_) \
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_) \
do
{
\
do
{
\
...
@@ -51,25 +59,125 @@ typedef char ademco_char_t;
...
@@ -51,25 +59,125 @@ typedef char ademco_char_t;
}
\
}
\
}
while
(
0
);
}
while
(
0
);
#else
#else
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_)
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_) \
do
{
\
UNUSED
(
err
);
\
}
while
(
0
)
#endif // ADEMCO_ENABLE_PARSE_ERROR
#endif // ADEMCO_ENABLE_PARSE_ERROR
#ifdef ADEMCO_USE_CUSTOM_TIME_T
extern
time_t
ademco_get_time_t
(
time_t
*
t
);
#endif // ADEMCO_USE_CUSTOM_TIME_T
// armclang v6 `gmtime` always return NULL
// armclang v6 `gmtime` always return NULL
#ifndef ADEMCO_DISABLE_GMTIME
#ifndef ADEMCO_DISABLE_GMTIME
#ifdef __ARMCC_VERSION
#define ADEMCO_DISABLE_GMTIME 1
#else // __ARMCC_VERSION
#define ADEMCO_DISABLE_GMTIME 0
#define ADEMCO_DISABLE_GMTIME 0
#endif
#endif // __ARMCC_VERSION
#endif // ADEMCO_DISABLE_GMTIME
// embedded system may not have enough stack space
// embedded system may not have enough stack space
// declare these macros to use static/unique buffer for parse/make functions
#ifndef ADEMCO_USE_STATIC_BUF
#ifndef ADEMCO_USE_STATIC_BUF
#define ADEMCO_USE_STATIC_BUF 0
#define ADEMCO_USE_STATIC_BUF 0
#endif
#endif
#ifndef ADEMCO_USE_UNIQUE_BUF
#ifndef ADEMCO_USE_UNIQUE_BUF
#define ADEMCO_USE_UNIQUE_BUF 0
#define ADEMCO_USE_UNIQUE_BUF 0
#endif
#endif
// under C51, we need to use xdata for buffer
#if defined(__C51__) && !defined(ADEMCO_BUF_MEMORY_MODIFIER)
#define ADEMCO_BUF_MEMORY_MODIFIER xdata
#else
#define ADEMCO_BUF_MEMORY_MODIFIER
#endif
#endif
// under C51, we may need to use code for const data
#if defined(__C51__) && !defined(ADEMCO_CONST_MODIFIER)
#define ADEMCO_CONST_MODIFIER code
#else
#define ADEMCO_CONST_MODIFIER
#endif
// make this lib can be used in C51
#ifdef __C51__
#define INTERRUPT(n) interrupt n
#define USING(n) using n
#define declare_sbit(pin, name) sbit name = pin
#ifdef VSCODE
// make vscode happy
// in the .vscode/c_cpp_properties.json, add "defines": ["VSCODE"]
// to suppress the warning
#define data
#define xdata
#define bdata
#define idata
#define pdata
#define code
#define small
#define sfr unsigned char
#define sbit unsigned char
#define bit unsigned char
#define reentrant
#define INTERRUPT(n)
#define USING(n)
#define declare_sbit(pin, name) sbit name = 0
#endif // VSCODE
#endif
// Keil C51 and ICCAVR do not have stdint.h, time.h, stdbool.h, that's all we need
#if defined(__C51__) || defined(_AVR)
// stdint
#include "ademco_stdint.h"
// bool
#ifndef __bool_true_false_are_defined
#ifdef __C51__ // C51 can use bit as bool
typedef
bit
bool
;
#else // AVR can use unsigned char as bool
typedef
unsigned
char
bool
;
#endif
#define true 1
#define false 0
#define __bool_true_false_are_defined
#endif // __bool_true_false_are_defined
// NULL
#ifndef NULL
#define NULL ((void*)0)
#endif
// we need our own implementation of time.h
#define ADMECO_ENABLE_CUSTOM_TIME
#include "ademco_time.h"
#else // suppose we are in a normal environment, and these headers are available
// gcc-avr has these headers
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <time.h>
#endif // __C51__ || _AVR
// C51 doesn't have the with `n` version functions in stdio.h
#if defined(__C51__) && defined(ADEMCO_ENABLE_STDIO)
#define ADEMCO_ENABLE_CUSTOM_STDIO
#include "ademco_stdio.h"
#endif // defined(__C51__) && defined(ADEMCO_ENABLE_STDIO)
// CRC16 table maybe too big for embedded system, user can use external CRC16 function,
// like read it from e2prom or flash to save code space.
// to enable this featuer, define `ADEMCO_USE_EXTERNAL_CRC16`, and implement `ademco_crc16` function.
#ifdef ADEMCO_USE_EXTERNAL_CRC16
#ifdef __cplusplus
extern
"C"
{
#endif
uint16_t
ademco_crc16
(
const
ademco_char_t
ADEMCO_BUF_MEMORY_MODIFIER
*
buf
,
size_t
len
);
#ifdef __cplusplus
}
#endif
#endif // ADEMCO_USE_EXTERNAL_CRC16
#endif // __ADEMCO_CONFIG_H__
This diff is collapsed.
Click to expand it.
ademco_version.h
View file @
38c60906
...
@@ -6,9 +6,9 @@
...
@@ -6,9 +6,9 @@
* evolve between minor releases, but only in a backwards compatible way.
* evolve between minor releases, but only in a backwards compatible way.
*/
*/
#define ADEMCO_VERSION_MAJOR
2
#define ADEMCO_VERSION_MAJOR
3
#define ADEMCO_VERSION_MINOR
7
#define ADEMCO_VERSION_MINOR
2
#define ADEMCO_VERSION_PATCH
0
#define ADEMCO_VERSION_PATCH
2
#define ADEMCO_VERSION_IS_RELEASE 1
#define ADEMCO_VERSION_IS_RELEASE 1
#define ADEMCO_VERSION_SUFFIX ""
#define ADEMCO_VERSION_SUFFIX ""
...
...
This diff is collapsed.
Click to expand it.
examples/gen_event_md/gen_event_md.cpp
View file @
38c60906
...
@@ -23,32 +23,32 @@ const char* print_bool(bool b) {
...
@@ -23,32 +23,32 @@ const char* print_bool(bool b) {
}
}
ademco_event_t
statusEvents
[]
=
{
ademco_event_t
statusEvents
[]
=
{
#define XX(
name, cod
e, zh) EVENT_##name,
#define XX(
code, nam
e, zh) EVENT_##name,
ADEMCO_STATUS_EVENTS_MAP
(
XX
)
ADEMCO_STATUS_EVENTS_MAP
(
XX
)
#undef XX
#undef XX
};
};
ademco_event_t
alarmEvents
[]
=
{
ademco_event_t
alarmEvents
[]
=
{
#define XX(
name, cod
e, zh) EVENT_##name,
#define XX(
code, nam
e, zh) EVENT_##name,
ADEMCO_ALARM_EVENTS_MAP
(
XX
)
ADEMCO_ALARM_EVENTS_MAP
(
XX
)
#undef XX
#undef XX
};
};
ademco_event_t
excepEvents
[]
=
{
ademco_event_t
excepEvents
[]
=
{
#define XX(
name, cod
e, zh) EVENT_##name,
#define XX(
code, nam
e, zh) EVENT_##name,
ADEMCO_EXEPTION_EVENTS_MAP
(
XX
)
ADEMCO_EXEPTION_EVENTS_MAP
(
XX
)
ADEMCO_EXEPTION_RECOVER_EVENTS_MAP
(
XX
)
ADEMCO_EXEPTION_RECOVER_EVENTS_MAP
(
XX
)
#undef XX
#undef XX
};
};
ademco_event_t
privateEvents
[]
=
{
ademco_event_t
privateEvents
[]
=
{
#define XX(
name, cod
e, zh) EVENT_##name,
#define XX(
code, nam
e, zh) EVENT_##name,
ADEMCO_HB_EVENTS_MAP
(
XX
)
ADEMCO_HB_EVENTS_MAP
(
XX
)
#undef XX
#undef XX
};
};
ademco_event_t
allEvents
[]
=
{
ademco_event_t
allEvents
[]
=
{
#define XX(
name, cod
e, zh) EVENT_##name,
#define XX(
code, nam
e, zh) EVENT_##name,
ADEMCO_STATUS_EVENTS_MAP
(
XX
)
ADEMCO_STATUS_EVENTS_MAP
(
XX
)
ADEMCO_ALARM_EVENTS_MAP
(
XX
)
ADEMCO_ALARM_EVENTS_MAP
(
XX
)
ADEMCO_ALARM_RECOVER_EVENTS_MAP
(
XX
)
ADEMCO_ALARM_RECOVER_EVENTS_MAP
(
XX
)
...
@@ -59,7 +59,7 @@ ademco_event_t allEvents[] = {
...
@@ -59,7 +59,7 @@ ademco_event_t allEvents[] = {
};
};
hb_zone_property_t
allZoneProperties
[]
=
{
hb_zone_property_t
allZoneProperties
[]
=
{
#define XX(
name, valu
e, str) HZP_##name,
#define XX(
value, nam
e, str) HZP_##name,
HB_ZONE_PROPERTY_MAP
(
XX
)
HB_ZONE_PROPERTY_MAP
(
XX
)
#undef XX
#undef XX
};
};
...
@@ -391,7 +391,7 @@ void gen_sources() {
...
@@ -391,7 +391,7 @@ void gen_sources() {
printf
(
"%s
\n
"
,
comment
);
printf
(
"%s
\n
"
,
comment
);
printf
(
"|zone|name|source|
\n
"
);
printf
(
"|zone|name|source|
\n
"
);
printf
(
"|----|----|------|
\n
"
);
printf
(
"|----|----|------|
\n
"
);
#define XX(
name, cod
e, zh) \
#define XX(
code, nam
e, zh) \
printf("|%d|%s|%s|\n", code, #name, zh);
printf("|%d|%s|%s|\n", code, #name, zh);
ADEMCO_CONTROL_SOURCES_MAP
(
XX
)
ADEMCO_CONTROL_SOURCES_MAP
(
XX
)
#undef XX
#undef XX
...
...
This diff is collapsed.
Click to expand it.
examples/httprelay/httprelay.c
View file @
38c60906
...
@@ -111,6 +111,7 @@ end:
...
@@ -111,6 +111,7 @@ end:
void
on_tcp_connection
(
uv_tcpserver_client_context_t
*
client
,
int
connected
)
{
void
on_tcp_connection
(
uv_tcpserver_client_context_t
*
client
,
int
connected
)
{
if
(
connected
)
{
if
(
connected
)
{
machine_info_t
*
machine
=
malloc
(
sizeof
(
machine_info_t
));
machine_info_t
*
machine
=
malloc
(
sizeof
(
machine_info_t
));
fatal_if_null
(
machine
);
memset
(
machine
->
acct
,
'\0'
,
sizeof
(
machine
->
acct
));
memset
(
machine
->
acct
,
'\0'
,
sizeof
(
machine
->
acct
));
machine
->
ademco_id
=
0
;
machine
->
ademco_id
=
0
;
machine
->
type
=
HMT_INVALID
;
machine
->
type
=
HMT_INVALID
;
...
...
This diff is collapsed.
Click to expand it.
hb_config.h
View file @
38c60906
#ifndef __HB_CONFIG_H__
#ifndef __HB_CONFIG_H__
#define __HB_CONFIG_H__
#define __HB_CONFIG_H__
#include "ademco_config.h"
#ifdef HB_EXPORTS
#ifdef HB_EXPORTS
#if defined __GNUC__
#if defined __GNUC__
...
@@ -38,4 +40,8 @@
...
@@ -38,4 +40,8 @@
#define HB_ENABLE_CHINESE 0
#define HB_ENABLE_CHINESE 0
#endif // HB_ENABLE_TO_STRING
#endif // HB_ENABLE_TO_STRING
#endif
#ifndef HB_ENABLE_TIMER_ARM_STAY
#define HB_ENABLE_TIMER_ARM_STAY 1
#endif // HB_ENABLE_TIMER_ARM_STAY
#endif // __HB_CONFIG_H__
This diff is collapsed.
Click to expand it.
hb_core.c
View file @
38c60906
This diff is collapsed.
Click to expand it.
hb_core.h
View file @
38c60906
#ifndef __HB_CORE_H__
#ifndef __HB_CORE_H__
#define __HB_CORE_H__
#define __HB_CORE_H__
#include <stdint.h>
#include "hb_config.h"
#include "hb_config.h"
#ifdef __cplusplus
#ifdef __cplusplus
...
@@ -20,10 +18,10 @@ extern "C" {
...
@@ -20,10 +18,10 @@ extern "C" {
// 主机状态表
// 主机状态表
#define HB_MACHINE_STATUS_MAP(XX) \
#define HB_MACHINE_STATUS_MAP(XX) \
XX
(
ARM_AWAY
,
0
,
"离家布防
"
)
\
XX
(
0
,
ARM_AWAY
,
"ARM_AWAY
"
)
\
XX
(
ARM_STAY
,
1
,
"留守布防
"
)
\
XX
(
1
,
ARM_STAY
,
"ARM_STAY
"
)
\
XX
(
DISARM
,
2
,
"撤防"
)
\
XX
(
2
,
DISARM
,
"DISARM"
)
\
XX
(
SETTING
,
3
,
"设置
"
)
XX
(
3
,
SETTING
,
"SETTING
"
)
// 主机状态与安定宝事件码对照表
// 主机状态与安定宝事件码对照表
#define HMS_EVENT_MAP(XX) \
#define HMS_EVENT_MAP(XX) \
...
@@ -34,7 +32,7 @@ extern "C" {
...
@@ -34,7 +32,7 @@ extern "C" {
// 主机状态
// 主机状态
typedef
enum
hb_machine_status_t
{
typedef
enum
hb_machine_status_t
{
#define XX(
name, valu
e, str) HMS_##name = value,
#define XX(
value, nam
e, str) HMS_##name = value,
HB_MACHINE_STATUS_MAP
(
XX
)
HB_MACHINE_STATUS_MAP
(
XX
)
#undef XX
#undef XX
// valid count
// valid count
...
@@ -45,38 +43,23 @@ typedef enum hb_machine_status_t {
...
@@ -45,38 +43,23 @@ typedef enum hb_machine_status_t {
// 主机类型表
// 主机类型表
#define HB_MACHINE_TYPE_MAP(XX) \
#define HB_MACHINE_TYPE_MAP(XX) \
XX
(
WIFI
,
0
,
"WiFi主机"
)
\
XX
(
0
,
WIFI
,
"WiFi主机"
)
\
XX
(
CAMERA
,
1
,
"网络摄像机"
)
\
XX
(
1
,
CAMERA
,
"摄像头主机"
)
\
XX
(
GPRS_IOT
,
2
,
"简化物联卡主机"
)
\
XX
(
2
,
GPRS_IOT
,
"简化物联卡主机"
)
\
XX
(
NETMOD
,
3
,
"网络模块主机"
)
\
XX
(
3
,
NETMOD
,
"网络模块主机"
)
\
XX
(
GPRS
,
4
,
"GPRS主机"
)
\
XX
(
4
,
GPRS
,
"GPRS主机"
)
\
XX
(
LCD
,
5
,
"液晶主机"
)
\
XX
(
5
,
LCD
,
"液晶主机"
)
\
XX
(
WIRED
,
6
,
"网线主机"
)
\
XX
(
6
,
WIRED
,
"网线主机"
)
\
XX
(
TRUE_COLOR
,
7
,
"真彩主机"
)
\
XX
(
7
,
TRUE_COLOR
,
"真彩主机"
)
\
XX
(
THREE_SECTION
,
8
,
"三区段主机"
)
\
XX
(
8
,
THREE_SECTION
,
"三区段主机"
)
\
XX
(
IOT
,
9
,
"物联卡主机"
)
\
XX
(
9
,
IOT
,
"物联卡主机"
)
\
XX
(
GPRS_PHONE
,
10
,
"GPRS主机可电话"
)
\
XX
(
10
,
GPRS_PHONE
,
"GPRS主机可电话"
)
\
XX
(
NB
,
11
,
"NB报警接收主机"
)
\
XX
(
11
,
NB
,
"NB报警接收主机"
)
\
XX
(
WIFI2
,
12
,
"WiFi主机新版"
)
XX
(
12
,
WIFI2
,
"WiFi主机新版"
)
// 主机类型与安定宝事件码对照表
#define HMT_EVENT_MAP(XX) \
XX
(
HMT_WIFI
,
EVENT_I_AM_WIFI
)
\
XX
(
HMT_GPRS_IOT
,
EVENT_I_AM_GPRS_IOT
)
\
XX
(
HMT_NETMOD
,
EVENT_I_AM_NET_MODULE
)
\
XX
(
HMT_GPRS
,
EVENT_I_AM_GPRS
)
\
XX
(
HMT_LCD
,
EVENT_I_AM_LCD
)
\
XX
(
HMT_WIRED
,
EVENT_I_AM_WIRE
)
\
XX
(
HMT_TRUE_COLOR
,
EVENT_I_AM_TRUE_COLOR
)
\
XX
(
HMT_THREE_SECTION
,
EVENT_I_AM_3_SECTION
)
\
XX
(
HMT_IOT
,
EVENT_I_AM_IOT
)
\
XX
(
HMT_GPRS_PHONE
,
EVENT_I_AM_GPRS_PHONE
)
\
XX
(
HMT_NB
,
EVENT_I_AM_NB
)
\
XX
(
HMT_WIFI2
,
EVENT_I_AM_WIFI2
)
// 主机类型
// 主机类型
typedef
enum
hb_machine_type_t
{
typedef
enum
hb_machine_type_t
{
#define XX(
name, valu
e, str) HMT_##name = value,
#define XX(
value, nam
e, str) HMT_##name = value,
HB_MACHINE_TYPE_MAP
(
XX
)
HB_MACHINE_TYPE_MAP
(
XX
)
#undef XX
#undef XX
// valid count
// valid count
...
@@ -86,28 +69,28 @@ typedef enum hb_machine_type_t {
...
@@ -86,28 +69,28 @@ typedef enum hb_machine_type_t {
}
hb_machine_type_t
;
}
hb_machine_type_t
;
// 防区属性表
// 防区属性表
// 2024年8月2日21:37:14 删除 0x0F 旁路防区,修改 9 屏蔽防区为旁路防区:旁路即屏蔽
#define HB_ZONE_PROPERTY_MAP(XX) \
#define HB_ZONE_PROPERTY_MAP(XX) \
XX
(
BURGLAR
,
0
,
"匪警全局"
)
\
XX
(
0
,
BURGLAR
,
"匪警全局"
)
\
XX
(
EMERGENCY
,
1
,
"匪警紧急"
)
\
XX
(
1
,
EMERGENCY
,
"匪警紧急"
)
\
XX
(
FIRE
,
2
,
"火警防区"
)
\
XX
(
2
,
FIRE
,
"火警防区"
)
\
XX
(
DURESS
,
3
,
"胁迫防区"
)
\
XX
(
3
,
DURESS
,
"胁迫防区"
)
\
XX
(
GAS
,
4
,
"燃气防区"
)
\
XX
(
4
,
GAS
,
"燃气防区"
)
\
XX
(
WATER
,
5
,
"淹水防区"
)
\
XX
(
5
,
WATER
,
"淹水防区"
)
\
XX
(
SUB_MACHINE
,
6
,
"分机"
)
\
XX
(
6
,
SUB_MACHINE
,
"分机"
)
\
XX
(
REMOTE_CONTROL
,
7
,
"遥控器"
)
\
XX
(
7
,
REMOTE_CONTROL
,
"遥控器"
)
\
XX
(
BURGLAR_HALF
,
8
,
"匪警半局"
)
\
XX
(
8
,
BURGLAR_HALF
,
"匪警半局"
)
\
XX
(
SHIELD
,
9
,
"屏蔽防区"
)
\
XX
(
9
,
BYPASS
,
"旁路防区"
)
\
XX
(
DOOR_RING
,
0x0A
,
"门铃防区"
)
\
XX
(
10
,
DOOR_RING
,
"门铃防区"
)
XX
(
BYPASS
,
0x0F
,
"旁路防区"
)
// 防区属性
// 防区属性
typedef
enum
hb_zone_property_t
{
typedef
enum
hb_zone_property_t
{
#define XX(
name, valu
e, str) HZP_##name = value,
#define XX(
value, nam
e, str) HZP_##name = value,
HB_ZONE_PROPERTY_MAP
(
XX
)
HB_ZONE_PROPERTY_MAP
(
XX
)
#undef XX
#undef XX
// valid count
// valid count
HZP_COUNT
=
1
2
,
HZP_COUNT
=
1
1
,
// invalid
// invalid
HZP_INVALID
=
0xFF
,
HZP_INVALID
=
0xFF
,
}
hb_zone_property_t
;
}
hb_zone_property_t
;
...
@@ -124,66 +107,75 @@ typedef struct {
...
@@ -124,66 +107,75 @@ typedef struct {
}
hb_machine_time_point_t
;
}
hb_machine_time_point_t
;
typedef
struct
{
typedef
struct
{
#if HB_ENABLE_TIMER_ARM_STAY
uint8_t
arm_what
;
// 0: arm away, 1: arm stay
#define HB_TIMER_ARM_WHAT_ARM_AWAY 0
#define HB_TIMER_ARM_WHAT_ARM_STAY 1
#endif
hb_machine_time_point_t
arm_at
;
hb_machine_time_point_t
arm_at
;
hb_machine_time_point_t
disarm_at
;
hb_machine_time_point_t
disarm_at
;
}
hb_machine_timer_one_t
;
}
hb_machine_timer_one_t
;
typedef
union
{
typedef
union
{
hb_machine_timer_one_t
timer
[
2
];
// 2 set of timer
hb_machine_timer_one_t
timer
[
2
];
// 2 set of timer
uint8_t
dat
[
8
];
uint8_t
dat
[
sizeof
(
hb_machine_timer_one_t
)
*
2
];
}
hb_machine_timer_t
;
}
hb_machine_timer_t
;
///////////////////////////// property functions //////////////////////////////
///////////////////////////// property functions //////////////////////////////
// return available count
// return available count
// props must have at least HZP_COUNT
item
s
// props must have at least HZP_COUNT
slot
s
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_get_available_zone_properties_by_type
(
hb_machine_type_t
type
,
uint8_t
hb_get_available_zone_properties_by_type
(
hb_machine_type_t
type
,
hb_zone_property_t
props
[
HZP_COUNT
]);
hb_zone_property_t
props
[
HZP_COUNT
]);
// 根据主机类型判断是否支持该属性
HB_EXPORT_SYMBOL
bool
hb_machine_supports_zone_property
(
hb_machine_type_t
type
,
hb_zone_property_t
prop
);
// 最大防区号根据型号不同而不同
// 最大防区号根据型号不同而不同
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint16_t
hb_get_max_zone_by_type
(
hb_machine_type_t
type
);
uint16_t
hb_get_max_zone_by_type
(
hb_machine_type_t
type
);
// 防区号是否合法(可以包含0防区)
// 防区号是否合法(可以包含0防区)
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_is_valid_zone_by_type
(
hb_machine_type_t
type
,
uint16_t
zone
);
bool
hb_is_valid_zone_by_type
(
hb_machine_type_t
type
,
uint16_t
zone
);
// 防区号是否合法(不可以可以包含0防区)
// 防区号是否合法(不可以可以包含0防区)
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_is_valid_zone_by_type_strict
(
hb_machine_type_t
type
,
uint16_t
zone
);
bool
hb_is_valid_zone_by_type_strict
(
hb_machine_type_t
type
,
uint16_t
zone
);
// 主机是否已投产使用
// 主机是否已投产使用
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_is_machine_on_sale
(
hb_machine_type_t
type
);
bool
hb_is_machine_on_sale
(
hb_machine_type_t
type
);
// 主机是否具有离家布防功能
// 主机是否具有离家布防功能
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_arm_away
(
hb_machine_type_t
type
);
bool
hb_machine_can_arm_away
(
hb_machine_type_t
type
);
// 主机是否具有撤防功能
// 主机是否具有撤防功能
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_disarm
(
hb_machine_type_t
type
);
bool
hb_machine_can_disarm
(
hb_machine_type_t
type
);
// 主机是否可以进入设置状态
// 主机是否可以进入设置状态
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_config
(
hb_machine_type_t
type
);
bool
hb_machine_can_config
(
hb_machine_type_t
type
);
// 主机是否具有留守布防功能
// 主机是否具有留守布防功能
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_arm_stay
(
hb_machine_type_t
type
);
bool
hb_machine_can_arm_stay
(
hb_machine_type_t
type
);
// 主机是否可以报告信号强度
// 主机是否可以报告信号强度
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_report_signal_strength
(
hb_machine_type_t
type
);
bool
hb_machine_can_report_signal_strength
(
hb_machine_type_t
type
);
// 主机本身是否可以短信报警(不算通过服务如阿里语音等)
// 主机本身是否可以短信报警(不算通过服务如阿里语音等)
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_report_by_sms
(
hb_machine_type_t
type
);
bool
hb_machine_can_report_by_sms
(
hb_machine_type_t
type
);
// 主机是否支持有线防区
// 主机是否支持有线防区
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_has_wired_zones
(
hb_machine_type_t
type
);
bool
hb_machine_has_wired_zones
(
hb_machine_type_t
type
);
// 主机最小有线防区号
// 主机最小有线防区号
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
...
@@ -195,16 +187,16 @@ uint16_t hb_wired_zone_max(hb_machine_type_t type);
...
@@ -195,16 +187,16 @@ uint16_t hb_wired_zone_max(hb_machine_type_t type);
// 主机是否可以直接写入防区数据(无需对码)
// 主机是否可以直接写入防区数据(无需对码)
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_write_zone
(
hb_machine_type_t
type
);
bool
hb_machine_can_write_zone
(
hb_machine_type_t
type
);
// 主机是否可以挂载分机
// 主机是否可以挂载分机
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_machine_can_link_sub_machine
(
hb_machine_type_t
type
);
bool
hb_machine_can_link_sub_machine
(
hb_machine_type_t
type
);
// 根据防区属性判断是否支持失联报告
// 根据防区属性判断是否支持失联报告
// 失联报告是主机侧实现的跟防区属性没关系,但是人为限制了只有以下属性的才可以设置
// 失联报告是主机侧实现的跟防区属性没关系,但是人为限制了只有以下属性的才可以设置
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_zone_can_report_lost
(
hb_zone_property_t
zp
);
bool
hb_zone_can_report_lost
(
hb_zone_property_t
zp
);
///////////////////////////// timer functions /////////////////////////////////
///////////////////////////// timer functions /////////////////////////////////
...
@@ -215,19 +207,20 @@ HB_EXPORT_SYMBOL
...
@@ -215,19 +207,20 @@ HB_EXPORT_SYMBOL
void
hb_machine_timer_init
(
hb_machine_timer_t
*
timer
);
void
hb_machine_timer_init
(
hb_machine_timer_t
*
timer
);
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_is_valid_time_point
(
hb_machine_time_point_t
*
tp
);
uint8_t
hb_is_valid_time_point
(
const
hb_machine_time_point_t
*
tp
);
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_time_point_equal
(
hb_machine_time_point_t
*
tp1
,
hb_machine_time_point_t
*
tp2
);
uint8_t
hb_time_point_equal
(
const
hb_machine_time_point_t
*
tp1
,
const
hb_machine_time_point_t
*
tp2
);
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_is_valid_timer_one
(
hb_machine_timer_one_t
*
timer
);
uint8_t
hb_is_valid_timer_one
(
const
hb_machine_timer_one_t
*
timer
);
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
uint8_t
hb_is_valid_machine_timer
(
hb_machine_timer_t
*
timer
);
uint8_t
hb_is_valid_machine_timer
(
const
hb_machine_timer_t
*
timer
);
///////////////////////////// helper functions ////////////////////////////////
///////////////////////////// helper functions ////////////////////////////////
#if HB_ENABLE_TO_STRING
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
const
char
*
hb_machine_status_to_string
(
hb_machine_status_t
status
);
const
char
*
hb_machine_status_to_string
(
hb_machine_status_t
status
);
...
@@ -250,6 +243,7 @@ const char* hb_zone_property_to_string_chinese(hb_zone_property_t zp);
...
@@ -250,6 +243,7 @@ const char* hb_zone_property_to_string_chinese(hb_zone_property_t zp);
HB_EXPORT_SYMBOL
HB_EXPORT_SYMBOL
const
char
*
hb_get_zone_format_str
(
hb_machine_type_t
type
);
const
char
*
hb_get_zone_format_str
(
hb_machine_type_t
type
);
#endif // HB_ENABLE_TO_STRING
#ifdef __cplusplus
#ifdef __cplusplus
}
}
...
...
This diff is collapsed.
Click to expand it.
hb_core_ademco.c
View file @
38c60906
...
@@ -99,8 +99,8 @@ ademco_event_t hb_rf_code_to_ademco_event(uint8_t rf_code) {
...
@@ -99,8 +99,8 @@ ademco_event_t hb_rf_code_to_ademco_event(uint8_t rf_code) {
case
HB_RF_CODE_S_BATTERY_LOW
:
case
HB_RF_CODE_S_BATTERY_LOW
:
case
HB_RF_CODE_R_BATTERY_LOW
:
case
HB_RF_CODE_R_BATTERY_LOW
:
return
EVENT_LOW_BATTERY
;
return
EVENT_LOW_BATTERY
;
case
HB_RF_CODE_S_BATTERY_BROKE
:
case
HB_RF_CODE_S_BATTERY_BROKE
N
:
case
HB_RF_CODE_R_BATTERY_BROKE
:
case
HB_RF_CODE_R_BATTERY_BROKE
N
:
return
EVENT_BAD_BATTERY
;
return
EVENT_BAD_BATTERY
;
case
HB_RF_CODE_BATTERY_RECOVER
:
case
HB_RF_CODE_BATTERY_RECOVER
:
return
EVENT_LOW_BATTERY_RECOVER
;
return
EVENT_LOW_BATTERY_RECOVER
;
...
@@ -122,8 +122,8 @@ ademco_event_t hb_rf_code_to_ademco_event(uint8_t rf_code) {
...
@@ -122,8 +122,8 @@ ademco_event_t hb_rf_code_to_ademco_event(uint8_t rf_code) {
return
EVENT_SUB_MACHINE_POWER_EXCEPTION
;
return
EVENT_SUB_MACHINE_POWER_EXCEPTION
;
case
HB_RF_CODE_SM_POWER_RECOVER
:
case
HB_RF_CODE_SM_POWER_RECOVER
:
return
EVENT_SUB_MACHINE_POWER_RECOVER
;
return
EVENT_SUB_MACHINE_POWER_RECOVER
;
case
HB_RF_CODE_AC_BROKE
:
case
HB_RF_CODE_AC_BROKE
N
:
return
EVENT_AC_BROKE
;
return
EVENT_AC_BROKE
N
;
case
HB_RF_CODE_AC_RECOVER
:
case
HB_RF_CODE_AC_RECOVER
:
return
EVENT_AC_RECOVER
;
return
EVENT_AC_RECOVER
;
...
...
This diff is collapsed.
Click to expand it.
hb_core_ademco.h
View file @
38c60906
...
@@ -9,6 +9,21 @@
...
@@ -9,6 +9,21 @@
extern
"C"
{
extern
"C"
{
#endif
#endif
// 主机类型与安定宝事件码对照表
#define HMT_EVENT_MAP(XX) \
XX
(
HMT_WIFI
,
EVENT_I_AM_WIFI
)
\
XX
(
HMT_GPRS_IOT
,
EVENT_I_AM_GPRS_IOT
)
\
XX
(
HMT_NETMOD
,
EVENT_I_AM_NET_MODULE
)
\
XX
(
HMT_GPRS
,
EVENT_I_AM_GPRS
)
\
XX
(
HMT_LCD
,
EVENT_I_AM_LCD
)
\
XX
(
HMT_WIRED
,
EVENT_I_AM_WIRE
)
\
XX
(
HMT_TRUE_COLOR
,
EVENT_I_AM_TRUE_COLOR
)
\
XX
(
HMT_THREE_SECTION
,
EVENT_I_AM_3_SECTION
)
\
XX
(
HMT_IOT
,
EVENT_I_AM_IOT
)
\
XX
(
HMT_GPRS_PHONE
,
EVENT_I_AM_GPRS_PHONE
)
\
XX
(
HMT_NB
,
EVENT_I_AM_NB
)
\
XX
(
HMT_WIFI2
,
EVENT_I_AM_WIFI2
)
// 防区属性与安定宝事件码对照表
// 防区属性与安定宝事件码对照表
#define HZP_EVENT_MAP(XX) \
#define HZP_EVENT_MAP(XX) \
XX
(
HZP_BURGLAR
,
EVENT_BURGLAR
)
\
XX
(
HZP_BURGLAR
,
EVENT_BURGLAR
)
\
...
...
This diff is collapsed.
Click to expand it.
hb_rf.h
View file @
38c60906
#ifndef __HB_RF_H__
#ifndef __HB_RF_H__
#define __HB_RF_H__
#define __HB_RF_H__
#include <stdint.h>
#include "hb_config.h"
#include "hb_config.h"
#ifdef __cplusplus
#ifdef __cplusplus
extern
"C"
{
extern
"C"
{
#endif
#endif
#define HB_INVALID_RF_ADDR 0xFFFF
#define hb_is_valid_rf_addr(addr) ((0 < (addr)) && ((addr) < 0xFFFF))
// 无线命令码
// Note: 工程主机删除所有探头会报 E0,其他都是探头无线码
#define HB_RF_CODE_MAP(XX) \
#define HB_RF_CODE_MAP(XX) \
XX
(
0x00
,
BURGLAR
,
"报警"
)
\
XX
(
0x00
,
BURGLAR
,
"报警"
)
\
XX
(
0x01
,
ARM
,
"布防"
)
\
XX
(
0x01
,
ARM
,
"布防"
)
\
...
@@ -22,13 +25,13 @@ extern "C" {
...
@@ -22,13 +25,13 @@ extern "C" {
XX
(
0x57
,
NIGHT
,
"夜间"
)
\
XX
(
0x57
,
NIGHT
,
"夜间"
)
\
XX
(
0x69
,
SENDER_REBOOT
,
"发送端重启"
)
\
XX
(
0x69
,
SENDER_REBOOT
,
"发送端重启"
)
\
XX
(
0x75
,
DAY
,
"白天"
)
\
XX
(
0x75
,
DAY
,
"白天"
)
\
XX
(
0xA5
,
R_BATTERY_BROKE
,
"收电池损坏"
)
\
XX
(
0xA5
,
R_BATTERY_BROKE
N
,
"收电池损坏"
)
\
XX
(
0xA8
,
DOOR_RING
,
"门铃"
)
\
XX
(
0xA8
,
DOOR_RING
,
"门铃"
)
\
XX
(
0xAB
,
S_BATTERY_LOW
,
"发低电"
)
\
XX
(
0xAB
,
S_BATTERY_LOW
,
"发低电"
)
\
XX
(
0xAC
,
R_BATTERY_LOW
,
"收低电"
)
\
XX
(
0xAC
,
R_BATTERY_LOW
,
"收低电"
)
\
XX
(
0xAD
,
BATTERY_RECOVER
,
"复电"
)
\
XX
(
0xAD
,
BATTERY_RECOVER
,
"复电"
)
\
XX
(
0xAE
,
S_BATTERY_BROKE
,
"发电池损坏"
)
\
XX
(
0xAE
,
S_BATTERY_BROKE
N
,
"发电池损坏"
)
\
XX
(
0xB0
,
AC_BROKE
,
"AC掉电"
)
\
XX
(
0xB0
,
AC_BROKE
N
,
"AC掉电"
)
\
XX
(
0xB1
,
AC_RECOVER
,
"AC恢复"
)
\
XX
(
0xB1
,
AC_RECOVER
,
"AC恢复"
)
\
XX
(
0xBA
,
TAMPER
,
"防拆"
)
\
XX
(
0xBA
,
TAMPER
,
"防拆"
)
\
XX
(
0xBB
,
SLEEP
,
"电池电压小于3V,终端进入休眠"
)
\
XX
(
0xBB
,
SLEEP
,
"电池电压小于3V,终端进入休眠"
)
\
...
@@ -42,6 +45,7 @@ extern "C" {
...
@@ -42,6 +45,7 @@ extern "C" {
XX
(
0xCE
,
SM_EXCEPTION
,
"分机产生异常信息"
)
\
XX
(
0xCE
,
SM_EXCEPTION
,
"分机产生异常信息"
)
\
XX
(
0xCF
,
SM_EXCEPT_RECOVER
,
"分机恢复异常信息"
)
\
XX
(
0xCF
,
SM_EXCEPT_RECOVER
,
"分机恢复异常信息"
)
\
XX
(
0xDD
,
QUERY
,
"查询分机状态"
)
\
XX
(
0xDD
,
QUERY
,
"查询分机状态"
)
\
XX
(
0xE0
,
DELETED_ALL_SENSOR
,
"已删除所有传感器"
)
\
XX
(
0xED
,
SHUTDOWN
,
"关机"
)
XX
(
0xED
,
SHUTDOWN
,
"关机"
)
// 无线命令码
// 无线命令码
...
...
This diff is collapsed.
Click to expand it.
swig/CSharpDemo.cs
View file @
38c60906
...
@@ -168,11 +168,11 @@ namespace CSharpDemo
...
@@ -168,11 +168,11 @@ namespace CSharpDemo
replyAck
(
stream
,
pkt
.
seq
,
pkt
.
acct
);
replyAck
(
stream
,
pkt
.
seq
,
pkt
.
acct
);
acct
=
pkt
.
acct
;
acct
=
pkt
.
acct
;
ademco_id
=
pkt
.
dat
.
ademco_id
;
ademco_id
=
pkt
.
dat
.
ademco_id
;
if
(
libademco
.
ademco_is_machine_type_event
(
pkt
.
dat
.
ademco_event
)
!=
0
)
if
(
libademco
.
ademco_is_machine_type_event
(
pkt
.
dat
.
ademco_event
))
{
{
type
=
libademco
.
hb_machine_type_from_ademco_event
(
pkt
.
dat
.
ademco_event
);
type
=
libademco
.
hb_machine_type_from_ademco_event
(
pkt
.
dat
.
ademco_event
);
}
}
if
(
libademco
.
ademco_is_machine_status_event
(
pkt
.
dat
.
ademco_event
)
!=
0
)
if
(
libademco
.
ademco_is_machine_status_event
(
pkt
.
dat
.
ademco_event
))
{
{
status
=
libademco
.
hb_machine_status_from_ademco_event
(
pkt
.
dat
.
ademco_event
);
status
=
libademco
.
hb_machine_status_from_ademco_event
(
pkt
.
dat
.
ademco_event
);
}
}
...
...
This diff is collapsed.
Click to expand it.
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