![background image](http://html1.mh-extra.com/html/omega/sbr-ew100/sbr-ew100_user-manual_4033456075.webp)
5-4
IMSBR08-E2
If the data length of the buffer is odd, a “0” is padded so that it is even. (1) through (6) are summed as
unsigned two-byte integers (unsigned short). If the digit overflows a “1” is added. Finally, the result is bit-
wise inverted.
Sample Program
The sum value is determined using the following sample program, and the calculated result is returned. The
sum determined by the sample program can be compared with the header sum of the output BINARY header
section and the data sum of the output BINARY footer section.
/*
* Sum Calculation Function (for a 32-bit CPU)
*
* Parameters
buff: Pointer to the top of the data on which the sum is calculated
*
len: Length of the data on which the sum is calculated
* Return value:
Calculated sum
*/
i n t
cksum(unsigned char *buff, int len)
{
unsigned short *p;
/* Pointer to the next two-byte data word in the buffer that is to be
summed. */
unsigned int csum;
/* Checksum value */
i n t
i ;
i n t
o d d ;
csum = 0;
/* Initialize. */
odd = len%2;
/* Check whether or not the number of data points is even. */
len >>= 1;
/* Determine the number of data points using a “short” data type. */
p = (unsigned short *)buff;
for(i=0;i<len;i++)
/* Sum using an unsigned short data type. */
csum += *p++;
if(odd){
/* When the data length is odd */
union tmp{
/* Pad with a 0, and add to the unsigned short data.
*/
unsigned short s;
unsigned char
c[2];
}tmp;
tmp.c[1] = 0;
tmp.c[0] = *((unsigned char *)p);
csum += tmp.s;
}
if((csum = (csum & 0xffff) + ((csum>>16) & 0xffff)) >
0xffff)
/* Add the overflowed digits */
csum = csum - 0xffff;
/* If the digit overflows again, add a 1. */
return((~csum) & 0xffff);
/* bit inversion */
}
5.1 Response Syntax
Summary of Contents for SBR-EW100
Page 1: ...IMSBR08 E2 SBR EW100 EW180 Recorder Communication Interface User s Manual...
Page 2: ......
Page 99: ...3 2002...