Commit 12f3d345 authored by captainwong's avatar captainwong

make reqs

parent 3743b11f
...@@ -1473,6 +1473,90 @@ HbComResponseType hbComParseResponse(const uint8_t* data, int len) ...@@ -1473,6 +1473,90 @@ HbComResponseType hbComParseResponse(const uint8_t* data, int len)
return HbComResp_Invalid; return HbComResp_Invalid;
} }
void hbComMakeReqA0_getMachineStatus(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_A0_data, HbComReq_A0_len);
}
void hbComMakeReqA1_getMachineZones(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_A1_data, HbComReq_A1_len);
}
void hbComMakeReqA2_getMoreMachineZones(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_A2_data, HbComReq_A2_len);
}
void hbComMakeReqA3_modifyMachineZone(AdemcoXDataSegment* xdata, uint8_t zone, HbZoneProperty prop, HbComReq_A3_op op)
{
uint8_t req[HbComReq_A3_len] = HbComReq_A3_head;
req[5] = zone;
req[6] = prop;
req[7] = op;
hbSum(req, HbComReq_A3_len);
ademcoMakeXData(xdata, TWO_HEX, req, HbComReq_A3_len);
}
void hbComMakeReqA5_getMachineTimer(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_A5_data, HbComReq_A5_len);
}
void hbComMakeReqA7_setMachineTimer(AdemcoXDataSegment* xdata, HbMachineTimer* timer)
{
uint8_t req[HbComReq_A7_len] = HbComReq_A7_head;
memcpy(req + 5, timer, sizeof(*timer));
hbSum(req, HbComReq_A7_len);
ademcoMakeXData(xdata, TWO_HEX, req, HbComReq_A7_len);
}
void hbComMakeReqAA_modifyMachineZoneLostConfig(AdemcoXDataSegment* xdata, uint8_t zone, int on)
{
uint8_t req[HbComReq_AA_len] = HbComReq_AA_head;
req[5] = zone;
req[6] = !!on;
hbSum(req, HbComReq_AA_len);
ademcoMakeXData(xdata, TWO_HEX, req, HbComReq_AA_len);
}
void hbComMakeReqAC_getMachineZoneLostConfig(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_AC_data, HbComReq_AC_len);
}
void hbComMakeReqAD_getMoreMachineZoneLostConfig(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_AD_data, HbComReq_AD_len);
}
void hbComMakeReqAE_set3SectionMachineStatus(AdemcoXDataSegment* xdata, HbComReq_AE_P1 p1, uint8_t p2)
{
uint8_t req[HbComReq_AE_len] = HbComReq_AE_head;
req[5] = p1;
req[6] = p2;
hbSum(req, HbComReq_AE_len);
ademcoMakeXData(xdata, TWO_HEX, req, HbComReq_AE_len);
}
void hbComMakeReqB0_get3SectionMachineStatus(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_B0_data, HbComReq_B0_len);
}
void hbComMakeReqRD_acct(AdemcoXDataSegment* xdata)
{
ademcoMakeXData(xdata, TWO_HEX, HbComReq_RD_acct_data, HbComReq_RD_acct_len);
}
void hbComMakeReqWR_acct(AdemcoXDataSegment* xdata, const char* acct)
{
uint8_t req[HbComReq_WR_acct_len] = HbComReq_WR_acct_head;
hbDecStrToHiLoArray(req + 5, 9, acct);
hbSum(req, HbComReq_AE_len);
ademcoMakeXData(xdata, TWO_HEX, req, HbComReq_AE_len);
}
int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len) int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len)
{ {
char* p = str; char* p = str;
...@@ -1487,13 +1571,17 @@ int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len) ...@@ -1487,13 +1571,17 @@ int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len)
return p - str; return p - str;
} }
int hbDecStrToHiLoArray(uint8_t* arr, const char* str, int len) int hbDecStrToHiLoArray(uint8_t* arr, int len, const char* str)
{ {
uint8_t* p = arr; uint8_t* p = arr;
for (int i = 0; i < len; i += 2) { int slen = strlen(str);
if (slen > len * 2) {
return 0;
}
for (int i = 0; i < slen; i += 2) {
char hi = str[i]; char hi = str[i];
if ('0' <= hi && hi <= '9') { if ('0' <= hi && hi <= '9') {
if (i < len) { if (i + 1 < slen) {
char lo = str[i + 1]; char lo = str[i + 1];
if ('0' <= lo && lo <= '9') { if ('0' <= lo && lo <= '9') {
*p++ = (hi << 4) | (lo & 0x0F); *p++ = (hi << 4) | (lo & 0x0F);
...@@ -1509,7 +1597,10 @@ int hbDecStrToHiLoArray(uint8_t* arr, const char* str, int len) ...@@ -1509,7 +1597,10 @@ int hbDecStrToHiLoArray(uint8_t* arr, const char* str, int len)
break; break;
} }
} }
return p - arr; while (p - arr < len) {
*p++ = 0xFF;
}
return len;
} }
...@@ -399,11 +399,12 @@ static inline int hbIsValid3SectionMachineGG(AdemcoGG gg) { ...@@ -399,11 +399,12 @@ static inline int hbIsValid3SectionMachineGG(AdemcoGG gg) {
return HB_3SECTION_MACHINE_GG_MIN <= gg && gg <= HB_3SECTION_MACHINE_GG_MAX; return HB_3SECTION_MACHINE_GG_MIN <= gg && gg <= HB_3SECTION_MACHINE_GG_MAX;
} }
//! 主机状态
typedef enum HbMachineStatus { typedef enum HbMachineStatus {
HMS_ARM, HMS_ARM, // 布防
HMS_HALF_ARM, HMS_HALF_ARM, // 半布防
HMS_DISARM, HMS_DISARM, // 撤防
HMS_SETTING, HMS_SETTING, // 设置
HMS_COUNT, HMS_COUNT,
HMS_INVALID = -1, HMS_INVALID = -1,
}HbMachineStatus; }HbMachineStatus;
...@@ -624,12 +625,18 @@ typedef enum HbComReq_A3_op { ...@@ -624,12 +625,18 @@ typedef enum HbComReq_A3_op {
#define HbComResp_AD_p1_double 0xF1 // 防区号以双字节表示 #define HbComResp_AD_p1_double 0xF1 // 防区号以双字节表示
#define HbComResp_AD_head "\xEB\xBA\x3F\x09\xCC\xAD" #define HbComResp_AD_head "\xEB\xBA\x3F\x09\xCC\xAD"
#define HbCom_3sec_disarm 0x00 // 三区段主机撤防(命令或状态) #define HbCom_3sec_arm 0x00 // 三区段主机布防(命令或状态)
#define HbCom_3sec_arm 0x01 // 三区段主机布防(命令或状态) #define HbCom_3sec_disarm 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_len 8
#define HbComReq_AE_head "\xEB\xCB\x3F\x08\xAE" #define HbComReq_AE_head "\xEB\xCB\x3F\x08\xAE"
typedef enum HbComReq_AE_P1 {
HbComReq_AE_P1_machine, // 对主机布撤防
HbComReq_AE_P1_section1, // 对区段1布撤防
HbComReq_AE_P1_section2, // 对区段2布撤防
HbComReq_AE_P1_section3, // 对区段3布撤防
}HbComReq_AE_P1;
//! 三区段主机布撤防命令回应 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_len 9
...@@ -729,18 +736,20 @@ ADEMCO_EXPORT_SYMBOL void hbComMakeReqA7_setMachineTimer(AdemcoXDataSegment* xda ...@@ -729,18 +736,20 @@ ADEMCO_EXPORT_SYMBOL void hbComMakeReqA7_setMachineTimer(AdemcoXDataSegment* xda
ADEMCO_EXPORT_SYMBOL void hbComMakeReqAA_modifyMachineZoneLostConfig(AdemcoXDataSegment* xdata, uint8_t zone, int on); 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 hbComMakeReqAC_getMachineZoneLostConfig(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqAD_getMoreMachineZoneLostConfig(AdemcoXDataSegment* xdata); ADEMCO_EXPORT_SYMBOL void hbComMakeReqAD_getMoreMachineZoneLostConfig(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqAE_set3SectionMachineStatus(AdemcoXDataSegment* xdata, HbMachineStatus statusMachine, // p2 must be HbCom_3sec_arm or HbCom_3sec_disarm
HbMachineStatus statusSec1, HbMachineStatus statusSec2, HbMachineStatus statusSec3); ADEMCO_EXPORT_SYMBOL void hbComMakeReqAE_set3SectionMachineStatus(AdemcoXDataSegment* xdata, HbComReq_AE_P1 p1, uint8_t p2);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqB0_get3SectionMachineStatus(AdemcoXDataSegment* xdata); ADEMCO_EXPORT_SYMBOL void hbComMakeReqB0_get3SectionMachineStatus(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqRD_acct(AdemcoXDataSegment* xdata); ADEMCO_EXPORT_SYMBOL void hbComMakeReqRD_acct(AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL void hbComMakeReqWR_acct(AdemcoXDataSegment* xdata, const char* acct); ADEMCO_EXPORT_SYMBOL void hbComMakeReqWR_acct(AdemcoXDataSegment* xdata, const char* acct);
// 将一串以高低字节表示的十六进制数组转换为10进制数字符串,遇0xf或非'0'~'9'字符停止,返回字符串长度 // 将一串以高低字节表示的十六进制数组转换为10进制数字符串,遇0xf或非'0'~'9'字符停止,返回字符串长度
// 示例:输入数组:0x18 0x24 0x08 0x88 0x10 0x1f, 0xff,输出字符串"18240888101" // 示例:输入数组:0x18 0x24 0x08 0x88 0x10 0x1f 0xff,输出字符串"18240888101"
ADEMCO_EXPORT_SYMBOL int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len); ADEMCO_EXPORT_SYMBOL int hbHiLoArrayToDecStr(char* str, const uint8_t* arr, int len);
// 将一个10进制数字符串转为高低字节表示的数组,节省空间,返回数组长度 // 将一个10进制数字符串转为高低字节表示的数组,节省空间,转换后的长度若不满len,则以0xF补满。str长度不能大于len * 2
ADEMCO_EXPORT_SYMBOL int hbDecStrToHiLoArray(uint8_t* arr, const char* str, int len); // 示例:输入字符串 "18240888101", len=9, 则arr内容为 0x18 0x24 0x08 0x88 0x10 0x1f 0xff 0xff 0xff, return 9
// 输入字符串 "12345678901234567890", len=9, 则失败返回0
ADEMCO_EXPORT_SYMBOL int hbDecStrToHiLoArray(uint8_t* arr, int len, const char* str);
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -124,6 +124,7 @@ ...@@ -124,6 +124,7 @@
<ConformanceMode>true</ConformanceMode> <ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader> <PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile> <PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
<LanguageStandard_C>Default</LanguageStandard_C>
</ClCompile> </ClCompile>
<Link> <Link>
<SubSystem>Windows</SubSystem> <SubSystem>Windows</SubSystem>
......
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