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
d0df2ed4
Commit
d0df2ed4
authored
Jun 14, 2022
by
captainwong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update
parent
f9e16e88
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
615 additions
and
35 deletions
+615
-35
ademco.c
c/ademco.c
+473
-7
ademco.h
c/ademco.h
+142
-28
No files found.
c/ademco.c
View file @
d0df2ed4
...
...
@@ -115,6 +115,164 @@ AdemcoEventLevel ademcoGetEventLevel(AdemcoEvent ademcoEvent)
}
}
const
char
*
ademcoEventToString
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_ARM
:
return
"ARM"
;
case
EVENT_BURGLAR
:
return
"BURGLAR"
;
case
EVENT_DISARM
:
return
"DISARM"
;
case
EVENT_DURESS
:
return
"DURESS"
;
case
EVENT_EMERGENCY
:
return
"EMERGENCY"
;
case
EVENT_FIRE
:
return
"FIRE"
;
case
EVENT_GAS
:
return
"GAS"
;
case
EVENT_HALFARM
:
case
EVENT_HALFARM_1456
:
return
"HALFARM"
;
case
EVENT_TAMPER
:
return
"TAMPER"
;
case
EVENT_ZONE_TAMPER
:
return
"ZONE_TAMPER"
;
case
EVENT_BYPASS
:
return
"BYPASS"
;
case
EVENT_BYPASS_RESUME
:
return
"BYPASS_RESUME"
;
case
EVENT_WATER
:
return
"WATER"
;
case
EVENT_AC_BROKE
:
return
"AC BROKE"
;
case
EVENT_AC_RECOVER
:
return
"AC RECOVER"
;
case
EVENT_LOWBATTERY
:
return
"LOWBATTERY"
;
case
EVENT_BATTERY_RECOVER
:
return
"BATATTERY_RECOVER"
;
case
EVENT_BADBATTERY
:
return
"BADBATTERY"
;
case
EVENT_BADBATTERY_RECOVER
:
return
"BADBATTERY_RECOVER"
;
case
EVENT_SOLARDISTURB
:
return
"SOLARDISTURB"
;
case
EVENT_SOLARDISTURB_RECOVER
:
return
"SOLARDISTURB_RECOVER"
;
case
EVENT_DISCONNECT
:
return
"DISCONNECT"
;
case
EVENT_RECONNECT
:
return
"RECONNECT"
;
case
EVENT_LOST
:
return
"LOST"
;
case
EVENT_LOST_RECOVER
:
return
"LOST_RECOVER"
;
case
EVENT_3100
:
return
"LCD CLEAR EXCEPTION"
;
case
EVENT_BATTERY_EXCEPTION
:
return
"BATTERY_EXCEPTION"
;
case
EVENT_BATTERY_EXCEPTION_RECOVER
:
return
"BATTERY_EXCEPTION_RECOVER"
;
case
EVENT_OTHER_EXCEPTION
:
return
"OTHER_EXCEPTION"
;
case
EVENT_OTHER_EXCEPTION_RECOVER
:
return
"OTHER_EXCEPTION_RECOVER"
;
case
EVENT_SERIAL485DIS
:
return
"485DIS"
;
case
EVENT_SERIAL485CONN
:
return
"485CONN"
;
case
EVENT_DOORRINGING
:
return
"DOORRINGING"
;
case
EVENT_CONN_HANGUP
:
return
"CONN_HANGUP"
;
case
EVENT_CONN_RESUME
:
return
"CONN_RESUME"
;
case
EVENT_DISARM_PWD_ERR
:
return
"DISARM_PWD_ERR"
;
case
EVENT_SUB_MACHINE_SENSOR_EXCEPTION
:
return
"SUB_SENSOR_EXCEPTION"
;
case
EVENT_SUB_MACHINE_SENSOR_RESUME
:
return
"SUB_SENSOR_RESUME"
;
case
EVENT_SUB_MACHINE_POWER_EXCEPTION
:
return
"SUB_POWER_EXCEPTION"
;
case
EVENT_SUB_MACHINE_POWER_RESUME
:
return
"SUB_POWER_RESUME"
;
case
EVENT_COM_PASSTHROUGH
:
return
"COM_PASSTHROUGH"
;
case
EVENT_ENTER_SET_MODE
:
return
"ENTER_SET_MODE"
;
case
EVENT_EXIT_SET_MODE
:
return
"EXIT_SET_MODE"
;
case
EVENT_QUERY_SUB_MACHINE
:
return
"QUERY"
;
case
EVENT_WRITE_TO_MACHINE
:
return
"WRITE_TO_MACHINE"
;
case
EVENT_I_AM_NET_MODULE
:
return
"I_AM_NET_MODULE"
;
case
EVENT_PHONE_USER_SOS
:
return
"SOS"
;
case
EVENT_PHONE_USER_CANCLE_ALARM
:
return
"PHONE_USER_CANCLE_ALARM"
;
case
EVENT_I_AM_GPRS
:
return
"I_AM_GPRS_MACHINE"
;
case
EVENT_I_AM_LCD_MACHINE
:
return
"I_AM_LCD_MACHINE"
;
case
EVENT_I_AM_WIRE_MACHINE
:
return
"I_AM_WIRE_MACHINE"
;
case
EVENT_I_AM_WIFI_MACHINE
:
return
"I_AM_WIFI_MACHINE"
;
case
EVENT_I_AM_3_SECTION_MACHINE
:
return
"I_AM_3_SECTION_MACHINE"
;
case
EVENT_I_AM_IOT_MACHINE
:
return
"I_AM_IOT_MACHINE"
;
case
EVENT_I_AM_TRUE_COLOR
:
return
"I_AM_TRUE_COLOR"
;
case
EVENT_I_AM_GPRS_IOT
:
return
"I_AM_GPRS_IOT"
;
case
EVENT_I_AM_GPRS_PHONE
:
return
"I_AM_GPRS_PHONE"
;
case
EVENT_I_AM_NB_MACHINE
:
return
"I_AM_NB_MACHINE"
;
case
EVENT_SIM_IS_IOT_CARD
:
return
"SIM card is IOT"
;
case
EVENT_SIM_IS_IOT_PLATFORM_CARD
:
return
"SIM card is Platform IOT"
;
case
EVENT_SIM_IS_NOT_IOT_CARD
:
return
"SIM card is not IOT"
;
case
EVENT_ENTER_SETTING_MODE
:
return
"ENTER_SETTING_MODE"
;
case
EVENT_EXIT_SETTING_MODE
:
return
"EXIT_SETTING_MODE"
;
case
EVENT_RESTORE_FACTORY_SETTINGS_710
:
case
EVENT_RESTORE_FACTORY_SETTINGS
:
return
"RESTORE_FACTORY_SETTINGS"
;
case
EVENT_WHAT_IS_YOUR_TYPE
:
return
"WHAT_IS_YOUR_TYPE"
;
case
EVENT_SIGNAL_STRENGTH_CHANGED
:
return
"SIGNAL_STRENGTH_CHANGED"
;
case
EVENT_OFFLINE
:
return
"EVENT_OFFLINE"
;
case
EVENT_ONLINE
:
return
"EVENT_ONLINE"
;
default:
return
"Undefined AdemcoEvent"
;
}
}
const
wchar_t
*
ademcoEventToStringChinese
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_ARM
:
return
L"布防"
;
case
EVENT_BURGLAR
:
return
L"盗警"
;
case
EVENT_DISARM
:
return
L"撤防"
;
case
EVENT_DURESS
:
return
L"胁迫"
;
case
EVENT_EMERGENCY
:
return
L"紧急报警"
;
case
EVENT_FIRE
:
return
L"火警"
;
case
EVENT_GAS
:
return
L"煤气"
;
case
EVENT_HALFARM
:
case
EVENT_HALFARM_1456
:
return
L"半布防"
;
case
EVENT_TAMPER
:
return
L"防拆"
;
case
EVENT_ZONE_TAMPER
:
return
L"防区防拆"
;
case
EVENT_WATER
:
return
L"水警"
;
case
EVENT_BYPASS
:
return
L"旁路"
;
case
EVENT_BYPASS_RESUME
:
return
L"解除旁路"
;
case
EVENT_AC_BROKE
:
return
L"主机AC掉电"
;
case
EVENT_AC_RECOVER
:
return
L"主机AC恢复"
;
case
EVENT_LOWBATTERY
:
return
L"低电"
;
case
EVENT_BATTERY_RECOVER
:
return
L"复电"
;
case
EVENT_BADBATTERY
:
return
L"坏电"
;
case
EVENT_BADBATTERY_RECOVER
:
return
L"坏电恢复"
;
case
EVENT_SOLARDISTURB
:
return
L"光扰"
;
case
EVENT_SOLARDISTURB_RECOVER
:
return
L"光扰恢复"
;
case
EVENT_DISCONNECT
:
return
L"失效"
;
case
EVENT_RECONNECT
:
return
L"恢复"
;
case
EVENT_LOST
:
return
L"失联"
;
case
EVENT_LOST_RECOVER
:
return
L"恢复"
;
case
EVENT_3100
:
return
L"液晶主机清除异常指示"
;
case
EVENT_BATTERY_EXCEPTION
:
return
L"防区电源故障"
;
case
EVENT_BATTERY_EXCEPTION_RECOVER
:
return
L"防区电源故障恢复"
;
case
EVENT_OTHER_EXCEPTION
:
return
L"防区其他故障"
;
case
EVENT_OTHER_EXCEPTION_RECOVER
:
return
L"防区其他故障恢复"
;
case
EVENT_SERIAL485DIS
:
return
L"485断开"
;
case
EVENT_SERIAL485CONN
:
return
L"485恢复"
;
case
EVENT_DOORRINGING
:
return
L"门铃"
;
case
EVENT_CONN_HANGUP
:
return
L"链路挂起"
;
case
EVENT_CONN_RESUME
:
return
L"链路恢复"
;
case
EVENT_DISARM_PWD_ERR
:
return
L"撤防密码错误"
;
case
EVENT_SUB_MACHINE_SENSOR_EXCEPTION
:
return
L"分防区异常"
;
case
EVENT_SUB_MACHINE_SENSOR_RESUME
:
return
L"分防区恢复"
;
case
EVENT_SUB_MACHINE_POWER_EXCEPTION
:
return
L"分防区电源异常"
;
case
EVENT_SUB_MACHINE_POWER_RESUME
:
return
L"分防区电源恢复"
;
case
EVENT_COM_PASSTHROUGH
:
return
L"串口透传"
;
case
EVENT_ENTER_SET_MODE
:
return
L"进入设置状态"
;
case
EVENT_EXIT_SET_MODE
:
return
L"拒绝/停止设置"
;
case
EVENT_QUERY_SUB_MACHINE
:
return
L"查询"
;
case
EVENT_WRITE_TO_MACHINE
:
return
L"写入主机信息"
;
case
EVENT_I_AM_NET_MODULE
:
return
L"我是网络模块"
;
case
EVENT_PHONE_USER_SOS
:
return
L"手机用户SOS"
;
case
EVENT_PHONE_USER_CANCLE_ALARM
:
return
L"手机用户消警"
;
case
EVENT_I_AM_GPRS
:
return
L"我是GPRS主机"
;
case
EVENT_I_AM_LCD_MACHINE
:
return
L"我是液晶主机"
;
case
EVENT_I_AM_WIRE_MACHINE
:
return
L"我是网线主机"
;
case
EVENT_I_AM_WIFI_MACHINE
:
return
L"我是WiFi主机"
;
case
EVENT_I_AM_3_SECTION_MACHINE
:
return
L"我是三区段主机"
;
case
EVENT_I_AM_IOT_MACHINE
:
return
L"我是物联卡主机"
;
case
EVENT_I_AM_TRUE_COLOR
:
return
L"我是真彩主机"
;
case
EVENT_I_AM_GPRS_IOT
:
return
L"我是简化版物联卡主机"
;
case
EVENT_I_AM_GPRS_PHONE
:
return
L"我是GPRS主机能打电话"
;
case
EVENT_I_AM_NB_MACHINE
:
return
L"我是NB报警接收主机"
;
case
EVENT_SIM_IS_IOT_CARD
:
return
L"SIM卡为物联卡"
;
case
EVENT_SIM_IS_IOT_PLATFORM_CARD
:
return
L"SIM卡为平台物联卡"
;
case
EVENT_SIM_IS_NOT_IOT_CARD
:
return
L"SIM卡为非物联卡"
;
case
EVENT_ENTER_SETTING_MODE
:
return
L"主机进入设置状态"
;
case
EVENT_EXIT_SETTING_MODE
:
return
L"主机退出设置状态"
;
case
EVENT_RESTORE_FACTORY_SETTINGS_710
:
case
EVENT_RESTORE_FACTORY_SETTINGS
:
return
L"主机恢复出厂设置"
;
case
EVENT_WHAT_IS_YOUR_TYPE
:
return
L"索要主机类型"
;
case
EVENT_SIGNAL_STRENGTH_CHANGED
:
return
L"信号强度变化"
;
case
EVENT_OFFLINE
:
return
L"上线"
;
case
EVENT_ONLINE
:
return
L"离线"
;
default:
return
L"未定义的安定宝事件"
;
}
}
uint16_t
ademcoCRC8
(
char
c
,
uint16_t
crc
)
{
static
const
uint16_t
crcTable
[]
=
{
...
...
@@ -335,6 +493,56 @@ int ademcoDataSegmentToCongwinFe100(uint8_t* fe100, const AdemcoDataSegment* dat
return
0
;
}
const
uint8_t
*
ademcoXDataGetValidContentAddr
(
const
AdemcoXDataSegment
*
xdata
)
{
if
(
xdata
->
lenghFormat
==
TWO_HEX
&&
xdata
->
raw_len
>
4
)
{
return
xdata
->
raw
+
3
;
}
else
if
(
xdata
->
lenghFormat
==
FOUR_DECIMAL
&&
xdata
->
raw_len
>
6
)
{
return
xdata
->
raw
+
5
;
}
else
{
return
NULL
;
}
}
int
ademcoXDataGetValidContentLen
(
const
AdemcoXDataSegment
*
xdata
)
{
if
(
xdata
->
lenghFormat
==
TWO_HEX
&&
xdata
->
raw_len
>
4
)
{
return
xdata
->
raw_len
-
4
;
}
else
if
(
xdata
->
lenghFormat
==
FOUR_DECIMAL
&&
xdata
->
raw_len
>
6
)
{
return
xdata
->
raw_len
-
6
;
}
else
{
return
0
;
}
}
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
const
uint8_t
*
content
,
int
len
)
{
xdata
->
lenghFormat
=
xlf
;
if
(
xlf
==
TWO_HEX
&&
len
+
4
<
ADEMCO_PACKET_XDATA_MAX_LEN
)
{
uint8_t
*
p
=
xdata
->
raw
;
*
p
++
=
'['
;
*
p
++
=
(
len
&
0xFFFF
)
>>
8
;
*
p
++
=
(
len
&
0xFFFF
)
&
0xFF
;
memcpy
(
p
,
content
,
len
);
p
+=
len
;
*
p
++
=
']'
;
return
ADEMCO_OK
;
}
else
if
(
xlf
==
FOUR_DECIMAL
&&
len
+
6
<
ADEMCO_PACKET_XDATA_MAX_LEN
)
{
uint8_t
*
p
=
xdata
->
raw
;
*
p
++
=
'['
;
char
temp
[
5
];
sprintf
(
temp
,
"%04d"
,
len
&
0xFFFF
);
memcpy
(
p
,
temp
,
4
);
p
+=
4
;
memcpy
(
p
,
content
,
len
);
p
+=
len
;
*
p
++
=
']'
;
return
ADEMCO_OK
;
}
else
{
return
ADEMCO_ERR
;
}
}
int
isAdemcoId
(
const
char
*
standard
,
const
char
*
id
,
int
len
)
{
return
strncmp
(
standard
,
id
,
strlen
(
standard
))
==
0
;
...
...
@@ -438,7 +646,7 @@ int ademcoMakeNakPacket(uint8_t* buff, int len, uint16_t seq, const char* acct,
}
int
ademcoMakeHbPacket
(
uint8_t
*
dst_buff
,
int
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
XData
*
xdata
)
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
AdemcoXDataSegment
*
xdata
)
{
char
buff
[
ADEMCO_PACKET_MAX_LEN
];
char
*
p
=
buff
;
...
...
@@ -550,7 +758,7 @@ AdemcoParseResult ademcoPacketParse(const uint8_t* buff, int len, AdemcoPacket*
if
(
p
-
pseq
!=
4
||
(
*
p
!=
'R'
&&
*
p
!=
'L'
))
{
break
;
}
memcpy
(
temp
,
pseq
,
4
);
temp
[
4
]
=
'\0'
;
pkt
->
seq
=
strtoul
(
temp
,
NULL
,
10
);
//if (pkt->seq >= 10000) { break
; }
if
(
pkt
->
seq
>=
10000
)
{
pkt
->
seq
=
0
;
}
// *rrcvr
if
(
*
p
==
'R'
)
{
// rrcvr exists
...
...
@@ -590,7 +798,7 @@ AdemcoParseResult ademcoPacketParse(const uint8_t* buff, int len, AdemcoPacket*
// *xdata
if
(
*
p
==
'['
)
{
// xdata exists
const
uint8_t
*
pxdata
=
p
++
;
XDataLengthFormat
xlf
=
FOUR_DECIMAL
;
Ademco
XDataLengthFormat
xlf
=
FOUR_DECIMAL
;
int
valid_len
;
for
(
int
i
=
0
;
i
<
4
;
i
++
)
{
if
(
!
isxdigit
(
*
(
p
+
i
)))
{
...
...
@@ -644,6 +852,72 @@ AdemcoParseResult ademcoPacketParse(const uint8_t* buff, int len, AdemcoPacket*
return
RESULT_ERROR
;
}
int
hbGetAvailableZoneProperties
(
HbMachineType
type
,
HbZoneProperty
props
[
12
])
{
switch
(
type
)
{
case
HMT_WIFI
:
break
;
case
HMT_CAMERA
:
break
;
case
HMT_GPRS_IOT
:
case
HMT_GPRS
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_NETMOD
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_SUB_MACHINE
,
HZP_REMOTE_CONTROL
,
HZP_BUGLAR_HALF
,
HZP_SHIELD
,
HZP_DOOR_RING
,
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_LCD
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_SUB_MACHINE
,
HZP_REMOTE_CONTROL
,
HZP_BUGLAR_HALF
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_WIRED
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_TRUE_COLOR
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_3_SECTION
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_IOT
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_GPRS_PHONE
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_REMOTE_CONTROL
,
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
case
HMT_NB
:
{
HbZoneProperty
hzps
[]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_DOOR_RING
,
};
memcpy
(
props
,
hzps
,
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
));
return
sizeof
(
hzps
)
/
sizeof
(
HbZoneProperty
);
}
}
return
0
;
}
uint16_t
hbZoneMax
(
HbMachineType
type
)
{
...
...
@@ -688,7 +962,7 @@ int hbIsValidZoneStrict(HbMachineType type, uint16_t zone)
return
ADEMCO_ZONE_MIN
<=
zone
&&
zone
<=
hbZoneMax
(
type
);
}
int
hb
IsMachine
Selling
(
HbMachineType
type
)
int
hb
MachineIs
Selling
(
HbMachineType
type
)
{
return
type
==
HMT_NETMOD
||
type
==
HMT_GPRS
...
...
@@ -705,17 +979,17 @@ int hbIsMachineSelling(HbMachineType type)
int
hbMachineCanArm
(
HbMachineType
type
)
{
return
hb
IsMachine
Selling
(
type
)
&&
(
type
!=
HMT_NB
);
return
hb
MachineIs
Selling
(
type
)
&&
(
type
!=
HMT_NB
);
}
int
hbMachineCanDisarm
(
HbMachineType
type
)
{
return
hb
IsMachine
Selling
(
type
)
&&
(
type
!=
HMT_NB
);
return
hb
MachineIs
Selling
(
type
)
&&
(
type
!=
HMT_NB
);
}
int
hbMachineCanEnterSettings
(
HbMachineType
type
)
{
return
hb
IsMachine
Selling
(
type
);
return
hb
MachineIs
Selling
(
type
);
}
int
hbMachineCanHalfArm
(
HbMachineType
type
)
...
...
@@ -801,7 +1075,199 @@ int hbZonePropCanReportLost(HbZoneProperty zp)
}
}
void
hbInitMachineTimer
(
HbMachineTimer
*
timer
)
{
memset
(
timer
->
data
,
0xFF
,
sizeof
(
timer
));
}
int
hbIsValidTimer
(
HbTimer
*
timer
)
{
return
0
<=
timer
->
armAt
.
hour
&&
timer
->
armAt
.
hour
<
24
&&
0
<=
timer
->
armAt
.
minute
&&
timer
->
armAt
.
minute
<
60
&&
0
<=
timer
->
disarmAt
.
hour
&&
timer
->
disarmAt
.
hour
<
24
&&
0
<=
timer
->
disarmAt
.
minute
&&
timer
->
disarmAt
.
minute
<
60
;
}
AdemcoEvent
hbMachineStatusToAdemcoEvent
(
HbMachineStatus
status
)
{
switch
(
status
)
{
case
HMS_ARM
:
return
EVENT_ARM
;
case
HMS_DISARM
:
return
EVENT_DISARM
;
case
HMS_HALF_ARM
:
return
EVENT_HALFARM
;
// EVENT_HALFARM_1456
case
HMS_SETTING
:
return
EVENT_ENTER_SETTING_MODE
;
// EVENT_ENTER_SET_MODE
default:
return
EVENT_INVALID_EVENT
;
}
}
HbMachineStatus
hbMachineStatusFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_ARM
:
return
HMS_ARM
;
case
EVENT_DISARM
:
return
HMS_DISARM
;
case
EVENT_HALFARM
:
case
EVENT_HALFARM_1456
:
return
HMS_HALF_ARM
;
case
EVENT_ENTER_SETTING_MODE
:
case
EVENT_ENTER_SET_MODE
:
return
HMS_SETTING
;
default:
return
HMS_INVALID
;
}
}
AdemcoEvent
hbMachineTypeToAdemcoEvent
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_WIFI
:
return
EVENT_I_AM_WIFI_MACHINE
;
case
HMT_GPRS_IOT
:
return
EVENT_I_AM_GPRS_IOT
;
case
HMT_NETMOD
:
return
EVENT_I_AM_NET_MODULE
;
case
HMT_GPRS
:
return
EVENT_I_AM_GPRS
;
case
HMT_LCD
:
return
EVENT_I_AM_LCD_MACHINE
;
case
HMT_WIRED
:
return
EVENT_I_AM_WIRE_MACHINE
;
case
HMT_TRUE_COLOR
:
return
EVENT_I_AM_TRUE_COLOR
;
case
HMT_3_SECTION
:
return
EVENT_I_AM_3_SECTION_MACHINE
;
case
HMT_IOT
:
return
EVENT_I_AM_IOT_MACHINE
;
case
HMT_GPRS_PHONE
:
return
EVENT_I_AM_GPRS_PHONE
;
case
HMT_NB
:
return
EVENT_I_AM_NB_MACHINE
;
default:
return
EVENT_INVALID_EVENT
;
}
}
HbMachineType
hbMachineTypeFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
)
{
switch
(
ademcoEvent
)
{
case
EVENT_I_AM_NET_MODULE
:
return
HMT_NETMOD
;
case
EVENT_I_AM_GPRS
:
return
HMT_GPRS
;
case
EVENT_I_AM_LCD_MACHINE
:
return
HMT_LCD
;
case
EVENT_I_AM_WIRE_MACHINE
:
return
HMT_WIRED
;
case
EVENT_I_AM_WIFI_MACHINE
:
return
HMT_WIFI
;
case
EVENT_I_AM_3_SECTION_MACHINE
:
return
HMT_3_SECTION
;
case
EVENT_I_AM_IOT_MACHINE
:
return
HMT_IOT
;
case
EVENT_I_AM_TRUE_COLOR
:
return
HMT_TRUE_COLOR
;
case
EVENT_I_AM_GPRS_IOT
:
return
HMT_GPRS_IOT
;
case
EVENT_I_AM_GPRS_PHONE
:
return
HMT_GPRS_PHONE
;
case
EVENT_I_AM_NB_MACHINE
:
return
HMT_NB
;
default:
return
HMT_INVALID
;
}
}
AdemcoEvent
hbZonePropertyToAdemcoEvent
(
HbZoneProperty
zp
)
{
switch
(
zp
)
{
case
HZP_BUGLAR
:
case
HZP_BUGLAR_HALF
:
return
EVENT_BURGLAR
;
case
HZP_EMERGENCY
:
return
EVENT_EMERGENCY
;
case
HZP_FIRE
:
return
EVENT_FIRE
;
case
HZP_DURESS
:
return
EVENT_DURESS
;
case
HZP_GAS
:
return
EVENT_GAS
;
case
HZP_WATER
:
return
EVENT_WATER
;
case
HZP_DOOR_RING
:
return
EVENT_DOORRINGING
;
default:
return
EVENT_INVALID_EVENT
;
}
}
const
char
*
hbMachineTypeToString
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_WIFI
:
return
"0 WiFi"
;
case
HMT_CAMERA
:
return
"1 Camera"
;
case
HMT_GPRS_IOT
:
return
"2 Gprs_IoT"
;
case
HMT_NETMOD
:
return
"3 NetMod"
;
case
HMT_GPRS
:
return
"4 GPRS"
;
case
HMT_LCD
:
return
"5 LCD"
;
case
HMT_WIRED
:
return
"6 Wired"
;
case
HMT_TRUE_COLOR
:
return
"7 TrueColor"
;
case
HMT_3_SECTION
:
return
"8 ThreeSection"
;
case
HMT_IOT
:
return
"9 IoT"
;
case
HMT_GPRS_PHONE
:
return
"10 Gprs_Phone"
;
case
HMT_NB
:
return
"11 Nb"
;
default:
return
"Unknown HbMachineType"
;
}
}
const
wchar_t
*
hbMachineTypeToStringChinese
(
HbMachineType
type
)
{
switch
(
type
)
{
case
HMT_WIFI
:
return
L"0 WiFi主机"
;
case
HMT_CAMERA
:
return
L"1 摄像头主机"
;
case
HMT_GPRS_IOT
:
return
L"2 简化的物联卡主机"
;
case
HMT_NETMOD
:
return
L"3 网络模块+工程主机"
;
case
HMT_GPRS
:
return
L"4 GPRS主机"
;
case
HMT_LCD
:
return
L"5 液晶主机"
;
case
HMT_WIRED
:
return
L"6 网线主机"
;
case
HMT_TRUE_COLOR
:
return
L"7 真彩主机"
;
case
HMT_3_SECTION
:
return
L"8 三区段主机"
;
case
HMT_IOT
:
return
L"9 物联卡主机"
;
case
HMT_GPRS_PHONE
:
return
L"10 GPRS主机能打电话"
;
case
HMT_NB
:
return
L"11 NB报警接收主机"
;
default:
return
L"未知主机"
;
}
}
const
char
*
hbZonePropertyToString
(
HbZoneProperty
zp
)
{
switch
(
zp
)
{
case
HZP_BUGLAR
:
return
"HZP_BUGLAR"
;
case
HZP_EMERGENCY
:
return
"HZP_EMERGENCY"
;
case
HZP_FIRE
:
return
"HZP_FIRE"
;
case
HZP_DURESS
:
return
"HZP_DURESS"
;
case
HZP_GAS
:
return
"HZP_GAS"
;
case
HZP_WATER
:
return
"HZP_WATER"
;
case
HZP_SUB_MACHINE
:
return
"HZP_SUB_MACHINE"
;
case
HZP_REMOTE_CONTROL
:
return
"HZP_REMOTE_CONTROL"
;
case
HZP_BUGLAR_HALF
:
return
"HZP_BUGLAR_HALF"
;
case
HZP_SHIELD
:
return
"HZP_SHIELD"
;
case
HZP_DOOR_RING
:
return
"HZP_DOOR_RING"
;
case
HZP_RESERVED_0B
:
return
"Reserved0B"
;
case
HZP_RESERVED_0C
:
return
"Reserved0C"
;
case
HZP_RESERVED_0D
:
return
"Reserved0D"
;
case
HZP_RESERVED_0E
:
return
"Reserved0E"
;
case
HZP_BYPASS
:
return
"HZP_BYPASS"
;
default:
return
"InvalidZoneProperty"
;
}
}
const
wchar_t
*
hbZonePropertyToStringChinese
(
HbZoneProperty
zp
)
{
switch
(
zp
)
{
case
HZP_BUGLAR
:
return
L"匪警全局"
;
case
HZP_EMERGENCY
:
return
L"匪警紧急"
;
case
HZP_FIRE
:
return
L"火警防区"
;
case
HZP_DURESS
:
return
L"胁迫防区"
;
case
HZP_GAS
:
return
L"燃气防区"
;
case
HZP_WATER
:
return
L"淹水防区"
;
case
HZP_SUB_MACHINE
:
return
L"分机"
;
case
HZP_REMOTE_CONTROL
:
return
L"遥控器"
;
case
HZP_BUGLAR_HALF
:
return
L"匪警半局"
;
case
HZP_SHIELD
:
return
L"屏蔽防区"
;
case
HZP_DOOR_RING
:
return
L"门铃防区"
;
case
HZP_RESERVED_0B
:
return
L"保留"
;
case
HZP_RESERVED_0C
:
return
L"保留"
;
case
HZP_RESERVED_0D
:
return
L"保留"
;
case
HZP_RESERVED_0E
:
return
L"保留"
;
case
HZP_BYPASS
:
return
L"旁路防区"
;
default:
return
L"无效属性"
;
}
}
const
char
*
hbGetZoneFormatString
(
HbMachineType
type
)
{
uint16_t
zone
=
hbZoneMax
(
type
);
if
(
10
<
zone
&&
zone
<
100
)
{
return
"%02d"
;
}
else
if
(
zone
<
1000
)
{
return
"%03d"
;
}
else
{
return
"%d"
;
}
}
const
wchar_t
*
hbGetZoneFormatStringW
(
HbMachineType
type
)
{
uint16_t
zone
=
hbZoneMax
(
type
);
if
(
10
<
zone
&&
zone
<
100
)
{
return
L"%02d"
;
}
else
if
(
zone
<
1000
)
{
return
L"%03d"
;
}
else
{
return
L"%d"
;
}
}
int
hbHiLoArrayToDecStr
(
char
*
str
,
const
uint8_t
*
arr
,
int
len
)
{
...
...
c/ademco.h
View file @
d0df2ed4
...
...
@@ -5,14 +5,13 @@
*/
#ifndef __ADEMCO_H__
#define __ADEMCO_H__
#pragma once
#ifdef ADEMCO_EXPORTS
# if defined __GNUC__
...
...
@@ -84,15 +83,6 @@ static inline int ademcoIsValidZoneStrict(AdemcoZone zone) {
#define ADEMCO_GG_MAX 99
#define ADEMCO_GG_SENTINEL 100
//! 三防区主机状态GG范围 1~3
#define ADEMCO_3SECTION_MACHINE_GG_MIN 1
#define ADEMCO_3SECTION_MACHINE_GG_MAX 3
//! 是否合法的三防区主机状态GG
static
inline
int
ademcoIsValid3SectionMachineGG
(
AdemcoGG
gg
)
{
return
ADEMCO_3SECTION_MACHINE_GG_MIN
<=
gg
&&
gg
<=
ADEMCO_3SECTION_MACHINE_GG_MAX
;
}
// Ademco events
typedef
enum
AdemcoEvent
{
EVENT_INVALID_EVENT
=
0
,
...
...
@@ -195,6 +185,84 @@ typedef enum AdemcoEvent {
}
AdemcoEvent
;
static
const
AdemcoEvent
AdemcoEvents
[]
=
{
EVENT_ARM
,
EVENT_DISARM
,
EVENT_HALFARM
,
EVENT_EMERGENCY
,
EVENT_BURGLAR
,
EVENT_DOORRINGING
,
EVENT_FIRE
,
EVENT_DURESS
,
EVENT_GAS
,
EVENT_WATER
,
EVENT_TAMPER
,
EVENT_ZONE_TAMPER
,
EVENT_BYPASS
,
EVENT_BYPASS_RESUME
,
EVENT_AC_BROKE
,
EVENT_AC_RECOVER
,
EVENT_LOWBATTERY
,
EVENT_BATTERY_RECOVER
,
EVENT_BADBATTERY
,
EVENT_BADBATTERY_RECOVER
,
EVENT_SOLARDISTURB
,
EVENT_SOLARDISTURB_RECOVER
,
EVENT_DISCONNECT
,
EVENT_RECONNECT
,
EVENT_LOST
,
EVENT_LOST_RECOVER
,
EVENT_3100
,
EVENT_BATTERY_EXCEPTION
,
EVENT_BATTERY_EXCEPTION_RECOVER
,
EVENT_OTHER_EXCEPTION
,
EVENT_OTHER_EXCEPTION_RECOVER
,
EVENT_SERIAL485DIS
,
EVENT_SERIAL485CONN
,
EVENT_CONN_HANGUP
,
EVENT_CONN_RESUME
,
EVENT_DISARM_PWD_ERR
,
EVENT_SUB_MACHINE_SENSOR_EXCEPTION
,
EVENT_SUB_MACHINE_SENSOR_RESUME
,
EVENT_SUB_MACHINE_POWER_EXCEPTION
,
EVENT_SUB_MACHINE_POWER_RESUME
,
EVENT_COM_PASSTHROUGH
,
EVENT_ENTER_SET_MODE
,
EVENT_EXIT_SET_MODE
,
EVENT_QUERY_SUB_MACHINE
,
EVENT_WRITE_TO_MACHINE
,
EVENT_I_AM_NET_MODULE
,
EVENT_I_AM_GPRS
,
EVENT_I_AM_LCD_MACHINE
,
EVENT_I_AM_WIRE_MACHINE
,
EVENT_I_AM_WIFI_MACHINE
,
EVENT_I_AM_3_SECTION_MACHINE
,
EVENT_I_AM_IOT_MACHINE
,
EVENT_I_AM_TRUE_COLOR
,
EVENT_I_AM_GPRS_IOT
,
EVENT_I_AM_GPRS_PHONE
,
EVENT_I_AM_NB_MACHINE
,
EVENT_SIM_IS_IOT_CARD
,
EVENT_SIM_IS_IOT_PLATFORM_CARD
,
EVENT_SIM_IS_NOT_IOT_CARD
,
EVENT_PHONE_USER_SOS
,
EVENT_PHONE_USER_CANCLE_ALARM
,
EVENT_ENTER_SETTING_MODE
,
EVENT_EXIT_SETTING_MODE
,
EVENT_RESTORE_FACTORY_SETTINGS
,
EVENT_WHAT_IS_YOUR_TYPE
,
EVENT_SIGNAL_STRENGTH_CHANGED
,
};
// 安定宝事件级别
typedef
enum
AdemcoEventLevel
{
...
...
@@ -222,16 +290,16 @@ typedef struct AdemcoDataSegment {
AdemcoZone
zone
;
}
AdemcoDataSegment
;
typedef
enum
XDataLengthFormat
{
typedef
enum
Ademco
XDataLengthFormat
{
TWO_HEX
,
// 两个hex字节表示长度
FOUR_DECIMAL
,
// 四个decimal char 表示长度
}
XDataLengthFormat
;
}
Ademco
XDataLengthFormat
;
typedef
struct
XData
{
XDataLengthFormat
lenghFormat
;
typedef
struct
AdemcoXDataSegment
{
Ademco
XDataLengthFormat
lenghFormat
;
uint8_t
raw
[
ADEMCO_PACKET_XDATA_MAX_LEN
];
int
raw_len
;
}
XData
;
}
AdemcoXDataSegment
;
#define ADEMCO_PACKET_ID_NULL "\"NULL\""
#define ADEMCO_PACKET_ID_ACK "\"ACK\""
...
...
@@ -265,10 +333,10 @@ typedef struct AdemcoPacket {
uint16_t
crc
;
int
len
;
AdemcoPacketId
id
;
in
t
seq
;
uint16_
t
seq
;
char
acct
[
ADEMCO_PACKET_ACCT_MAX_LEN
+
1
];
AdemcoDataSegment
data
;
XData
xdata
;
AdemcoXDataSegment
xdata
;
time_t
timestamp
;
}
AdemcoPacket
;
...
...
@@ -285,12 +353,18 @@ ADEMCO_EXPORT_SYMBOL int ademcoIsEventNeedControlSource(AdemcoEvent ademcoEvent)
ADEMCO_EXPORT_SYMBOL
AdemcoEventLevel
ademcoGetEventLevel
(
AdemcoEvent
ademcoEvent
);
//! 获取异常恢复事件所对应的异常事件
ADEMCO_EXPORT_SYMBOL
AdemcoEvent
ademcoGetExceptionEventByResumeEvent
(
AdemcoEvent
resumeEvent
);
ADEMCO_EXPORT_SYMBOL
const
char
*
ademcoEventToString
(
AdemcoEvent
ademcoEvent
);
ADEMCO_EXPORT_SYMBOL
const
wchar_t
*
ademcoEventToStringChinese
(
AdemcoEvent
ademcoEvent
);
ADEMCO_EXPORT_SYMBOL
int
ademcoAppendDataSegment
(
uint8_t
*
packet
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
);
ADEMCO_EXPORT_SYMBOL
int
ademcoAppendDataSegment2
(
uint8_t
*
packet
,
const
AdemcoDataSegment
*
dataSegment
);
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoParseDataSegment
(
const
uint8_t
*
packet
,
int
packet_len
,
AdemcoDataSegment
*
dataSegment
);
// return 0 for empty packet, CONGWIN_FE100_PACKET_LEN for non-empty packet
ADEMCO_EXPORT_SYMBOL
int
ademcoDataSegmentToCongwinFe100
(
uint8_t
*
fe100
,
const
AdemcoDataSegment
*
dataSegment
);
ADEMCO_EXPORT_SYMBOL
const
uint8_t
*
ademcoXDataGetValidContentAddr
(
const
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
int
ademcoXDataGetValidContentLen
(
const
AdemcoXDataSegment
*
xdata
);
// return ADEMCO_OK for success, return ADEMCO_ERR for len is too long
ADEMCO_EXPORT_SYMBOL
int
ademcoMakeXData
(
AdemcoXDataSegment
*
xdata
,
AdemcoXDataLengthFormat
xlf
,
const
uint8_t
*
content
,
int
len
);
ADEMCO_EXPORT_SYMBOL
int
isAdemcoId
(
const
char
*
standard
,
const
char
*
id
,
int
len
);
ADEMCO_EXPORT_SYMBOL
AdemcoPacketId
getAdemcoId
(
const
char
*
id
,
int
len
);
...
...
@@ -306,7 +380,7 @@ ADEMCO_EXPORT_SYMBOL int ademcoMakeNullPacket(uint8_t* buff, int len, uint16_t s
ADEMCO_EXPORT_SYMBOL
int
ademcoMakeAckPacket
(
uint8_t
*
buff
,
int
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
int
ademcoMakeNakPacket
(
uint8_t
*
buff
,
int
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
);
ADEMCO_EXPORT_SYMBOL
int
ademcoMakeHbPacket
(
uint8_t
*
buff
,
int
len
,
uint16_t
seq
,
const
char
*
acct
,
AdemcoId
ademcoId
,
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
XData
*
xdata
);
AdemcoEvent
ademcoEvent
,
AdemcoGG
gg
,
AdemcoZone
zone
,
AdemcoXDataSegment
*
xdata
);
ADEMCO_EXPORT_SYMBOL
AdemcoParseResult
ademcoPacketParse
(
const
uint8_t
*
buff
,
int
len
,
AdemcoPacket
*
pkt
,
int
*
cb_commited
);
...
...
@@ -314,6 +388,17 @@ ADEMCO_EXPORT_SYMBOL uint16_t ademcoCRC8(char c, uint16_t crc);
ADEMCO_EXPORT_SYMBOL
uint16_t
ademcoCRC16
(
const
uint8_t
*
buff
,
int
len
,
uint16_t
crc
);
/* Hengbo */
//! 三防区主机状态GG范围 1~3
#define HB_3SECTION_MACHINE_GG_MIN 1
#define HB_3SECTION_MACHINE_GG_MAX 3
//! 是否合法的三防区主机状态GG
static
inline
int
hbIsValid3SectionMachineGG
(
AdemcoGG
gg
)
{
return
HB_3SECTION_MACHINE_GG_MIN
<=
gg
&&
gg
<=
HB_3SECTION_MACHINE_GG_MAX
;
}
typedef
enum
HbMachineStatus
{
HMS_ARM
,
HMS_HALF_ARM
,
...
...
@@ -392,6 +477,30 @@ typedef enum HbZoneProperty {
HZP_INVALID
=
-
1
,
}
HbZoneProperty
;
typedef
struct
HbMachineTimePoint
{
uint8_t
hour
;
uint8_t
minute
;
}
HbMachineTimePoint
;
typedef
struct
HbTimer
{
HbMachineTimePoint
armAt
;
HbMachineTimePoint
disarmAt
;
}
HbTimer
;
typedef
union
HbMachineTimer
{
HbTimer
timer
[
2
];
// 2 set of timer
uint8_t
data
[
8
];
}
HbMachineTimer
;
static
const
HbZoneProperty
hbZoneProperties
[
12
]
=
{
HZP_BUGLAR
,
HZP_EMERGENCY
,
HZP_FIRE
,
HZP_DURESS
,
HZP_GAS
,
HZP_WATER
,
HZP_SUB_MACHINE
,
HZP_REMOTE_CONTROL
,
HZP_BUGLAR_HALF
,
HZP_SHIELD
,
HZP_DOOR_RING
,
HZP_BYPASS
};
// return available count
ADEMCO_EXPORT_SYMBOL
int
hbGetAvailableZoneProperties
(
HbMachineType
type
,
HbZoneProperty
props
[
12
]);
//! 最大防区号根据型号不同而不同
ADEMCO_EXPORT_SYMBOL
uint16_t
hbZoneMax
(
HbMachineType
type
);
//! 防区号是否合法(可以包含0防区)
...
...
@@ -425,14 +534,19 @@ ADEMCO_EXPORT_SYMBOL int hbMachineCanLinkSubMachine(HbMachineType type);
//! 根据防区属性判断是否支持失联报告
//! 失联报告是主机侧实现的跟防区属性没关系,但是人为限制了只有以下属性的才可以设置
ADEMCO_EXPORT_SYMBOL
int
hbZonePropCanReportLost
(
HbZoneProperty
zp
);
ADEMCO_EXPORT_SYMBOL
void
hbInitMachineTimer
(
HbMachineTimer
*
timer
);
ADEMCO_EXPORT_SYMBOL
int
hbIsValidTimer
(
HbTimer
*
timer
);
ADEMCO_EXPORT_SYMBOL
AdemcoEvent
hbMachineStatusToAdemcoEvent
(
HbMachineStatus
status
);
ADEMCO_EXPORT_SYMBOL
HbMachineStatus
hbMachineStatusFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
);
ADEMCO_EXPORT_SYMBOL
AdemcoEvent
hbMachineTypeToAdemcoEvent
(
HbMachineType
type
);
ADEMCO_EXPORT_SYMBOL
HbMachineType
hbMachineTypeFromAdemcoEvent
(
AdemcoEvent
ademcoEvent
);
ADEMCO_EXPORT_SYMBOL
AdemcoEvent
hbZonePropertyToAdemcoEvent
(
HbZoneProperty
zp
);
ADEMCO_EXPORT_SYMBOL
const
char
*
hbMachineTypeToString
(
HbMachineType
type
);
ADEMCO_EXPORT_SYMBOL
const
wchar_t
*
hbMachineTypeToStringChinese
(
HbMachineType
type
);
ADEMCO_EXPORT_SYMBOL
const
char
*
hbZonePropertyToString
(
HbZoneProperty
zp
);
ADEMCO_EXPORT_SYMBOL
const
wchar_t
*
hbZonePropertyToStringChinese
(
HbZoneProperty
zp
);
ADEMCO_EXPORT_SYMBOL
const
char
*
hbGetZoneFormatString
(
HbMachineType
type
);
ADEMCO_EXPORT_SYMBOL
const
wchar_t
*
hbGetZoneFormatStringW
(
HbMachineType
type
);
...
...
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