diff options
author | jaseg <git@jaseg.de> | 2023-10-02 01:23:31 +0200 |
---|---|---|
committer | jaseg <git@jaseg.de> | 2023-10-02 01:23:31 +0200 |
commit | c8623eb4c6c1464ffd49e83126e66d71ba5bf862 (patch) | |
tree | 55151e10f1ca05f2539de59778e757819038678e /common/8b10b_code_table.c | |
parent | 67e30fa91e12b452c1a18f6c5eb8a33cdb9ec625 (diff) | |
download | 8seg-c8623eb4c6c1464ffd49e83126e66d71ba5bf862.tar.gz 8seg-c8623eb4c6c1464ffd49e83126e66d71ba5bf862.tar.bz2 8seg-c8623eb4c6c1464ffd49e83126e66d71ba5bf862.zip |
8b10b issues
Diffstat (limited to 'common/8b10b_code_table.c')
-rw-r--r-- | common/8b10b_code_table.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/common/8b10b_code_table.c b/common/8b10b_code_table.c new file mode 100644 index 0000000..df2623a --- /dev/null +++ b/common/8b10b_code_table.c @@ -0,0 +1,65 @@ +#include <stdio.h> +#include <string.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", +}; + +int hex_to_uint(const char *s, size_t len) { + if (len > 7) + return -2; + + int acc = 0; + for (int i=0; i<len; i++) { + int digit = s[i]; + if ('0' <= digit && digit <= '9') + digit -= '0'; + else if ('a' <= digit && digit <= 'f') + digit -= 'a' - 0xa; + else if ('A' <= digit && digit <= 'F') + digit -= 'A' - 0xA; + else return -1; + acc = acc << 4 | digit; + } + + return acc; +} + +int main(void) { + struct state_8b10b_enc st; + + printf("Comma symbols (RD -/+)\n"); + for (int i=1; i<K_CODES_LAST; i++) { + st.rd = -1; + int sym_neg = xfr_8b10b_encode(&st, -i); + st.rd = +1; + int sym_pos = xfr_8b10b_encode(&st, -i); + printf("%s %010b %010b\n", rc_names[i], sym_neg, sym_pos); + } + + printf("\n"); + printf("Data symbols (RD -/+)\n"); + for (int i=0; i<256; i++) { + st.rd = -1; + int sym_neg = xfr_8b10b_encode(&st, i); + st.rd = +1; + int sym_pos = xfr_8b10b_encode(&st, i); + printf("%02x %010b %010b\n", i, sym_neg, sym_pos); + } + + return 0; +} + |