[Hamlib-cvs-digest] CVS: hamlib/src misc.c,1.2,1.3 misc.h,1.2,1.3
Library to control radio transceivers and receivers
Brought to you by:
n0nb
From: Stephane F. <f4...@us...> - 2000-10-16 21:53:24
|
Update of /cvsroot/hamlib/hamlib/src In directory slayer.i.sourceforge.net:/tmp/cvs-serv27604 Modified Files: misc.c misc.h Log Message: * fix in to_bcd(), in case of odd len numbers * Added to_bcd_be/from_bcd_be for Big endian BCD representation Index: misc.c =================================================================== RCS file: /cvsroot/hamlib/hamlib/src/misc.c,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** misc.c 2000/10/08 21:43:00 1.2 --- misc.c 2000/10/16 21:53:22 1.3 *************** *** 144,149 **** bcd_data[i] = a; } ! if (bcd_len&1) bcd_data[i] |= freq%10; /* NB: high nibble is left uncleared */ return bcd_data; --- 144,151 ---- bcd_data[i] = a; } ! if (bcd_len&1) { ! bcd_data[i] &= 0xf0; bcd_data[i] |= freq%10; /* NB: high nibble is left uncleared */ + } return bcd_data; *************** *** 174,177 **** --- 176,225 ---- } + /* + * Same as to_bcd, but in Big Endian mode + */ + unsigned char * + to_bcd_be(unsigned char bcd_data[], unsigned long long freq, int bcd_len) + { + int i; + unsigned char a; + + /* '450'-> 0,4;5,0 */ + + for (i=(bcd_len/2)-1; i >= 0; i--) { + a = freq%10; + freq /= 10; + a |= (freq%10)<<4; + freq /= 10; + bcd_data[i] = a; + } + if (bcd_len&1) { + bcd_data[0] &= 0xf0; + bcd_data[0] |= freq%10; /* NB: high nibble is left uncleared */ + } + + return bcd_data; + } + + /* + * Same as from_bcd, but in Big Endian mode + */ + unsigned long long from_bcd_be(const unsigned char bcd_data[], int bcd_len) + { + int i; + freq_t f = 0; + + if (bcd_len&1) + f = bcd_data[0] & 0x0f; + + for (i=bcd_len&1; i < (bcd_len+1)/2; i++) { + f *= 10; + f += bcd_data[i]>>4; + f *= 10; + f += bcd_data[i] & 0x0f; + } + + return f; + } /* Index: misc.h =================================================================== RCS file: /cvsroot/hamlib/hamlib/src/misc.h,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -r1.2 -r1.3 *** misc.h 2000/10/08 21:43:41 1.2 --- misc.h 2000/10/16 21:53:22 1.3 *************** *** 75,78 **** --- 75,84 ---- unsigned long long from_bcd(const unsigned char bcd_data[], int bcd_len); + /* + * same as to_bcd and from_bcd, but in Big Endian mode + */ + unsigned char *to_bcd_be(unsigned char bcd_data[], unsigned long long freq, int bcd_len); + unsigned long long from_bcd_be(const unsigned char bcd_data[], int bcd_len); + #endif /* _MISC_H */ |