checked return status and found that we _can_ use 'forward' packets (data + bch), not only (bch + data).

This commit is contained in:
David E. Tiller 2022-03-21 20:35:47 -04:00
parent 475f951457
commit 53d5b2b9f8
1 changed files with 48 additions and 12 deletions

View File

@ -505,10 +505,29 @@ void bytes_to_bits(int *bytes, int *bit_dest, int num_bits) {
} }
} }
void bits_to_bytes(int *bits, int *byte_dest, int num_bits) {
int index;
for (int i = 0; i < num_bits; i++) {
index = i / 8;
if (i % 8 == 0) {
byte_dest[index] = 0;
}
byte_dest[index] <<= 1;
byte_dest[index] |= bits[i] & 0x01;
}
byte_dest[index] <<= 8 - (num_bits % 8);
}
void dump_bch(bch_t *bch) { void dump_bch(bch_t *bch) {
printf("m: %d length: %d t: %d n: %d k: %d\n", bch->m, bch->length, bch->t, bch->n, bch->k); printf("m: %d length: %d t: %d n: %d k: %d\n", bch->m, bch->length, bch->t, bch->n, bch->k);
} }
#undef TEST_BYTES_TO_BITS
#define TEST_APPLY #define TEST_APPLY
int main() int main()
@ -551,7 +570,17 @@ int main()
printf("%d ", bits[i]); printf("%d ", bits[i]);
} }
printf("\n"); printf("\n");
int temp[8];
bits_to_bytes(bits, temp, 63);
printf("bits_to_bytes pkt [%d]\n", count);
for (int i = 0; i < 8; i++) {
printf("%02x ", temp[i]);
}
printf("\n");
#endif #endif
#ifdef TEST_GENERATE #ifdef TEST_GENERATE
int bch_code[18]; int bch_code[18];
generate_bch(&bch, bits, bch_code); generate_bch(&bch, bits, bch_code);
@ -563,13 +592,9 @@ int main()
#endif #endif
#ifdef TEST_APPLY #ifdef TEST_APPLY
int recv[63]; int recv[63];
// backwards, for now
for (int i = 0; i < 45; i++) {
recv[i + 18] = bits[i];
}
for (int i = 0; i < 18; i++) { for (int i = 0; i < 63; i++) {
recv[i] = bits[i + 45]; recv[i] = bits[i];
} }
printf("rearranged packet [%d]: ", count); printf("rearranged packet [%d]: ", count);
@ -580,11 +605,22 @@ int main()
int corrected = apply_bch(&bch, recv); int corrected = apply_bch(&bch, recv);
printf("corrected [%d] packet: ", corrected); if (corrected >= 0) {
for (int i = 0; i < 63; i++) { printf("corrected [%d] packet: ", corrected);
printf("%d ", recv[i]); for (int i = 0; i < 63; i++) {
printf("%d ", recv[i]);
}
printf("\n");
int temp[8];
bits_to_bytes(recv, temp, 63);
printf("corrected [%d] DATA: ", count);
for (int i = 0; i < 8; i++) {
printf("%02x ", temp[i]);
}
printf("\n");
} }
printf("\n");
#endif #endif
} }
} }