diff options
author | jaseg <git@jaseg.net> | 2018-12-23 12:57:40 +0900 |
---|---|---|
committer | jaseg <git@jaseg.net> | 2018-12-23 12:57:40 +0900 |
commit | 62389e00fed49b7b89f465c9cd6bb586502331be (patch) | |
tree | e38348acaef07b595459057422ee6d92f8cea9c8 /common/8b10b_test_decode.c | |
parent | 468fe59d9747078830dd489668b8c8ee8520b4a5 (diff) | |
download | 8seg-62389e00fed49b7b89f465c9cd6bb586502331be.tar.gz 8seg-62389e00fed49b7b89f465c9cd6bb586502331be.tar.bz2 8seg-62389e00fed49b7b89f465c9cd6bb586502331be.zip |
ADC working
Diffstat (limited to 'common/8b10b_test_decode.c')
-rw-r--r-- | common/8b10b_test_decode.c | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/common/8b10b_test_decode.c b/common/8b10b_test_decode.c new file mode 100644 index 0000000..433f7b8 --- /dev/null +++ b/common/8b10b_test_decode.c @@ -0,0 +1,86 @@ + +#include <stdio.h> + +#include "8b10b.h" + +static const char * const rc_names[] = { + [K28_0] = "K.28.0", + [K28_1] = "K.28.1", + [K28_2] = "K.28.2", + [K28_3] = "K.28.3", + [K28_4] = "K.28.4", + [K28_5] = "K.28.5", + [K28_6] = "K.28.6", + [K28_7] = "K.28.7", + [K23_7] = "K.23.7", + [K27_7] = "K.27.7", + [K29_7] = "K.29.7", + [K30_7] = "K.30.7", + [DECODING_ERROR] = "ERROR", + [DECODING_IN_PROGRESS] = "." +}; + +int main(void) { + struct state_8b10b_dec st; + xfr_8b10b_reset(&st); + + int c; + int comment = 0; + while ((c=fgetc(stdin)) != EOF) { + int bit; + + if (comment) { + if (c == '\n') + comment = 0; + printf("%c", c); + continue; + } + + if (c == '\r' || c == ' ' || c == '\t' || c == '\n') { + printf("%c", c); + continue; + } + + if (c == '#') { + comment = 1; + printf("%c", c); + continue; + } + + if (c == '0') { + bit = 0; + } else if (c == '1') { + bit = 1; + } else { + fprintf(stderr, "Parse error: Bit must be 0 or 1, not '%c'. Exiting.\n", c); + return 1; + } + + int read_result = xfr_8b10b_feed_bit(&st, bit); + char sync_status = xfr_8b10b_has_sync(&st) ? 'S' : 'U'; + + if (read_result >= 0) { + //fprintf(stdout, "%c%02x ", sync_status, read_result); + fprintf(stdout, "%02x", read_result); + + } else { + if (-read_result == DECODING_IN_PROGRESS) + continue; + + if (-read_result > sizeof(rc_names)/sizeof(rc_names[0])) { + fprintf(stderr, "Illegal read result %d. Exiting.\n", read_result); + return 2; + } + + const char * const msg = rc_names[-read_result]; + if (!msg) { + fprintf(stderr, "Illegal read result %d. Exiting.\n", read_result); + return 2; + } + + //fprintf(stdout, "%c%s ", sync_status, msg); + fprintf(stdout, "%s", msg); + } + } +} + |