17 #include <sys/types.h>
21 #define HILO(x) (x##_hi << 8 | x##_lo)
22 #define HILOHILO(x) (x##_hi_hi << 24 | x##_hi_lo << 16 | x##_lo_hi << 8 | x##_lo_lo)
23 #define BCD_TIME_TO_SECONDS(x) ((3600 * ((10*((x##_h & 0xF0)>>4)) + (x##_h & 0xF))) + \
24 (60 * ((10*((x##_m & 0xF0)>>4)) + (x##_m & 0xF))) + \
25 ((10*((x##_s & 0xF0)>>4)) + (x##_s & 0xF)))
41 void assign(
const unsigned char*data,
int size,
bool doCopy=
true);
72 virtual void assign(
const unsigned char*data,
int size) = 0;
76 {
return u_int16_t((data[index] << 8) | data[index+1]); }
78 {
return u_int32_t((data[index] << 24) | (data[index+1] << 16) | (data[index+2] << 8) | data[index+3]); }
90 const unsigned char*
data;
106 class DataOwnData :
public Data {
110 virtual void assign(
const unsigned char*data,
int size);
113 class DataForeignData :
public Data {
117 virtual void assign(
const unsigned char*data,
int size);
134 virtual void Parse() = 0;
141 time_t
getTime(
unsigned char date_hi,
unsigned char date_lo,
unsigned char timehr,
unsigned char timemi,
unsigned char timese);
142 time_t
getDuration(
unsigned char timehr,
unsigned char timemi,
unsigned char timese);
143 inline unsigned char bcdToDec(
unsigned char b) {
return (
unsigned char)(((b >> 4) & 0x0F) * 10 + (b & 0x0F)); }
149 CRC32(
const char *d,
int len, u_int32_t CRCvalue=0xFFFFFFFF);
151 static bool isValid(
const char *d,
int len, u_int32_t CRCvalue=0xFFFFFFFF) {
return crc32(d, len, CRCvalue) == 0; }
152 static u_int32_t
crc32(
const char *d,
int len, u_int32_t CRCvalue);