RS92: Reed-Solomon ECC

dump
Zilog80 2016-10-03 21:20:03 +02:00
rodzic ad84b216d5
commit 42d63cee45
1 zmienionych plików z 8 dodań i 10 usunięć

Wyświetl plik

@ -127,7 +127,7 @@ int almanac = 0,
*/ */
#define FRAMESTART ((HEADOFS+HEADLEN)/BITS) #define FRAMESTART ((HEADOFS+HEADLEN)/BITS)
/* 2A 10*/ /* 2A 10*/
char header[] = "10100110011001101001" char header[] = "10100110011001101001"
"10100110011001101001" "10100110011001101001"
"10100110011001101001" "10100110011001101001"
@ -140,11 +140,11 @@ int bufpos = -1;
ui8_t frame[FRAME_LEN] = { 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x10}; ui8_t frame[FRAME_LEN] = { 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x10};
/* --- RS92-SGP ------------------- */ /* --- RS92-SGP ------------------- */
char buffer_rawin[3*FRAME_LEN+8]; //## rawin1: buffer_rawin[2*FRAME_LEN+4]; char buffer_rawin[3*FRAME_LEN+8]; //## rawin1: buffer_rawin[2*FRAME_LEN+4];
int frameofs = 0; int frameofs = 0;
#define MASK_LEN 64 #define MASK_LEN 64
ui8_t mask[MASK_LEN] = { 0x96, 0x83, 0x3E, 0x51, 0xB1, 0x49, 0x08, 0x98, ui8_t mask[MASK_LEN] = { 0x96, 0x83, 0x3E, 0x51, 0xB1, 0x49, 0x08, 0x98,
0x32, 0x05, 0x59, 0x0E, 0xF9, 0x44, 0xC6, 0x26, 0x32, 0x05, 0x59, 0x0E, 0xF9, 0x44, 0xC6, 0x26,
0x21, 0x60, 0xC2, 0xEA, 0x79, 0x5D, 0x6D, 0xA1, 0x21, 0x60, 0xC2, 0xEA, 0x79, 0x5D, 0x6D, 0xA1,
0x54, 0x69, 0x47, 0x0C, 0xDC, 0xE8, 0x5C, 0xF1, 0x54, 0x69, 0x47, 0x0C, 0xDC, 0xE8, 0x5C, 0xF1,
@ -357,13 +357,13 @@ int bits2byte(char bits[]) {
bit8[i] = manch(bits+2*(i+1)); bit8[i] = manch(bits+2*(i+1));
} }
if (manch(bits+(2*(8+1))) != 1) return 0x100; if (manch(bits+(2*(8+1))) != 1) return 0x100;
for (i = 0; i < 8; i++) { // little endian for (i = 0; i < 8; i++) { // little endian
/* for (i = 7; i >= 0; i--) { // big endian */ /* for (i = 7; i >= 0; i--) { // big endian */
if (bit8[i] == 1) byteval += d; if (bit8[i] == 1) byteval += d;
else if (bit8[i] == 0) byteval += 0; else if (bit8[i] == 0) byteval += 0;
else return 0x100; else return 0x100;
d <<= 1; d <<= 1;
} }
return byteval; return byteval;
} }
@ -614,7 +614,7 @@ int get_Cal() {
if (gpx.aux[0] != 0 || gpx.aux[1] != 0 || gpx.aux[2] != 0 || gpx.aux[3] != 0) { if (gpx.aux[0] != 0 || gpx.aux[1] != 0 || gpx.aux[2] != 0 || gpx.aux[3] != 0) {
fprintf(stdout, " # %04x %04x %04x %04x", gpx.aux[0], gpx.aux[1], gpx.aux[2], gpx.aux[3]); fprintf(stdout, " # %04x %04x %04x %04x", gpx.aux[0], gpx.aux[1], gpx.aux[2], gpx.aux[3]);
} }
} }
} }
if (calfr == 0x00) { if (calfr == 0x00) {
@ -1005,8 +1005,6 @@ int get_GPSkoord(int N) {
} }
/* ------------------------------------------------------------------------------------ */
/* ------------------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------------------ */
int rs92_ecc(int msglen) { int rs92_ecc(int msglen) {
@ -1067,7 +1065,7 @@ int print_position() { // GPS-Hoehe ueber Ellipsoid
fprintf(stdout, "%s ", weekday[gpx.wday]); fprintf(stdout, "%s ", weekday[gpx.wday]);
fprintf(stdout, "%02d:%02d:%04.1f", gpx.std, gpx.min, gpx.sek); fprintf(stdout, "%02d:%02d:%04.1f", gpx.std, gpx.min, gpx.sek);
/* /*
fprintf(stdout, "%04d-%02d-%02d %02d:%02d:%02d", fprintf(stdout, "%04d-%02d-%02d %02d:%02d:%02d",
gpx.jahr, gpx.monat, gpx.tag, gpx.std, gpx.min, gpx.sek); gpx.jahr, gpx.monat, gpx.tag, gpx.std, gpx.min, gpx.sek);
if (option_verbose) fprintf(stdout, " (W %d)", gpx.week); if (option_verbose) fprintf(stdout, " (W %d)", gpx.week);
*/ */
@ -1300,7 +1298,7 @@ int main(int argc, char *argv[]) {
else { else {
bitbuf[bit_count] = bit; bitbuf[bit_count] = bit;
bit_count++; bit_count++;
if (bit_count == BITS) { if (bit_count == BITS) {
bit_count = 0; bit_count = 0;
byte = bits2byte(bitbuf); byte = bits2byte(bitbuf);