diff --git a/docs/test-results/decode_long_rtl-sdr.md b/docs/test-results/decode_long_rtl-sdr.md index 34ff502..c3cbdcf 100644 --- a/docs/test-results/decode_long_rtl-sdr.md +++ b/docs/test-results/decode_long_rtl-sdr.md @@ -1,6 +1,6 @@ # Test suite: 'decode_long_rtl-sdr' -*Results on 2020-03-23 15:01:36.439224* +*Results on 2020-03-23 15:52:32.617155* ### 868.1 MHz, SF 7, CR 4/8, BW 125 kHz, prlen 8, crc on, implicit off @@ -30,7 +30,7 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`00010203040506..f8f9fafbfcfdfe` | 1 | 1 | 100.00% +`00010203040506..f8f9fafbfcfdfe` | 0 | 1 | 0.00% ### 868.1 MHz, SF 12, CR 4/8, BW 125 kHz, prlen 8, crc on, implicit off @@ -40,5 +40,5 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: ### Summary for suite 'decode_long_rtl-sdr' -Total payloads passed: 5 out of 6 (83.33%) +Total payloads passed: 4 out of 6 (66.67%) diff --git a/docs/test-results/short_usrp.md b/docs/test-results/short_usrp.md index 344327e..e73d702 100644 --- a/docs/test-results/short_usrp.md +++ b/docs/test-results/short_usrp.md @@ -1,6 +1,6 @@ # Test suite: 'short_usrp' -*Results on 2020-03-23 14:57:19.060054* +*Results on 2020-03-23 15:48:15.192566* ### 868.1 MHz, SF 7, CR 4/8, BW 125 kHz, prlen 8, crc on, implicit off @@ -134,7 +134,7 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`deadbeef ` | 5 | 5 | 100.00% +`deadbeef ` | 0 | 5 | 0.00% `88 ` | 1 | 1 | 100.00% `ffff ` | 10 | 10 | 100.00% @@ -142,7 +142,7 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`deadbeef ` | 5 | 5 | 100.00% +`deadbeef ` | 0 | 5 | 0.00% `88 ` | 1 | 1 | 100.00% `ffff ` | 10 | 10 | 100.00% @@ -150,7 +150,7 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`deadbeef ` | 5 | 5 | 100.00% +`deadbeef ` | 0 | 5 | 0.00% `88 ` | 1 | 1 | 100.00% `ffff ` | 10 | 10 | 100.00% @@ -158,7 +158,7 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`deadbeef ` | 5 | 5 | 100.00% +`deadbeef ` | 0 | 5 | 0.00% `88 ` | 1 | 1 | 100.00% `ffff ` | 10 | 10 | 100.00% @@ -174,7 +174,7 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`deadbeef ` | 5 | 5 | 100.00% +`deadbeef ` | 2 | 5 | 40.00% `88 ` | 1 | 1 | 100.00% `ffff ` | 10 | 10 | 100.00% @@ -182,7 +182,7 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`deadbeef ` | 5 | 5 | 100.00% +`deadbeef ` | 0 | 5 | 0.00% `88 ` | 1 | 1 | 100.00% `ffff ` | 10 | 10 | 100.00% @@ -190,11 +190,11 @@ Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: Transmitted payload | :heavy_check_mark: | :hash: | :heavy_division_sign: --- | --- | --- | --- -`deadbeef ` | 5 | 5 | 100.00% +`deadbeef ` | 0 | 5 | 0.00% `88 ` | 1 | 1 | 100.00% `ffff ` | 10 | 10 | 100.00% ### Summary for suite 'short_usrp' -Total payloads passed: 384 out of 384 (100.00%) +Total payloads passed: 351 out of 384 (91.41%) diff --git a/lib/decoder_impl.cc b/lib/decoder_impl.cc index e0c9a91..4957517 100644 --- a/lib/decoder_impl.cc +++ b/lib/decoder_impl.cc @@ -490,9 +490,10 @@ namespace gr { return (d_number_of_bins - max_index) % d_number_of_bins; } - bool decoder_impl::demodulate(const gr_complex *samples, const bool reduced_rate) { + bool decoder_impl::demodulate(const gr_complex *samples, const bool is_first) { // DBGR_TIME_MEASUREMENT_TO_FILE("SFxx_method"); - bool is_first = d_implicit && (d_demodulated.size()==0); + bool reduced_rate = is_first || d_reduced_rate; + // DBGR_START_TIME_MEASUREMENT(false, "only"); uint32_t bin_idx = max_frequency_gradient_idx(samples); @@ -503,7 +504,7 @@ namespace gr { // DBGR_INTERMEDIATE_TIME_MEASUREMENT(); // Header has additional redundancy - if (reduced_rate || d_sf > 10) { + if (reduced_rate) { bin_idx = std::lround(bin_idx / 4.0f) % d_number_of_bins_hdr; } @@ -517,9 +518,9 @@ namespace gr { // Look for 4+cr symbols and stop - if (d_words.size() == (4u + (is_first ? 4 : d_phdr.cr))) { + if (d_words.size() == (4u + (is_first ? 4u : d_phdr.cr))) { // Deinterleave - deinterleave((reduced_rate||is_first || d_sf > 10) ? d_sf - 2u : d_sf); + deinterleave(reduced_rate ? d_sf - 2u : d_sf); return true; // Signal that a block is ready for decoding } @@ -575,16 +576,8 @@ namespace gr { // For determining whitening sequence //if (!is_header) // values_to_file("/tmp/after_deshuffle", &d_words_deshuffled[0], d_words_deshuffled.size(), 8); - if (d_implicit && ! d_reduced_rate) { - dewhiten(is_header ? gr::lora::prng_header : - (d_phdr.cr ==4) ? gr::lora::prng_payload_cr8_implicit_fullrate: - (d_phdr.cr ==3) ? gr::lora::prng_payload_cr7_implicit_fullrate: - (d_phdr.cr ==2) ? gr::lora::prng_payload_cr6_implicit_fullrate : - gr::lora::prng_payload_cr5_implicit_fullrate); - } else { - dewhiten(is_header ? gr::lora::prng_header : - (d_phdr.cr <=2) ? gr::lora::prng_payload_cr56 : gr::lora::prng_payload_cr78); - } + dewhiten(is_header ? gr::lora::prng_header : + (d_phdr.cr <=2) ? gr::lora::prng_payload_cr56 : gr::lora::prng_payload_cr78); //if (!is_header) // values_to_file("/tmp/after_dewhiten", &d_words_dewhitened[0], d_words_dewhitened.size(), 8); @@ -825,42 +818,38 @@ namespace gr { } case gr::lora::DecoderState::PAUSE: { - if(d_implicit){ - d_state = gr::lora::DecoderState::DECODE_PAYLOAD; - d_payload_symbols = 1; - } else { - d_state = gr::lora::DecoderState::DECODE_HEADER; - } + d_state = gr::lora::DecoderState::DECODE_HEADER; consume_each(d_samples_per_symbol + d_delay_after_sync); break; } case gr::lora::DecoderState::DECODE_HEADER: { - d_phdr.cr = 4u; - if (demodulate(input, true)) { - decode(true); - gr::lora::print_vector_hex(std::cout, &d_decoded[0], d_decoded.size(), false, false); - memcpy(&d_phdr, &d_decoded[0], sizeof(loraphy_header_t)); - if (d_phdr.cr > 4) - d_phdr.cr = 4; - d_decoded.clear(); + if (d_implicit) { + d_payload_symbols = 1; + } else { + decode(true); + gr::lora::print_vector_hex(std::cout, &d_decoded[0], d_decoded.size(), false, false); + memcpy(&d_phdr, &d_decoded[0], sizeof(loraphy_header_t)); + if (d_phdr.cr > 4) + d_phdr.cr = 4; + d_decoded.clear(); - d_payload_length = d_phdr.length + MAC_CRC_SIZE * d_phdr.has_mac_crc; - //d_phy_crc = SM(decoded[1], 4, 0xf0) | MS(decoded[2], 0xf0, 4); + d_payload_length = d_phdr.length + MAC_CRC_SIZE * d_phdr.has_mac_crc; + //d_phy_crc = SM(decoded[1], 4, 0xf0) | MS(decoded[2], 0xf0, 4); - // Calculate number of payload symbols needed - uint8_t redundancy = ((d_sf > 10 || d_reduced_rate) ? 2 : 0); - const int symbols_per_block = d_phdr.cr + 4u; - const float bits_needed = float(d_payload_length) * 8.0f; - const float symbols_needed = bits_needed * (symbols_per_block / 4.0f) / float(d_sf - redundancy); - const int blocks_needed = (int)std::ceil(symbols_needed / symbols_per_block); - d_payload_symbols = blocks_needed * symbols_per_block; - - #ifdef GRLORA_DEBUG - d_debug << "LEN: " << d_payload_length << " (" << d_payload_symbols << " symbols)" << std::endl; - #endif + // Calculate number of payload symbols needed + uint8_t redundancy = (d_reduced_rate ? 2 : 0); + const int symbols_per_block = d_phdr.cr + 4u; + const float bits_needed = float(d_payload_length) * 8.0f; + const float symbols_needed = bits_needed * (symbols_per_block / 4.0f) / float(d_sf - redundancy); + const int blocks_needed = (int)std::ceil(symbols_needed / symbols_per_block); + d_payload_symbols = blocks_needed * symbols_per_block; + #ifdef GRLORA_DEBUG + d_debug << "LEN: " << d_payload_length << " (" << d_payload_symbols << " symbols)" << std::endl; + #endif + } d_state = gr::lora::DecoderState::DECODE_PAYLOAD; } @@ -873,7 +862,7 @@ namespace gr { d_payload_symbols = 0; //d_demodulated.erase(d_demodulated.begin(), d_demodulated.begin() + 7u); // Test for SF 8 with header d_payload_length = (int32_t)(d_demodulated.size() / 2); - } else if (demodulate(input, d_implicit || d_reduced_rate)) { + } else if (demodulate(input, false)) { if(!d_implicit) d_payload_symbols -= (4u + d_phdr.cr); } diff --git a/lib/tables.h b/lib/tables.h index d39999a..d7bbf62 100644 --- a/lib/tables.h +++ b/lib/tables.h @@ -43,22 +43,6 @@ namespace gr { 0xff, 0xff, 0x2d, 0xff, 0x78, 0xff, 0xe1, 0xff, 0x00, 0xff, 0xd2, 0x2d, 0x55, 0x78, 0x4b, 0xe1, 0x66, 0x00, 0x1e, 0xd2, 0xff, 0x55, 0x2d, 0x4b, 0x78, 0x66, 0xe1, 0x1e, 0xd2, 0xff, 0x87, 0x2d, 0xcc, 0x78, 0xaa, 0xe1, 0xb4, 0xd2, 0x99, 0x87, 0xe1, 0xcc, 0x00, 0xaa, 0x00, 0xb4, 0x00, 0x99, 0x00, 0xe1, 0xd2, 0x00, 0x55, 0x00, 0x99, 0x00, 0xe1, 0x00, 0xd2, 0xd2, 0x87, 0x55, 0x1e, 0x99, 0x2d, 0xe1, 0x78, 0xd2, 0xe1, 0x87, 0xd2, 0x1e, 0x55, 0x2d, 0x99, 0x78, 0x33, 0xe1, 0x55, 0xd2, 0x4b, 0x55, 0x66, 0x99, 0x1e, 0x33, 0x2d, 0x55, 0x78, 0x4b, 0xe1, 0x66, 0x00, 0x1e, 0x00, 0x2d, 0x00, 0x78, 0xd2, 0xe1, 0x87, 0x00, 0xcc, 0x00, 0x78, 0x00, 0x33, 0xd2, 0x55, 0x87, 0x99, 0xcc, 0x33, 0x78, 0x55, 0x33, 0x99, 0x55, 0x33, 0x99, 0x87, 0x33, 0xcc, 0x55, 0xaa, 0x99, 0x66, 0x33, 0x1e, 0x87, 0x2d, 0xcc, 0x78, 0xaa, 0x33, 0x66, 0x55, 0x1e, 0x99, 0x2d, 0xe1, 0x78, 0x00, 0x33, 0x00, 0x55, 0xd2, 0x99, 0x55, 0xe1, 0x4b, 0x00, 0xb4, 0x00, 0x4b, 0xd2, 0x66, 0x55, 0xcc, 0x4b, 0xaa, 0xb4, 0x66, 0x4b, 0xcc, 0x66, 0xaa, 0xcc, 0xb4, 0xaa, 0x4b, 0x66, 0x66, 0xcc, 0xcc, 0xaa, 0x78, 0xb4, 0x33, 0x4b, 0x55, 0x66, 0x4b, 0xcc, 0x66, 0x78, 0xcc, 0x33, 0x78, 0x55, 0xe1, 0x4b, 0x00, 0x66, 0xd2, 0xcc, 0x87, 0x78, 0x1e, 0xe1, 0xff, 0x00, 0xff, 0xd2, 0x2d, 0x87, 0xaa, 0x1e, 0x66, 0xff, 0xcc, 0xff, 0xaa, 0x2d, 0x66, 0xaa, 0x1e, 0x66, 0xff, 0xcc, 0x2d, 0xaa, 0xaa, 0x66, 0xb4, 0x1e, 0x4b, 0xff, 0x66, 0x2d, 0x1e, 0xaa, 0x2d, 0xb4, 0xaa, 0x4b, 0xb4, 0x66, 0x99, 0x1e, 0xe1, 0x2d, 0xd2, 0xaa, 0x55, 0xb4, 0x99, 0x99, 0xe1, 0xe1, 0x00, 0xd2, 0xd2, 0x55, 0x87, 0x99, 0xcc, 0xe1, 0xaa, 0x00, 0x66, 0xd2, 0xcc, 0x87, 0x78, 0xcc, 0xe1, 0xaa, 0xd2, 0x66, 0x87, 0xcc, 0x1e, 0x78, 0xff, 0xe1, 0x2d, 0xd2, 0x78, 0x87, 0x33, 0x1e, 0x87, 0xff, 0x1e, 0x2d, 0x2d, 0x78, 0x78, 0x33, 0x33, 0x87, 0x87, 0x1e, 0xcc, 0x2d, 0x78, 0x78, 0xe1, 0x33, 0xd2, 0x87, 0x55, 0xcc, 0x4b, 0x78, 0x66, 0xe1, 0xcc, 0xd2, 0xaa, 0x55, 0xb4, 0x4b, 0x99, 0x66, 0x33, 0xcc, 0x55, 0xaa, 0x99, 0xb4, 0xe1, 0x99, 0xd2, 0x33, 0x55, 0x55, 0x4b, 0x99, 0xb4, 0xe1, 0x99, 0xd2, 0x33, 0x55, 0x55, 0x4b, 0x4b, 0xb4, 0xb4, 0x99, 0x4b, 0x33, 0xb4, 0x55, 0x99, 0x4b, 0x33, 0xb4, 0x87, 0x4b, 0x1e, 0xb4, 0x2d, 0x99, 0xaa, 0x33, 0x66, 0xc7, 0x1e, 0x1e, 0x2d, 0x2d, 0xaa, 0xaa, 0x66, 0x66, 0xcc, 0x1e, 0x78, 0x2d, 0x33, 0xaa, 0x87, 0x66, 0x1e, 0xcc, 0xff, 0x78, 0x2d, 0x33, 0xaa, 0x87, 0x66, 0x1e, 0x1e, 0xff, 0xff, 0x2d, 0xff, 0xaa, 0xff, 0x66, 0x2d, 0x1e, 0xaa, 0xff, 0xb4, 0xff, 0x99, 0xff, 0x33, 0x2d, 0x87, 0xaa, 0xcc, 0xb4, 0x78, 0x99, 0x33, 0x33, 0x87, 0x87, 0xcc, 0xcc, 0xaa, 0x78, 0xb4, 0x33, 0x4b, 0x87, 0xb4, 0xcc, 0x99, 0xaa, 0xe1, 0xb4, 0xd2, 0x4b, 0x87, 0xb4, 0xcc, 0x99, 0x78, 0xe1, 0xe1, 0xd2, 0x00, 0x87, 0x00, 0xcc, 0xd2, 0x78, 0x87, 0xe1, 0x1e, 0x00, 0x2d, 0x00, 0xaa, 0xd2, 0xb4, 0x87, 0x4b, 0x1e, 0xb4, 0x2d, 0x4b, 0xaa, 0xb4, 0xb4, 0x4b, 0x4b, 0x66, 0xb4, 0x1e, 0x4b, 0xff, 0xb4, 0xff, 0x4b, 0x2d, 0x66, 0x78, 0x1e, 0x33, 0xff, 0x55, 0xff, 0x4b, 0x2d, 0xb4, 0x78, 0x99, 0x33, 0xe1, 0x55, 0x00, 0x4b, 0xd2, 0xb4, 0x55, 0x99, 0x99, 0xe1, 0x33, 0x00, 0x87, 0xd2, 0x1e, 0x55, 0xff, 0x99, 0xff, 0x33, 0xff, 0x87, 0xff, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x87, 0xe1, 0xaa, 0xcc, }; - const uint8_t prng_payload_cr5_implicit_fullrate[] = { - 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0x36, 0x2e, 0x18, 0x2e, 0x18, 0x3c, 0x18, 0x28, 0x14, 0x30, 0x6, 0x0, 0x3c, 0x12, 0xa, 0x14, 0xa, 0xa, 0x0, 0x36, 0xa, 0x1e, 0x2e, 0x2e, 0x28, 0x3c, 0xc, 0x3a, 0x28, 0x22, 0x30, 0x0, 0x1e, 0x14, 0x28, 0x1e, 0xa, 0x28, 0xc, 0x36, 0x1a, 0xa, 0x30, 0x22, 0x30, 0x12, 0x30, 0x12, 0x2e, 0x12, 0x18, 0x12, 0x28, 0x0, 0x3a, 0x6, 0x30, 0xa, 0x3c, 0x24, 0x3a, 0x6, 0x24, 0x12, 0x14, 0xa, 0xc, 0x28, 0x12, 0x3c, 0x2e, 0x24, 0xa, 0x6, 0x3a, 0x0, 0x14, 0xc, 0x3a, 0x36, 0xa, 0x0, 0x0, 0x1e, 0xa, 0x22, 0x3c, 0xa, 0x2e, 0x28, 0x0, 0x2e, 0x0, 0x36, 0x12, 0x6, 0xa, 0x6, 0x30, 0x6, 0x28, 0x14, 0x18, 0x0, 0x6, 0xa, 0x12, 0x2e, 0x36, 0x24, 0x3c, 0x12, 0x14, 0x1e, 0x2e, 0x24, 0x36, 0x12, 0x6, 0x1e, 0x18, 0x24, 0x1e, 0x1e, 0x2e, 0x14, 0x3c, 0x22, 0x24, 0x2e, 0xc, 0x6, 0x12, 0x24, 0x3c, 0x30, 0x1e, 0x3a, 0x30, 0xc, 0x30, 0x0, 0x30, 0x28, 0x3c, 0x18, 0xc, 0x18, 0x30, 0xa, 0xa, 0xc, 0x22, 0x12, 0x3a, 0x2e, 0x24, 0x0, 0x18, 0x3c, 0x3c, 0x6, 0x3c, 0x30, 0x0, 0x3c, 0x3a, 0x6, 0x12, 0x30, 0x18, 0x2e, 0x0, 0x0, 0x30, 0x3c, 0x3c, 0x6, 0x1e, 0x22, 0x36, 0x28, 0x14, 0x1e, 0x1e, 0x0, 0x0, 0x3a, 0x0, 0x0, 0x12, 0x24, 0x18, 0x3c, 0x36, 0xc, 0x24, 0x1e, 0x30, 0xa, 0x24, 0x12, 0x6, 0x22, 0x2e, 0x22, 0x1e, 0x30, 0x0, 0x36, 0x36, 0x3a, 0x14, 0x0, 0x0, 0x36, 0x14, 0x3a, 0x24, 0x0, 0x18, 0x30, 0x22, 0x22, 0x18, 0x24, 0x24, 0x3a, 0x30, 0x14, 0x28, 0x28, 0x6, 0x0, 0x0, 0x22, 0x30, 0x24, 0x30, 0x3a, 0x2e, 0x6, 0x18, 0x2e, 0x3a, 0xc, 0x2e, 0xa, 0x28, 0x6, 0xc, 0x0, 0x28, 0x30, 0x22, 0x22, 0xa, 0x36, 0x30, 0x3c, 0x3a, 0xa, 0x1e, 0x6, 0x18, 0x3c, 0x2e, 0x18, 0xc, 0x0, 0x18, 0x22, 0x1e, 0x36, 0xa, 0x2e, 0x3c, 0x1e, 0x22, 0xc, 0x12, 0x18, 0x28, 0x0, 0x30, 0x24, 0x12, 0x3c, 0xa, 0x1e, 0x30, 0xa, 0x3a, 0x0, 0x1e, 0x24, 0xa, 0x2e, 0x3a, 0xa, 0x14, 0x12, 0x28, 0x30, 0xc, 0x36, 0xc, 0x28, 0x22, 0x14, 0x1e, 0x2e, 0x3a, 0x18, 0x18, 0x0, 0x22, 0x3c, 0x6, 0x6, 0x12, 0x30, 0x12, 0x3c, 0x2e, 0x14, 0x14, 0x36, 0x3c, 0x30, 0x24, 0x2e, 0x28, 0x0, 0x0, 0x3c, 0x3c, 0x6, 0xc, 0x30, 0x22, 0x2e, 0x1e, 0x0, 0x28, 0x2e, 0x1e, 0x12, 0x2e, 0x2e, 0x2e, 0x14, 0x30, 0x30, 0x6, 0x28, 0x36, 0xa, 0x36, 0xc, 0x28, 0x0, 0x3c, 0x28, 0xa, 0xa, 0x6, 0xc, 0x30, 0x0, 0x36, 0x3a, 0x14, 0x1e, 0x0, 0x14, 0x14, 0x30, 0x36, 0x36, 0xc, 0x6, 0x3a, 0x14, 0x28, 0x12, 0x36, 0x1e, 0x36, 0x36, 0x36, 0x6, 0x3a, 0x6, 0x28, 0x6, 0x0, 0x14, 0x22, 0x12, 0x3a, 0xc, 0x0, 0x30, 0x18, 0xa, 0x3a, 0x2e, 0x22, 0x24, 0x3a, 0x12, 0x36, 0x18, 0x1e, 0x3c, 0x22, 0x36, 0x0, 0x0, 0x3a, 0x1e, 0x1e, 0x30, 0x18, 0x1e, 0x3c, 0x22, 0xa, 0xa, 0x14, 0x28, 0x36, 0x3c, 0x28, 0x36, 0x28, 0x12, 0x3a, 0xa, 0x30, 0x3a, 0x3c, 0x3c, 0x28, 0x2e, 0x30, 0x3a, 0xc, 0x22, 0x3c, 0x0, 0x0, 0x6, 0x28, 0x18, 0x14, 0x36, 0x6, 0x18, 0x3c, 0x36, 0xa, 0x18, 0x18, 0x36, 0x14, 0xa, 0x12, 0x22, 0x1e, 0x12, 0x3a, 0x12, 0xa, 0x12, 0x36, 0x6, 0xc, 0xc, 0x36, 0x3a, 0x18, 0x24, 0x18, 0xa, 0x18, 0x36, 0x6, 0x1e, 0x12, 0x2e, 0x24, 0x3c, 0x3a, 0x3a, 0x18, 0x36, 0x6, 0xc, 0x14, 0x28, 0x12, 0x30, 0x2e, 0x0, 0xa, 0xc, 0xc, 0x1e, 0x3c, 0x1e - }; - - const uint8_t prng_payload_cr6_implicit_fullrate[] = { - 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0x26, 0x3f, 0x19, 0x3f, 0x19, 0x2d, 0x19, 0x38, 0x15, 0x21, 0x7, 0x0, 0x2d, 0x12, 0xb, 0x15, 0xb, 0xb, 0x0, 0x26, 0xb, 0x1e, 0x3f, 0x3f, 0x38, 0x2d, 0xc, 0x2a, 0x38, 0x33, 0x21, 0x0, 0x1e, 0x15, 0x38, 0x1e, 0xb, 0x38, 0xc, 0x26, 0x1a, 0xb, 0x21, 0x33, 0x21, 0x12, 0x21, 0x12, 0x3f, 0x12, 0x19, 0x12, 0x38, 0x0, 0x2a, 0x7, 0x21, 0xb, 0x2d, 0x34, 0x2a, 0x7, 0x34, 0x12, 0x15, 0xb, 0xc, 0x38, 0x12, 0x2d, 0x3f, 0x34, 0xb, 0x7, 0x2a, 0x0, 0x15, 0xc, 0x2a, 0x26, 0xb, 0x0, 0x0, 0x1e, 0xb, 0x33, 0x2d, 0xb, 0x3f, 0x38, 0x0, 0x3f, 0x0, 0x26, 0x12, 0x7, 0xb, 0x7, 0x21, 0x7, 0x38, 0x15, 0x19, 0x0, 0x7, 0xb, 0x12, 0x3f, 0x26, 0x34, 0x2d, 0x12, 0x15, 0x1e, 0x3f, 0x34, 0x26, 0x12, 0x7, 0x1e, 0x19, 0x34, 0x1e, 0x1e, 0x3f, 0x15, 0x2d, 0x33, 0x34, 0x3f, 0xc, 0x7, 0x12, 0x34, 0x2d, 0x21, 0x1e, 0x2a, 0x21, 0xc, 0x21, 0x0, 0x21, 0x38, 0x2d, 0x19, 0xc, 0x19, 0x21, 0xb, 0xb, 0xc, 0x33, 0x12, 0x2a, 0x3f, 0x34, 0x0, 0x19, 0x2d, 0x2d, 0x7, 0x2d, 0x21, 0x0, 0x2d, 0x2a, 0x7, 0x12, 0x21, 0x19, 0x3f, 0x0, 0x0, 0x21, 0x2d, 0x2d, 0x7, 0x1e, 0x33, 0x26, 0x38, 0x15, 0x1e, 0x1e, 0x0, 0x0, 0x2a, 0x0, 0x0, 0x12, 0x34, 0x19, 0x2d, 0x26, 0xc, 0x34, 0x1e, 0x21, 0xb, 0x34, 0x12, 0x7, 0x33, 0x3f, 0x33, 0x1e, 0x21, 0x0, 0x26, 0x26, 0x2a, 0x14, 0x0, 0x0, 0x26, 0x15, 0x2a, 0x34, 0x0, 0x19, 0x21, 0x33, 0x33, 0x19, 0x34, 0x34, 0x2a, 0x21, 0x15, 0x38, 0x38, 0x7, 0x0, 0x0, 0x33, 0x21, 0x34, 0x21, 0x2a, 0x3f, 0x7, 0x19, 0x3f, 0x2a, 0xc, 0x3f, 0xb, 0x38, 0x7, 0xc, 0x0, 0x38, 0x21, 0x33, 0x33, 0xb, 0x26, 0x21, 0x2d, 0x2a, 0xb, 0x1e, 0x7, 0x19, 0x2d, 0x3f, 0x19, 0xc, 0x0, 0x19, 0x33, 0x1e, 0x26, 0xb, 0x3f, 0x2d, 0x1e, 0x33, 0xc, 0x12, 0x19, 0x38, 0x0, 0x21, 0x34, 0x12, 0x2d, 0xb, 0x1e, 0x21, 0xb, 0x2a, 0x0, 0x1e, 0x34, 0xb, 0x3f, 0x2a, 0xb, 0x15, 0x12, 0x38, 0x21, 0xc, 0x26, 0xc, 0x38, 0x33, 0x15, 0x1e, 0x3f, 0x2a, 0x19, 0x19, 0x0, 0x33, 0x2d, 0x7, 0x7, 0x12, 0x21, 0x12, 0x2d, 0x3f, 0x15, 0x15, 0x26, 0x2d, 0x21, 0x34, 0x3f, 0x38, 0x0, 0x0, 0x2d, 0x2d, 0x7, 0xc, 0x21, 0x33, 0x3f, 0x1e, 0x0, 0x38, 0x3f, 0x1e, 0x12, 0x3f, 0x3f, 0x3f, 0x15, 0x21, 0x21, 0x7, 0x28, 0x26, 0xb, 0x26, 0xc, 0x38, 0x0, 0x2d, 0x38, 0xb, 0xb, 0x7, 0xc, 0x21, 0x0, 0x26, 0x2a, 0x15, 0x1e, 0x0, 0x15, 0x15, 0x21, 0x26, 0x26, 0xc, 0x7, 0x2a, 0x15, 0x38, 0x12, 0x26, 0x1e, 0x26, 0x26, 0x26, 0x7, 0x2a, 0x7, 0x38, 0x7, 0x0, 0x15, 0x33, 0x12, 0x2a, 0xc, 0x0, 0x21, 0x19, 0xb, 0x2a, 0x3f, 0x33, 0x34, 0x2a, 0x12, 0x26, 0x19, 0x1e, 0x2d, 0x33, 0x26, 0x0, 0x0, 0x2a, 0x1e, 0x1e, 0x21, 0x19, 0x1e, 0x2d, 0x33, 0xb, 0xb, 0x15, 0x38, 0x26, 0x2d, 0x38, 0x26, 0x38, 0x12, 0x2a, 0xb, 0x21, 0x2a, 0x2d, 0x2d, 0x38, 0x3f, 0x21, 0x2a, 0xc, 0x33, 0x2d, 0x0, 0x0, 0x7, 0x38, 0x19, 0x15, 0x26, 0x7, 0x19, 0x2d, 0x26, 0xb, 0x19, 0x19, 0x26, 0x15, 0xb, 0x12, 0x33, 0x1e, 0x12, 0x2a, 0x12, 0xb, 0x12, 0x26, 0x7, 0xc, 0xc, 0x26, 0x2a, 0x19, 0x34, 0x19, 0xb, 0x19, 0x26, 0x7, 0x1e, 0x12, 0x3f, 0x34, 0x2d, 0x2a, 0x2a, 0x19, 0x26, 0x7, 0xc, 0x15, 0x38, 0x12, 0x21, 0x3f, 0x0, 0xb, 0xc, 0xc, 0x1e, 0x2d, 0x1e - }; - - const uint8_t prng_payload_cr7_implicit_fullrate[] = { - 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0x66, 0x7f, 0x19, 0x7f, 0x19, 0x2d, 0x19, 0x78, 0x55, 0x61, 0x7, 0x0, 0x2d, 0x52, 0x4b, 0x55, 0x4b, 0x4b, 0x0, 0x66, 0x4b, 0x1e, 0x7f, 0x7f, 0x78, 0x2d, 0x4c, 0x2a, 0x78, 0x33, 0x61, 0x0, 0x1e, 0x55, 0x78, 0x1e, 0x4b, 0x78, 0x4c, 0x66, 0x1a, 0x4b, 0x61, 0x33, 0x61, 0x52, 0x61, 0x52, 0x7f, 0x52, 0x19, 0x52, 0x78, 0x0, 0x2a, 0x7, 0x61, 0x4b, 0x2d, 0x34, 0x2a, 0x7, 0x34, 0x52, 0x55, 0x4b, 0x4c, 0x78, 0x52, 0x2d, 0x7f, 0x34, 0x4b, 0x7, 0x2a, 0x0, 0x55, 0x4c, 0x2a, 0x66, 0x4b, 0x0, 0x0, 0x1e, 0x4b, 0x33, 0x2d, 0x4b, 0x7f, 0x78, 0x0, 0x7f, 0x0, 0x66, 0x52, 0x7, 0x4b, 0x7, 0x61, 0x7, 0x78, 0x55, 0x19, 0x0, 0x7, 0x4b, 0x52, 0x7f, 0x66, 0x34, 0x2d, 0x52, 0x55, 0x1e, 0x7f, 0x34, 0x66, 0x52, 0x7, 0x1e, 0x19, 0x34, 0x1e, 0x1e, 0x7f, 0x55, 0x2d, 0x33, 0x34, 0x7f, 0x4c, 0x7, 0x52, 0x34, 0x2d, 0x61, 0x1e, 0x2a, 0x61, 0x4c, 0x61, 0x0, 0x61, 0x78, 0x2d, 0x19, 0x4c, 0x19, 0x61, 0x4b, 0x4b, 0x4c, 0x33, 0x52, 0x2a, 0x7f, 0x34, 0x0, 0x19, 0x2d, 0x2d, 0x7, 0x2d, 0x61, 0x0, 0x2d, 0x2a, 0x7, 0x52, 0x61, 0x19, 0x7f, 0x0, 0x0, 0x61, 0x2d, 0x2d, 0x7, 0x1e, 0x33, 0x66, 0x78, 0x55, 0x1e, 0x1e, 0x0, 0x0, 0x2a, 0x0, 0x0, 0x52, 0x34, 0x19, 0x2d, 0x66, 0x4c, 0x34, 0x1e, 0x61, 0x4b, 0x34, 0x52, 0x7, 0x33, 0x7f, 0x33, 0x1e, 0x61, 0x0, 0x66, 0x66, 0x2a, 0x54, 0x0, 0x0, 0x66, 0x55, 0x2a, 0x34, 0x0, 0x19, 0x61, 0x33, 0x33, 0x19, 0x34, 0x34, 0x2a, 0x61, 0x55, 0x78, 0x78, 0x7, 0x0, 0x0, 0x33, 0x61, 0x34, 0x61, 0x2a, 0x7f, 0x7, 0x19, 0x7f, 0x2a, 0x4c, 0x7f, 0x4b, 0x78, 0x7, 0x4c, 0x0, 0x78, 0x61, 0x33, 0x33, 0x4b, 0x66, 0x61, 0x2d, 0x2a, 0x4b, 0x1e, 0x7, 0x19, 0x2d, 0x7f, 0x19, 0x4c, 0x0, 0x19, 0x33, 0x1e, 0x66, 0x4b, 0x7f, 0x2d, 0x1e, 0x33, 0x4c, 0x52, 0x19, 0x78, 0x0, 0x61, 0x34, 0x52, 0x2d, 0x4b, 0x1e, 0x61, 0x4b, 0x2a, 0x0, 0x1e, 0x34, 0x4b, 0x7f, 0x2a, 0x4b, 0x55, 0x52, 0x78, 0x61, 0x4c, 0x66, 0x4c, 0x78, 0x33, 0x55, 0x1e, 0x7f, 0x2a, 0x19, 0x19, 0x0, 0x33, 0x2d, 0x7, 0x7, 0x52, 0x61, 0x52, 0x2d, 0x7f, 0x55, 0x55, 0x66, 0x2d, 0x61, 0x34, 0x7f, 0x78, 0x0, 0x0, 0x2d, 0x2d, 0x7, 0x4c, 0x61, 0x33, 0x7f, 0x1e, 0x0, 0x78, 0x7f, 0x1e, 0x52, 0x7f, 0x7f, 0x7f, 0x55, 0x61, 0x61, 0x7, 0x68, 0x66, 0x4b, 0x66, 0x4c, 0x78, 0x0, 0x2d, 0x78, 0x4b, 0x4b, 0x7, 0x4c, 0x61, 0x0, 0x66, 0x2a, 0x55, 0x1e, 0x0, 0x55, 0x55, 0x61, 0x66, 0x66, 0x4c, 0x7, 0x2a, 0x55, 0x78, 0x52, 0x66, 0x1e, 0x66, 0x66, 0x66, 0x7, 0x2a, 0x7, 0x78, 0x7, 0x0, 0x55, 0x33, 0x52, 0x2a, 0x4c, 0x0, 0x61, 0x19, 0x4b, 0x2a, 0x7f, 0x33, 0x34, 0x2a, 0x52, 0x66, 0x19, 0x1e, 0x2d, 0x33, 0x66, 0x0, 0x0, 0x2a, 0x1e, 0x1e, 0x61, 0x19, 0x1e, 0x2d, 0x33, 0x4b, 0x4b, 0x55, 0x78, 0x66, 0x2d, 0x78, 0x66, 0x78, 0x52, 0x2a, 0x4b, 0x61, 0x2a, 0x2d, 0x2d, 0x78, 0x7f, 0x61, 0x2a, 0x4c, 0x33, 0x2d, 0x0, 0x0, 0x7, 0x78, 0x19, 0x55, 0x66, 0x7, 0x19, 0x2d, 0x66, 0x4b, 0x19, 0x19, 0x66, 0x55, 0x4b, 0x52, 0x33, 0x1e, 0x52, 0x2a, 0x52, 0x4b, 0x52, 0x66, 0x7, 0x4c, 0x4c, 0x66, 0x2a, 0x19, 0x34, 0x19, 0x4b, 0x19, 0x66, 0x7, 0x1e, 0x52, 0x7f, 0x34, 0x2d, 0x2a, 0x2a, 0x19, 0x66, 0x7, 0x4c, 0x55, 0x78, 0x52, 0x61, 0x7f, 0x0, 0x4b, 0x4c, 0x4c, 0x1e, 0x2d, 0x1e - }; - - const uint8_t prng_payload_cr8_implicit_fullrate[] = { - 0xff, 0xff, 0xff, 0xff, 0x2d, 0xff, 0x66, 0xff, 0x99, 0xff, 0x99, 0x2d, 0x99, 0x78, 0x55, 0xe1, 0x87, 0x0, 0x2d, 0xd2, 0x4b, 0x55, 0x4b, 0x4b, 0x0, 0x66, 0x4b, 0x1e, 0xff, 0xff, 0x78, 0x2d, 0xcc, 0xaa, 0x78, 0x33, 0xe1, 0x0, 0x1e, 0x55, 0x78, 0x1e, 0x4b, 0x78, 0xcc, 0xe6, 0x1a, 0x4b, 0xe1, 0x33, 0xe1, 0xd2, 0xe1, 0xd2, 0xff, 0xd2, 0x99, 0xd2, 0x78, 0x0, 0xaa, 0x87, 0xe1, 0x4b, 0x2d, 0xb4, 0xaa, 0x87, 0xb4, 0xd2, 0x55, 0x4b, 0xcc, 0x78, 0xd2, 0x2d, 0xff, 0xb4, 0x4b, 0x87, 0xaa, 0x0, 0x55, 0xcc, 0xaa, 0x66, 0x4b, 0x0, 0x0, 0x1e, 0x4b, 0x33, 0x2d, 0x4b, 0xff, 0x78, 0x0, 0xff, 0x0, 0x66, 0xd2, 0x87, 0x4b, 0x87, 0xe1, 0x87, 0x78, 0x55, 0x99, 0x0, 0x87, 0x4b, 0xd2, 0xff, 0x66, 0xb4, 0x2d, 0xd2, 0x55, 0x1e, 0xff, 0xb4, 0x66, 0xd2, 0x87, 0x1e, 0x99, 0xb4, 0x1e, 0x1e, 0xff, 0x55, 0x2d, 0x33, 0xb4, 0xff, 0xcc, 0x87, 0xd2, 0xb4, 0x2d, 0xe1, 0x1e, 0xaa, 0xe1, 0xcc, 0xe1, 0x0, 0xe1, 0x78, 0x2d, 0x99, 0xcc, 0x99, 0xe1, 0x4b, 0x4b, 0xcc, 0x33, 0xd2, 0xaa, 0xff, 0xb4, 0x0, 0x99, 0x2d, 0x2d, 0x87, 0x2d, 0xe1, 0x0, 0x2d, 0xaa, 0x87, 0xd2, 0xe1, 0x99, 0xff, 0x0, 0x0, 0xe1, 0x2d, 0x2d, 0x87, 0x1e, 0x33, 0x66, 0x78, 0x55, 0x1e, 0x1e, 0x0, 0x0, 0xaa, 0x0, 0x0, 0xd2, 0xb4, 0x99, 0x2d, 0x66, 0xcc, 0xb4, 0x1e, 0xe1, 0x4b, 0xb4, 0xd2, 0x87, 0x33, 0xff, 0x33, 0x1e, 0xe1, 0x0, 0x66, 0x66, 0xaa, 0x54, 0x0, 0x0, 0x66, 0x55, 0xaa, 0xb4, 0x0, 0x99, 0xe1, 0x33, 0x33, 0x99, 0xb4, 0xb4, 0xaa, 0xe1, 0x55, 0x78, 0x78, 0x87, 0x0, 0x0, 0x33, 0xe1, 0xb4, 0xe1, 0xaa, 0xff, 0x87, 0x99, 0xff, 0xaa, 0xcc, 0xff, 0x4b, 0x78, 0x87, 0xcc, 0x0, 0x78, 0xe1, 0x33, 0x33, 0x4b, 0x66, 0xe1, 0x2d, 0xaa, 0x4b, 0x1e, 0x87, 0x99, 0x2d, 0xff, 0x99, 0xcc, 0x0, 0x99, 0x33, 0x1e, 0x66, 0x4b, 0xff, 0x2d, 0x1e, 0x33, 0xcc, 0xd2, 0x99, 0x78, 0x0, 0xe1, 0xb4, 0xd2, 0x2d, 0x4b, 0x1e, 0xe1, 0x4b, 0xaa, 0x0, 0x1e, 0xb4, 0x4b, 0xff, 0xaa, 0x4b, 0x55, 0xd2, 0x78, 0xe1, 0xcc, 0x66, 0xcc, 0x78, 0x33, 0x55, 0x1e, 0xff, 0xaa, 0x99, 0x99, 0x0, 0x33, 0x2d, 0x87, 0x87, 0xd2, 0xe1, 0xd2, 0x2d, 0xff, 0x55, 0x55, 0x66, 0x2d, 0xe1, 0xb4, 0xff, 0x78, 0x0, 0x0, 0x2d, 0x2d, 0x87, 0xcc, 0xe1, 0x33, 0xff, 0x1e, 0x0, 0x78, 0xff, 0x1e, 0xd2, 0xff, 0xff, 0xff, 0x55, 0xe1, 0xe1, 0x87, 0x68, 0x66, 0x4b, 0x66, 0xcc, 0x78, 0x0, 0x2d, 0x78, 0x4b, 0x4b, 0x87, 0xcc, 0xe1, 0x0, 0x66, 0xaa, 0x55, 0x1e, 0x0, 0x55, 0x55, 0xe1, 0x66, 0x66, 0xcc, 0x87, 0xaa, 0x55, 0x78, 0xd2, 0x66, 0x1e, 0x66, 0x66, 0x66, 0x87, 0xaa, 0x87, 0x78, 0x87, 0x0, 0x55, 0x33, 0xd2, 0xaa, 0xcc, 0x0, 0xe1, 0x99, 0x4b, 0xaa, 0xff, 0x33, 0xb4, 0xaa, 0xd2, 0x66, 0x99, 0x1e, 0x2d, 0x33, 0x66, 0x0, 0x0, 0xaa, 0x1e, 0x1e, 0xe1, 0x99, 0x1e, 0x2d, 0x33, 0x4b, 0x4b, 0x55, 0x78, 0x66, 0x2d, 0x78, 0x66, 0x78, 0xd2, 0xaa, 0x4b, 0xe1, 0xaa, 0x2d, 0x2d, 0x78, 0xff, 0xe1, 0xaa, 0xcc, 0x33, 0x2d, 0x0, 0x0, 0x87, 0x78, 0x99, 0x55, 0x66, 0x87, 0x99, 0x2d, 0x66, 0x4b, 0x99, 0x99, 0x66, 0x55, 0x4b, 0xd2, 0x33, 0x1e, 0xd2, 0xaa, 0xd2, 0x4b, 0xd2, 0x66, 0x87, 0xcc, 0xcc, 0x66, 0xaa, 0x99, 0xb4, 0x99, 0x4b, 0x99, 0x66, 0x87, 0x1e, 0xd2, 0xff, 0xb4, 0x2d, 0xaa, 0xaa, 0x99, 0x66, 0x87, 0xcc, 0x55, 0x78, 0xd2, 0xe1, 0xff, 0x0, 0x4b, 0xcc, 0xcc, 0x1e, 0x2d, 0x1e - }; - } }