21 #ifndef INCLUDE_SATNOGS_UTILS_H_ 22 #define INCLUDE_SATNOGS_UTILS_H_ 27 #include <arpa/inet.h> 28 #include <itpp/itbase.h> 30 template<
class T,
class U,
bool S>
52 if (!out || !in || !len) {
56 for (
size_t i = 0;
i < len;
i++) {
57 *out++ = (in[
i] >> 7) & 0x1;
58 *out++ = (in[
i] >> 6) & 0x1;
59 *out++ = (in[
i] >> 5) & 0x1;
60 *out++ = (in[
i] >> 4) & 0x1;
61 *out++ = (in[
i] >> 3) & 0x1;
62 *out++ = (in[
i] >> 2) & 0x1;
63 *out++ = (in[
i] >> 1) & 0x1;
73 if (!out || !in || !len) {
82 for (
size_t i = 0;
i < len;
i++) {
83 out[
i / 8] |= ((in[
i] & 0x1) << x.shift--);
86 return static_cast<size_t>(
std::ceil(len / 8.0));
96 if (!out || !in || !len) {
100 for (
size_t i = 0;
i < len; ++
i) {
101 *out++ = (((in[
i] >> 7) & 0x1) * 255) - 128;
102 *out++ = (((in[
i] >> 6) & 0x1) * 255) - 128;
103 *out++ = (((in[
i] >> 5) & 0x1) * 255) - 128;
104 *out++ = (((in[
i] >> 4) & 0x1) * 255) - 128;
105 *out++ = (((in[
i] >> 3) & 0x1) * 255) - 128;
106 *out++ = (((in[
i] >> 2) & 0x1) * 255) - 128;
107 *out++ = (((in[
i] >> 1) & 0x1) * 255) - 128;
108 *out++ = ((in[
i] & 0x1) * 255) - 128;
117 if (!out || !in || !len) {
126 for (
size_t i = 0;
i < len;
i++) {
127 uint8_t bit = in[
i] > 0 ? 1 : 0;
128 out[
i / 8] |= (bit << x.shift--);
131 return static_cast<size_t>(
std::ceil(len / 8.0));
142 if (!out.size() || !in.size()) {
147 for (
size_t i = 0;
i < in.size();
i++) {
148 out[j++] = (in[
i] >> 7) & 0x1;
149 out[j++] = (in[
i] >> 6) & 0x1;
150 out[j++] = (in[
i] >> 5) & 0x1;
151 out[j++] = (in[
i] >> 4) & 0x1;
152 out[j++] = (in[
i] >> 3) & 0x1;
153 out[j++] = (in[
i] >> 2) & 0x1;
154 out[j++] = (in[
i] >> 1) & 0x1;
155 out[j++] =
static_cast<bool>(in[
i] & itpp::bin(0x1));
165 if (!out.size() || !in.size()) {
173 for (
size_t i = 0; i < static_cast<size_t>(
std::ceil(in.size() / 8.0));
i++) {
176 for (
size_t i = 0;
i < in.size();
i++) {
178 out[
i / 8] |= ((in[
i] & 0x1) << x.shift--);
181 return static_cast<size_t>(
std::ceil(in.size() / 8.0));
191 if (!out.size() || !in.size()) {
196 for (
size_t i = 0;
i < in.size(); ++
i) {
197 out[j++] = (((in[
i] >> 7) & 0x1) * 255) - 128;
198 out[j++] = (((in[
i] >> 6) & 0x1) * 255) - 128;
199 out[j++] = (((in[
i] >> 5) & 0x1) * 255) - 128;
200 out[j++] = (((in[
i] >> 4) & 0x1) * 255) - 128;
201 out[j++] = (((in[
i] >> 3) & 0x1) * 255) - 128;
202 out[j++] = (((in[
i] >> 2) & 0x1) * 255) - 128;
203 out[j++] = (((in[
i] >> 1) & 0x1) * 255) - 128;
204 out[j++] = (
static_cast<bool>(in[
i] & itpp::bin(0x1)) * 255) - 128;
213 if (!out.size() || !in.size()) {
221 for (
size_t i = 0; i < static_cast<size_t>(
std::ceil(in.size() / 8.0));
i++) {
224 for (
size_t i = 0;
i < in.size();
i++) {
225 uint8_t bit = in[
i] > 0 ? 1 : 0;
226 out[
i / 8] |= (bit << x.shift--);
229 return static_cast<size_t>(
std::ceil(in.size() / 8.0));
246 mape(
double ref,
double estimation);
255 bit_count(uint32_t x);
258 reverse_byte(uint8_t
b);
261 reverse_uint32_bytes(uint32_t
i);
264 reverse_uint64_bytes(uint64_t x);
267 print_pdu(
const uint8_t *buf,
size_t len);
276 template<
class T,
class U,
bool S>
290 template<
class T,
class U,
bool S>
298 static constexpr uint8_t s_bytes_reversed[256] = {
299 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0, 0x10, 0x90, 0x50, 0xD0,
300 0x30, 0xB0, 0x70, 0xF0, 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68,
301 0xE8, 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8, 0x04, 0x84,
302 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4, 0x14, 0x94, 0x54, 0xD4, 0x34,
303 0xB4, 0x74, 0xF4, 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
304 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC, 0x02, 0x82, 0x42,
305 0xC2, 0x22, 0xA2, 0x62, 0xE2, 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2,
306 0x72, 0xF2, 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA, 0x1A,
307 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA, 0x06, 0x86, 0x46, 0xC6,
308 0x26, 0xA6, 0x66, 0xE6, 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76,
309 0xF6, 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE, 0x1E, 0x9E,
310 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE, 0x01, 0x81, 0x41, 0xC1, 0x21,
311 0xA1, 0x61, 0xE1, 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
312 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9, 0x19, 0x99, 0x59,
313 0xD9, 0x39, 0xB9, 0x79, 0xF9, 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5,
314 0x65, 0xE5, 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5, 0x0D,
315 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED, 0x1D, 0x9D, 0x5D, 0xDD,
316 0x3D, 0xBD, 0x7D, 0xFD, 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63,
317 0xE3, 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3, 0x0B, 0x8B,
318 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB, 0x1B, 0x9B, 0x5B, 0xDB, 0x3B,
319 0xBB, 0x7B, 0xFB, 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
320 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7, 0x0F, 0x8F, 0x4F,
321 0xCF, 0x2F, 0xAF, 0x6F, 0xEF, 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF,
int i
Definition: decode_rs.h:71
int j
Definition: decode_rs.h:71
static size_t packed_to_unpacked(int8_t *out, const uint8_t *in, size_t len)
Definition: utils.h:94
static size_t packed_to_unpacked(itpp::Vec< int8_t > &out, const itpp::bvec &in, size_t len=0)
Definition: utils.h:189
memset(parity, 0, NROOTS *sizeof(data_t))
CONSTCD14 To ceil(const std::chrono::duration< Rep, Period > &d)
Definition: date.h:1308
static size_t unpacked_to_packed(U out, const T in, size_t len)
Definition: utils.h:40
static size_t packed_to_unpacked(T out, const U in, size_t len)
Definition: utils.h:34
Definition: amsat_duv_decoder.h:29
data_t b[NROOTS+1]
Definition: decode_rs.h:77
static size_t unpacked_to_packed(T out, const U in, size_t len=0)
Definition: utils.h:292
static size_t packed_to_unpacked(uint8_t *out, const uint8_t *in, size_t len)
Definition: utils.h:50
static size_t packed_to_unpacked(itpp::Vec< uint8_t > &out, const itpp::bvec &in, size_t len=0)
Definition: utils.h:139
static size_t unpacked_to_packed(uint8_t *out, const uint8_t *in, size_t len)
Definition: utils.h:71
static size_t unpacked_to_packed(itpp::bvec &out, const itpp::Vec< uint8_t > &in, size_t len=0)
Definition: utils.h:162
static size_t packed_to_unpacked(T out, const U in, size_t len=0)
Definition: utils.h:278
static size_t unpacked_to_packed(uint8_t *out, const int8_t *in, size_t len)
Definition: utils.h:115
Several bit-level utility methods, frequently used in the encoding/decoding process.
Definition: utils.h:243
static size_t unpacked_to_packed(itpp::bvec &out, const itpp::Vec< int8_t > &in, size_t len=0)
Definition: utils.h:211