Fluke user manual 2620A/2625A, Figure E-1. ASCII String Decoding

Models: 2625A 2620A

1 197
Download 197 pages 4.31 Kb
Page 182
Image 182

2620A/2625A

Users Manual

/*

-* decode(): Decode LOG_BIN? response string into raw byte stream

**

**Decoding is done on multiples of four input bytes:

**

543210

543210

543210

543210

(bit number in ASCII bytes)

**+--------+--------+--------+--------+

**

src[0] src[1] src[2] src[3]

ASCII string input

**+--------+--------+--------+--------+

**

765432

 

107654

321076

543210

(bit number in raw bytes)

**

/

 

/

/

 

 

**

/

 

/

/

 

 

**

 

/

/

 

 

**

/

 

/

 

 

**

 

/

 

 

**

 

/

 

 

**

 

 

 

**

76543210

76543210 76543210

 

(bit number in raw bytes)

**+--------+--------+--------+

**

dst[0] dst[1] dst[2]

Raw data output

**+--------+--------+--------+

**Inputs:

**

dst

Destination for binary data (must have enough space

**allocated; the maximum needed is 6 timestamp bytes + 3

**bytes for temp units, measurement rate, and digital I/O

**+ 4 bytes/float * 22 floating point values = 97 bytes).

**

src

Source

ASCII string

(null

terminated)

**

 

 

 

 

 

** Outputs:

 

 

 

 

**

dst

Set to

binary data,

based

on ASCII string

**

 

 

 

 

 

**Returns:

**Number of bytes placed in destination buffer

*/

int

decode(dst, src) unsigned char *dst; char *src;

{

/* src

to dst xlate */

 

 

static

struct nibtab_s

{

 

int lindex;

 

 

 

int lmask;

 

 

 

int lshift;

 

 

 

int rindex;

 

 

 

int rmask;

 

 

 

int rshift;

 

 

 

} nibtab[3] = {

 

 

 

/*

left

 

right */

 

0,

0x3f, 2,

1,

0x30, 4,

/* dst[0] from src[0] and src[1] */

1,

0x0f, 4,

2,

0x3c, 2,

/* dst[1] from src[1] and src[2] */

2,

0x03, 6,

3,

0x3f, 0,

/* dst[2] from src[2] and src[3] */

};

 

 

 

 

auto unsigned char n; auto struct nibtab_s *t; auto unsigned char tmpsrc[4]; auto int dst_bytes;

/* Number of bytes created */ dst_bytes = 0;

/* Process src in chunks of four */ while (*src) {

/* Copy source, filing "holes" at end with zeros */ for (n = 0; n < 4; n++) {

if (*src)

tmpsrc[n] = *src++ - ’0’;

else

tmpsrc[n] = 0;

}

/* Mung source into destination */

for (t = nibtab; t < &nibtab[3]; t++) {

*dst = (tmpsrc[t->lindex] & t->lmask) << t->lshift; *dst = (tmpsrc[t->rindex] & t->rmask) >> t->rshift;

dst++;

dst_bytes++;

}

}

return (dst_bytes);

}

Figure E-1. ASCII String Decoding

E-2

Page 182
Image 182
Fluke user manual 2620A/2625A, Figure E-1. ASCII String Decoding