From c597ac33987bbcb10211b416a5c39f961051061d Mon Sep 17 00:00:00 2001 From: Ahmet Inan Date: Wed, 3 Jan 2024 18:12:48 +0100 Subject: [PATCH] added rattlegram modes --- decode.cc | 31 ++++++++++++++++++++++++++++++- encode.cc | 41 +++++++++++++++++++++++++++++++++++++++++ freezer.cc | 2 ++ polar_tables.hh | 2 ++ 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/decode.cc b/decode.cc index 02cda5f..572b91d 100644 --- a/decode.cc +++ b/decode.cc @@ -289,6 +289,8 @@ struct Decoder } void shuffle(code_type *c) { + if (oper_mode < 25) + return; switch (code_order) { case 11: shuffle_2048(c); @@ -368,7 +370,7 @@ struct Decoder continue; } oper_mode = md & 255; - if (oper_mode && (oper_mode < 23 || oper_mode > 28)) { + if (oper_mode && (oper_mode < 14 || (oper_mode > 16 && oper_mode < 23) || oper_mode > 28)) { std::cerr << "operation mode " << oper_mode << " unsupported." << std::endl; continue; } @@ -393,6 +395,33 @@ struct Decoder int comb_cols = 0; int code_cols = 0; switch (oper_mode) { + case 14: + mod_bits = 2; + cons_rows = 4; + comb_cols = 0; + code_order = 11; + code_cols = 256; + data_bits = 1360; + frozen_bits = frozen_2048_1392; + break; + case 15: + mod_bits = 2; + cons_rows = 4; + comb_cols = 0; + code_order = 11; + code_cols = 256; + data_bits = 1024; + frozen_bits = frozen_2048_1056; + break; + case 16: + mod_bits = 2; + cons_rows = 4; + comb_cols = 0; + code_order = 11; + code_cols = 256; + data_bits = 680; + frozen_bits = frozen_2048_712; + break; case 23: mod_bits = 2; cons_rows = 4; diff --git a/encode.cc b/encode.cc index de5f2aa..d8ec619 100644 --- a/encode.cc +++ b/encode.cc @@ -226,6 +226,8 @@ struct Encoder } void shuffle(code_type *c) { + if (oper_mode < 25) + return; switch (code_order) { case 11: shuffle_2048(c); @@ -259,6 +261,36 @@ struct Encoder case 0: code_cols = 256; break; + case 14: + mod_bits = 2; + cons_rows = 4; + comb_cols = 0; + code_order = 11; + code_cols = 256; + data_bits = 1360; + reserved_tones = 0; + frozen_bits = frozen_2048_1392; + break; + case 15: + mod_bits = 2; + cons_rows = 4; + comb_cols = 0; + code_order = 11; + code_cols = 256; + data_bits = 1024; + reserved_tones = 0; + frozen_bits = frozen_2048_1056; + break; + case 16: + mod_bits = 2; + cons_rows = 4; + comb_cols = 0; + code_order = 11; + code_cols = 256; + data_bits = 680; + reserved_tones = 0; + frozen_bits = frozen_2048_712; + break; case 23: mod_bits = 2; cons_rows = 4; @@ -439,6 +471,15 @@ int main(int argc, char **argv) case 0: data_bits = 0; break; + case 14: + data_bits = 1360; + break; + case 15: + data_bits = 1024; + break; + case 16: + data_bits = 680; + break; case 23: data_bits = 1024; break; diff --git a/freezer.cc b/freezer.cc index 338949a..a26eac3 100644 --- a/freezer.cc +++ b/freezer.cc @@ -38,6 +38,8 @@ int main() code<12>(4096, 3072+32); code<12>(4096, 2048+32); code<11>(2048, 1536+32); + code<11>(2048, 1360+32); code<11>(2048, 1024+32); + code<11>(2048, 680+32); return 0; } diff --git a/polar_tables.hh b/polar_tables.hh index 9f1cb83..5180ca9 100644 --- a/polar_tables.hh +++ b/polar_tables.hh @@ -3,4 +3,6 @@ static const uint32_t frozen_8192_5472[256] = { 0xffffffff, 0xffffffff, 0xffffff static const uint32_t frozen_4096_3104[128] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x1173fff, 0x11717ff, 0x10117, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x11717ff, 0x177fffff, 0x17177f, 0x1077f, 0x1, 0x177f7fff, 0x1017f, 0x10117, 0x1, 0x10117, 0x1, 0x1, 0x0, 0xffffffff, 0x17ffffff, 0x177f7fff, 0x1037f, 0x13f7fff, 0x10117, 0x10117, 0x1, 0x11717ff, 0x10117, 0x10117, 0x0, 0x17, 0x0, 0x0, 0x0, 0x117177f, 0x17, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x7fffffff, 0x13f7fff, 0x1171fff, 0x10117, 0x117177f, 0x117, 0x7, 0x0, 0x7177f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1017f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static const uint32_t frozen_4096_2080[128] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x17ffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x77f7fff, 0x7fffffff, 0x1173fff, 0x11717ff, 0x117, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x11f7fff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x117177f, 0x177fffff, 0x1077f, 0x1013f, 0x1, 0xffffffff, 0x177fffff, 0x177f7fff, 0x1013f, 0x11f7fff, 0x10117, 0x10117, 0x1, 0x11717ff, 0x117, 0x7, 0x0, 0x1, 0x0, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x17ffffff, 0x177fffff, 0x1077f, 0xffffffff, 0x177f7fff, 0x11f7fff, 0x10117, 0x11717ff, 0x10117, 0x17, 0x0, 0x7fffffff, 0x1171fff, 0x117177f, 0x17, 0x3177f, 0x1, 0x1, 0x0, 0x1017f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x177fffff, 0x7177f, 0x1037f, 0x1, 0x1011f, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10117, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static const uint32_t frozen_2048_1568[64] = { 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x177fffff, 0x177f7fff, 0x1017f, 0x7fffffff, 0x37f7fff, 0x1173fff, 0x10117, 0x11717ff, 0x17, 0x3, 0x0, 0x7fffffff, 0x11717ff, 0x17177f, 0x3, 0x1077f, 0x1, 0x1, 0x0, 0x1011f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x177fffff, 0x3077f, 0x1013f, 0x1, 0x10117, 0x1, 0x1, 0x0, 0x10117, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x117, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; +static const uint32_t frozen_2048_1392[64] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x11f7fff, 0xffffffff, 0x7fffffff, 0x17ffffff, 0x117177f, 0x177f7fff, 0x1037f, 0x1011f, 0x1, 0xffffffff, 0x177fffff, 0x77f7fff, 0x1011f, 0x1173fff, 0x10117, 0x10117, 0x0, 0x117177f, 0x17, 0x3, 0x0, 0x1, 0x0, 0x0, 0x0, 0x7fffffff, 0x11f7fff, 0x11717ff, 0x117, 0x17177f, 0x3, 0x1, 0x0, 0x1037f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1011f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; static const uint32_t frozen_2048_1056[64] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x177fffff, 0x177f7fff, 0x1017f, 0xffffffff, 0xffffffff, 0xffffffff, 0x177f7fff, 0x7fffffff, 0x13f7fff, 0x1171fff, 0x117, 0x3fffffff, 0x11717ff, 0x7177f, 0x1, 0x1017f, 0x1, 0x1, 0x0, 0xffffffff, 0x7fffffff, 0x7fffffff, 0x1171fff, 0x17ffffff, 0x7177f, 0x1037f, 0x1, 0x77f7fff, 0x1013f, 0x10117, 0x1, 0x10117, 0x0, 0x0, 0x0, 0x1173fff, 0x10117, 0x117, 0x0, 0x7, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, }; +static const uint32_t frozen_2048_712[64] = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x177fffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0x11f7fff, 0xffffffff, 0x7fffffff, 0x1fffffff, 0x17177f, 0x177fffff, 0x1037f, 0x1011f, 0x1, 0xffffffff, 0xffffffff, 0xffffffff, 0x7fffffff, 0xffffffff, 0x1fffffff, 0x177fffff, 0x1077f, 0xffffffff, 0x177f7fff, 0x13f7fff, 0x10117, 0x1171fff, 0x117, 0x7, 0x0, 0x7fffffff, 0x1173fff, 0x11717ff, 0x7, 0x3077f, 0x1, 0x1, 0x0, 0x1013f, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x0, };