Compare commits

...

4 Commits

Author SHA1 Message Date
60d292b3ea calcout support was missing 2011-10-18 14:54:35 +00:00
5ce9b737cf remove compiler warning 2011-10-13 15:42:00 +00:00
7bcb494044 allow checksums in decimal ascii 2011-10-13 15:39:41 +00:00
13758eb08e bugfix: too high array index 2011-10-13 15:37:28 +00:00
3 changed files with 28 additions and 8 deletions

View File

@ -34,7 +34,6 @@ SOURCES += $(FORMATS:%=src/%Converter.cc)
SOURCES += $(BUSSES:%=src/%Interface.cc)
SOURCES += $(wildcard src/Stream*.cc)
SOURCES += src/StreamVersion.c
SOURCES_3.14 += src/devcalcoutStream.c
HEADERS += StreamFormat.h
HEADERS += StreamFormatConverter.h
@ -44,6 +43,9 @@ HEADERS += StreamError.h
ifeq (${EPICS_BASETYPE},3.13)
USR_INCLUDES += -include $(INSTALL_INCLUDE)/compat3_13.h
endif
ifeq (${EPICS_BASETYPE},3.14)
RECORDTYPES += calcout
endif
StreamCore.o: streamReferences

View File

@ -265,7 +265,7 @@ static ulong crc_0x04C11DB7(const uchar* data, ulong len, ulong crc)
{
// x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 +
// x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0 (0x04C11DB7)
const static ulong table[] = {
const static unsigned int table[] = {
0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
@ -340,7 +340,7 @@ static ulong crc_0x04C11DB7_r(const uchar* data, ulong len, ulong crc)
// x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 +
// x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + x^0 (0x04C11DB7)
// reflected
const static ulong table[] = {
const static unsigned int table[] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
@ -545,9 +545,9 @@ printPseudo(const StreamFormat& format, StreamBuffer& output)
debug("ChecksumConverter %s: output to check: \"%s\"\n",
checksumMap[fnum].name, output.expand(start,length)());
sum = checksumMap[fnum].xorout ^ checksumMap[fnum].func(
sum = (checksumMap[fnum].xorout ^ checksumMap[fnum].func(
reinterpret_cast<uchar*>(output(start)), length,
checksumMap[fnum].init) & mask[checksumMap[fnum].bytes];
checksumMap[fnum].init)) & mask[checksumMap[fnum].bytes];
debug("ChecksumConverter %s: output checksum is 0x%lX\n",
checksumMap[fnum].name, sum);
@ -606,9 +606,9 @@ scanPseudo(const StreamFormat& format, StreamBuffer& input, long& cursor)
return -1;
}
sum = checksumMap[fnum].xorout ^ checksumMap[fnum].func(
sum = (checksumMap[fnum].xorout ^ checksumMap[fnum].func(
reinterpret_cast<uchar*>(input(start)), length,
checksumMap[fnum].init) & mask[checksumMap[fnum].bytes];
checksumMap[fnum].init)) & mask[checksumMap[fnum].bytes];
debug("ChecksumConverter %s: input checksum is 0x%0*lX\n",
checksumMap[fnum].name, 2*checksumMap[fnum].bytes, sum);
@ -616,6 +616,24 @@ scanPseudo(const StreamFormat& format, StreamBuffer& input, long& cursor)
int i,j;
unsigned inchar;
if (format.flags & sign_flag) // decimal
{
ulong sumin = 0;
// get number of decimal digits from number of bytes: ceil(xbytes*2.5)
j = (checksumMap[fnum].bytes+1)*25/10-2;
for (i = 0; i < j; i++)
{
inchar = input[cursor+i];
if (isdigit(inchar)) sumin = sumin*10+inchar-'0';
else break;
}
if (sumin==sum) return i;
error("Input %0*lu does not match checksum %0*lu\n",
i, sumin, j, sum);
return -1;
}
if (format.flags & alt_flag) // lsb first (little endian)
{
for (i = 0; i < checksumMap[fnum].bytes; i++)

View File

@ -742,7 +742,7 @@ Protocol(const Protocol& p, StreamBuffer& name, int _line)
int i;
const char* nextparameter;
parameter[0] = protocolname();
for (i = 0; i < 10; i++)
for (i = 0; i < 9; i++)
{
debug("StreamProtocolParser::Protocol::Protocol $%d=\"%s\"\n",
i, parameter[i]);