Commit 06734ec6 authored by captainwong's avatar captainwong

update code style

parent 582b04a9
......@@ -4,12 +4,6 @@
* 2022-6-13 rewrited this C version
*/
#ifdef _WIN32
#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
#endif
#include "ademco.h"
#include <stdio.h>
#include <stdlib.h>
......@@ -26,14 +20,12 @@
#define dline dprintf("%s %d\n", __FILE__, __LINE__);
#define dmsg dline; dprintf
void ademcoPrint(const ademco_char_t* p, size_t len)
{
void ademcoPrint(const ademco_char_t* p, size_t len) {
while (len--) {
if (isprint(*(const uint8_t*)p)) {
if (isprint(*(const uint8_t*)p))
putchar(*p);
} else {
else
printf("\\x%02X", *(const uint8_t*)p);
}
p++;
}
printf("\n");
......@@ -68,8 +60,7 @@ int ademcoIsMachineTypeEvent(AdemcoEvent ademcoEvent) {
|| ademcoEvent == EVENT_I_AM_NB_MACHINE;
}
int ademcoIsEventNeedControlSource(AdemcoEvent ademcoEvent)
{
int ademcoIsEventNeedControlSource(AdemcoEvent ademcoEvent) {
return ademcoEvent == EVENT_ARM
|| ademcoEvent == EVENT_HALFARM
|| ademcoEvent == EVENT_HALFARM_1456
......@@ -79,8 +70,7 @@ int ademcoIsEventNeedControlSource(AdemcoEvent ademcoEvent)
|| ademcoEvent == EVENT_PHONE_USER_CANCLE_ALARM;
}
AdemcoEvent ademcoGetExceptionEventByResumeEvent(AdemcoEvent resumeEvent)
{
AdemcoEvent ademcoGetExceptionEventByResumeEvent(AdemcoEvent resumeEvent) {
switch (resumeEvent) {
case EVENT_RECONNECT: return EVENT_DISCONNECT;
case EVENT_LOST_RECOVER: return EVENT_LOST;
......@@ -97,8 +87,7 @@ AdemcoEvent ademcoGetExceptionEventByResumeEvent(AdemcoEvent resumeEvent)
}
}
AdemcoEventLevel ademcoGetEventLevel(AdemcoEvent ademcoEvent)
{
AdemcoEventLevel ademcoGetEventLevel(AdemcoEvent ademcoEvent) {
switch (ademcoEvent) {
case EVENT_ARM:
case EVENT_DISARM:
......@@ -148,8 +137,7 @@ AdemcoEventLevel ademcoGetEventLevel(AdemcoEvent ademcoEvent)
}
}
const char* ademcoEventToString(AdemcoEvent ademcoEvent)
{
const char* ademcoEventToString(AdemcoEvent ademcoEvent) {
switch (ademcoEvent) {
case EVENT_ARM: return "ARM";
case EVENT_BURGLAR: return "BURGLAR";
......@@ -226,8 +214,7 @@ const char* ademcoEventToString(AdemcoEvent ademcoEvent)
}
}
const char* ademcoEventToStringChinese(AdemcoEvent ademcoEvent)
{
const char* ademcoEventToStringChinese(AdemcoEvent ademcoEvent) {
switch (ademcoEvent) {
case EVENT_ARM: return "布防";
case EVENT_BURGLAR: return "盗警";
......@@ -342,17 +329,14 @@ static const uint16_t crc16Table[256] = {
0x8201, 0x42C0, 0x4380, 0x8341, 0x4100, 0x81C1, 0x8081, 0x4040,
};
uint16_t ademcoCRC16(const ademco_char_t* buff, size_t len)
{
uint16_t ademcoCRC16(const ademco_char_t* buff, size_t len) {
uint16_t crc = 0;
while (len--) {
while (len--)
crc = (crc >> 8) ^ crc16Table[(crc ^ *buff++) & 0xFF];
}
return crc;
}
size_t ademcoAppendDataSegment(ademco_char_t* buff, AdemcoId ademcoId, AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone)
{
size_t ademcoAppendDataSegment(ademco_char_t* buff, AdemcoId ademcoId, AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone) {
char* p = (char*)buff;
if (ademcoEvent == EVENT_INVALID_EVENT) {
*p++ = '[';
......@@ -398,8 +382,7 @@ size_t ademcoAppendDataSegment(ademco_char_t* buff, AdemcoId ademcoId, AdemcoEve
}
}
size_t ademcoAppendDataSegment2(AdemcoDataSegment* dataSegment, AdemcoId ademcoId, AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone)
{
size_t ademcoAppendDataSegment2(AdemcoDataSegment* dataSegment, AdemcoId ademcoId, AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone) {
dataSegment->ademcoId = ademcoId;
dataSegment->ademcoEvent = ademcoEvent;
dataSegment->gg = gg;
......@@ -407,8 +390,7 @@ size_t ademcoAppendDataSegment2(AdemcoDataSegment* dataSegment, AdemcoId ademcoI
return dataSegment->raw_len = ademcoAppendDataSegment(dataSegment->raw, ademcoId, ademcoEvent, gg, zone);
}
AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t packet_len, AdemcoDataSegment* dataSegment)
{
AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t packet_len, AdemcoDataSegment* dataSegment) {
if (packet_len == ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN && packet[0] == '[' && packet[1] == ']') {
memset(dataSegment, 0, sizeof(*dataSegment));
strcpy((char*)dataSegment->raw, "[]");
......@@ -418,11 +400,10 @@ AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t pac
do {
const char* p = packet + 2;
size_t acct_len = packet_len - 15;
if (acct_len < 6) {
if (acct_len < 6)
break;
}
char temp[ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX] = {0};
char temp[ADEMCO_PACKET_DATA_SEGMENT_FULL_LEN_MAX] = { 0 };
strncpy(temp, (const char*)p, acct_len);
temp[acct_len] = '\0';
dataSegment->ademcoId = (AdemcoId)strtoul(temp, NULL, 16);
......@@ -460,8 +441,7 @@ AdemcoParseResult ademcoParseDataSegment(const ademco_char_t* packet, size_t pac
return RESULT_ERROR;
}
size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSegment* dataSegment)
{
size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSegment* dataSegment) {
if (dataSegment->raw_len == ADEMCO_PACKET_DATA_SEGMENT_EMPTY_LEN) {
fe100[0] = '\n';
fe100[1] = '\r';
......@@ -484,11 +464,10 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
*p++ = ' ';
// E for open, R for close
if (dataSegment->ademcoEvent / 1000 == 1 || dataSegment->ademcoEvent == EVENT_HALFARM) {
if (dataSegment->ademcoEvent / 1000 == 1 || dataSegment->ademcoEvent == EVENT_HALFARM)
*p++ = 'E';
} else {
else
*p++ = 'R';
}
if (dataSegment->ademcoEvent == EVENT_OFFLINE) {
*p++ = '3';
......@@ -508,11 +487,10 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
*p++ = '0';
*p++ = ' ';
if (ademcoIsMachineStatusEvent(dataSegment->ademcoEvent)) {
if (ademcoIsMachineStatusEvent(dataSegment->ademcoEvent))
*p++ = 'U'; // user event
} else {
else
*p++ = 'C'; // zone event
}
sprintf(p, "%03d", dataSegment->zone);
p += 3;
......@@ -524,13 +502,11 @@ size_t ademcoDataSegmentToCongwinFe100(ademco_char_t* fe100, const AdemcoDataSeg
return 0;
}
void ademcoXDataInit(AdemcoXDataSegment* xdata)
{
void ademcoXDataInit(AdemcoXDataSegment* xdata) {
memset(xdata, 0, sizeof * xdata);
}
int ademcoXDataConvert(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf)
{
int ademcoXDataConvert(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf) {
if (!xdata) { return ADEMCO_ERR; }
if (xdata->lenghFormat == xlf) { return ADEMCO_OK; }
......@@ -538,9 +514,8 @@ int ademcoXDataConvert(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf)
char raw[ADEMCO_PACKET_XDATA_MAX_LEN];
if (xlf == TWO_HEX) {
if (len + 6 > ADEMCO_PACKET_XDATA_MAX_LEN) {
if (len + 6 > ADEMCO_PACKET_XDATA_MAX_LEN)
return ADEMCO_ERR;
}
xdata->raw[5 + ademcoXDataGetValidContentLen(xdata)] = '\0';
len = ademcoHexStrToArray((uint8_t*)raw, ademcoXDataGetValidContentAddr(xdata), 0x0F);
ademcoMakeXData(xdata, TWO_HEX, AdemcoXDataTransform_as_is, raw, len);
......@@ -554,38 +529,32 @@ int ademcoXDataConvert(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf)
#ifdef SWIG
static
#endif
const char* ademcoXDataGetValidContentAddr(const AdemcoXDataSegment* xdata)
{
if (xdata->lenghFormat == TWO_HEX && xdata->raw_len > 4) {
const char* 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) {
else if (xdata->lenghFormat == FOUR_DECIMAL && xdata->raw_len > 6)
return xdata->raw + 5;
} else {
else
return NULL;
}
}
int ademcoXDataMemcmp(const AdemcoXDataSegment* xdata, const void* buf, size_t buf_len)
{
int ademcoXDataMemcmp(const AdemcoXDataSegment* xdata, const void* buf, size_t buf_len) {
if (ademcoXDataGetValidContentLen(xdata) != buf_len) return 0;
const void* p = ademcoXDataGetValidContentAddr(xdata);
if (!p) return 0;
return memcmp(p, buf, buf_len);
}
size_t ademcoXDataGetValidContentLen(const AdemcoXDataSegment* xdata)
{
if (xdata->lenghFormat == TWO_HEX && xdata->raw_len > 4) {
size_t 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) {
else if (xdata->lenghFormat == FOUR_DECIMAL && xdata->raw_len > 6)
return xdata->raw_len - 6;
} else {
else
return 0;
}
}
size_t ademcoXDataCopy(AdemcoXDataSegment* dst, const AdemcoXDataSegment* src)
{
size_t ademcoXDataCopy(AdemcoXDataSegment* dst, const AdemcoXDataSegment* src) {
if (dst && src && src->raw_len > 0) {
memcpy(dst, src, sizeof(AdemcoXDataSegment));
return src->raw_len;
......@@ -593,22 +562,18 @@ size_t ademcoXDataCopy(AdemcoXDataSegment* dst, const AdemcoXDataSegment* src)
return 0;
}
int ademcoMakeXData(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, AdemcoXDataTransform xtr, const ademco_char_t* content, size_t len)
{
int ademcoMakeXData(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, AdemcoXDataTransform xtr, const ademco_char_t* content, size_t len) {
char transformed[ADEMCO_PACKET_XDATA_MAX_LEN];
size_t translen;
len &= 0xFFFF;
translen = len & 0xFFFF;
if (xtr == AdemcoXDataTransform_as_is) {
if (xtr == AdemcoXDataTransform_as_is)
memcpy(transformed, content, len);
} else {
if (len * 2 < ADEMCO_PACKET_XDATA_MAX_LEN) {
translen = ademcoHexArrayToStr(transformed, (const uint8_t*)content, len) & 0xFFFF;
} else {
return ADEMCO_ERR;
}
}
else if (len * 2 < ADEMCO_PACKET_XDATA_MAX_LEN)
translen = ademcoHexArrayToStr(transformed, (const uint8_t*)content, len) & 0xFFFF;
else
return ADEMCO_ERR;
xdata->lenghFormat = xlf;
if (xlf == TWO_HEX && translen + 4 < ADEMCO_PACKET_XDATA_MAX_LEN) {
......@@ -633,13 +598,11 @@ int ademcoMakeXData(AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, Adem
*p++ = ']';
xdata->raw_len = p - xdata->raw;
return ADEMCO_OK;
} else {
} else
return ADEMCO_ERR;
}
}
int isAdemcoPacketId(const char* standard, const char* id, size_t len)
{
int isAdemcoPacketId(const char* standard, const char* id, size_t len) {
return strncmp(standard, id, strlen(standard)) == 0;
}
......@@ -654,28 +617,21 @@ static const char* const ids[AID_COUNT] = {
ADEMCO_PACKET_ID_REG_RSP,
};
AdemcoPacketId getAdemcoPacketId(const char* id, size_t len)
{
for (int i = 0; i < AID_COUNT; i++) {
if (isAdemcoPacketId(ids[i], id, len)) {
AdemcoPacketId getAdemcoPacketId(const char* id, size_t len) {
for (int i = 0; i < AID_COUNT; i++)
if (isAdemcoPacketId(ids[i], id, len))
return (AdemcoPacketId)(i);
}
}
return AID_INVALID;
}
const char* admecoPacketIdToString(AdemcoPacketId id)
{
if (0 <= id && id < AID_COUNT) {
const char* admecoPacketIdToString(AdemcoPacketId id) {
if (0 <= id && id < AID_COUNT)
return ids[id];
} else {
else
return "Unkown AdemcoPacketId";
}
}
static void getNowTimestamp(char* buff)
{
static void getNowTimestamp(char* buff) {
time_t now = time(NULL);
struct tm* tm = localtime(&now);
snprintf(buff, ADEMCO_PACKET_TIMESTAMP_LEN + 1, "_%02d:%02d:%02d,%02d-%02d-%04d",
......@@ -683,8 +639,8 @@ static void getNowTimestamp(char* buff)
tm->tm_mon + 1, tm->tm_mday, tm->tm_year + 1900);
}
size_t ademcoMakeEmptyDataPacket(ademco_char_t* dst_buff, size_t len, const char* id, uint16_t seq, const char* acct, AdemcoId ademcoId)
{
size_t ademcoMakeEmptyDataPacket(ademco_char_t* dst_buff, size_t len,
const char* id, uint16_t seq, const char* acct, AdemcoId ademcoId) {
char buff[ADEMCO_PACKET_MAX_LEN];
char* p = buff;
char* pcrc = buff + 1;
......@@ -728,29 +684,24 @@ size_t ademcoMakeEmptyDataPacket(ademco_char_t* dst_buff, size_t len, const char
memcpy(dst_buff, buff, packet_len);
dst_buff[packet_len] = '\0'; // for debug convenience
return packet_len;
} else {
} else
return 0;
}
}
size_t ademcoMakeNullPacket(ademco_char_t* buff, size_t len, uint16_t seq, const char* acct, AdemcoId ademcoId)
{
size_t ademcoMakeNullPacket(ademco_char_t* buff, size_t len, uint16_t seq, const char* acct, AdemcoId ademcoId) {
return ademcoMakeEmptyDataPacket(buff, len, ADEMCO_PACKET_ID_NULL, seq, acct, ademcoId);
}
size_t ademcoMakeAckPacket(ademco_char_t* buff, size_t len, uint16_t seq, const char* acct, AdemcoId ademcoId)
{
size_t ademcoMakeAckPacket(ademco_char_t* buff, size_t len, uint16_t seq, const char* acct, AdemcoId ademcoId) {
return ademcoMakeEmptyDataPacket(buff, len, ADEMCO_PACKET_ID_ACK, seq, acct, ademcoId);
}
size_t ademcoMakeNakPacket(ademco_char_t* buff, size_t len, uint16_t seq, const char* acct, AdemcoId ademcoId)
{
size_t ademcoMakeNakPacket(ademco_char_t* buff, size_t len, uint16_t seq, const char* acct, AdemcoId ademcoId) {
return ademcoMakeEmptyDataPacket(buff, len, ADEMCO_PACKET_ID_NAK, seq, acct, ademcoId);
}
size_t ademcoMakeHbPacket(ademco_char_t* dst_buff, size_t len, uint16_t seq, const char* acct, AdemcoId ademcoId,
AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone, const AdemcoXDataSegment* xdata)
{
AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone, const AdemcoXDataSegment* xdata) {
char buff[ADEMCO_PACKET_MAX_LEN];
char* p = buff;
char* pcrc = buff + 1;
......@@ -801,38 +752,32 @@ size_t ademcoMakeHbPacket(ademco_char_t* dst_buff, size_t len, uint16_t seq, con
return 0;
}
static void copyAcct2AdemcoPacket(AdemcoPacket* pkt, const char* acct)
{
static void copyAcct2AdemcoPacket(AdemcoPacket* pkt, const char* acct) {
if (acct) {
size_t len = strlen(acct);
if (len > ADEMCO_PACKET_ACCT_MAX_LEN) {
if (len > ADEMCO_PACKET_ACCT_MAX_LEN)
len = ADEMCO_PACKET_ACCT_MAX_LEN;
}
memcpy(pkt->acct, acct, len);
pkt->acct[len] = '\0';
} else {
} else
pkt->acct[0] = '\0';
}
}
size_t ademcoMakeNullPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, AdemcoId ademcoId)
{
size_t ademcoMakeNullPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, AdemcoId ademcoId) {
pkt->seq = seq;
copyAcct2AdemcoPacket(pkt, acct);
pkt->data.ademcoId = ademcoId;
return pkt->raw_len = ademcoMakeNullPacket(pkt->raw, sizeof(pkt->raw), seq, acct, ademcoId);
}
size_t ademcoMakeAckPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, AdemcoId ademcoId)
{
size_t ademcoMakeAckPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, AdemcoId ademcoId) {
pkt->seq = seq;
copyAcct2AdemcoPacket(pkt, acct);
pkt->data.ademcoId = ademcoId;
return pkt->raw_len = ademcoMakeAckPacket(pkt->raw, sizeof(pkt->raw), seq, acct, ademcoId);
}
size_t ademcoMakeNakPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, AdemcoId ademcoId)
{
size_t ademcoMakeNakPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, AdemcoId ademcoId) {
pkt->seq = seq;
copyAcct2AdemcoPacket(pkt, acct);
pkt->data.ademcoId = ademcoId;
......@@ -840,8 +785,7 @@ size_t ademcoMakeNakPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, A
}
size_t ademcoMakeHbPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, AdemcoId ademcoId,
AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone, const AdemcoXDataSegment* xdata)
{
AdemcoEvent ademcoEvent, AdemcoGG gg, AdemcoZone zone, const AdemcoXDataSegment* xdata) {
pkt->seq = seq;
copyAcct2AdemcoPacket(pkt, acct);
ademcoAppendDataSegment2(&pkt->data, ademcoId, ademcoEvent, gg, zone);
......@@ -849,20 +793,18 @@ size_t ademcoMakeHbPacket2(AdemcoPacket* pkt, uint16_t seq, const char* acct, Ad
pkt->xdata.lenghFormat = xdata->lenghFormat;
memcpy(pkt->xdata.raw, xdata->raw, xdata->raw_len);
pkt->xdata.raw_len = xdata->raw_len;
} else {
} else
memset(&pkt->xdata, 0, sizeof(*xdata));
}
return pkt->raw_len = ademcoMakeHbPacket(pkt->raw, sizeof(pkt->raw), seq, acct, ademcoId, ademcoEvent, gg, zone, xdata);
return pkt->raw_len = ademcoMakeHbPacket(pkt->raw, sizeof(pkt->raw),
seq, acct, ademcoId, ademcoEvent, gg, zone, xdata);
}
AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, AdemcoPacket* pkt, size_t* cb_commited)
{
AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, AdemcoPacket* pkt, size_t* cb_commited) {
if (len < 9) { return RESULT_NOT_ENOUGH; }
do{
do {
const char* p = buff;
if (*p++ != ADEMCO_PACKET_PREFIX) {
if (*p++ != ADEMCO_PACKET_PREFIX)
break;
}
char temp[5];
......@@ -878,9 +820,8 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
pkt->len = strtoul(temp, NULL, 16);
p += 4;
size_t len_needed = 9 + pkt->len + 1;
if (len < len_needed) {
if (len < len_needed)
return RESULT_NOT_ENOUGH;
}
if (len_needed >= ADEMCO_PACKET_MAX_LEN) {
dline;
return RESULT_ERROR;
......@@ -940,9 +881,9 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
// #acct
const char* pacct = ++p;
while (p < pcr && *p != '[') {
while (p < pcr && *p != '[') {
if (!isalnum(*p)) { p = NULL; dline; break; }
p++;
p++;
}
if (p == NULL || p >= pcr || *p != '[' || p - pacct >= ADEMCO_PACKET_ACCT_MAX_LEN) { dline; break; }
strncpy(pkt->acct, (const char*)pacct, p - pacct);
......@@ -959,11 +900,9 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
const char* pxdata = p++;
AdemcoXDataLengthFormat xlf = FOUR_DECIMAL;
size_t valid_len;
for (int i = 0; i < 4; i++) {
if (!isxdigit(*(uint8_t*)(p + i))) {
for (int i = 0; i < 4; i++)
if (!isxdigit(*(uint8_t*)(p + i)))
xlf = TWO_HEX;
}
}
if (xlf == FOUR_DECIMAL) {
memcpy(temp, pxdata + 1, 4); temp[4] = '\0';
......@@ -976,7 +915,7 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
if (p >= pcr || *p != ']' || *(p + 1) != '_') { dline; break; }
pkt->xdata.lenghFormat = xlf;
pkt->xdata.raw_len = ++p - pxdata;
pkt->xdata.raw_len = ++p - pxdata;
memcpy(pkt->xdata.raw, pxdata, pkt->xdata.raw_len);
} else {
pkt->xdata.raw_len = 0;
......@@ -989,7 +928,7 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
int ret = sscanf((const char*)p, "_%02d:%02d:%02d,%02d-%02d-%04d",
&tm.tm_hour, &tm.tm_min, &tm.tm_sec,
&tm.tm_mon, &tm.tm_mday, &tm.tm_year);
if (ret != 6) {
if (ret != 6) {
// wont break
}
......@@ -1005,17 +944,15 @@ AdemcoParseResult ademcoPacketParse(const ademco_char_t* buff, size_t len, Ademc
if (p++ != pcr) { dline; break; }
pkt->raw_len = *cb_commited = p - buff;
if (pkt->raw != buff) {
if (pkt->raw != buff)
memcpy(pkt->raw, buff, pkt->raw_len);
}
return RESULT_OK;
} while (0);
return RESULT_ERROR;
}
size_t ademcoHiLoArrayToDecStr(ademco_char_t* str, const uint8_t* arr, size_t len)
{
size_t ademcoHiLoArrayToDecStr(ademco_char_t* str, const uint8_t* arr, size_t len) {
char* p = str;
for (size_t i = 0; i < len; i++) {
char c = (arr[i] >> 4) & 0x0F;
......@@ -1028,21 +965,19 @@ size_t ademcoHiLoArrayToDecStr(ademco_char_t* str, const uint8_t* arr, size_t le
return p - str;
}
size_t ademcoDecStrToHiLoArray(uint8_t* arr, size_t len, const char* str)
{
size_t ademcoDecStrToHiLoArray(uint8_t* arr, size_t len, const char* str) {
char* p = (char*)arr;
size_t slen = str ? strlen(str) : 0;
if (slen > len * 2) {
if (slen > len * 2)
slen = len * 2;
}
for (size_t i = 0; i < slen; i += 2) {
char hi = str[i];
if ('0' <= hi && hi <= '9') {
if (i + 1 < slen) {
char lo = str[i + 1];
if ('0' <= lo && lo <= '9') {
if ('0' <= lo && lo <= '9')
*p++ = (hi << 4) | (lo & 0x0F);
} else {
else {
*p++ = (hi << 4) | 0x0F;
break;
}
......@@ -1050,27 +985,23 @@ size_t ademcoDecStrToHiLoArray(uint8_t* arr, size_t len, const char* str)
*p++ = (hi << 4) | 0x0F;
break;
}
} else {
} else
break;
}
}
while ((char*)arr + len > p) {
while ((char*)arr + len > p)
*p++ = 0xFF;
}
return len;
}
static uint8_t hex2char(uint8_t h) {
h &= 0x0F;
if (h > 9) {
if (h > 9)
return 'A' + h - 10;
} else {
else
return '0' + h;
}
}
size_t ademcoHexArrayToStr(char* str, const uint8_t* arr, size_t len)
{
size_t ademcoHexArrayToStr(char* str, const uint8_t* arr, size_t len) {
char* p = str;
for (size_t i = 0; i < len; i++) {
*p++ = hex2char((arr[i] >> 4) & 0x0F);
......@@ -1080,82 +1011,69 @@ size_t ademcoHexArrayToStr(char* str, const uint8_t* arr, size_t len)
}
static uint8_t char2hex(uint8_t c) {
if ('0' <= c && c <= '9') {
if ('0' <= c && c <= '9')
return c - '0';
} else if ('A' <= c && c <= 'F') {
else if ('A' <= c && c <= 'F')
return c - 'A' + 10;
} else if ('a' <= c && c <= 'f') {
else if ('a' <= c && c <= 'f')
return c - 'a' + 10;
} else {
else
return 0xFF;
}
}
size_t ademcoHexStrToArray(uint8_t* arr, const char* str, uint8_t padding)
{
size_t ademcoHexStrToArray(uint8_t* arr, const char* str, uint8_t padding) {
uint8_t* p = arr;
uint8_t hi = 0, lo = 0;
size_t slen = str ? strlen(str) : 0;
padding &= 0x0F;
for (size_t i = 0; i < slen / 2; i++) {
char c = str[i * 2];
if ((hi = char2hex(c)) == 0xFF) {
if ((hi = char2hex(c)) == 0xFF)
return 0;
}
if (i * 2 + 1 < slen) {
c = str[i * 2 + 1];
if ((lo = char2hex(c)) == 0xFF) {
if ((lo = char2hex(c)) == 0xFF)
return 0;
}
} else {
} else
lo = padding;
}
*p++ = ((hi << 4) & 0xF0) | (lo & 0x0F);
}
return p - arr;
}
size_t ademcoHexStrToArrayN(uint8_t* arr, const char* str, size_t len, uint8_t padding)
{
size_t ademcoHexStrToArrayN(uint8_t* arr, const char* str, size_t len, uint8_t padding) {
uint8_t* p = arr;
uint8_t hi = 0, lo = 0;
padding &= 0x0F;
for (size_t i = 0; i < len / 2; i++) {
char c = str[i * 2];
if ((hi = char2hex(c)) == 0xFF) {
if ((hi = char2hex(c)) == 0xFF)
return 0;
}
if (i * 2 + 1 < len) {
c = str[i * 2 + 1];
if ((lo = char2hex(c)) == 0xFF) {
if ((lo = char2hex(c)) == 0xFF)
return 0;
}
} else {
} else
lo = padding;
}
*p++ = ((hi << 4) & 0xF0) | (lo & 0x0F);
}
return p - arr;
}
size_t ademcoHexStrToArrayN_allow_non_hex_str(uint8_t* arr, const char* str, size_t len, uint8_t padding)
{
size_t ademcoHexStrToArrayN_allow_non_hex_str(uint8_t* arr, const char* str, size_t len, uint8_t padding) {
uint8_t* p = arr;
uint8_t hi = 0, lo = 0;
padding &= 0x0F;
for (size_t i = 0; i < len / 2; i++) {
char c = str[i * 2];
if ((hi = char2hex(c)) == 0xFF) {
if ((hi = char2hex(c)) == 0xFF)
hi = padding;
}
if (i * 2 + 1 < len) {
c = str[i * 2 + 1];
if ((lo = char2hex(c)) == 0xFF) {
if ((lo = char2hex(c)) == 0xFF)
lo = padding;
}
} else {
} else
lo = padding;
}
*p++ = ((hi << 4) & 0xF0) | (lo & 0x0F);
}
return p - arr;
......
......@@ -86,7 +86,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -103,7 +103,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -120,7 +120,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -137,7 +137,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;ADEMCO_EXPORTS;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......
......@@ -94,7 +94,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -111,7 +111,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -128,7 +128,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -145,7 +145,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......
......@@ -94,7 +94,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -112,7 +112,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -130,7 +130,7 @@
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;_DEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......@@ -148,7 +148,7 @@
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;NDEBUG;_LIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
<PrecompiledHeader>NotUsing</PrecompiledHeader>
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
......
#ifdef _WIN32
#define _CRT_SECURE_NO_WARNINGS
#define _WINSOCK_DEPRECATED_NO_WARNINGS
#ifndef NOMINMAX
#define NOMINMAX
......@@ -28,21 +27,18 @@
#include "../../ademco.h"
void op_usage()
{
void op_usage() {
printf("Press A for Arm, D for Disarm, E for Emergency, Q for Quit\n");
}
void usage(const char* name)
{
void usage(const char* name) {
printf("Usage: %s listening_port\n", name);
op_usage();
}
constexpr size_t BUFF_SIZE = 4096;
struct Buffer
{
struct Buffer {
size_t rpos;
size_t wpos;
char buff[BUFF_SIZE];
......@@ -60,8 +56,7 @@ std::mutex mutex = {};
std::vector<AdemcoEvent> evntsWaiting4Send = {};
char pwd[1024] = {};
int setNonBlocking(SOCKET socket)
{
int setNonBlocking(SOCKET socket) {
u_long lngMode = 1;
int ret = ioctl(socket, FIONBIO, (u_long*)&lngMode);
if (ret != 0) {
......@@ -71,9 +66,8 @@ int setNonBlocking(SOCKET socket)
return ret;
}
int main(int argc, char** argv)
{
usage(argv[0]);
int main(int argc, char** argv) {
usage(argv[0]);
#ifdef _WIN32
WSADATA wsaData;
......@@ -97,11 +91,11 @@ int main(int argc, char** argv)
sAddrIn.sin_addr.s_addr = INADDR_ANY;
auto serverSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
int ret = setNonBlocking(serverSock);
int ret = setNonBlocking(serverSock);
if (ret != 0) {
return ret;
}
ret = bind(serverSock, (struct sockaddr*) & sAddrIn, sizeof(sAddrIn));
ret = bind(serverSock, (struct sockaddr*)&sAddrIn, sizeof(sAddrIn));
if (ret != 0) {
fprintf(stderr, "bind failed %d\n", ret);
return ret;
......@@ -129,7 +123,7 @@ int main(int argc, char** argv)
printf("do_accept, select ret=%d\n", nfds);
if (nfds > 0) {
FD_CLR(serverSock, &rfd);
clientSock = accept(serverSock, (struct sockaddr*) & sForeignAddrIn, &nLength);
clientSock = accept(serverSock, (struct sockaddr*)&sForeignAddrIn, &nLength);
int ret = setNonBlocking(clientSock);
if (ret != 0) {
exit(0);
......@@ -159,7 +153,7 @@ int main(int argc, char** argv)
case AID_NULL: // reply ack
{
char ack[1024];
int len = ademcoMakeAckPacket(ack, sizeof(ack), pkt.seq, pkt.acct, 0);
size_t len = ademcoMakeAckPacket(ack, sizeof(ack), pkt.seq, pkt.acct, 0);
printf("S:"); ademcoPrint(ack, len);
send(clientSock, (const char*)ack, len, 0);
break;
......@@ -233,14 +227,14 @@ int main(int argc, char** argv)
close(clientSock); clientSock = INVALID_SOCKET;
clientBuffer.clear();
} else {
clientBuffer.wpos += bytes_transfered;
clientBuffer.wpos += bytes_transfered;
auto result = do_handle();
while (1) {
size_t bytes_not_commited = clientBuffer.wpos - clientBuffer.rpos;
if (bytes_not_commited == 0) {
if (clientBuffer.wpos == BUFF_SIZE) {
clientBuffer.clear();
}
if (bytes_not_commited == 0) {
if (clientBuffer.wpos == BUFF_SIZE) {
clientBuffer.clear();
}
break;
}
......@@ -249,7 +243,7 @@ int main(int argc, char** argv)
memset(clientBuffer.buff + bytes_not_commited, 0, BUFF_SIZE - bytes_not_commited);
clientBuffer.wpos -= clientBuffer.rpos; clientBuffer.rpos = 0;
result = do_handle();
} else {
} else {
result = do_handle();
}
......@@ -281,7 +275,7 @@ int main(int argc, char** argv)
printf("S:"); ademcoPrint(buf, len);
send(clientSock, (const char*)buf, len, 0);
}
}
evntsWaiting4Send.clear();
}
......
......@@ -90,6 +90,7 @@
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
......@@ -104,6 +105,7 @@
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
......@@ -116,6 +118,7 @@
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
......@@ -130,6 +133,7 @@
<SDLCheck>true</SDLCheck>
<ConformanceMode>true</ConformanceMode>
<AdditionalIncludeDirectories>$(SolutionDir)..\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
......
#include "hb_com.h"
#include <string.h>
int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12])
{
int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12]) {
switch (type) {
case HMT_WIFI:
break;
......@@ -17,13 +16,15 @@ int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12])
}
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, };
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));
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 };
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));
return sizeof(hzps) / sizeof(HbZoneProperty);
}
......@@ -35,19 +36,22 @@ int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12])
}
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 };
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));
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 };
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));
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 };
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));
return sizeof(hzps) / sizeof(HbZoneProperty);
}
......@@ -68,8 +72,7 @@ int hbGetAvailableZoneProperties(HbMachineType type, HbZoneProperty props[12])
return 0;
}
uint16_t hbZoneMax(HbMachineType type)
{
uint16_t hbZoneMax(HbMachineType type) {
switch (type) {
case HMT_GPRS_IOT:
case HMT_GPRS:
......@@ -101,18 +104,15 @@ uint16_t hbZoneMax(HbMachineType type)
}
}
int hbIsValidZone(HbMachineType type, uint16_t zone)
{
int hbIsValidZone(HbMachineType type, uint16_t zone) {
return ADEMCO_ZONE_FOR_MACHINE_SELF <= zone && zone <= hbZoneMax(type);
}
int hbIsValidZoneStrict(HbMachineType type, uint16_t zone)
{
int hbIsValidZoneStrict(HbMachineType type, uint16_t zone) {
return ADEMCO_ZONE_MIN <= zone && zone <= hbZoneMax(type);
}
int hbMachineIsSelling(HbMachineType type)
{
int hbMachineIsSelling(HbMachineType type) {
return type == HMT_NETMOD
|| type == HMT_GPRS
|| type == HMT_GPRS_IOT
......@@ -126,30 +126,25 @@ int hbMachineIsSelling(HbMachineType type)
;
}
int hbMachineCanArm(HbMachineType type)
{
int hbMachineCanArm(HbMachineType type) {
return hbMachineIsSelling(type) && (type != HMT_NB);
}
int hbMachineCanDisarm(HbMachineType type)
{
int hbMachineCanDisarm(HbMachineType type) {
return hbMachineIsSelling(type) && (type != HMT_NB);
}
int hbMachineCanEnterSettings(HbMachineType type)
{
int hbMachineCanEnterSettings(HbMachineType type) {
return hbMachineIsSelling(type);
}
int hbMachineCanHalfArm(HbMachineType type)
{
int hbMachineCanHalfArm(HbMachineType type) {
return type == HMT_NETMOD
|| type == HMT_LCD
;
}
int hbMachineCanReportSignalStrength(HbMachineType type)
{
int hbMachineCanReportSignalStrength(HbMachineType type) {
return type == HMT_GPRS
|| type == HMT_GPRS_IOT
|| type == HMT_IOT
......@@ -161,8 +156,7 @@ int hbMachineCanReportSignalStrength(HbMachineType type)
;
}
int hbMachineCanReportBySMS(HbMachineType type)
{
int hbMachineCanReportBySMS(HbMachineType type) {
return type == HMT_GPRS
|| type == HMT_LCD
|| type == HMT_TRUE_COLOR
......@@ -171,46 +165,40 @@ int hbMachineCanReportBySMS(HbMachineType type)
;
}
int hbMachineHasWiredZone(HbMachineType type)
{
int hbMachineHasWiredZone(HbMachineType type) {
return type == HMT_NETMOD
|| type == HMT_TRUE_COLOR
|| type == HMT_3_SECTION
;
}
AdemcoZone hbWiredZoneMin(HbMachineType type)
{
AdemcoZone hbWiredZoneMin(HbMachineType type) {
switch (type) {
case HMT_NETMOD: return 1;
case HMT_TRUE_COLOR: return 1;
case HMT_3_SECTION: return 61;
case HMT_NETMOD: return 1;
case HMT_TRUE_COLOR: return 1;
case HMT_3_SECTION: return 61;
default: return 0;
}
}
AdemcoZone hbWiredZoneMax(HbMachineType type)
{
AdemcoZone hbWiredZoneMax(HbMachineType type) {
switch (type) {
case HMT_NETMOD: return 8;
case HMT_TRUE_COLOR: return 8;
case HMT_3_SECTION: return 68;
case HMT_NETMOD: return 8;
case HMT_TRUE_COLOR: return 8;
case HMT_3_SECTION: return 68;
default: return 0;
}
}
int hbMachineCanDirectlyWriteZone(HbMachineType type)
{
int hbMachineCanDirectlyWriteZone(HbMachineType type) {
return type == HMT_NETMOD;
}
int hbMachineCanLinkSubMachine(HbMachineType type)
{
int hbMachineCanLinkSubMachine(HbMachineType type) {
return type == HMT_NETMOD;
}
int hbZonePropCanReportLost(HbZoneProperty zp)
{
int hbZonePropCanReportLost(HbZoneProperty zp) {
switch (zp) {
case HZP_BUGLAR:
case HZP_EMERGENCY:
......@@ -224,59 +212,48 @@ int hbZonePropCanReportLost(HbZoneProperty zp)
}
}
void hbInitMachineTimer(HbMachineTimer* timer)
{
void hbInitMachineTimer(HbMachineTimer* timer) {
memset(timer->data, 25, sizeof(timer));
}
int hbIsValidTimePoint(HbMachineTimePoint* tp)
{
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) {
void hbTimePointToGreenwich(HbMachineTimePoint* tp) {
if (tp && tp->hour != 25)
tp->hour = (tp->hour + 16) % 24;
}
}
void hbTimePointFromGreenwich(HbMachineTimePoint* tp)
{
if (tp && tp->hour != 25) {
void hbTimePointFromGreenwich(HbMachineTimePoint* tp) {
if (tp && tp->hour != 25)
tp->hour = (tp->hour + 8) % 24;
}
}
int hbIsValidTimer(HbTimer* timer)
{
int hbIsValidTimer(HbTimer* timer) {
return timer && hbIsValidTimePoint(&timer->armAt) && hbIsValidTimePoint(&timer->disarmAt);
}
int hbIsValidMachineTimer(HbMachineTimer* timer)
{
int hbIsValidMachineTimer(HbMachineTimer* timer) {
return timer && hbIsValidTimer(&timer->timer[0]) && hbIsValidTimer(&timer->timer[1]);
}
void hbMachineTimerToGreenwich(HbMachineTimer* timer)
{
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)
{
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)
{
AdemcoEvent hbMachineStatusToAdemcoEvent(HbMachineStatus status) {
switch (status) {
case HMS_ARM: return EVENT_ARM;
case HMS_DISARM: return EVENT_DISARM;
......@@ -286,8 +263,7 @@ AdemcoEvent hbMachineStatusToAdemcoEvent(HbMachineStatus status)
}
}
HbMachineStatus hbMachineStatusFromAdemcoEvent(AdemcoEvent ademcoEvent)
{
HbMachineStatus hbMachineStatusFromAdemcoEvent(AdemcoEvent ademcoEvent) {
switch (ademcoEvent) {
case EVENT_ARM:
return HMS_ARM;
......@@ -304,8 +280,7 @@ HbMachineStatus hbMachineStatusFromAdemcoEvent(AdemcoEvent ademcoEvent)
}
}
AdemcoEvent hbMachineTypeToAdemcoEvent(HbMachineType type)
{
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;
......@@ -322,8 +297,7 @@ AdemcoEvent hbMachineTypeToAdemcoEvent(HbMachineType type)
}
}
HbMachineType hbMachineTypeFromAdemcoEvent(AdemcoEvent ademcoEvent)
{
HbMachineType hbMachineTypeFromAdemcoEvent(AdemcoEvent ademcoEvent) {
switch (ademcoEvent) {
case EVENT_I_AM_NET_MODULE: return HMT_NETMOD;
case EVENT_I_AM_GPRS: return HMT_GPRS;
......@@ -340,8 +314,7 @@ HbMachineType hbMachineTypeFromAdemcoEvent(AdemcoEvent ademcoEvent)
}
}
AdemcoEvent hbZonePropertyToAdemcoEvent(HbZoneProperty zp)
{
AdemcoEvent hbZonePropertyToAdemcoEvent(HbZoneProperty zp) {
switch (zp) {
case HZP_BUGLAR:
case HZP_BUGLAR_HALF: return EVENT_BURGLAR;
......@@ -355,8 +328,7 @@ AdemcoEvent hbZonePropertyToAdemcoEvent(HbZoneProperty zp)
}
}
const char* hbMachineStatusToString(HbMachineStatus status)
{
const char* hbMachineStatusToString(HbMachineStatus status) {
switch (status) {
case HMS_ARM: return "Arm";
case HMS_HALF_ARM: return "Half-Arm";
......@@ -366,8 +338,7 @@ const char* hbMachineStatusToString(HbMachineStatus status)
}
}
const char* hbMachineStatusToStringChinese(HbMachineStatus status)
{
const char* hbMachineStatusToStringChinese(HbMachineStatus status) {
switch (status) {
case HMS_ARM: return "布防";
case HMS_HALF_ARM: return "半布防";
......@@ -377,8 +348,7 @@ const char* hbMachineStatusToStringChinese(HbMachineStatus status)
}
}
const char* hbMachineTypeToString(HbMachineType type)
{
const char* hbMachineTypeToString(HbMachineType type) {
switch (type) {
case HMT_WIFI: return "0 WiFi";
case HMT_CAMERA: return "1 Camera";
......@@ -396,8 +366,7 @@ const char* hbMachineTypeToString(HbMachineType type)
}
}
const char* hbMachineTypeToStringChinese(HbMachineType type)
{
const char* hbMachineTypeToStringChinese(HbMachineType type) {
switch (type) {
case HMT_WIFI: return "0 WiFi主机";
case HMT_CAMERA: return "1 摄像头主机";
......@@ -415,8 +384,7 @@ const char* hbMachineTypeToStringChinese(HbMachineType type)
}
}
const char* hbZonePropertyToString(HbZoneProperty zp)
{
const char* hbZonePropertyToString(HbZoneProperty zp) {
switch (zp) {
case HZP_BUGLAR: return "HZP_BUGLAR";
case HZP_EMERGENCY: return "HZP_EMERGENCY";
......@@ -438,8 +406,7 @@ const char* hbZonePropertyToString(HbZoneProperty zp)
}
}
const char* hbZonePropertyToStringChinese(HbZoneProperty zp)
{
const char* hbZonePropertyToStringChinese(HbZoneProperty zp) {
switch (zp) {
case HZP_BUGLAR: return "匪警全局";
case HZP_EMERGENCY: return "匪警紧急";
......@@ -461,29 +428,29 @@ const char* hbZonePropertyToStringChinese(HbZoneProperty zp)
}
}
const char* hbGetZoneFormatString(HbMachineType type)
{
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"; }
if (10 < zone && zone < 100)
return "%02d";
else if (zone < 1000)
return "%03d";
else
return "%d";
}
void hbSum(uint8_t* data, size_t len)
{
void hbSum(uint8_t* data, size_t len) {
uint8_t sum = 0;
uint8_t* p = data;
while (p != data + len - 1) {
while (p != data + len - 1)
sum += *p++;
}
*p = sum;
}
int hbCheckSum(const uint8_t* data, size_t len)
{
int hbCheckSum(const uint8_t* data, size_t len) {
uint8_t sum = 0;
const uint8_t* p = data;
while (p != data + len - 1) {
while (p != data + len - 1)
sum += *p++;
}
return sum == *p;
}
......@@ -493,8 +460,7 @@ if (cd) { \
memcpy(cd->data, data, len & 0xFF); \
}
HbComRequestType hbComParseRequest(const uint8_t* data, size_t len, HbComData* cd)
{
HbComRequestType hbComParseRequest(const uint8_t* data, size_t len, HbComData* cd) {
do {
if (len < 5) { break; }
if (data[0] != 0xEB) { break; }
......@@ -545,7 +511,6 @@ HbComRequestType hbComParseRequest(const uint8_t* data, size_t len, HbComData* c
copy_data_to_com;
return HbComReq_AD;
}
default:
break;
}
......@@ -608,14 +573,12 @@ HbComRequestType hbComParseRequest(const uint8_t* data, size_t len, HbComData* c
return HbComReq_Invalid;
}
ADEMCO_EXPORT_SYMBOL HbComRequestType hbComParseXDataRequest(const AdemcoXDataSegment* xdata, HbComData* cd)
{
ADEMCO_EXPORT_SYMBOL HbComRequestType hbComParseXDataRequest(const AdemcoXDataSegment* xdata, HbComData* cd) {
if (!xdata) { return HbComReq_Invalid; }
return hbComParseRequest((const uint8_t*)ademcoXDataGetValidContentAddr(xdata), ademcoXDataGetValidContentLen(xdata), cd);
}
HbComResponseType hbComParseResponse(const uint8_t* data, size_t len, HbComData* cd)
{
HbComResponseType hbComParseResponse(const uint8_t* data, size_t len, HbComData* cd) {
do {
if (len < 7) { break; } // 所有的 response ,长度最小为 7
if (data[0] != 0xEB || data[1] != 0xBA || data[2] != 0x3F) { break; }
......@@ -737,32 +700,27 @@ HbComResponseType hbComParseResponse(const uint8_t* data, size_t len, HbComData*
return HbComResp_Invalid;
}
HbComResponseType hbComParseXDataResponse(const AdemcoXDataSegment* xdata, HbComData* cd)
{
HbComResponseType hbComParseXDataResponse(const AdemcoXDataSegment* xdata, HbComData* cd) {
if (!xdata) { return HbComReq_Invalid; }
return hbComParseResponse((const uint8_t*)ademcoXDataGetValidContentAddr(xdata), ademcoXDataGetValidContentLen(xdata), cd);
}
void hbComMakeReqA0_getMachineStatus(HbComData* data)
{
void hbComMakeReqA0_getMachineStatus(HbComData* data) {
memcpy(data->data, HbComReq_A0_data, HbComReq_A0_len);
data->len = HbComReq_A0_len;
}
void hbComMakeReqA1_getMachineZones(HbComData* data)
{
void hbComMakeReqA1_getMachineZones(HbComData* data) {
memcpy(data->data, HbComReq_A1_data, HbComReq_A1_len);
data->len = HbComReq_A1_len;
}
void hbComMakeReqA2_getMoreMachineZones(HbComData* data)
{
void hbComMakeReqA2_getMoreMachineZones(HbComData* data) {
memcpy(data->data, HbComReq_A2_data, HbComReq_A2_len);
data->len = HbComReq_A2_len;
}
void hbComMakeReqA3_modifyMachineZone(HbComData* data, uint8_t zone, HbZoneProperty prop, HbComReq_A3_op op)
{
void hbComMakeReqA3_modifyMachineZone(HbComData* data, uint8_t zone, HbZoneProperty prop, HbComReq_A3_op op) {
memcpy(data->data, HbComReq_A3_head, 5);
data->data[5] = zone;
data->data[6] = prop;
......@@ -771,22 +729,19 @@ void hbComMakeReqA3_modifyMachineZone(HbComData* data, uint8_t zone, HbZonePrope
hbSum(data->data, data->len);
}
void hbComMakeReqA5_getMachineTimer(HbComData* data)
{
void hbComMakeReqA5_getMachineTimer(HbComData* data) {
memcpy(data->data, HbComReq_A5_data, HbComReq_A5_len);
data->len = HbComReq_A5_len;
}
void hbComMakeReqA7_setMachineTimer(HbComData* data, HbMachineTimer* timer)
{
void hbComMakeReqA7_setMachineTimer(HbComData* data, HbMachineTimer* timer) {
memcpy(data->data, HbComReq_A7_head, 5);
memcpy(data->data + 5, timer, sizeof(*timer));
data->len = HbComReq_A7_len;
hbSum(data->data, data->len);
}
void hbComMakeReqAA_modifyMachineZoneLostConfig(HbComData* data, uint8_t zone, int on)
{
void hbComMakeReqAA_modifyMachineZoneLostConfig(HbComData* data, uint8_t zone, int on) {
memcpy(data->data, HbComReq_AA_head, 5);
data->data[5] = zone;
data->data[6] = !!on;
......@@ -794,20 +749,17 @@ void hbComMakeReqAA_modifyMachineZoneLostConfig(HbComData* data, uint8_t zone, i
hbSum(data->data, data->len);
}
void hbComMakeReqAC_getMachineZoneLostConfig(HbComData* data)
{
void hbComMakeReqAC_getMachineZoneLostConfig(HbComData* data) {
memcpy(data->data, HbComReq_AC_data, HbComReq_AC_len);
data->len = HbComReq_AC_len;
}
void hbComMakeReqAD_getMoreMachineZoneLostConfig(HbComData* data)
{
void hbComMakeReqAD_getMoreMachineZoneLostConfig(HbComData* data) {
memcpy(data->data, HbComReq_AD_data, HbComReq_AD_len);
data->len = HbComReq_AD_len;
}
void hbComMakeReqAE_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which p1, HbCom_3sec_status status)
{
void hbComMakeReqAE_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which p1, HbCom_3sec_status status) {
memcpy(data->data, HbComReq_AE_head, 5);
data->data[5] = p1;
data->data[6] = status;
......@@ -815,28 +767,24 @@ void hbComMakeReqAE_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which p
hbSum(data->data, data->len);
}
void hbComMakeReqB0_get3SectionMachineStatus(HbComData* data)
{
void hbComMakeReqB0_get3SectionMachineStatus(HbComData* data) {
memcpy(data->data, HbComReq_B0_data, HbComReq_B0_len);
data->len = HbComReq_B0_len;
}
void hbComMakeReqRD_acct(HbComData* data)
{
void hbComMakeReqRD_acct(HbComData* data) {
memcpy(data->data, HbComReq_RD_acct_data, HbComReq_RD_acct_len);
data->len = HbComReq_RD_acct_len;
}
void hbComMakeReqWR_acct(HbComData* data, const char* acct)
{
void hbComMakeReqWR_acct(HbComData* data, const char* acct) {
memcpy(data->data, HbComReq_WR_acct_head, 5);
ademcoDecStrToHiLoArray(data->data + 5, 9, acct);
data->len = HbComReq_WR_acct_len;
hbSum(data->data, data->len);
}
void hbComResp_A2_Iter_init(HbComResp_A2_Iter* iter, const HbComData* com)
{
void hbComResp_A2_Iter_init(HbComResp_A2_Iter* iter, const HbComData* com) {
if (!iter || !com)return;
memcpy(&iter->com, com, sizeof(HbComData));
iter->i = 0;
......@@ -849,19 +797,16 @@ void hbComResp_A2_Iter_init(HbComResp_A2_Iter* iter, const HbComData* com)
}
}
HbComResp_A2_p1 hbComResp_A2_Iter_next(HbComResp_A2_Iter* iter, HbZoneAndProperty* zp)
{
if (iter->i == iter->total) {
HbComResp_A2_p1 hbComResp_A2_Iter_next(HbComResp_A2_Iter* iter, HbZoneAndProperty* zp) {
if (iter->i == iter->total)
return HbComResp_A2_p1_nomore;
}
zp->zone = iter->com.data[6 + iter->i * 2];
zp->prop = (HbZoneProperty)iter->com.data[7 + iter->i * 2];
iter->i++;
return HbComResp_A2_p1_more;
}
void hbComMakeRespA0_getMachineStatus(HbComData* data, HbMachineStatus status, HbMachineType type)
{
void hbComMakeRespA0_getMachineStatus(HbComData* data, HbMachineStatus status, HbMachineType type) {
memcpy(data->data, HbComResp_A0_head, 6);
data->data[6] = status;
data->data[7] = type;
......@@ -869,8 +814,7 @@ void hbComMakeRespA0_getMachineStatus(HbComData* data, HbMachineStatus status, H
hbSum(data->data, data->len);
}
void hbComMakeRespA2_getMachineZones(HbComData* data, size_t count, AdemcoZone* zones, HbZoneProperty* props, HbComResp_A2_p1 p1)
{
void hbComMakeRespA2_getMachineZones(HbComData* data, size_t count, AdemcoZone* zones, HbZoneProperty* props, HbComResp_A2_p1 p1) {
if (count > HbComResp_A2_max_zone) { return; }
memcpy(data->data, HbComResp_A2_head, 6);
data->data[3] = (HbComResp_A2_len_min + count * 2) & 0xFF;
......@@ -884,14 +828,12 @@ void hbComMakeRespA2_getMachineZones(HbComData* data, size_t count, AdemcoZone*
hbSum(data->data, data->len);
}
void hbComMakeRespA3_waitingSignal(HbComData* data)
{
void hbComMakeRespA3_waitingSignal(HbComData* data) {
memcpy(data->data, HbComResp_A3_data, HbComResp_A3_len);
data->len = HbComResp_A3_len;
}
void hbComMakeRespA4_modifyMachineZone(HbComData* data, AdemcoZone zone, HbZoneProperty prop, HbComResp_A4_p3 p3)
{
void hbComMakeRespA4_modifyMachineZone(HbComData* data, AdemcoZone zone, HbZoneProperty prop, HbComResp_A4_p3 p3) {
memcpy(data->data, HbComResp_A4_head, 6);
data->data[6] = zone & 0xFF;
data->data[7] = prop;
......@@ -900,28 +842,24 @@ void hbComMakeRespA4_modifyMachineZone(HbComData* data, AdemcoZone zone, HbZoneP
hbSum(data->data, data->len);
}
void hbComMakeRespA6_getMachineTimer(HbComData* data, HbMachineTimer* timer)
{
void hbComMakeRespA6_getMachineTimer(HbComData* data, HbMachineTimer* timer) {
memcpy(data->data, HbComResp_A6_head, 6);
memcpy(data->data + 6, timer->data, sizeof(*timer));
data->len = HbComResp_A6_len;
hbSum(data->data, data->len);
}
void hbComMakeRespA7_setMachineTimer(HbComData* data)
{
void hbComMakeRespA7_setMachineTimer(HbComData* data) {
memcpy(data->data, HbComResp_A7_data, HbComResp_A7_len);
data->len = HbComResp_A7_len;
}
void hbComMakeRespA8_reject(HbComData* data)
{
void hbComMakeRespA8_reject(HbComData* data) {
memcpy(data->data, HbComResp_A8_data, HbComResp_A8_len);
data->len = HbComResp_A8_len;
}
void hbComMakeRespAB_modifyMachineZoneLostConfig(HbComData* data, AdemcoZone zone, HbComResp_AB_p2 p2)
{
void hbComMakeRespAB_modifyMachineZoneLostConfig(HbComData* data, AdemcoZone zone, HbComResp_AB_p2 p2) {
memcpy(data->data, HbComResp_AB_head, 6);
data->data[6] = zone & 0xFF;
data->data[7] = p2;
......@@ -929,8 +867,7 @@ void hbComMakeRespAB_modifyMachineZoneLostConfig(HbComData* data, AdemcoZone zon
hbSum(data->data, data->len);
}
void hbComMakeRespAD_getMachineZoneLostConfig(HbComData* data, HbComResp_AD_p1 p1, size_t count, AdemcoZone* zones, HbComResp_AD_p2 p2)
{
void hbComMakeRespAD_getMachineZoneLostConfig(HbComData* data, HbComResp_AD_p1 p1, size_t count, AdemcoZone* zones, HbComResp_AD_p2 p2) {
if (count > HbComResp_AD_max_zone) { return; }
memcpy(data->data, HbComResp_AD_head, 6);
data->data[3] = (HbComResp_AD_len_min + (p1 == HbComResp_AD_p1_single ? count : count * 2)) & 0xFF;
......@@ -949,8 +886,7 @@ void hbComMakeRespAD_getMachineZoneLostConfig(HbComData* data, HbComResp_AD_p1 p
hbSum(data->data, data->len);
}
void hbComMakeRespAF_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which p1, HbCom_3sec_status status)
{
void hbComMakeRespAF_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which p1, HbCom_3sec_status status) {
memcpy(data->data, HbComResp_AF_head, 6);
data->data[6] = p1;
data->data[7] = status;
......@@ -959,17 +895,13 @@ void hbComMakeRespAF_set3SectionMachineStatus(HbComData* data, HbCom_3sec_which
}
void hbComMakeRespB1_get3SectionMachineStatus(HbComData* data, HbMachineStatus statusMachine,
HbMachineStatus statusSec1, HbMachineStatus statusSec2, HbMachineStatus statusSec3)
{
HbMachineStatus statusSec1, HbMachineStatus statusSec2, HbMachineStatus statusSec3) {
memcpy(data->data, HbComResp_B1_head, 6);
data->data[6] = (statusMachine << 6) | (statusSec1 << 4) | (statusSec2 << 2) | (statusSec3);
data->len = HbComResp_B1_len;
hbSum(data->data, data->len);
}
void hbComDataToAdemcoXData(const HbComData* const data, AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, AdemcoXDataTransform xtr)
{
void hbComDataToAdemcoXData(const HbComData* const data, AdemcoXDataSegment* xdata, AdemcoXDataLengthFormat xlf, AdemcoXDataTransform xtr) {
ademcoMakeXData(xdata, xlf, xtr, (const char*)data->data, data->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