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
Aug 13, 2024
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
releasing
parent
2eb71ce1
Expand all
Hide 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
## 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
-
shrink
`ademco_packet_t`
size
...
...
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
...
...
@@ -15,7 +15,7 @@
#define ADEMCO_EXPORT_SYMBOL
#endif // ADEMCO_EXPORTS
#endif
// ADEMCO_EXPORTS
#if defined(SWIGJAVA) || defined(SWIGCSHARP)
typedef
uint8_t
ademco_char_t
;
...
...
@@ -40,6 +40,14 @@ typedef char ademco_char_t;
#define ADEMCO_ENABLE_PARSE_ERROR 1
#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
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_) \
do
{
\
...
...
@@ -51,25 +59,125 @@ typedef char ademco_char_t;
}
\
}
while
(
0
);
#else
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_)
#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
#define ADEMCO_FILL_PARSE_ERROR(err, offset_, msg_) \
do
{
\
UNUSED
(
err
);
\
}
while
(
0
)
#endif // ADEMCO_ENABLE_PARSE_ERROR
// armclang v6 `gmtime` always return NULL
#ifndef ADEMCO_DISABLE_GMTIME
#ifdef __ARMCC_VERSION
#define ADEMCO_DISABLE_GMTIME 1
#else // __ARMCC_VERSION
#define ADEMCO_DISABLE_GMTIME 0
#endif
#endif // __ARMCC_VERSION
#endif // ADEMCO_DISABLE_GMTIME
// 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
#define ADEMCO_USE_STATIC_BUF 0
#endif
#ifndef ADEMCO_USE_UNIQUE_BUF
#define ADEMCO_USE_UNIQUE_BUF 0
#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
// 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__
ademco_version.h
View file @
38c60906
...
...
@@ -6,9 +6,9 @@
* evolve between minor releases, but only in a backwards compatible way.
*/
#define ADEMCO_VERSION_MAJOR
2
#define ADEMCO_VERSION_MINOR
7
#define ADEMCO_VERSION_PATCH
0
#define ADEMCO_VERSION_MAJOR
3
#define ADEMCO_VERSION_MINOR
2
#define ADEMCO_VERSION_PATCH
2
#define ADEMCO_VERSION_IS_RELEASE 1
#define ADEMCO_VERSION_SUFFIX ""
...
...
examples/gen_event_md/gen_event_md.cpp
View file @
38c60906
...
...
@@ -23,32 +23,32 @@ const char* print_bool(bool b) {
}
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
)
#undef XX
};
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
)
#undef XX
};
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_RECOVER_EVENTS_MAP
(
XX
)
#undef XX
};
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
)
#undef XX
};
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_ALARM_EVENTS_MAP
(
XX
)
ADEMCO_ALARM_RECOVER_EVENTS_MAP
(
XX
)
...
...
@@ -59,7 +59,7 @@ ademco_event_t allEvents[] = {
};
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
)
#undef XX
};
...
...
@@ -391,7 +391,7 @@ void gen_sources() {
printf
(
"%s
\n
"
,
comment
);
printf
(
"|zone|name|source|
\n
"
);
printf
(
"|----|----|------|
\n
"
);
#define XX(
name, cod
e, zh) \
#define XX(
code, nam
e, zh) \
printf("|%d|%s|%s|\n", code, #name, zh);
ADEMCO_CONTROL_SOURCES_MAP
(
XX
)
#undef XX
...
...
examples/httprelay/httprelay.c
View file @
38c60906
...
...
@@ -111,6 +111,7 @@ end:
void
on_tcp_connection
(
uv_tcpserver_client_context_t
*
client
,
int
connected
)
{
if
(
connected
)
{
machine_info_t
*
machine
=
malloc
(
sizeof
(
machine_info_t
));
fatal_if_null
(
machine
);
memset
(
machine
->
acct
,
'\0'
,
sizeof
(
machine
->
acct
));
machine
->
ademco_id
=
0
;
machine
->
type
=
HMT_INVALID
;
...
...
hb_config.h
View file @
38c60906
#ifndef __HB_CONFIG_H__
#define __HB_CONFIG_H__
#include "ademco_config.h"
#ifdef HB_EXPORTS
#if defined __GNUC__
...
...
@@ -38,4 +40,8 @@
#define HB_ENABLE_CHINESE 0
#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__
hb_core.c
View file @
38c60906
This diff is collapsed.
Click to expand it.
hb_core.h
View file @
38c60906
#ifndef __HB_CORE_H__
#define __HB_CORE_H__
#include <stdint.h>
#include "hb_config.h"
#ifdef __cplusplus
...
...
@@ -20,10 +18,10 @@ extern "C" {
// 主机状态表
#define HB_MACHINE_STATUS_MAP(XX) \
XX
(
ARM_AWAY
,
0
,
"离家布防
"
)
\
XX
(
ARM_STAY
,
1
,
"留守布防
"
)
\
XX
(
DISARM
,
2
,
"撤防"
)
\
XX
(
SETTING
,
3
,
"设置
"
)
XX
(
0
,
ARM_AWAY
,
"ARM_AWAY
"
)
\
XX
(
1
,
ARM_STAY
,
"ARM_STAY
"
)
\
XX
(
2
,
DISARM
,
"DISARM"
)
\
XX
(
3
,
SETTING
,
"SETTING
"
)
// 主机状态与安定宝事件码对照表
#define HMS_EVENT_MAP(XX) \
...
...
@@ -34,7 +32,7 @@ extern "C" {
// 主机状态
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
)
#undef XX
// valid count
...
...
@@ -45,38 +43,23 @@ typedef enum hb_machine_status_t {
// 主机类型表
#define HB_MACHINE_TYPE_MAP(XX) \
XX
(
WIFI
,
0
,
"WiFi主机"
)
\
XX
(
CAMERA
,
1
,
"网络摄像机"
)
\
XX
(
GPRS_IOT
,
2
,
"简化物联卡主机"
)
\
XX
(
NETMOD
,
3
,
"网络模块主机"
)
\
XX
(
GPRS
,
4
,
"GPRS主机"
)
\
XX
(
LCD
,
5
,
"液晶主机"
)
\
XX
(
WIRED
,
6
,
"网线主机"
)
\
XX
(
TRUE_COLOR
,
7
,
"真彩主机"
)
\
XX
(
THREE_SECTION
,
8
,
"三区段主机"
)
\
XX
(
IOT
,
9
,
"物联卡主机"
)
\
XX
(
GPRS_PHONE
,
10
,
"GPRS主机可电话"
)
\
XX
(
NB
,
11
,
"NB报警接收主机"
)
\
XX
(
WIFI2
,
12
,
"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
)
XX
(
0
,
WIFI
,
"WiFi主机"
)
\
XX
(
1
,
CAMERA
,
"摄像头主机"
)
\
XX
(
2
,
GPRS_IOT
,
"简化物联卡主机"
)
\
XX
(
3
,
NETMOD
,
"网络模块主机"
)
\
XX
(
4
,
GPRS
,
"GPRS主机"
)
\
XX
(
5
,
LCD
,
"液晶主机"
)
\
XX
(
6
,
WIRED
,
"网线主机"
)
\
XX
(
7
,
TRUE_COLOR
,
"真彩主机"
)
\
XX
(
8
,
THREE_SECTION
,
"三区段主机"
)
\
XX
(
9
,
IOT
,
"物联卡主机"
)
\
XX
(
10
,
GPRS_PHONE
,
"GPRS主机可电话"
)
\
XX
(
11
,
NB
,
"NB报警接收主机"
)
\
XX
(
12
,
WIFI2
,
"WiFi主机新版"
)
// 主机类型
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
)
#undef XX
// valid count
...
...
@@ -86,28 +69,28 @@ typedef enum hb_machine_type_t {
}
hb_machine_type_t
;
// 防区属性表
// 2024年8月2日21:37:14 删除 0x0F 旁路防区,修改 9 屏蔽防区为旁路防区:旁路即屏蔽
#define HB_ZONE_PROPERTY_MAP(XX) \
XX
(
BURGLAR
,
0
,
"匪警全局"
)
\
XX
(
EMERGENCY
,
1
,
"匪警紧急"
)
\
XX
(
FIRE
,
2
,
"火警防区"
)
\
XX
(
DURESS
,
3
,
"胁迫防区"
)
\
XX
(
GAS
,
4
,
"燃气防区"
)
\
XX
(
WATER
,
5
,
"淹水防区"
)
\
XX
(
SUB_MACHINE
,
6
,
"分机"
)
\
XX
(
REMOTE_CONTROL
,
7
,
"遥控器"
)
\
XX
(
BURGLAR_HALF
,
8
,
"匪警半局"
)
\
XX
(
SHIELD
,
9
,
"屏蔽防区"
)
\
XX
(
DOOR_RING
,
0x0A
,
"门铃防区"
)
\
XX
(
BYPASS
,
0x0F
,
"旁路防区"
)
XX
(
0
,
BURGLAR
,
"匪警全局"
)
\
XX
(
1
,
EMERGENCY
,
"匪警紧急"
)
\
XX
(
2
,
FIRE
,
"火警防区"
)
\
XX
(
3
,
DURESS
,
"胁迫防区"
)
\
XX
(
4
,
GAS
,
"燃气防区"
)
\
XX
(
5
,
WATER
,
"淹水防区"
)
\
XX
(
6
,
SUB_MACHINE
,
"分机"
)
\
XX
(
7
,
REMOTE_CONTROL
,
"遥控器"
)
\
XX
(
8
,
BURGLAR_HALF
,
"匪警半局"
)
\
XX
(
9
,
BYPASS
,
"旁路防区"
)
\
XX
(
10
,
DOOR_RING
,
"门铃防区"
)
// 防区属性
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
)
#undef XX
// valid count
HZP_COUNT
=
1
2
,
HZP_COUNT
=
1
1
,
// invalid
HZP_INVALID
=
0xFF
,
}
hb_zone_property_t
;
...
...
@@ -124,66 +107,75 @@ typedef struct {
}
hb_machine_time_point_t
;
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
disarm_at
;
}
hb_machine_timer_one_t
;
typedef
union
{
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
;
///////////////////////////// property functions //////////////////////////////
// return available count
// props must have at least HZP_COUNT
item
s
// props must have at least HZP_COUNT
slot
s
HB_EXPORT_SYMBOL
uint8_t
hb_get_available_zone_properties_by_type
(
hb_machine_type_t
type
,
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
uint16_t
hb_get_max_zone_by_type
(
hb_machine_type_t
type
);
// 防区号是否合法(可以包含0防区)
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防区)
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
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
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
uint8_t
hb_machine_can_disarm
(
hb_machine_type_t
type
);
bool
hb_machine_can_disarm
(
hb_machine_type_t
type
);
// 主机是否可以进入设置状态
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
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
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
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
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
...
...
@@ -195,16 +187,16 @@ uint16_t hb_wired_zone_max(hb_machine_type_t type);
// 主机是否可以直接写入防区数据(无需对码)
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
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
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 /////////////////////////////////
...
...
@@ -215,19 +207,20 @@ HB_EXPORT_SYMBOL
void
hb_machine_timer_init
(
hb_machine_timer_t
*
timer
);
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
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
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
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 ////////////////////////////////
#if HB_ENABLE_TO_STRING
HB_EXPORT_SYMBOL
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);
HB_EXPORT_SYMBOL
const
char
*
hb_get_zone_format_str
(
hb_machine_type_t
type
);
#endif // HB_ENABLE_TO_STRING
#ifdef __cplusplus
}
...
...
hb_core_ademco.c
View file @
38c60906
...
...
@@ -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_R_BATTERY_LOW
:
return
EVENT_LOW_BATTERY
;
case
HB_RF_CODE_S_BATTERY_BROKE
:
case
HB_RF_CODE_R_BATTERY_BROKE
:
case
HB_RF_CODE_S_BATTERY_BROKE
N
:
case
HB_RF_CODE_R_BATTERY_BROKE
N
:
return
EVENT_BAD_BATTERY
;
case
HB_RF_CODE_BATTERY_RECOVER
:
return
EVENT_LOW_BATTERY_RECOVER
;
...
...
@@ -122,8 +122,8 @@ ademco_event_t hb_rf_code_to_ademco_event(uint8_t rf_code) {
return
EVENT_SUB_MACHINE_POWER_EXCEPTION
;
case
HB_RF_CODE_SM_POWER_RECOVER
:
return
EVENT_SUB_MACHINE_POWER_RECOVER
;
case
HB_RF_CODE_AC_BROKE
:
return
EVENT_AC_BROKE
;
case
HB_RF_CODE_AC_BROKE
N
:
return
EVENT_AC_BROKE
N
;
case
HB_RF_CODE_AC_RECOVER
:
return
EVENT_AC_RECOVER
;
...
...
hb_core_ademco.h
View file @
38c60906
...
...
@@ -9,6 +9,21 @@
extern
"C"
{
#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) \
XX
(
HZP_BURGLAR
,
EVENT_BURGLAR
)
\
...
...
hb_rf.h
View file @
38c60906
#ifndef __HB_RF_H__
#define __HB_RF_H__
#include <stdint.h>
#include "hb_config.h"
#ifdef __cplusplus
extern
"C"
{
#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) \
XX
(
0x00
,
BURGLAR
,
"报警"
)
\
XX
(
0x01
,
ARM
,
"布防"
)
\
...
...
@@ -22,13 +25,13 @@ extern "C" {
XX
(
0x57
,
NIGHT
,
"夜间"
)
\
XX
(
0x69
,
SENDER_REBOOT
,
"发送端重启"
)
\
XX
(
0x75
,
DAY
,
"白天"
)
\
XX
(
0xA5
,
R_BATTERY_BROKE
,
"收电池损坏"
)
\
XX
(
0xA5
,
R_BATTERY_BROKE
N
,
"收电池损坏"
)
\
XX
(
0xA8
,
DOOR_RING
,
"门铃"
)
\
XX
(
0xAB
,
S_BATTERY_LOW
,
"发低电"
)
\
XX
(
0xAC
,
R_BATTERY_LOW
,
"收低电"
)
\
XX
(
0xAD
,
BATTERY_RECOVER
,
"复电"
)
\
XX
(
0xAE
,
S_BATTERY_BROKE
,
"发电池损坏"
)
\
XX
(
0xB0
,
AC_BROKE
,
"AC掉电"
)
\
XX
(
0xAE
,
S_BATTERY_BROKE
N
,
"发电池损坏"
)
\
XX
(
0xB0
,
AC_BROKE
N
,
"AC掉电"
)
\
XX
(
0xB1
,
AC_RECOVER
,
"AC恢复"
)
\
XX
(
0xBA
,
TAMPER
,
"防拆"
)
\
XX
(
0xBB
,
SLEEP
,
"电池电压小于3V,终端进入休眠"
)
\
...
...
@@ -42,6 +45,7 @@ extern "C" {
XX
(
0xCE
,
SM_EXCEPTION
,
"分机产生异常信息"
)
\
XX
(
0xCF
,
SM_EXCEPT_RECOVER
,
"分机恢复异常信息"
)
\
XX
(
0xDD
,
QUERY
,
"查询分机状态"
)
\
XX
(
0xE0
,
DELETED_ALL_SENSOR
,
"已删除所有传感器"
)
\
XX
(
0xED
,
SHUTDOWN
,
"关机"
)
// 无线命令码
...
...
swig/CSharpDemo.cs
View file @
38c60906
...
...
@@ -168,11 +168,11 @@ namespace CSharpDemo
replyAck
(
stream
,
pkt
.
seq
,
pkt
.
acct
);
acct
=
pkt
.
acct
;
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
);
}
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
);
}
...
...
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