From 7a25ecfd77fc4d201d9c9e5156b80894ee3ca6a0 Mon Sep 17 00:00:00 2001 From: Bryan Biedenkapp Date: Tue, 12 Dec 2023 09:05:45 -0500 Subject: [PATCH] completely forgot that C# has no support for octal notation when dealing with numbers, so because of that, all of the RS encoding tables were wrong; --- EDAC/RS/ReedSolomonEncoder.cs | 96 +++++++++++++++++------------------ 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/EDAC/RS/ReedSolomonEncoder.cs b/EDAC/RS/ReedSolomonEncoder.cs index 91d8408..f3c3feb 100644 --- a/EDAC/RS/ReedSolomonEncoder.cs +++ b/EDAC/RS/ReedSolomonEncoder.cs @@ -39,60 +39,60 @@ namespace fnecore.EDAC.RS internal sealed class ReedSolomonEncoder { private static readonly byte[][] ENCODE_MATRIX = new byte[12][] { - new byte[24] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 062, 044, 003, 025, 014, 016, 027, 003, 053, 004, 036, 047 }, - new byte[24] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 011, 012, 011, 011, 016, 064, 067, 055, 001, 076, 026, 073 }, - new byte[24] { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 003, 001, 005, 075, 014, 006, 020, 044, 066, 006, 070, 066 }, - new byte[24] { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 021, 070, 027, 045, 016, 067, 023, 064, 073, 033, 044, 021 }, - new byte[24] { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 030, 022, 003, 075, 015, 015, 033, 015, 051, 003, 053, 050 }, - new byte[24] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 001, 041, 027, 056, 076, 064, 021, 053, 004, 025, 001, 012 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 061, 076, 021, 055, 076, 001, 063, 035, 030, 013, 064, 070 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 024, 022, 071, 056, 021, 035, 073, 042, 057, 074, 043, 076 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 072, 042, 005, 020, 043, 047, 033, 056, 001, 016, 013, 076 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 072, 014, 065, 054, 035, 025, 041, 016, 015, 040, 071, 026 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 073, 065, 036, 061, 042, 022, 017, 004, 044, 020, 025, 005 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 071, 005, 055, 003, 071, 034, 060, 011, 074, 002, 041, 050 } + new byte[24] {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 36, 3, 21, 12, 14, 23, 3, 43, 4, 30, 39 }, + new byte[24] {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 9, 9, 14, 52, 55, 45, 1, 62, 22, 59 }, + new byte[24] {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 5, 61, 12, 6, 16, 36, 54, 6, 56, 54 }, + new byte[24] {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 17, 56, 23, 37, 14, 55, 19, 52, 59, 27, 36, 17 }, + new byte[24] {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 24, 18, 3, 61, 13, 13, 27, 13, 41, 3, 43, 40 }, + new byte[24] {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 33, 23, 46, 62, 52, 17, 43, 4, 21, 1, 10 }, + new byte[24] {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 49, 62, 17, 45, 62, 1, 51, 29, 24, 11, 52, 56 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 20, 18, 57, 46, 17, 29, 59, 34, 47, 60, 35, 62 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 58, 34, 5, 16, 35, 39, 27, 46, 1, 14, 11, 62 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 58, 12, 53, 44, 29, 21, 33, 14, 13, 32, 57, 22 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 59, 53, 30, 49, 34, 18, 15, 4, 36, 16, 21, 5 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 57, 5, 45, 3, 57, 28, 48, 9, 60, 2, 33, 40 } }; private static readonly byte[][] ENCODE_MATRIX_24169 = new byte[16][] { - new byte[24] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 051, 045, 067, 015, 064, 067, 052, 012 }, - new byte[24] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 057, 025, 063, 073, 071, 022, 040, 015 }, - new byte[24] { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 005, 001, 031, 004, 016, 054, 025, 076 }, - new byte[24] { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 073, 007, 047, 014, 041, 077, 047, 011 }, - new byte[24] { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 075, 015, 051, 051, 017, 067, 017, 057 }, - new byte[24] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 020, 032, 014, 042, 075, 042, 070, 054 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 002, 075, 043, 005, 001, 040, 012, 064 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 024, 074, 015, 072, 024, 026, 074, 061 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 042, 064, 007, 022, 061, 020, 040, 065 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 032, 032, 055, 041, 057, 066, 021, 077 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 065, 036, 025, 007, 050, 016, 040, 051 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 064, 006, 054, 032, 076, 046, 014, 036 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 062, 063, 074, 070, 005, 027, 037, 046 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 055, 043, 034, 071, 057, 076, 050, 064 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 024, 023, 023, 005, 050, 070, 042, 023 }, - new byte[24] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 067, 075, 045, 060, 057, 024, 006, 026 } + new byte[24] {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 37, 55, 13, 52, 55, 42, 10 }, + new byte[24] {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 21, 51, 59, 57, 18, 32, 13 }, + new byte[24] {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 25, 4, 14, 44, 21, 62 }, + new byte[24] {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 7, 39, 12, 33, 63, 39, 9 }, + new byte[24] {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 13, 41, 41, 15, 55, 15, 47 }, + new byte[24] {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 26, 12, 34, 61, 34, 56, 44 }, + new byte[24] {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 61, 35, 5, 1, 32, 10, 52 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 20, 60, 13, 58, 20, 22, 60, 49 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 34, 52, 7, 18, 49, 16, 32, 53 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 26, 26, 45, 33, 47, 54, 17, 63 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 53, 30, 21, 7, 40, 14, 32, 41 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 52, 6, 44, 26, 62, 38, 12, 30 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 50, 51, 60, 56, 5, 23, 31, 38 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 45, 35, 28, 57, 47, 62, 40, 52 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 20, 19, 19, 5, 40, 56, 34, 19 }, + new byte[24] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 55, 61, 37, 48, 47, 20, 6, 22 } }; private static readonly byte[][] ENCODE_MATRIX_362017 = new byte[20][] { - new byte[36] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 074, 037, 034, 006, 002, 007, 044, 064, 026, 014, 026, 044, 054, 013, 077, 005 }, - new byte[36] { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 004, 017, 050, 024, 011, 005, 030, 057, 033, 003, 002, 002, 015, 016, 025, 026 }, - new byte[36] { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 007, 023, 037, 046, 056, 075, 043, 045, 055, 021, 050, 031, 045, 027, 071, 062 }, - new byte[36] { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 026, 005, 007, 063, 063, 027, 063, 040, 006, 004, 040, 045, 047, 030, 075, 007 }, - new byte[36] { 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 023, 073, 073, 041, 072, 034, 021, 051, 067, 016, 031, 074, 011, 021, 012, 021 }, - new byte[36] { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 024, 051, 025, 023, 022, 041, 074, 066, 074, 065, 070, 036, 067, 045, 064, 001 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 052, 033, 014, 002, 020, 006, 014, 025, 052, 023, 035, 074, 075, 075, 043, 027 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 055, 062, 056, 025, 073, 060, 015, 030, 013, 017, 020, 002, 070, 055, 014, 047 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 054, 051, 032, 065, 077, 012, 054, 013, 035, 032, 056, 012, 075, 001, 072, 063 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 074, 041, 030, 041, 043, 022, 051, 006, 064, 033, 003, 047, 027, 012, 055, 047 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 054, 070, 011, 003, 013, 022, 016, 057, 003, 045, 072, 031, 030, 056, 035, 022 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 051, 007, 072, 030, 065, 054, 006, 021, 036, 063, 050, 061, 064, 052, 001, 060 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 001, 065, 032, 070, 013, 044, 073, 024, 012, 052, 021, 055, 012, 035, 014, 072 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 011, 070, 005, 010, 065, 024, 015, 077, 022, 024, 024, 074, 007, 044, 007, 046 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 006, 002, 065, 011, 041, 020, 045, 042, 046, 054, 035, 012, 040, 064, 065, 033 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 034, 031, 001, 015, 044, 064, 016, 024, 052, 016, 006, 062, 020, 013, 055, 057 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 063, 043, 025, 044, 077, 063, 017, 017, 064, 014, 040, 074, 031, 072, 054, 006 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 071, 021, 070, 044, 056, 004, 030, 074, 004, 023, 071, 070, 063, 045, 056, 043 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 002, 001, 053, 074, 002, 014, 052, 074, 012, 057, 024, 063, 015, 042, 052, 033 }, - new byte[36] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 034, 035, 002, 023, 021, 027, 022, 033, 064, 042, 005, 073, 051, 046, 073, 060 } + new byte[36] {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 31, 28, 6, 2, 7, 36, 52, 22, 12, 22, 36, 44, 11, 63, 5 }, + new byte[36] {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 15, 40, 20, 9, 5, 24, 47, 27, 3, 2, 2, 13, 14, 21, 22 }, + new byte[36] {0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 19, 31, 38, 46, 61, 35, 37, 45, 17, 40, 25, 37, 23, 57, 50 }, + new byte[36] {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 5, 7, 51, 51, 23, 51, 32, 6, 4, 32, 37, 39, 24, 61, 7 }, + new byte[36] {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 59, 59, 33, 58, 28, 17, 41, 55, 14, 25, 60, 9, 17, 10, 17 }, + new byte[36] {0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 41, 21, 19, 18, 33, 60, 54, 60, 53, 56, 30, 55, 37, 52, 1 }, + new byte[36] {0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 27, 12, 2, 16, 6, 12, 21, 42, 19, 29, 60, 61, 61, 35, 23 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 50, 46, 21, 59, 48, 13, 24, 11, 15, 16, 2, 56, 45, 12, 39 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 41, 26, 53, 63, 10, 44, 11, 29, 26, 46, 10, 61, 1, 58, 51 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 33, 24, 33, 35, 18, 41, 6, 52, 27, 3, 39, 23, 10, 45, 39 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 56, 9, 3, 11, 18, 14, 47, 3, 37, 58, 25, 24, 46, 29, 18 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 41, 7, 58, 24, 53, 44, 6, 17, 30, 51, 40, 49, 52, 42, 1, 48 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 53, 26, 56, 11, 36, 59, 20, 10, 42, 17, 45, 10, 29, 12, 58 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 9, 56, 5, 8, 53, 20, 13, 63, 18, 20, 20, 60, 7, 36, 7, 38 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 6, 2, 53, 9, 33, 16, 37, 34, 38, 44, 29, 10, 32, 52, 53, 27 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 28, 25, 1, 13, 36, 52, 14, 20, 42, 14, 6, 50, 16, 11, 45, 47 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 51, 35, 21, 36, 63, 51, 15, 15, 52, 12, 32, 60, 25, 58, 44, 6 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 57, 17, 56, 36, 46, 4, 24, 60, 4, 19, 57, 56, 51, 37, 46, 35 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 1, 43, 60, 2, 12, 42, 60, 10, 47, 20, 51, 13, 34, 42, 27 }, + new byte[36] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 28, 29, 2, 19, 17, 23, 18, 27, 52, 34, 5, 59, 41, 38, 59, 48 } }; /*