Commit 06734ec6 authored by captainwong's avatar captainwong

update code style

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