From baceab2accec64f5ae95a7412a9010d21a7b3deb Mon Sep 17 00:00:00 2001 From: alanbjohnston Date: Sat, 2 Jul 2022 08:03:13 -0400 Subject: [PATCH] Delete TelemEncoding.c --- cubesatsim/TelemEncoding.c | 673 ------------------------------------- 1 file changed, 673 deletions(-) delete mode 100644 cubesatsim/TelemEncoding.c diff --git a/cubesatsim/TelemEncoding.c b/cubesatsim/TelemEncoding.c deleted file mode 100644 index 0b3ceb0a..00000000 --- a/cubesatsim/TelemEncoding.c +++ /dev/null @@ -1,673 +0,0 @@ -/* - * TelemEncoding.c - * - Fox-1 telemetry encoder - January 2014 Phil Karn KA9Q - This file has two external functions: - void update_rs(unsigned char parity[32],unsigned char data); - int encode_8b10b(int *state,int data). - update_rs() is the Reed-Solomon encoder. Its first argument is the 32-byte - encoder shift register, the second is the 8-bit data byte being encoded. It updates - the shift register in place and returns void. At the end of each frame, it contains - the parities ready for transmission, starting with parity[0]. - Be sure to zero this array before each new frame! - encode_8b10b() is the 8b10b encoder. Its first argument is a pointer to a single integer - with the 1-bit encoder state (the current run disparity, or RD). Initialize it to 0 - JUST ONCE at startup (not between frames). - The second argument is the data byte being encoded. It updates the state and returns - an integer containing the 10-bit encoded word, right justified. - Transmit this word from left to right. - The data argument is an int so it can hold the special value -1 to indicate end of frame; - it generates the 8b10b control word K.28.5, which is used as an inter-frame flag. - Some assert() calls are made to verify legality of arguments. These can be turned off in - production code. - sample frame transmission code: - unsigned char data[64]; // Data block to be sent - unsigned char parity[32]; // RS parities - void transmit_word(int); // User provided transmit function: 10 bits of data in bits 9....0 - int state,i; - state = 0; // Only once at startup, not between frames - memset(parity,0,sizeof(parity); // Do this before every frame - // Transmit the data, updating the RS encoder - for(i=0;i<64;i++){ - update_rs(parity,data[i]); - transmit_word(encode_8b10b(&state,data[i]); - } - // get the RS parities - for(i=0;i<32;i++) - transmit_word(encode_8b10b(&state,parity[i]); - transmit_word(encode_8b10b(&state,-1); // Transmit end-of-frame flag -*/ - - -#include -//#include "Fox.h" -#include "TelemEncoding.h" -#include -#include - -#ifndef NULL -#define NULL ((void *)0) -#endif - -#define NN (0xff) // Frame size in symbols -#define A0 (NN) // special value for log(0) - -int Encode_8b10b[][256] = { - // RD = -1 cases - { - /* 00 */ 0x274, - /* 01 */ 0x1d4, - /* 02 */ 0x2d4, - /* 03 */ 0x71b, - /* 04 */ 0x354, - /* 05 */ 0x69b, - /* 06 */ 0x59b, - /* 07 */ 0x78b, - /* 08 */ 0x394, - /* 09 */ 0x65b, - /* 0a */ 0x55b, - /* 0b */ 0x74b, - /* 0c */ 0x4db, - /* 0d */ 0x6cb, - /* 0e */ 0x5cb, - /* 0f */ 0x174, - /* 10 */ 0x1b4, - /* 11 */ 0x63b, - /* 12 */ 0x53b, - /* 13 */ 0x72b, - /* 14 */ 0x4bb, - /* 15 */ 0x6ab, - /* 16 */ 0x5ab, - /* 17 */ 0x3a4, - /* 18 */ 0x334, - /* 19 */ 0x66b, - /* 1a */ 0x56b, - /* 1b */ 0x364, - /* 1c */ 0x4eb, - /* 1d */ 0x2e4, - /* 1e */ 0x1e4, - /* 1f */ 0x2b4, - /* 20 */ 0x679, - /* 21 */ 0x5d9, - /* 22 */ 0x6d9, - /* 23 */ 0x319, - /* 24 */ 0x759, - /* 25 */ 0x299, - /* 26 */ 0x199, - /* 27 */ 0x389, - /* 28 */ 0x799, - /* 29 */ 0x259, - /* 2a */ 0x159, - /* 2b */ 0x349, - /* 2c */ 0x0d9, - /* 2d */ 0x2c9, - /* 2e */ 0x1c9, - /* 2f */ 0x579, - /* 30 */ 0x5b9, - /* 31 */ 0x239, - /* 32 */ 0x139, - /* 33 */ 0x329, - /* 34 */ 0x0b9, - /* 35 */ 0x2a9, - /* 36 */ 0x1a9, - /* 37 */ 0x7a9, - /* 38 */ 0x739, - /* 39 */ 0x269, - /* 3a */ 0x169, - /* 3b */ 0x769, - /* 3c */ 0x0e9, - /* 3d */ 0x6e9, - /* 3e */ 0x5e9, - /* 3f */ 0x6b9, - /* 40 */ 0x675, - /* 41 */ 0x5d5, - /* 42 */ 0x6d5, - /* 43 */ 0x315, - /* 44 */ 0x755, - /* 45 */ 0x295, - /* 46 */ 0x195, - /* 47 */ 0x385, - /* 48 */ 0x795, - /* 49 */ 0x255, - /* 4a */ 0x155, - /* 4b */ 0x345, - /* 4c */ 0x0d5, - /* 4d */ 0x2c5, - /* 4e */ 0x1c5, - /* 4f */ 0x575, - /* 50 */ 0x5b5, - /* 51 */ 0x235, - /* 52 */ 0x135, - /* 53 */ 0x325, - /* 54 */ 0x0b5, - /* 55 */ 0x2a5, - /* 56 */ 0x1a5, - /* 57 */ 0x7a5, - /* 58 */ 0x735, - /* 59 */ 0x265, - /* 5a */ 0x165, - /* 5b */ 0x765, - /* 5c */ 0x0e5, - /* 5d */ 0x6e5, - /* 5e */ 0x5e5, - /* 5f */ 0x6b5, - /* 60 */ 0x673, - /* 61 */ 0x5d3, - /* 62 */ 0x6d3, - /* 63 */ 0x31c, - /* 64 */ 0x753, - /* 65 */ 0x29c, - /* 66 */ 0x19c, - /* 67 */ 0x38c, - /* 68 */ 0x793, - /* 69 */ 0x25c, - /* 6a */ 0x15c, - /* 6b */ 0x34c, - /* 6c */ 0x0dc, - /* 6d */ 0x2cc, - /* 6e */ 0x1cc, - /* 6f */ 0x573, - /* 70 */ 0x5b3, - /* 71 */ 0x23c, - /* 72 */ 0x13c, - /* 73 */ 0x32c, - /* 74 */ 0x0bc, - /* 75 */ 0x2ac, - /* 76 */ 0x1ac, - /* 77 */ 0x7a3, - /* 78 */ 0x733, - /* 79 */ 0x26c, - /* 7a */ 0x16c, - /* 7b */ 0x763, - /* 7c */ 0x0ec, - /* 7d */ 0x6e3, - /* 7e */ 0x5e3, - /* 7f */ 0x6b3, - /* 80 */ 0x272, - /* 81 */ 0x1d2, - /* 82 */ 0x2d2, - /* 83 */ 0x71d, - /* 84 */ 0x352, - /* 85 */ 0x69d, - /* 86 */ 0x59d, - /* 87 */ 0x78d, - /* 88 */ 0x392, - /* 89 */ 0x65d, - /* 8a */ 0x55d, - /* 8b */ 0x74d, - /* 8c */ 0x4dd, - /* 8d */ 0x6cd, - /* 8e */ 0x5cd, - /* 8f */ 0x172, - /* 90 */ 0x1b2, - /* 91 */ 0x63d, - /* 92 */ 0x53d, - /* 93 */ 0x72d, - /* 94 */ 0x4bd, - /* 95 */ 0x6ad, - /* 96 */ 0x5ad, - /* 97 */ 0x3a2, - /* 98 */ 0x332, - /* 99 */ 0x66d, - /* 9a */ 0x56d, - /* 9b */ 0x362, - /* 9c */ 0x4ed, - /* 9d */ 0x2e2, - /* 9e */ 0x1e2, - /* 9f */ 0x2b2, - /* a0 */ 0x67a, - /* a1 */ 0x5da, - /* a2 */ 0x6da, - /* a3 */ 0x31a, - /* a4 */ 0x75a, - /* a5 */ 0x29a, - /* a6 */ 0x19a, - /* a7 */ 0x38a, - /* a8 */ 0x79a, - /* a9 */ 0x25a, - /* aa */ 0x15a, - /* ab */ 0x34a, - /* ac */ 0x0da, - /* ad */ 0x2ca, - /* ae */ 0x1ca, - /* af */ 0x57a, - /* b0 */ 0x5ba, - /* b1 */ 0x23a, - /* b2 */ 0x13a, - /* b3 */ 0x32a, - /* b4 */ 0x0ba, - /* b5 */ 0x2aa, - /* b6 */ 0x1aa, - /* b7 */ 0x7aa, - /* b8 */ 0x73a, - /* b9 */ 0x26a, - /* ba */ 0x16a, - /* bb */ 0x76a, - /* bc */ 0x0ea, - /* bd */ 0x6ea, - /* be */ 0x5ea, - /* bf */ 0x6ba, - /* c0 */ 0x676, - /* c1 */ 0x5d6, - /* c2 */ 0x6d6, - /* c3 */ 0x316, - /* c4 */ 0x756, - /* c5 */ 0x296, - /* c6 */ 0x196, - /* c7 */ 0x386, - /* c8 */ 0x796, - /* c9 */ 0x256, - /* ca */ 0x156, - /* cb */ 0x346, - /* cc */ 0x0d6, - /* cd */ 0x2c6, - /* ce */ 0x1c6, - /* cf */ 0x576, - /* d0 */ 0x5b6, - /* d1 */ 0x236, - /* d2 */ 0x136, - /* d3 */ 0x326, - /* d4 */ 0x0b6, - /* d5 */ 0x2a6, - /* d6 */ 0x1a6, - /* d7 */ 0x7a6, - /* d8 */ 0x736, - /* d9 */ 0x266, - /* da */ 0x166, - /* db */ 0x766, - /* dc */ 0x0e6, - /* dd */ 0x6e6, - /* de */ 0x5e6, - /* df */ 0x6b6, - /* e0 */ 0x271, - /* e1 */ 0x1d1, - /* e2 */ 0x2d1, - /* e3 */ 0x71e, - /* e4 */ 0x351, - /* e5 */ 0x69e, - /* e6 */ 0x59e, - /* e7 */ 0x78e, - /* e8 */ 0x391, - /* e9 */ 0x65e, - /* ea */ 0x55e, - /* eb */ 0x74e, - /* ec */ 0x4de, - /* ed */ 0x6ce, - /* ee */ 0x5ce, - /* ef */ 0x171, - /* f0 */ 0x1b1, - /* f1 */ 0x637, - /* f2 */ 0x537, - /* f3 */ 0x72e, - /* f4 */ 0x4b7, - /* f5 */ 0x6ae, - /* f6 */ 0x5ae, - /* f7 */ 0x3a1, - /* f8 */ 0x331, - /* f9 */ 0x66e, - /* fa */ 0x56e, - /* fb */ 0x361, - /* fc */ 0x4ee, - /* fd */ 0x2e1, - /* fe */ 0x1e1, - /* ff */ 0x2b1, - }, // RD = +1 cases - { - /* 00 */ 0x58b, - /* 01 */ 0x62b, - /* 02 */ 0x52b, - /* 03 */ 0x314, - /* 04 */ 0x4ab, - /* 05 */ 0x294, - /* 06 */ 0x194, - /* 07 */ 0x074, - /* 08 */ 0x46b, - /* 09 */ 0x254, - /* 0a */ 0x154, - /* 0b */ 0x344, - /* 0c */ 0x0d4, - /* 0d */ 0x2c4, - /* 0e */ 0x1c4, - /* 0f */ 0x68b, - /* 10 */ 0x64b, - /* 11 */ 0x234, - /* 12 */ 0x134, - /* 13 */ 0x324, - /* 14 */ 0x0b4, - /* 15 */ 0x2a4, - /* 16 */ 0x1a4, - /* 17 */ 0x45b, - /* 18 */ 0x4cb, - /* 19 */ 0x264, - /* 1a */ 0x164, - /* 1b */ 0x49b, - /* 1c */ 0x0e4, - /* 1d */ 0x51b, - /* 1e */ 0x61b, - /* 1f */ 0x54b, - /* 20 */ 0x189, - /* 21 */ 0x229, - /* 22 */ 0x129, - /* 23 */ 0x719, - /* 24 */ 0x0a9, - /* 25 */ 0x699, - /* 26 */ 0x599, - /* 27 */ 0x479, - /* 28 */ 0x069, - /* 29 */ 0x659, - /* 2a */ 0x559, - /* 2b */ 0x749, - /* 2c */ 0x4d9, - /* 2d */ 0x6c9, - /* 2e */ 0x5c9, - /* 2f */ 0x289, - /* 30 */ 0x249, - /* 31 */ 0x639, - /* 32 */ 0x539, - /* 33 */ 0x729, - /* 34 */ 0x4b9, - /* 35 */ 0x6a9, - /* 36 */ 0x5a9, - /* 37 */ 0x059, - /* 38 */ 0x0c9, - /* 39 */ 0x669, - /* 3a */ 0x569, - /* 3b */ 0x099, - /* 3c */ 0x4e9, - /* 3d */ 0x119, - /* 3e */ 0x219, - /* 3f */ 0x149, - /* 40 */ 0x185, - /* 41 */ 0x225, - /* 42 */ 0x125, - /* 43 */ 0x715, - /* 44 */ 0x0a5, - /* 45 */ 0x695, - /* 46 */ 0x595, - /* 47 */ 0x475, - /* 48 */ 0x065, - /* 49 */ 0x655, - /* 4a */ 0x555, - /* 4b */ 0x745, - /* 4c */ 0x4d5, - /* 4d */ 0x6c5, - /* 4e */ 0x5c5, - /* 4f */ 0x285, - /* 50 */ 0x245, - /* 51 */ 0x635, - /* 52 */ 0x535, - /* 53 */ 0x725, - /* 54 */ 0x4b5, - /* 55 */ 0x6a5, - /* 56 */ 0x5a5, - /* 57 */ 0x055, - /* 58 */ 0x0c5, - /* 59 */ 0x665, - /* 5a */ 0x565, - /* 5b */ 0x095, - /* 5c */ 0x4e5, - /* 5d */ 0x115, - /* 5e */ 0x215, - /* 5f */ 0x145, - /* 60 */ 0x18c, - /* 61 */ 0x22c, - /* 62 */ 0x12c, - /* 63 */ 0x713, - /* 64 */ 0x0ac, - /* 65 */ 0x693, - /* 66 */ 0x593, - /* 67 */ 0x473, - /* 68 */ 0x06c, - /* 69 */ 0x653, - /* 6a */ 0x553, - /* 6b */ 0x743, - /* 6c */ 0x4d3, - /* 6d */ 0x6c3, - /* 6e */ 0x5c3, - /* 6f */ 0x28c, - /* 70 */ 0x24c, - /* 71 */ 0x633, - /* 72 */ 0x533, - /* 73 */ 0x723, - /* 74 */ 0x4b3, - /* 75 */ 0x6a3, - /* 76 */ 0x5a3, - /* 77 */ 0x05c, - /* 78 */ 0x0cc, - /* 79 */ 0x663, - /* 7a */ 0x563, - /* 7b */ 0x09c, - /* 7c */ 0x4e3, - /* 7d */ 0x11c, - /* 7e */ 0x21c, - /* 7f */ 0x14c, - /* 80 */ 0x58d, - /* 81 */ 0x62d, - /* 82 */ 0x52d, - /* 83 */ 0x312, - /* 84 */ 0x4ad, - /* 85 */ 0x292, - /* 86 */ 0x192, - /* 87 */ 0x072, - /* 88 */ 0x46d, - /* 89 */ 0x252, - /* 8a */ 0x152, - /* 8b */ 0x342, - /* 8c */ 0x0d2, - /* 8d */ 0x2c2, - /* 8e */ 0x1c2, - /* 8f */ 0x68d, - /* 90 */ 0x64d, - /* 91 */ 0x232, - /* 92 */ 0x132, - /* 93 */ 0x322, - /* 94 */ 0x0b2, - /* 95 */ 0x2a2, - /* 96 */ 0x1a2, - /* 97 */ 0x45d, - /* 98 */ 0x4cd, - /* 99 */ 0x262, - /* 9a */ 0x162, - /* 9b */ 0x49d, - /* 9c */ 0x0e2, - /* 9d */ 0x51d, - /* 9e */ 0x61d, - /* 9f */ 0x54d, - /* a0 */ 0x18a, - /* a1 */ 0x22a, - /* a2 */ 0x12a, - /* a3 */ 0x71a, - /* a4 */ 0x0aa, - /* a5 */ 0x69a, - /* a6 */ 0x59a, - /* a7 */ 0x47a, - /* a8 */ 0x06a, - /* a9 */ 0x65a, - /* aa */ 0x55a, - /* ab */ 0x74a, - /* ac */ 0x4da, - /* ad */ 0x6ca, - /* ae */ 0x5ca, - /* af */ 0x28a, - /* b0 */ 0x24a, - /* b1 */ 0x63a, - /* b2 */ 0x53a, - /* b3 */ 0x72a, - /* b4 */ 0x4ba, - /* b5 */ 0x6aa, - /* b6 */ 0x5aa, - /* b7 */ 0x05a, - /* b8 */ 0x0ca, - /* b9 */ 0x66a, - /* ba */ 0x56a, - /* bb */ 0x09a, - /* bc */ 0x4ea, - /* bd */ 0x11a, - /* be */ 0x21a, - /* bf */ 0x14a, - /* c0 */ 0x186, - /* c1 */ 0x226, - /* c2 */ 0x126, - /* c3 */ 0x716, - /* c4 */ 0x0a6, - /* c5 */ 0x696, - /* c6 */ 0x596, - /* c7 */ 0x476, - /* c8 */ 0x066, - /* c9 */ 0x656, - /* ca */ 0x556, - /* cb */ 0x746, - /* cc */ 0x4d6, - /* cd */ 0x6c6, - /* ce */ 0x5c6, - /* cf */ 0x286, - /* d0 */ 0x246, - /* d1 */ 0x636, - /* d2 */ 0x536, - /* d3 */ 0x726, - /* d4 */ 0x4b6, - /* d5 */ 0x6a6, - /* d6 */ 0x5a6, - /* d7 */ 0x056, - /* d8 */ 0x0c6, - /* d9 */ 0x666, - /* da */ 0x566, - /* db */ 0x096, - /* dc */ 0x4e6, - /* dd */ 0x116, - /* de */ 0x216, - /* df */ 0x146, - /* e0 */ 0x58e, - /* e1 */ 0x62e, - /* e2 */ 0x52e, - /* e3 */ 0x311, - /* e4 */ 0x4ae, - /* e5 */ 0x291, - /* e6 */ 0x191, - /* e7 */ 0x071, - /* e8 */ 0x46e, - /* e9 */ 0x251, - /* ea */ 0x151, - /* eb */ 0x348, - /* ec */ 0x0d1, - /* ed */ 0x2c8, - /* ee */ 0x1c8, - /* ef */ 0x68e, - /* f0 */ 0x64e, - /* f1 */ 0x231, - /* f2 */ 0x131, - /* f3 */ 0x321, - /* f4 */ 0x0b1, - /* f5 */ 0x2a1, - /* f6 */ 0x1a1, - /* f7 */ 0x45e, - /* f8 */ 0x4ce, - /* f9 */ 0x261, - /* fa */ 0x161, - /* fb */ 0x49e, - /* fc */ 0x0e1, - /* fd */ 0x51e, - /* fe */ 0x61e, - /* ff */ 0x54e, - } }; - - -// GF Antilog lookup table table -static unsigned char CCSDS_alpha_to[NN+1] = { -0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x87,0x89,0x95,0xad,0xdd,0x3d,0x7a,0xf4, -0x6f,0xde,0x3b,0x76,0xec,0x5f,0xbe,0xfb,0x71,0xe2,0x43,0x86,0x8b,0x91,0xa5,0xcd, -0x1d,0x3a,0x74,0xe8,0x57,0xae,0xdb,0x31,0x62,0xc4,0x0f,0x1e,0x3c,0x78,0xf0,0x67, -0xce,0x1b,0x36,0x6c,0xd8,0x37,0x6e,0xdc,0x3f,0x7e,0xfc,0x7f,0xfe,0x7b,0xf6,0x6b, -0xd6,0x2b,0x56,0xac,0xdf,0x39,0x72,0xe4,0x4f,0x9e,0xbb,0xf1,0x65,0xca,0x13,0x26, -0x4c,0x98,0xb7,0xe9,0x55,0xaa,0xd3,0x21,0x42,0x84,0x8f,0x99,0xb5,0xed,0x5d,0xba, -0xf3,0x61,0xc2,0x03,0x06,0x0c,0x18,0x30,0x60,0xc0,0x07,0x0e,0x1c,0x38,0x70,0xe0, -0x47,0x8e,0x9b,0xb1,0xe5,0x4d,0x9a,0xb3,0xe1,0x45,0x8a,0x93,0xa1,0xc5,0x0d,0x1a, -0x34,0x68,0xd0,0x27,0x4e,0x9c,0xbf,0xf9,0x75,0xea,0x53,0xa6,0xcb,0x11,0x22,0x44, -0x88,0x97,0xa9,0xd5,0x2d,0x5a,0xb4,0xef,0x59,0xb2,0xe3,0x41,0x82,0x83,0x81,0x85, -0x8d,0x9d,0xbd,0xfd,0x7d,0xfa,0x73,0xe6,0x4b,0x96,0xab,0xd1,0x25,0x4a,0x94,0xaf, -0xd9,0x35,0x6a,0xd4,0x2f,0x5e,0xbc,0xff,0x79,0xf2,0x63,0xc6,0x0b,0x16,0x2c,0x58, -0xb0,0xe7,0x49,0x92,0xa3,0xc1,0x05,0x0a,0x14,0x28,0x50,0xa0,0xc7,0x09,0x12,0x24, -0x48,0x90,0xa7,0xc9,0x15,0x2a,0x54,0xa8,0xd7,0x29,0x52,0xa4,0xcf,0x19,0x32,0x64, -0xc8,0x17,0x2e,0x5c,0xb8,0xf7,0x69,0xd2,0x23,0x46,0x8c,0x9f,0xb9,0xf5,0x6d,0xda, -0x33,0x66,0xcc,0x1f,0x3e,0x7c,0xf8,0x77,0xee,0x5b,0xb6,0xeb,0x51,0xa2,0xc3,0x00, -}; - -// GF log lookup table. Special value represents log(0) -static unsigned char CCSDS_index_of[NN+1] = { - A0, 0, 1, 99, 2,198,100,106, 3,205,199,188,101,126,107, 42, - 4,141,206, 78,200,212,189,225,102,221,127, 49,108, 32, 43,243, - 5, 87,142,232,207,172, 79,131,201,217,213, 65,190,148,226,180, -103, 39,222,240,128,177, 50, 53,109, 69, 33, 18, 44, 13,244, 56, - 6,155, 88, 26,143,121,233,112,208,194,173,168, 80,117,132, 72, -202,252,218,138,214, 84, 66, 36,191,152,149,249,227, 94,181, 21, -104, 97, 40,186,223, 76,241, 47,129,230,178, 63, 51,238, 54, 16, -110, 24, 70,166, 34,136, 19,247, 45,184, 14, 61,245,164, 57, 59, - 7,158,156,157, 89,159, 27, 8,144, 9,122, 28,234,160,113, 90, -209, 29,195,123,174, 10,169,145, 81, 91,118,114,133,161, 73,235, -203,124,253,196,219, 30,139,210,215,146, 85,170, 67, 11, 37,175, -192,115,153,119,150, 92,250, 82,228,236, 95, 74,182,162, 22,134, -105,197, 98,254, 41,125,187,204,224,211, 77,140,242, 31, 48,220, -130,171,231, 86,179,147, 64,216, 52,176,239, 38, 55, 12, 17, 68, -111,120, 25,154, 71,116,167,193, 35, 83,137,251, 20, 93,248,151, - 46, 75,185, 96, 15,237, 62,229,246,135,165, 23, 58,163, 60,183, -}; - -// Only half the coefficients are given here because the -// generator polynomial is palindromic; G0 = G32, G1 = G31, etc. -// Only G16 is unique -static unsigned char CCSDS_poly[] = { - 0,249, 59, 66, 4, 43,126,251, 97, 30, 3,213, 50, 66,170, 5, - 24, -}; - -static inline int modnn(int x){ - while (x >= NN) { - x -= NN; - x = (x >> 8) + (x & NN); - } - return x; -} - -// Update Reed-Solomon encoder -// parity -> 32-byte reed-solomon encoder state; clear this to zero before each frame -void update_rs( - unsigned char parity[32], // 32-byte encoder state; zero before each frame - unsigned char c) // Current data byte to update -{ - unsigned char feedback; - int j,t; - - assert(parity != NULL); - feedback = CCSDS_index_of[c ^ parity[0]]; - if(feedback != A0){ // only if feedback is non-zero - // Take advantage of palindromic polynomial to halve the multiplies - // Do G1...G15, which is the same as G17...G31 - for(j=1;j<(int)(NP/2);j++){ - t = CCSDS_alpha_to[modnn(feedback + CCSDS_poly[j])]; - parity[j] ^= t; - parity[NP-j] ^= t; - } - // Do G16, which is used in only parity[16] - t = CCSDS_alpha_to[modnn(feedback + CCSDS_poly[j])]; - parity[j] ^= t; - } - // shift left - memmove(&parity[0],&parity[1],NP-1); - // G0 is 1 in alpha form, 0 in index form; don't need to multiply by it - parity[NP-1] = CCSDS_alpha_to[feedback]; - //taskYIELD(); -} - -#define SYNC (0x0fa) // K.28.5, RD=-1 - -void write_little_endian(unsigned int word, int num_bytes, FILE *wav_file) -{ - unsigned buf; - while(num_bytes>0) - { buf = word & 0xff; - fwrite(&buf, 1,1, wav_file); - num_bytes--; - word >>= 8; - } -}