Commit 3743b11f authored by captainwong's avatar captainwong

hbMakeCom*

parent 07865931
......@@ -1384,7 +1384,7 @@ HbComRequestType hbComParseRequest(const uint8_t* data, int len)
return HbComReq_Invalid;
}
HbComResponseType hbParseComResponse(const uint8_t* data, int len)
HbComResponseType hbComParseResponse(const uint8_t* data, int len)
{
do {
if (len < 7) { break; } // 所有的 response ,长度最小为 7
......
......@@ -39,12 +39,12 @@ extern "C" {
#define ADEMCO_OK 0
#define ADEMCO_ERR -1
#define ADEMCO_PACKET_ACCT_MAX_LEN 64 // #acct之acct最大长度
#define ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN 2 // 空data段[]长度
#define ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN 21 // 非空data段长度,acct长度6
#define ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX 64 // 非空data段长度,acct长度未知
#define ADEMCO_PACKET_ACCT_MAX_LEN 64 // #acct之acct最大长度
#define ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN 2 // 空data段[]长度
#define ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN 21 // 非空data段长度,acct长度6
#define ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX 64 // 非空data段长度,acct长度未知
#define ADEMCO_PACKET_MAX_LEN 1024
#define CONGWIN_FE100_PACKET_LEN 31 // 丛文FE100协议长度
#define CONGWIN_FE100_PACKET_LEN 31 // 丛文FE100协议长度
#define ADEMCO_PACKET_TIMESTAMP_LEN 20
#define ADEMCO_PACKET_XDATA_MAX_LEN 256
......@@ -53,28 +53,28 @@ typedef uint32_t AdemcoId;
typedef uint8_t AdemcoGG;
typedef uint32_t AdemcoZone;
//! 安定宝ID范围
//! 安定宝ID范围
#define ADEMCO_ID_MIN 1
#define ADEMCO_ID_MAX 999999 // 兼容性考虑,最大安定宝 ID 为 0x0F423F
#define ADEMCO_ID_MAX 999999 // 兼容性考虑,最大安定宝 ID 为 0x0F423F
#define ADEMCO_ID_SENTINEL (ADEMCO_ID_MAX + 1)
static inline int ademcoIsValidAdemcoId(AdemcoId ademcoId) {
return ADEMCO_ID_MIN <= ademcoId && ademcoId <= ADEMCO_ID_MAX;
}
//! 防区号为0时表示主机自身
//! 防区号为0时表示主机自身
#define ADEMCO_ZONE_FOR_MACHINE_SELF 0
//! 主机防区号范围
//! 主机防区号范围
#define ADEMCO_ZONE_MIN 1
//! 对任何主机类型,最大的防区号
//! 对任何主机类型,最大的防区号
#define ADEMCO_ZONE_MAX 999
#define ADEMCO_ZONE_SENTINEL (ADEMCO_ZONE_MAX + 1)
//! 对任何主机类型,防区号是否合法(可以包含0防区)
//! 对任何主机类型,防区号是否合法(可以包含0防区)
static inline int ademcoIsValidZone(AdemcoZone zone) {
return ADEMCO_ZONE_FOR_MACHINE_SELF <= zone && zone <= ADEMCO_ZONE_MAX;
}
//! 对任何主机类型,防区号是否合法(不可以包含0防区)
//! 对任何主机类型,防区号是否合法(不可以包含0防区)
static inline int ademcoIsValidZoneStrict(AdemcoZone zone) {
return ADEMCO_ZONE_MIN <= zone && zone <= ADEMCO_ZONE_MAX;
}
......@@ -87,99 +87,99 @@ static inline int ademcoIsValidZoneStrict(AdemcoZone zone) {
typedef enum AdemcoEvent {
EVENT_INVALID_EVENT = 0,
// -------------------标准安定宝协议事件--------------------------------
// 主机或分机状态报告
EVENT_ARM = 3400, // 布防
EVENT_DISARM = 1400, // 撤防
EVENT_HALFARM_1456 = 1456, // 半布防
EVENT_HALFARM = 3456, // 半布防
EVENT_EMERGENCY = 1120, // 紧急报警
// 防区报警
EVENT_BURGLAR = 1130, // 盗警
EVENT_DOORRINGING = 1134, // 门铃
EVENT_FIRE = 1110, // 火警
EVENT_DURESS = 1121, // 胁迫
EVENT_GAS = 1151, // 煤气
EVENT_WATER = 1113, // 水警
EVENT_TAMPER = 1137, // 主机防拆
EVENT_ZONE_TAMPER = 1383, // 防区防拆
EVENT_BYPASS = 1570, // 旁路
EVENT_BYPASS_RESUME = 3570, // 解除旁路
// 防区异常
EVENT_AC_BROKE = 1301, // 主机AC掉电
EVENT_AC_RECOVER = 3301, // 主机AC复电
EVENT_LOWBATTERY = 1302, // 低电
EVENT_BATTERY_RECOVER = 3302, // 复电
EVENT_BADBATTERY = 1311, // 坏电
EVENT_BADBATTERY_RECOVER = 3311, // 坏电恢复
EVENT_SOLARDISTURB = 1387, // 光扰
EVENT_SOLARDISTURB_RECOVER = 3387, // 光扰恢复
EVENT_DISCONNECT = 1381, // 失效
EVENT_RECONNECT = 3381, // 恢复
EVENT_BATTERY_EXCEPTION = 1384, // 电源故障
EVENT_BATTERY_EXCEPTION_RECOVER = 3384, // 电源故障恢复
EVENT_OTHER_EXCEPTION = 1380, // 其他故障
EVENT_OTHER_EXCEPTION_RECOVER = 3380, // 其他故障恢复
EVENT_LOST = 1393, // 失联
EVENT_LOST_RECOVER = 3393, // 失联恢复
// 标准事件,但不做处理
EVENT_3100 = 3100, // 液晶主机清除异常指示
// ------------------私有事件-----------------------------------------
EVENT_SERIAL485DIS = 1485, // 网络模块与主机485串口连接断开
EVENT_SERIAL485CONN = 3485, // 网络模块与主机485串口连接恢复
EVENT_CONN_HANGUP = 1700, // 链路挂起
EVENT_CONN_RESUME = 3700, // 链路恢复
EVENT_DISARM_PWD_ERR = 1701, // 撤防密码错误
EVENT_SUB_MACHINE_SENSOR_EXCEPTION = 1702, // 分机探头异常
EVENT_SUB_MACHINE_SENSOR_RESUME = 3702, // 分机探头恢复
EVENT_SUB_MACHINE_POWER_EXCEPTION = 1703, // 分机电源异常
EVENT_SUB_MACHINE_POWER_RESUME = 3703, // 分机电源恢复
EVENT_COM_PASSTHROUGH = 1704, // 串口透传
EVENT_ENTER_SET_MODE = 2704, // 进入设置状态
EVENT_EXIT_SET_MODE = 3704, // 接警中心发送,为停止索要;报警主机发送,为拒绝索要
EVENT_QUERY_SUB_MACHINE = 1705, // 查询分机信息
EVENT_WRITE_TO_MACHINE = 1706, // 写入主机信息
EVENT_I_AM_NET_MODULE = 1707, // 主机类型--网络模块
EVENT_I_AM_GPRS = 1717, // 主机类型--GPRS主机
EVENT_I_AM_LCD_MACHINE = 1727, // 主机类型--液晶主机
EVENT_I_AM_WIRE_MACHINE = 1737, // 主机类型--网线主机
EVENT_I_AM_WIFI_MACHINE = 1747, // 主机类型--WiFi主机
EVENT_I_AM_3_SECTION_MACHINE = 1757, // 主机类型--三区段主机
EVENT_I_AM_IOT_MACHINE = 1767, // 主机类型--物联卡主机
EVENT_I_AM_TRUE_COLOR = 1777, // 主机类型--真彩主机
EVENT_I_AM_GPRS_IOT = 1787, // 主机类型--物联卡主机
EVENT_I_AM_GPRS_PHONE = 1797, // 主机类型--GRPS主机带电话功能
EVENT_I_AM_NB_MACHINE = 1807, // 主机类型--NB报警接收主机
EVENT_PHONE_USER_SOS = 1709, // 手机用户SOS
EVENT_PHONE_USER_CANCLE_ALARM = 1711, // 手机用户消警
EVENT_ENTER_SETTING_MODE = 1712, // 主机进入设置状态
EVENT_EXIT_SETTING_MODE = 3712, // 主机退出设置状态
EVENT_RESTORE_FACTORY_SETTINGS_710 = 1710, // 主机恢复出厂设置
EVENT_RESTORE_FACTORY_SETTINGS = 1713, // 主机恢复出厂设置
// 此处电话设置仅为主机自身支持的电话设置,与阿里语音无关
EVENT_SIM_IS_IOT_CARD = 1756, // 主机SIM卡为物联卡,禁用主机侧电话设置
EVENT_SIM_IS_IOT_PLATFORM_CARD = 2756, // 主机SIM卡为平台物联卡,禁用主机侧电话设置
EVENT_SIM_IS_NOT_IOT_CARD = 3756, // 主机SIM卡为非物联卡,启用主机侧电话设置
EVENT_WHAT_IS_YOUR_TYPE = 1798, // 索要主机类型
EVENT_SIGNAL_STRENGTH_CHANGED = 1799, // 主机信号强度变化
// 2021年1月24日17:06:55修改,对标丛文3B0 3B2
EVENT_OFFLINE = 1944, // 主机断线
EVENT_ONLINE = 1946, // 主机上线
// -------------------标准安定宝协议事件--------------------------------
// 主机或分机状态报告
EVENT_ARM = 3400, // 布防
EVENT_DISARM = 1400, // 撤防
EVENT_HALFARM_1456 = 1456, // 半布防
EVENT_HALFARM = 3456, // 半布防
EVENT_EMERGENCY = 1120, // 紧急报警
// 防区报警
EVENT_BURGLAR = 1130, // 盗警
EVENT_DOORRINGING = 1134, // 门铃
EVENT_FIRE = 1110, // 火警
EVENT_DURESS = 1121, // 胁迫
EVENT_GAS = 1151, // 煤气
EVENT_WATER = 1113, // 水警
EVENT_TAMPER = 1137, // 主机防拆
EVENT_ZONE_TAMPER = 1383, // 防区防拆
EVENT_BYPASS = 1570, // 旁路
EVENT_BYPASS_RESUME = 3570, // 解除旁路
// 防区异常
EVENT_AC_BROKE = 1301, // 主机AC掉电
EVENT_AC_RECOVER = 3301, // 主机AC复电
EVENT_LOWBATTERY = 1302, // 低电
EVENT_BATTERY_RECOVER = 3302, // 复电
EVENT_BADBATTERY = 1311, // 坏电
EVENT_BADBATTERY_RECOVER = 3311, // 坏电恢复
EVENT_SOLARDISTURB = 1387, // 光扰
EVENT_SOLARDISTURB_RECOVER = 3387, // 光扰恢复
EVENT_DISCONNECT = 1381, // 失效
EVENT_RECONNECT = 3381, // 恢复
EVENT_BATTERY_EXCEPTION = 1384, // 电源故障
EVENT_BATTERY_EXCEPTION_RECOVER = 3384, // 电源故障恢复
EVENT_OTHER_EXCEPTION = 1380, // 其他故障
EVENT_OTHER_EXCEPTION_RECOVER = 3380, // 其他故障恢复
EVENT_LOST = 1393, // 失联
EVENT_LOST_RECOVER = 3393, // 失联恢复
// 标准事件,但不做处理
EVENT_3100 = 3100, // 液晶主机清除异常指示
// ------------------私有事件-----------------------------------------
EVENT_SERIAL485DIS = 1485, // 网络模块与主机485串口连接断开
EVENT_SERIAL485CONN = 3485, // 网络模块与主机485串口连接恢复
EVENT_CONN_HANGUP = 1700, // 链路挂起
EVENT_CONN_RESUME = 3700, // 链路恢复
EVENT_DISARM_PWD_ERR = 1701, // 撤防密码错误
EVENT_SUB_MACHINE_SENSOR_EXCEPTION = 1702, // 分机探头异常
EVENT_SUB_MACHINE_SENSOR_RESUME = 3702, // 分机探头恢复
EVENT_SUB_MACHINE_POWER_EXCEPTION = 1703, // 分机电源异常
EVENT_SUB_MACHINE_POWER_RESUME = 3703, // 分机电源恢复
EVENT_COM_PASSTHROUGH = 1704, // 串口透传
EVENT_ENTER_SET_MODE = 2704, // 进入设置状态
EVENT_EXIT_SET_MODE = 3704, // 接警中心发送,为停止索要;报警主机发送,为拒绝索要
EVENT_QUERY_SUB_MACHINE = 1705, // 查询分机信息
EVENT_WRITE_TO_MACHINE = 1706, // 写入主机信息
EVENT_I_AM_NET_MODULE = 1707, // 主机类型--网络模块
EVENT_I_AM_GPRS = 1717, // 主机类型--GPRS主机
EVENT_I_AM_LCD_MACHINE = 1727, // 主机类型--液晶主机
EVENT_I_AM_WIRE_MACHINE = 1737, // 主机类型--网线主机
EVENT_I_AM_WIFI_MACHINE = 1747, // 主机类型--WiFi主机
EVENT_I_AM_3_SECTION_MACHINE = 1757, // 主机类型--三区段主机
EVENT_I_AM_IOT_MACHINE = 1767, // 主机类型--物联卡主机
EVENT_I_AM_TRUE_COLOR = 1777, // 主机类型--真彩主机
EVENT_I_AM_GPRS_IOT = 1787, // 主机类型--物联卡主机
EVENT_I_AM_GPRS_PHONE = 1797, // 主机类型--GRPS主机带电话功能
EVENT_I_AM_NB_MACHINE = 1807, // 主机类型--NB报警接收主机
EVENT_PHONE_USER_SOS = 1709, // 手机用户SOS
EVENT_PHONE_USER_CANCLE_ALARM = 1711, // 手机用户消警
EVENT_ENTER_SETTING_MODE = 1712, // 主机进入设置状态
EVENT_EXIT_SETTING_MODE = 3712, // 主机退出设置状态
EVENT_RESTORE_FACTORY_SETTINGS_710 = 1710, // 主机恢复出厂设置
EVENT_RESTORE_FACTORY_SETTINGS = 1713, // 主机恢复出厂设置
// 此处电话设置仅为主机自身支持的电话设置,与阿里语音无关
EVENT_SIM_IS_IOT_CARD = 1756, // 主机SIM卡为物联卡,禁用主机侧电话设置
EVENT_SIM_IS_IOT_PLATFORM_CARD = 2756, // 主机SIM卡为平台物联卡,禁用主机侧电话设置
EVENT_SIM_IS_NOT_IOT_CARD = 3756, // 主机SIM卡为非物联卡,启用主机侧电话设置
EVENT_WHAT_IS_YOUR_TYPE = 1798, // 索要主机类型
EVENT_SIGNAL_STRENGTH_CHANGED = 1799, // 主机信号强度变化
// 2021年1月24日17:06:55修改,对标丛文3B0 3B2
EVENT_OFFLINE = 1944, // 主机断线
EVENT_ONLINE = 1946, // 主机上线
#define ADEMCO_EVENT_SENTINEL 10000
......@@ -263,24 +263,24 @@ static const AdemcoEvent AdemcoEvents[] = {
EVENT_SIGNAL_STRENGTH_CHANGED,
};
// 安定宝事件级别
// 安定宝事件级别
typedef enum AdemcoEventLevel
{
EVENT_LEVEL_NULL,
EVENT_LEVEL_STATUS, // 主机状态
EVENT_LEVEL_EXCEPTION_RESUME, // 黄色报警
EVENT_LEVEL_EXCEPTION, // 橙色报警
EVENT_LEVEL_ALARM, // 红色报警
EVENT_LEVEL_STATUS, // 主机状态
EVENT_LEVEL_EXCEPTION_RESUME, // 黄色报警
EVENT_LEVEL_EXCEPTION, // 橙色报警
EVENT_LEVEL_ALARM, // 红色报警
}AdemcoEventLevel;
// 安定宝协议解析结果
// 安定宝协议解析结果
typedef enum AdemcoParseResult {
RESULT_OK, //! 解析到正确、完整的一包
RESULT_NOT_ENOUGH, //! 解析到正确、不完整的一包,需要缓存数据,下次继续处理
RESULT_ERROR, //! 解析到错误的数据,应当丢弃该数据包
RESULT_OK, //! 解析到正确、完整的一包
RESULT_NOT_ENOUGH, //! 解析到正确、不完整的一包,需要缓存数据,下次继续处理
RESULT_ERROR, //! 解析到错误的数据,应当丢弃该数据包
}AdemcoParseResult;
// 安定宝协议data段
// 安定宝协议data段
typedef struct AdemcoDataSegment {
uint8_t raw[ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX];
int raw_len;
......@@ -291,8 +291,8 @@ typedef struct AdemcoDataSegment {
}AdemcoDataSegment;
typedef enum AdemcoXDataLengthFormat {
TWO_HEX, // 两个hex字节表示长度
FOUR_DECIMAL, // 四个decimal char 表示长度
TWO_HEX, // 两个hex字节表示长度
FOUR_DECIMAL, // 四个decimal char 表示长度
}AdemcoXDataLengthFormat;
typedef struct AdemcoXDataSegment {
......@@ -343,15 +343,15 @@ typedef struct AdemcoPacket {
// Functions
//! 是否主机状态事件
//! 是否主机状态事件
ADEMCO_EXPORT_SYMBOL int ademcoIsMachineStatusEvent(AdemcoEvent ademcoEvent);
//! 是否主机类型事件
//! 是否主机类型事件
ADEMCO_EXPORT_SYMBOL int ademcoIsMachineTypeEvent(AdemcoEvent ademcoEvent);
//! 事件是否需要控制源
//! 事件是否需要控制源
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);
......@@ -390,11 +390,11 @@ ADEMCO_EXPORT_SYMBOL uint16_t ademcoCRC16(const uint8_t* buff, int len, uint16_t
/* Hengbo */
//! 三防区主机状态GG范围 1~3
//! 三防区主机状态GG范围 1~3
#define HB_3SECTION_MACHINE_GG_MIN 1
#define HB_3SECTION_MACHINE_GG_MAX 3
//! 是否合法的三防区主机状态GG
//! 是否合法的三防区主机状态GG
static inline int hbIsValid3SectionMachineGG(AdemcoGG gg) {
return HB_3SECTION_MACHINE_GG_MIN <= gg && gg <= HB_3SECTION_MACHINE_GG_MAX;
}
......@@ -409,29 +409,29 @@ typedef enum HbMachineStatus {
}HbMachineStatus;
typedef enum HbMachineType {
//! 0 WiFi主机 (已停用)
//! 0 WiFi主机 (已停用)
HMT_WIFI,
//! 1 网络摄像机 (未启用)
//! 1 网络摄像机 (未启用)
HMT_CAMERA,
//! 2 简化的物联卡主机 [ HB-5050G-4GW ]
//! 2 简化的物联卡主机 [ HB-5050G-4GW ]
HMT_GPRS_IOT,
//! 3 网络模块主机 [ HB-G250 ]
//! 3 网络模块主机 [ HB-G250 ]
HMT_NETMOD,
//! 4 改进型卧式主机 [ HB-4040G HB-5050G HB-5050-4G ]
//! 4 改进型卧式主机 [ HB-4040G HB-5050G HB-5050-4G ]
HMT_GPRS,
//! 5 液晶主机 [ HB-BJQ560 HB-BJQ-560B ]
//! 5 液晶主机 [ HB-BJQ560 HB-BJQ-560B ]
HMT_LCD,
//! 6 网线主机 [ HB-4040R HB-5050R ]
//! 6 网线主机 [ HB-4040R HB-5050R ]
HMT_WIRED,
//! 7 真彩主机 [ HTZ-G1000 HTZ-G1000-4G ]
//! 7 真彩主机 [ HTZ-G1000 HTZ-G1000-4G ]
HMT_TRUE_COLOR,
//! 8 三区段主机 [ HTZ-G1000 HTZ-G1000-4G ]
//! 8 三区段主机 [ HTZ-G1000 HTZ-G1000-4G ]
HMT_3_SECTION,
//! 9 物联卡主机 [ HB-2050-4GW ]
//! 9 物联卡主机 [ HB-2050-4GW ]
HMT_IOT,
//! 10 GPRS主机可以打电话 [ HB-2050 ]
//! 10 GPRS主机可以打电话 [ HB-2050 ]
HMT_GPRS_PHONE,
//! 11 NB报警接收主机
//! 11 NB报警接收主机
HMT_NB,
HMT_COUNT,
......@@ -439,38 +439,38 @@ typedef enum HbMachineType {
}HbMachineType;
typedef enum HbZoneProperty {
//! 匪警全局
//! 匪警全局
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_RESERVED_0B,
//! 保留
//! 保留
HZP_RESERVED_0C,
//! 保留
//! 保留
HZP_RESERVED_0D,
//! 保留
//! 保留
HZP_RESERVED_0E,
//! 旁路防区
//! 2019年9月2日16:01:58 适配金建峰真彩主机
//! 旁路防区
//! 2019年9月2日16:01:58 适配金建峰真彩主机
HZP_BYPASS,
HZP_COUNT,
......@@ -492,167 +492,170 @@ typedef union HbMachineTimer {
uint8_t data[8];
}HbMachineTimer;
// 串口透传数据最大长度
// 串口透传数据最大长度
#define HB_COM_DATA_MAX_LEN 32
// 发给主机
// 发给主机
typedef enum HbComRequestType {
HbComReq_A0, // 索要主机状态
HbComReq_A1, // 索要防区
HbComReq_A2, // 索要更多防区
HbComReq_A3, // 修改防区
HbComReq_A5, // 获取定时器
HbComReq_A7, // 设置定时器
HbComReq_A0, // 索要主机状态
HbComReq_A1, // 索要防区
HbComReq_A2, // 索要更多防区
HbComReq_A3, // 修改防区
HbComReq_A5, // 获取定时器
HbComReq_A7, // 设置定时器
HbComReq_A9, // TODO
HbComReq_AA, // 修改防区探头遗失/失联
HbComReq_AC, // 索要防区探头遗失/失联--第一次索要
HbComReq_AD, // 索要防区探头遗失/失联--继续索要
HbComReq_AE, // 三区段主机布撤防命令
HbComReq_B0, // 索要三区段主机状态
HbComReq_RD_acct, // 读取主机账号
HbComReq_WR_acct, // 写入主机账号
HbComReq_AA, // 修改防区探头遗失/失联
HbComReq_AC, // 索要防区探头遗失/失联--第一次索要
HbComReq_AD, // 索要防区探头遗失/失联--继续索要
HbComReq_AE, // 三区段主机布撤防命令
HbComReq_B0, // 索要三区段主机状态
HbComReq_RD_acct, // 读取主机账号
HbComReq_WR_acct, // 写入主机账号
HbComReq_Invalid = -1,
}HbComRequestType;
// 主机回应
// 主机回应
typedef enum HbComResponseType {
HbComResp_A0, // 索要主机状态回应
HbComResp_A2, // 索要防区回应
HbComResp_A3, // 学码开始回应
HbComResp_A4, // 修改防区回应
HbComResp_A6, // 获取主机定时器回应
HbComResp_A7, // 设置主机定时器回应
HbComResp_A8, // 拒绝设置或设置失败回应
HbComResp_A0, // 索要主机状态回应
HbComResp_A2, // 索要防区回应
HbComResp_A3, // 学码开始回应
HbComResp_A4, // 修改防区回应
HbComResp_A6, // 获取主机定时器回应
HbComResp_A7, // 设置主机定时器回应
HbComResp_A8, // 拒绝设置或设置失败回应
HbComResp_A9, // TODO
HbComResp_AB, // 修改防区探头遗失/失联回应
HbComResp_AD, // 索要防区探头遗失/失联回应
HbComResp_AF, // 三区段主机布撤防命令回应
HbComResp_B1, // 三区段主机状态回应
HbComResp_AB, // 修改防区探头遗失/失联回应
HbComResp_AD, // 索要防区探头遗失/失联回应
HbComResp_AF, // 三区段主机布撤防命令回应
HbComResp_B1, // 三区段主机状态回应
HbComResp_Invalid = -1,
}HbComResponseType;
//! 索要主机状态 EB AB 3F A0 75
//! 索要主机状态 EB AB 3F A0 75
#define HbComReq_A0_len 5
#define HbComReq_A0_data "\xEB\xAB\x3F\xA0\x75"
//! 回应主机状态 EB BA 3F 07 P0 A0 P1 P2 P3 SUM
//! 回应主机状态 EB BA 3F 07 P0 A0 P1 P2 P3 SUM
#define HbComResp_A0_len 9
#define HbComResp_A0_head "\xEB\xBA\x3F\x07"
//! 索要主机防区 EB AB 3F A1 76
//! 索要主机防区 EB AB 3F A1 76
#define HbComReq_A1_len 5
#define HbComReq_A1_data "\xEB\xAB\x3F\xA1\x76"
//! 回应主机防区 EB BA 3F PN P0 A2 [Z, P]xN P1 SUM
#define HbComResp_A2_len_min 8 // 无防区数据时长度最小为8
#define HbComResp_A2_max_zone 20 // 最多可以包含 20 个防区
#define HbComResp_A2_len_max (HbComResp_A2_len_min + HbComResp_A2_max_zone * 2) // 一包数据最多有8+20*2=48个字节
#define HbComResp_A2_nomore 0xFF // P1 无更多防区
#define HbComResp_A2_hasmore 0x00 // P1 还有更多防区
//! 回应主机防区 EB BA 3F PN P0 A2 [Z, P]xN P1 SUM
#define HbComResp_A2_len_min 8 // 无防区数据时长度最小为8
#define HbComResp_A2_max_zone 20 // 最多可以包含 20 个防区
#define HbComResp_A2_len_max (HbComResp_A2_len_min + HbComResp_A2_max_zone * 2) // 一包数据最多有8+20*2=48个字节
#define HbComResp_A2_nomore 0xFF // P1 无更多防区
#define HbComResp_A2_hasmore 0x00 // P1 还有更多防区
//! 索要更多主机防区 EB AB 3F A2 77
//! 仅应在收到ZoneResponse的param非0xFF时发送,以索要全部防区
//! 索要更多主机防区 EB AB 3F A2 77
//! 仅应在收到ZoneResponse的param非0xFF时发送,以索要全部防区
#define HbComReq_A2_len 5
#define HbComReq_A2_data "\xEB\xAB\x3F\xA2\x77"
//! 修改主机防区 EB CB 3F 09 A3 P1 P2 P3 SUM
//! 修改主机防区 EB CB 3F 09 A3 P1 P2 P3 SUM
#define HbComReq_A3_len 9
#define HbComReq_A3_head "\xEB\xCB\x3F\x09\xA3"
#define HbComReq_A3_op_del 0x00 //! 删除防区
#define HbComReq_A3_op_learn 0x01 //! 学码
#define HbComReq_A3_op_stop 0x02 //! 停止学码
#define HbComReq_A3_op_modify 0x04 //! 修改防区属性
//! 学码开始回应 EB BA 3F 07 P0 A3 5A
//! 因为学码时主机要等待外部无线信号(用户触发探测器),因此先回应A3表示已经开始学码,学码成功时回 ZoneOpResponse A4
typedef enum HbComReq_A3_op {
HbComReq_A3_op_del = 0x00, //! 删除防区
HbComReq_A3_op_learn = 0x01, //! 学码
HbComReq_A3_op_stop = 0x02, //! 停止学码
HbComReq_A3_op_modify = 0x04, //! 修改防区属性
}HbComReq_A3_op;
//! 学码开始回应 EB BA 3F 07 P0 A3 5A
//! 因为学码时主机要等待外部无线信号(用户触发探测器),因此先回应A3表示已经开始学码,学码成功时回 ZoneOpResponse A4
#define HbComResp_A3_len 7
#define HbComResp_A3_data "\xEB\xBA\x3F\x07\xCC\xA3\x5A"
//! 修改防区回应 EB BA 3F 0A P0 A4 P1 P2 P3 SUM
//! 修改防区回应 EB BA 3F 0A P0 A4 P1 P2 P3 SUM
#define HbComResp_A4_len 10
#define HbComResp_A4_head "\xEB\xBA\x3F\x0A\xCC\xA4"
#define HbComResp_A4_fail 0x00 //! 失败
#define HbComResp_A4_ok 0x01 //! 成功
#define HbComResp_A4_dup 0x02 //! 失败--重码
#define HbComResp_A4_ne 0x03 //! 失败--防区未对码 not exists
#define HbComResp_A4_fail 0x00 //! 失败
#define HbComResp_A4_ok 0x01 //! 成功
#define HbComResp_A4_dup 0x02 //! 失败--重码
#define HbComResp_A4_ne 0x03 //! 失败--防区未对码 not exists
//! 获取主机定时器 EB AB 3F A5 7A
//! 获取主机定时器 EB AB 3F A5 7A
#define HbComReq_A5_len 5
#define HbComReq_A5_data "\xEB\xAB\x3F\xA5\x7A"
//! 获取主机定时器回应 EB BA 3F 0F P0 A6 H1 M1 H2 M2 H3 M3 H4 M4 SUM
//! 获取主机定时器回应 EB BA 3F 0F P0 A6 H1 M1 H2 M2 H3 M3 H4 M4 SUM
#define HbComResp_A6_len 15
#define HbComResp_A6_head "\xEB\xBA\x3F\x0F\xCC\xA6"
//! 设置主机定时器 EB CB 3F 0E A7 H1 M1 H2 M2 H3 M3 H4 M4 SUM
//! 设置主机定时器 EB CB 3F 0E A7 H1 M1 H2 M2 H3 M3 H4 M4 SUM
#define HbComReq_A7_len 14
#define HbComReq_A7_head "\xEB\xCB\x3F\x0E\xA7"
//! 设置主机定时器回应 EB BA 3F 07 P0 A7 SUM
//! 设置主机定时器回应 EB BA 3F 07 P0 A7 SUM
#define HbComResp_A7_len 7
#define HbComResp_A7_data "\xEB\xBA\x3F\x07\xCC\xA7\x5E"
//! 拒绝设置回应 EB BA 3F 07 P0 A8 SUM
//! 任何操作,主机如果认为非法,都可以用A8直接回复
//! 拒绝设置回应 EB BA 3F 07 P0 A8 SUM
//! 任何操作,主机如果认为非法,都可以用A8直接回复
#define HbComResp_A8_len 7
#define HbComResp_A8_data "\xEB\xBA\x3F\x07\xCC\xA8\x5F"
//! 修改防区探头遗失/失联 EB CB 3F 08 AA P1 P2 SUM
//! 修改防区探头遗失/失联 EB CB 3F 08 AA P1 P2 SUM
#define HbComReq_AA_len 8
#define HbComReq_AA_head "\xEB\xAB\x3F\x08\xAA"
//! 修改防区探头遗失/失联回应 EB BA 3F 09 P0 AB P1 P2 SUM
//! 修改防区探头遗失/失联回应 EB BA 3F 09 P0 AB P1 P2 SUM
#define HbComResp_AB_len 9
#define HbComResp_AB_head "\xEB\xBA\x3F\x09\xCC\xAB"
//! 索要防区探头遗失/失联 第一次索要 EB AB 3F AC 81
//! 索要防区探头遗失/失联 第一次索要 EB AB 3F AC 81
#define HbComReq_AC_len 5
#define HbComReq_AC_data "\xEB\xAB\x3F\xAC\x81"
//! 索要防区探头遗失/失联 索要更多 EB AB 3F AD 82
//! 索要防区探头遗失/失联 索要更多 EB AB 3F AD 82
#define HbComReq_AD_len 5
#define HbComReq_AD_data "\xEB\xAB\x3F\xAD\x82"
//! 索要防区探头遗失/失联回应 EB BA 3F PN P0 AD P1 DATA P2 SUM
#define HbComResp_AD_len_min 9 // 无防区失联数据时一包长度最小为9
#define HbComResp_AD_max_zone 20 // 一包最多包含20个防区
#define HbComResp_AD_len_max (HbComResp_AD_len_min + HbComResp_AD_max_zone * 2) // 一包最多有 9 + 20 *2 = 49 个字节
#define HbComResp_AD_p1_single 0xF0 // 防区号以单字节表示
#define HbComResp_AD_p1_double 0xF1 // 防区号以双字节表示
//! 索要防区探头遗失/失联回应 EB BA 3F PN P0 AD P1 DATA P2 SUM
#define HbComResp_AD_len_min 9 // 无防区失联数据时一包长度最小为9
#define HbComResp_AD_max_zone 20 // 一包最多包含20个防区
#define HbComResp_AD_len_max (HbComResp_AD_len_min + HbComResp_AD_max_zone * 2) // 一包最多有 9 + 20 *2 = 49 个字节
#define HbComResp_AD_p1_single 0xF0 // 防区号以单字节表示
#define HbComResp_AD_p1_double 0xF1 // 防区号以双字节表示
#define HbComResp_AD_head "\xEB\xBA\x3F\x09\xCC\xAD"
#define HbCom_3sec_disarm 0x00 // 三区段主机撤防(命令或状态)
#define HbCom_3sec_arm 0x01 // 三区段主机布防(命令或状态)
#define HbCom_3sec_disarm 0x00 // 三区段主机撤防(命令或状态)
#define HbCom_3sec_arm 0x01 // 三区段主机布防(命令或状态)
//! 三区段主机布撤防命令 EB CB 3F 08 AE P1 P2 SUM
//! 三区段主机布撤防命令 EB CB 3F 08 AE P1 P2 SUM
#define HbComReq_AE_len 8
#define HbComReq_AE_head "\xEB\xCB\x3F\x08\xAE"
//! 三区段主机布撤防命令回应 EB BA 3F 08 P0 AF P1 P2 SUM
//! 三区段主机布撤防命令回应 EB BA 3F 08 P0 AF P1 P2 SUM
#define HbComResp_AF_len 9
#define HbComResp_AF_head "\xEB\xBA\x3F\x08\xCC\xAF"
//! 三区段主机索要主机状态 EB CB 3F 06 B0 AB
//! 三区段主机索要主机状态 EB CB 3F 06 B0 AB
#define HbComReq_B0_len 6
#define HbComReq_B0_data "\xEB\xCB\x3F\x06\xB0\xAB"
//! 三区段主机状态回应 EB BA 3F 08 P0 B1 P1 SUM
//! 三区段主机状态回应 EB BA 3F 08 P0 B1 P1 SUM
#define HbComResp_B1_len 8
#define HbComResp_B1_head "\xEB\xBA\x3F\x08"
//! 读取主机账号
//! 读取主机账号
#define HbComReq_RD_acct_len 7
#define HbComReq_RD_acct_data "\xEB\xBA\x3F\x07\x00\x4C\x37"
//! 读取主机账号回应
//! 读取主机账号回应
#define HbComResp_RD_acct_len 15
#define HbComResp_RD_acct_head "\xEB\xCB\x3F\x0F\x4C"
//! 写入主机账号
//! 写入主机账号
#define HbComReq_WR_acct_len 15
#define HbComReq_WR_acct_head "\xEB\xCB\x3F\x0F\x4D"
//! 写入主机账号回应(与读取主机账号命令相同)
//! 写入主机账号回应(与读取主机账号命令相同)
#define HbComResp_WR_acct_len HbComReq_RD_acct_len
#define HbComResp_WR_acct_head HbComReq_WR_acct_head
......@@ -664,38 +667,38 @@ static const HbZoneProperty hbZoneProperties[12] = {
// return available count
ADEMCO_EXPORT_SYMBOL int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12]);
//! 最大防区号根据型号不同而不同
//! 最大防区号根据型号不同而不同
ADEMCO_EXPORT_SYMBOL uint16_t hbZoneMax(HbMachineType type);
//! 防区号是否合法(可以包含0防区)
//! 防区号是否合法(可以包含0防区)
ADEMCO_EXPORT_SYMBOL int hbIsValidZone(HbMachineType type, uint16_t zone);
//! 防区号是否合法(不可以可以包含0防区)
//! 防区号是否合法(不可以可以包含0防区)
ADEMCO_EXPORT_SYMBOL int hbIsValidZoneStrict(HbMachineType type, uint16_t zone);
//! 主机是否已投产使用
//! 主机是否已投产使用
ADEMCO_EXPORT_SYMBOL int hbMachineIsSelling(HbMachineType type);
//! 主机是否具有布防功能
//! 主机是否具有布防功能
ADEMCO_EXPORT_SYMBOL int hbMachineCanArm(HbMachineType type);
//! 主机是否具有撤防功能
//! 主机是否具有撤防功能
ADEMCO_EXPORT_SYMBOL int hbMachineCanDisarm(HbMachineType type);
//! 主机是否可以进入设置状态
//! 主机是否可以进入设置状态
ADEMCO_EXPORT_SYMBOL int hbMachineCanEnterSettings(HbMachineType type);
//! 主机是否具有半布防功能
//! 主机是否具有半布防功能
ADEMCO_EXPORT_SYMBOL int hbMachineCanHalfArm(HbMachineType type);
//! 主机是否可以报告信号强度
//! 主机是否可以报告信号强度
ADEMCO_EXPORT_SYMBOL int hbMachineCanReportSignalStrength(HbMachineType type);
//! 主机本身是否可以短信报警(不算通过服务如阿里语音等)
//! 主机本身是否可以短信报警(不算通过服务如阿里语音等)
ADEMCO_EXPORT_SYMBOL int hbMachineCanReportBySMS(HbMachineType type);
//! 主机是否支持有线防区
//! 主机是否支持有线防区
ADEMCO_EXPORT_SYMBOL int hbMachineHasWiredZone(HbMachineType type);
//! 主机最小有线防区号
//! 主机最小有线防区号
ADEMCO_EXPORT_SYMBOL AdemcoZone hbWiredZoneMin(HbMachineType type);
//! 主机最大有线防区号
//! 主机最大有线防区号
ADEMCO_EXPORT_SYMBOL AdemcoZone hbWiredZoneMax(HbMachineType type);
//! 主机是否可以直接写入防区数据(无需对码)
//! 主机是否可以直接写入防区数据(无需对码)
ADEMCO_EXPORT_SYMBOL int hbMachineCanDirectlyWriteZone(HbMachineType type);
//! 主机是否可以挂载分机
//! 主机是否可以挂载分机
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);
......@@ -710,17 +713,33 @@ 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);
// 累加校验,计算data[0] ~ data[len-2],校验和放在data[len-1]
// 累加校验,计算data[0] ~ data[len-2],校验和放在data[len-1]
ADEMCO_EXPORT_SYMBOL void hbSum(uint8_t* data, int len);
// 校验和是否正确, return 0 for incorrect, otherwise correct
// 校验和是否正确, return 0 for incorrect, otherwise correct
ADEMCO_EXPORT_SYMBOL int hbCheckSum(const uint8_t* data, int len);
ADEMCO_EXPORT_SYMBOL HbComRequestType hbComParseRequest(const uint8_t* buff, int len);
ADEMCO_EXPORT_SYMBOL HbComResponseType hbParseComResponse(const uint8_t* buff, int len);
// 将一串以高低字节表示的十六进制数组转换为10进制数字符串,遇0xf或非'0'~'9'字符停止,返回字符串长度
// 示例:输入数组:0x18 0x24 0x08 0x88 0x10 0x1f, 0xff,输出字符串"18240888101"
ADEMCO_EXPORT_SYMBOL HbComResponseType hbComParseResponse(const uint8_t* buff, int len);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqA0_getMachineStatus(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqA1_getMachineZones(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqA2_getMoreMachineZones(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqA3_modifyMachineZone(AdemcoXDataSegment* xdata, uint8_t zone, HbZoneProperty prop, HbComReq_A3_op op);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqA5_getMachineTimer(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqA7_setMachineTimer(AdemcoXDataSegment* xdata, HbMachineTimer* timer);
//ADEMCO_EXPORT_SYMBOL void hbComMakeReqA9(AdemcoXDataSegment* xdata, HbMachineStatus status, HbMachineType type);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqAA_modifyMachineZoneLostConfig(AdemcoXDataSegment* xdata, uint8_t zone, int on);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqAC_getMachineZoneLostConfig(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqAD_getMoreMachineZoneLostConfig(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqAE_set3SectionMachineStatus(AdemcoXDataSegment* xdata, HbMachineStatus statusMachine,
HbMachineStatus statusSec1, HbMachineStatus statusSec2, HbMachineStatus statusSec3);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqB0_get3SectionMachineStatus(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqRD_acct(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqWR_acct(AdemcoXDataSegment* xdata, const char* acct);
// 将一串以高低字节表示的十六进制数组转换为10进制数字符串,遇0xf或非'0'~'9'字符停止,返回字符串长度
// 示例:输入数组:0x18 0x24 0x08 0x88 0x10 0x1f, 0xff,输出字符串"18240888101"
ADEMCO_EXPORT_SYMBOL int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len);
// 将一个10进制数字符串转为高低字节表示的数组,节省空间,返回数组长度
// 将一个10进制数字符串转为高低字节表示的数组,节省空间,返回数组长度
ADEMCO_EXPORT_SYMBOL int hbDecStrToHiLoArray(uint8_t* arr, const char* str, int len);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment