Commit e9111ac9 authored by captainwong's avatar captainwong

update

parent 53a597eb
......@@ -979,7 +979,7 @@ int ademcoHiLoArrayToDecStr(char* str, const uint8_t* arr, int len)
int ademcoDecStrToHiLoArray(uint8_t* arr, int len, const char* str)
{
uint8_t* p = arr;
int slen = strlen(str);
int slen = str ? strlen(str) : 0;
if (slen > len * 2) {
slen = len * 2;
}
......@@ -1044,7 +1044,7 @@ int ademcoHexStrToArray(uint8_t* arr, const char* str, uint8_t padding)
{
uint8_t* p = arr;
uint8_t hi = 0, lo = 0;
int slen = strlen(str);
int slen = str ? strlen(str) : 0;
padding &= 0x0F;
for (int i = 0; i < slen / 2; i++) {
char c = str[i * 2];
......
......@@ -433,6 +433,7 @@ ADEMCO_EXPORT_SYMBOL int ademcoHiLoArrayToDecStr(char* str, const uint8_t* arr,
// 示例:输入字符串"123ABC",返回0
// 示例:输入字符串 "18240888101", len=9, 则arr内容为 0x18 0x24 0x08 0x88 0x10 0x1f 0xff 0xff 0xff, return 9
// 示例:输入字符串 "12345678901234567890", len=9, 则arr内容为 0x18 0x24 0x08 0x88 0x10 0x1f 0xff 0xff 0xff, return 9
// 示例:输入NULL,返回 9个 0xFF
ADEMCO_EXPORT_SYMBOL int ademcoDecStrToHiLoArray(uint8_t* arr, int len, const char* str);
// 将一串字节流转换为可打印形式
......
......@@ -226,17 +226,54 @@ int hbZonePropCanReportLost(HbZoneProperty zp)
void hbInitMachineTimer(HbMachineTimer* timer)
{
memset(timer->data, 0xFF, sizeof(timer));
memset(timer->data, 25, sizeof(timer));
}
int hbIsValidTimePoint(HbMachineTimePoint* tp)
{
return tp && 0 <= tp->hour && tp->hour < 24 &&
0 <= tp->minute && tp->minute < 60;
}
void hbTimePointToGreenwich(HbMachineTimePoint* tp)
{
if (tp && tp->hour != 25) {
tp->hour = (tp->hour + 16) % 24;
}
}
void hbTimePointFromGreenwich(HbMachineTimePoint* tp)
{
if (tp && tp->hour != 25) {
tp->hour = (tp->hour + 8) % 24;
}
}
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;
return timer && hbIsValidTimePoint(&timer->armAt) && hbIsValidTimePoint(&timer->disarmAt);
}
int hbIsValidMachineTimer(HbMachineTimer* timer)
{
return timer && hbIsValidTimer(&timer->timer[0]) && hbIsValidTimer(&timer->timer[1]);
}
void hbMachineTimerToGreenwich(HbMachineTimer* timer)
{
hbTimePointToGreenwich(&timer->timer[0].armAt);
hbTimePointToGreenwich(&timer->timer[0].disarmAt);
hbTimePointToGreenwich(&timer->timer[1].armAt);
hbTimePointToGreenwich(&timer->timer[1].disarmAt);
}
void hbMachineTimerFromGreenwich(HbMachineTimer* timer)
{
hbTimePointFromGreenwich(&timer->timer[0].armAt);
hbTimePointFromGreenwich(&timer->timer[0].disarmAt);
hbTimePointFromGreenwich(&timer->timer[1].armAt);
hbTimePointFromGreenwich(&timer->timer[1].disarmAt);
}
AdemcoEvent hbMachineStatusToAdemcoEvent(HbMachineStatus status)
{
......@@ -445,7 +482,7 @@ int hbCheckSum(const uint8_t* data, int len)
uint8_t sum = 0;
const uint8_t* p = data;
while (p != data + len - 1) {
sum += *p;
sum += *p++;
}
return sum == *p;
}
......@@ -775,7 +812,7 @@ void hbComMakeRespA4_modifyMachineZone(HbComData* data, AdemcoZone zone, HbZoneP
void hbComMakeRespA6_getMachineTimer(HbComData* data, HbMachineTimer* timer)
{
memcpy(data->data, HbComResp_A6_head, 6);
memcpy(data->data + 6, timer, sizeof(*timer));
memcpy(data->data + 6, timer->data, sizeof(*timer));
data->len = HbComResp_A6_len;
hbSum(data->data, data->len);
}
......
......@@ -228,6 +228,7 @@ typedef enum HbComResp_A4_p3 {
//! 设置主机定时器 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"
#define hbComResq_A7_to_timer(a7, timer) memcpy((timer)->data, (a7) + 5, 8);
//! 设置主机定时器回应 EB BA 3F 07 P0 A7 SUM
#define HbComResp_A7_len 7
......@@ -359,7 +360,14 @@ 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 hbIsValidTimePoint(HbMachineTimePoint* tp);
ADEMCO_EXPORT_SYMBOL void hbTimePointToGreenwich(HbMachineTimePoint* tp);
ADEMCO_EXPORT_SYMBOL void hbTimePointFromGreenwich(HbMachineTimePoint* tp);
ADEMCO_EXPORT_SYMBOL int hbIsValidTimer(HbTimer* timer);
ADEMCO_EXPORT_SYMBOL int hbIsValidMachineTimer(HbMachineTimer* timer);
//! 传输的是格林威治时间
ADEMCO_EXPORT_SYMBOL void hbMachineTimerToGreenwich(HbMachineTimer* timer);
ADEMCO_EXPORT_SYMBOL void hbMachineTimerFromGreenwich(HbMachineTimer* timer);
ADEMCO_EXPORT_SYMBOL AdemcoEvent hbMachineStatusToAdemcoEvent(HbMachineStatus status);
ADEMCO_EXPORT_SYMBOL HbMachineStatus hbMachineStatusFromAdemcoEvent(AdemcoEvent ademcoEvent);
ADEMCO_EXPORT_SYMBOL AdemcoEvent hbMachineTypeToAdemcoEvent(HbMachineType type);
......@@ -378,7 +386,6 @@ ADEMCO_EXPORT_SYMBOL void hbSum(uint8_t* data, int len);
// 校验和是否正确, 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 HbComRequestType hbComParseXDataRequest(const AdemcoXDataSegment* xdata);
ADEMCO_EXPORT_SYMBOL HbComResponseType hbComParseResponse(const uint8_t* buff, 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