aboutsummaryrefslogtreecommitdiff
path: root/common/8b10b_test_decode.c
diff options
context:
space:
mode:
authorjaseg <git@jaseg.net>2018-12-23 12:57:40 +0900
committerjaseg <git@jaseg.net>2018-12-23 12:57:40 +0900
commit62389e00fed49b7b89f465c9cd6bb586502331be (patch)
treee38348acaef07b595459057422ee6d92f8cea9c8 /common/8b10b_test_decode.c
parent468fe59d9747078830dd489668b8c8ee8520b4a5 (diff)
download8seg-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.c86
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);
+ }
+ }
+}
+