Merge pull request #1 from Wosser1sProductions/dev

Dev
pull/25/head
Wosser1sProductions 2017-03-17 16:53:11 +01:00 zatwierdzone przez GitHub
commit 62cb448c7d
12 zmienionych plików z 1900 dodań i 948 usunięć

Wyświetl plik

@ -151,7 +151,6 @@ class Examplify:
f.close()
if __name__ == '__main__':
e = Examplify(6, "4/7", './lora-samples/', 'hackrf')

Wyświetl plik

@ -0,0 +1,65 @@
#!/usr/bin/python2
import collections
import os
from loranode import RN2483Controller
from ../_examplify.py import Examplify
import lora, pmt, osmosdr
from gnuradio import gr, blocks
class ReceiveWhitening:
def __init__(self, sf = 7, output_file = './test_out.csv'):
self.target_freq = 868.1e6
self.sf = sf
self.samp_rate = 1e6
self.capture_freq = 868.0e6
self.offset = -(self.capture_freq - self.target_freq)
self.inputFile = './'
self.outputFile = output_file
self.tempFile = '/tmp/whitening_out'
self.tb = None
def captureSequence(self, inputFile):
self.inputFile = inputFile
if os.path.isfile(self.inputFile):
self.tb = gr.top_block()
self.file_source = blocks.file_source(gr.sizeof_gr_complex*1, self.inputFile, False) # Repeat input: True/False
self.lora_lora_receiver_0 = lora.lora_receiver(self.samp_rate, self.capture_freq, self.offset, self.sf, self.samp_rate)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, self.samp_rate, True)
self.tb.connect( (self.file_source, 0), (self.blocks_throttle_0, 0))
self.tb.connect( (self.blocks_throttle_0, 0), (self.lora_lora_receiver_0, 0))
self.tb.run()
self.tb = None
if os.path.isfile(self.tempFile):
if os.path.isfile(self.outputFile):
inf = open(self.tempFile, 'r')
seq = inf.read()
print(seq)
out = open(self.outputFile, 'a')
out.write(seq)
out.close()
inf.close()
else:
raise Exception("[ReceiveWhitening] Outputfile '" + self.outputFile + "' does not exist!")
else:
raise Exception("[ReceiveWhitening] Tempfile '" + self.tempFile + "' does not exist!")
else:
raise Exception("[ReceiveWhitening] Inputfile '" + self.inputFile + "' does not exist!")
if __name__ == '__main__':
ofile = 'tmp/tmp_whitening.cfile'
examplifr = Examplify(7, "4/7")
whitening = ReceiveWhitening(7, './test_out.csv')
examplifr.transmitToFile(["00000000000"] * 10, ofile)
whitening.captureSequence(ofile)

Wyświetl plik

@ -0,0 +1,4 @@
# Uses lora-whitening-sequencer from:
# https://github.com/Wosser1sProductions/gr-lora-whitening-sequencer
./lora-whitening-sequencer -sf 7 -in ./test_out.csv

Wyświetl plik

@ -116,3 +116,583 @@ Test serie 10: [u'88 88 88 88'] * 10
====== Total passed: 75 out of 413 (18.16%) ======
Ran 1 test in 612.239s
-------- Test Results on 2017-02-27 15:38:54 ---------
Test serie 0: [u'01 23 45 67 89 ab cd ef'] * 10
Test 1 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 6 out of 10 ( 60.00%) +1
Test 2 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 6 out of 10 ( 60.00%) +3
Test 3 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 4 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 5 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%) +4
Test 6 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 7 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%) +5
=> Total passed: 27 out of 70 (38.57%)
Test serie 1: [u'11 11 11'] * 1
Test 8 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 9 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 10 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 11 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 12 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%) +1
Test 13 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 14 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%) +1
=> Total passed: 4 out of 7 (57.14%)
Test serie 2: [u'11 11 11'] * 5
Test 15 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 5 ( 60.00%)
Test 16 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 5 ( 0.00%) +2
Test 17 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 18 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 19 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%) +3
Test 20 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 21 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%) +4
=> Total passed: 13 out of 35 (37.14%)
Test serie 3: [u'aa aa aa aa'] * 3
Test 22 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%) +1
Test 23 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 3 out of 3 (100.00%) +2
Test 24 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 25 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 26 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%) +2
Test 27 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 28 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%) +2
=> Total passed: 10 out of 21 (47.62%)
Test serie 4: [u'ff ff ff ff'] * 1
Test 29 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%) +1
Test 30 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 1 ( 0.00%) -1
Test 31 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 32 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 33 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 34 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 35 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 2 out of 7 (28.57%)
Test serie 5: [u'ff ff ff ff'] * 10
Test 36 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%) +6
Test 37 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 6 out of 10 ( 60.00%) +1
Test 38 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 39 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 40 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 41 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 42 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 9 out of 10 ( 90.00%) +6
=> Total passed: 23 out of 70 (32.86%)
Test serie 6: [u'55 55 55 55'] * 3
Test 43 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%) -2
Test 44 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 3 ( 33.33%)
Test 45 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 46 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 47 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%) +1
Test 48 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 49 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%) +3
=> Total passed: 9 out of 21 (42.86%)
Test serie 7: [u'55 55 55 55'] * 10
Test 50 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%) +6
Test 51 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 8 out of 10 ( 80.00%) +4
Test 52 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 53 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 54 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%) +3
Test 55 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 56 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%) +7
=> Total passed: 34 out of 70 (48.57%)
Test serie 8: [u'88 88 88 88'] * 1
Test 57 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 58 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 1 ( 0.00%) -1
Test 59 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 60 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 61 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 62 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 63 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 2 out of 7 (28.57%)
Test serie 9: [u'88 88 88 88'] * 5
Test 64 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 4 out of 5 ( 80.00%) +2
Test 65 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 5 out of 5 (100.00%) +3
Test 66 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 5 ( 0.00%) -1
Test 67 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 68 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 69 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 70 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%) +4
=> Total passed: 14 out of 35 (40.00%)
Test serie 10: [u'88 88 88 88'] * 10
Test 71 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 6 out of 10 ( 60.00%) +1
Test 72 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 8 out of 10 ( 80.00%) +6
Test 73 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 74 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 75 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 76 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 77 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%) +6
=> Total passed: 24 out of 70 (34.29%)
====== Total passed: 162 out of 413 (39.23%) ======
Ran 1 test in 490.191s
-------- Test Results on 2017-03-06 11:41:54 ---------
Test serie 0: [u'01 23 45 67 89 ab cd ef'] * 10
Test 1 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 2 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 4 out of 10 ( 40.00%)
Test 3 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 4 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 5 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 6 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 7 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 6 out of 10 ( 60.00%)
=> Total passed: 24 out of 70 (34.29%)
Test serie 1: [u'11 11 11'] * 1
Test 8 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 9 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 10 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 11 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 12 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 13 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 14 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
=> Total passed: 3 out of 7 (42.86%)
Test serie 2: [u'11 11 11'] * 5
Test 15 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 5 ( 20.00%)
Test 16 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 17 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 18 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 19 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 5 ( 40.00%)
Test 20 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 21 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 5 ( 20.00%)
=> Total passed: 4 out of 35 (11.43%)
Test serie 3: [u'aa aa aa aa'] * 3
Test 22 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 3 ( 33.33%)
Test 23 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 24 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 25 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 26 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 27 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 28 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 3 ( 33.33%)
=> Total passed: 7 out of 21 (33.33%)
Test serie 4: [u'ff ff ff ff'] * 1
Test 29 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 30 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 31 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 32 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 33 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 34 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 35 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 1 out of 7 (14.29%)
Test serie 5: [u'ff ff ff ff'] * 10
Test 36 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 4 out of 10 ( 40.00%)
Test 37 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
Test 38 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 39 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 40 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 41 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 42 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 6 out of 10 ( 60.00%)
=> Total passed: 19 out of 70 (27.14%)
Test serie 6: [u'55 55 55 55'] * 3
Test 43 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 44 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 45 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 46 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 47 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 48 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 49 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
=> Total passed: 7 out of 21 (33.33%)
Test serie 7: [u'55 55 55 55'] * 10
Test 50 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 51 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 6 out of 10 ( 60.00%)
Test 52 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 53 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 54 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 3 out of 10 ( 30.00%)
Test 55 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 56 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 10 ( 30.00%)
=> Total passed: 22 out of 70 (31.43%)
Test serie 8: [u'88 88 88 88'] * 1
Test 57 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 58 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 59 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 60 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 61 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 62 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 63 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 1 out of 7 (14.29%)
Test serie 9: [u'88 88 88 88'] * 5
Test 64 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 2 out of 5 ( 40.00%)
Test 65 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 66 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 67 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 68 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 69 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 70 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 5 ( 60.00%)
=> Total passed: 9 out of 35 (25.71%)
Test serie 10: [u'88 88 88 88'] * 10
Test 71 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 4 out of 10 ( 40.00%)
Test 72 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 73 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 74 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 75 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 76 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 77 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
=> Total passed: 21 out of 70 (30.00%)
====== Total passed: 118 out of 413 (28.57%) ======
Ran 1 test in 349.914s
-------- Test Results on 2017-03-06 14:41:02 ---------
Test serie 0: [u'01 23 45 67 89 ab cd ef'] * 10
Test 1 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 2 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 4 out of 10 ( 40.00%)
Test 3 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 4 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 5 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 6 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 7 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 6 out of 10 ( 60.00%)
=> Total passed: 25 out of 70 (35.71%)
Test serie 1: [u'11 11 11'] * 1
Test 8 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 9 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 10 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 11 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 12 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 13 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 14 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 4 out of 7 (57.14%)
Test serie 2: [u'11 11 11'] * 5
Test 15 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 16 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 5 out of 5 (100.00%)
Test 17 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 18 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 19 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 20 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 21 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
=> Total passed: 17 out of 35 (48.57%)
Test serie 3: [u'aa aa aa aa'] * 3
Test 22 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 3 ( 33.33%)
Test 23 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 24 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 25 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 26 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 27 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 28 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
=> Total passed: 9 out of 21 (42.86%)
Test serie 4: [u'ff ff ff ff'] * 1
Test 29 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 30 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 31 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 32 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 33 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 34 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 35 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 2 out of 7 (28.57%)
Test serie 5: [u'ff ff ff ff'] * 10
Test 36 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 37 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 38 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 39 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 40 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 41 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 42 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
=> Total passed: 25 out of 70 (35.71%)
Test serie 6: [u'55 55 55 55'] * 3
Test 43 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 44 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 3 ( 33.33%)
Test 45 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 46 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 47 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 48 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 49 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
=> Total passed: 9 out of 21 (42.86%)
Test serie 7: [u'55 55 55 55'] * 10
Test 50 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 51 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
Test 52 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 53 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 54 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 5 out of 10 ( 50.00%)
Test 55 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 56 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
=> Total passed: 31 out of 70 (44.29%)
Test serie 8: [u'88 88 88 88'] * 1
Test 57 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 58 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 59 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 60 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 61 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 62 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 63 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 1 out of 7 (14.29%)
Test serie 9: [u'88 88 88 88'] * 5
Test 64 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 2 out of 5 ( 40.00%)
Test 65 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 66 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 1 out of 5 ( 20.00%)
Test 67 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 68 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 69 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 70 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%)
=> Total passed: 12 out of 35 (34.29%)
Test serie 10: [u'88 88 88 88'] * 10
Test 71 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 72 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 73 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 74 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 75 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 76 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 77 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
=> Total passed: 25 out of 70 (35.71%)
====== Total passed: 160 out of 413 (38.74%) ======
Ran 1 test in 405.855s
-------- Test Results on 2017-03-08 16:50:19 ---------
Test serie 0: [u'01 23 45 67 89 ab cd ef'] * 10
Test 1 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 2 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 3 out of 10 ( 30.00%)
Test 3 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 4 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 5 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 6 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 7 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 10 ( 50.00%)
=> Total passed: 22 out of 70 (31.43%)
Test serie 1: [u'11 11 11'] * 1
Test 8 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 9 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 10 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 11 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 12 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 13 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 14 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 4 out of 7 (57.14%)
Test serie 2: [u'11 11 11'] * 5
Test 15 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 5 ( 60.00%)
Test 16 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 5 ( 20.00%)
Test 17 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 18 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 19 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 20 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 21 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
=> Total passed: 12 out of 35 (34.29%)
Test serie 3: [u'aa aa aa aa'] * 3
Test 22 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 23 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 24 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 25 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 26 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 27 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 28 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
=> Total passed: 7 out of 21 (33.33%)
Test serie 4: [u'ff ff ff ff'] * 1
Test 29 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 30 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 31 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 32 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 33 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 34 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 35 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 3 out of 7 (42.86%)
Test serie 5: [u'ff ff ff ff'] * 10
Test 36 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 37 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 5 out of 10 ( 50.00%)
Test 38 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 39 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 40 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 41 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 42 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
=> Total passed: 20 out of 70 (28.57%)
Test serie 6: [u'55 55 55 55'] * 3
Test 43 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 44 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 45 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 46 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 47 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 48 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 49 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
=> Total passed: 9 out of 21 (42.86%)
Test serie 7: [u'55 55 55 55'] * 10
Test 50 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 51 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 5 out of 10 ( 50.00%)
Test 52 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 53 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 54 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
Test 55 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 56 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
=> Total passed: 29 out of 70 (41.43%)
Test serie 8: [u'88 88 88 88'] * 1
Test 57 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 58 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 59 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 60 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 61 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 62 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 63 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 3 out of 7 (42.86%)
Test serie 9: [u'88 88 88 88'] * 5
Test 64 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%)
Test 65 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 66 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 1 out of 5 ( 20.00%)
Test 67 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 68 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 69 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 70 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%)
=> Total passed: 15 out of 35 (42.86%)
Test serie 10: [u'88 88 88 88'] * 10
Test 71 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 6 out of 10 ( 60.00%)
Test 72 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 73 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 74 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 75 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 76 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 77 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 4 out of 10 ( 40.00%)
=> Total passed: 18 out of 70 (25.71%)
====== Total passed: 142 out of 413 (34.38%) ======
Ran 1 test in 278.433s
-------- Test Results on 2017-03-09 17:06:45 ---------
Test serie 0: [u'01 23 45 67 89 ab cd ef'] * 10
Test 1 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 2 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 3 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 4 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 5 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 6 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 7 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
=> Total passed: 31 out of 70 (44.29%)
Test serie 1: [u'11 11 11'] * 1
Test 8 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 9 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 10 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 11 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 12 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 13 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 14 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 3 out of 7 (42.86%)
Test serie 2: [u'11 11 11'] * 5
Test 15 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 5 ( 20.00%)
Test 16 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 3 out of 5 ( 60.00%)
Test 17 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 18 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 19 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 20 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 21 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%)
=> Total passed: 13 out of 35 (37.14%)
Test serie 3: [u'aa aa aa aa'] * 3
Test 22 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 23 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 24 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 25 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 26 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 27 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 28 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
=> Total passed: 10 out of 21 (47.62%)
Test serie 4: [u'ff ff ff ff'] * 1
Test 29 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 30 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 31 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 32 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 33 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 34 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 35 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 3 out of 7 (42.86%)
Test serie 5: [u'ff ff ff ff'] * 10
Test 36 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 37 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
Test 38 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 39 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 40 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 41 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 42 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
=> Total passed: 23 out of 70 (32.86%)
Test serie 6: [u'55 55 55 55'] * 3
Test 43 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 44 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 45 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 46 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 47 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
Test 48 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 3 ( 0.00%)
Test 49 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 2 out of 3 ( 66.67%)
=> Total passed: 10 out of 21 (47.62%)
Test serie 7: [u'55 55 55 55'] * 10
Test 50 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 4 out of 10 ( 40.00%)
Test 51 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 6 out of 10 ( 60.00%)
Test 52 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 53 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 54 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 55 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 56 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 6 out of 10 ( 60.00%)
=> Total passed: 23 out of 70 (32.86%)
Test serie 8: [u'88 88 88 88'] * 1
Test 57 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 58 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 59 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 60 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 61 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 62 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
Test 63 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 3 out of 7 (42.86%)
Test serie 9: [u'88 88 88 88'] * 5
Test 64 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 5 ( 60.00%)
Test 65 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 4 out of 5 ( 80.00%)
Test 66 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 1 out of 5 ( 20.00%)
Test 67 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 68 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 69 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 70 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 5 ( 60.00%)
=> Total passed: 11 out of 35 (31.43%)
Test serie 10: [u'88 88 88 88'] * 10
Test 71 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 4 out of 10 ( 40.00%)
Test 72 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 7 out of 10 ( 70.00%)
Test 73 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 74 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 75 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 76 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 77 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 10 ( 50.00%)
=> Total passed: 16 out of 70 (22.86%)
====== Total passed: 146 out of 413 (35.35%) ======
Ran 1 test in 278.635s

Wyświetl plik

@ -504,7 +504,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="61">
<TEST id="64">
<file>./examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
@ -512,7 +512,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="62">
<TEST id="65">
<file>./examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_009.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
@ -520,7 +520,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="63">
<TEST id="66">
<file>./examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_009.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
@ -528,7 +528,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="64">
<TEST id="67">
<file>./examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_009.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
@ -536,7 +536,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="65">
<TEST id="68">
<file>./examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
@ -544,7 +544,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="66">
<TEST id="69">
<file>./examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_009.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
@ -552,7 +552,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="67">
<TEST id="70">
<file>./examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
@ -560,7 +560,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="68">
<TEST id="71">
<file>./examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
@ -568,7 +568,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="69">
<TEST id="72">
<file>./examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_010.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
@ -576,7 +576,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="70">
<TEST id="73">
<file>./examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_010.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
@ -584,7 +584,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="71">
<TEST id="74">
<file>./examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_010.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
@ -592,7 +592,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="72">
<TEST id="75">
<file>./examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
@ -600,7 +600,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="73">
<TEST id="76">
<file>./examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_010.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
@ -608,7 +608,7 @@
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="74">
<TEST id="77">
<file>./examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />

Wyświetl plik

@ -690,8 +690,7 @@ namespace gr {
* \ingroup lora
*
*/
class LORA_API decoder : virtual public gr::sync_block
{
class LORA_API decoder : virtual public gr::sync_block {
public:
typedef boost::shared_ptr<decoder> sptr;

82
lib/dbugr.hpp 100644
Wyświetl plik

@ -0,0 +1,82 @@
#ifndef DBUGR_HPP
#define DBUGR_HPP
#include <stdio.h>
#include <string.h>
#include "utilities.h"
#undef NDEBUG
//#define NDEBUG
#ifdef NDEBUG
#define DBGR_PAUSE(MSG)
#define DBGR_WRITE_SIGNAL(IDEAL_SIG_FP, SAMPLE_SIG_FP, WINDOW, OFFSET, MIN, MAX, FULL, PAUSE, MSG)
#else
#define DBGR_PAUSE(MSG) system("read -rsp $'" #MSG "\nPress any key to continue...\n' -n 1 key")
#define DBGR_QUICK_TO_FILE(FILEPATH, APPEND, DATA, SIZE, FORMAT) \
do { \
int32_t DBGR_j; \
char DBGR_buf[20]; \
std::ofstream DBGR_out_file; \
DBGR_out_file.open(FILEPATH, std::ios::out | (APPEND ? std::ios::app : std::ios::out )); \
\
for (DBGR_j = 0; DBGR_j < int32_t(SIZE); DBGR_j++) { \
sprintf(DBGR_buf, FORMAT, DATA[DBGR_j]); \
DBGR_out_file.write(DBGR_buf, strlen(DBGR_buf)); \
} \
\
if (APPEND) DBGR_out_file.write("\n", sizeof(char)); \
\
} while(0) \
#define DBGR_WRITE_SIGNAL(IDEAL_SIG_FP, SAMPLE_SIG_FP, WINDOW, OFFSET, MIN, MAX, FULL, PAUSE, MSG) \
do { \
int32_t DBGR_j; \
char DBGR_buf[20]; \
const char DBGR_delim[] = "-----------------------------------------------------------------\n\0"; \
std::ofstream DBGR_out_file; \
DBGR_out_file.open("/tmp/DBGR.txt", std::ios::out); \
\
\
printf("DBGR_Ideal\n"); \
for (DBGR_j = 0; DBGR_j < int32_t(WINDOW); DBGR_j++) { \
sprintf(DBGR_buf, "%f\n", IDEAL_SIG_FP[DBGR_j]); \
DBGR_out_file.write(DBGR_buf, strlen(DBGR_buf)); \
} DBGR_out_file.write(DBGR_delim, strlen(DBGR_delim)); \
\
printf("%s", DBGR_delim); \
\
printf("DBGR_Before\n"); \
for (DBGR_j = 0; DBGR_j < int32_t(WINDOW); DBGR_j++) { \
sprintf(DBGR_buf, "%f\n", gr::lora::clamp(SAMPLE_SIG_FP[DBGR_j], -0.5f, 0.5f)); \
DBGR_out_file.write(DBGR_buf, strlen(DBGR_buf)); \
} DBGR_out_file.write(DBGR_delim, strlen(DBGR_delim)); \
\
printf("%s", DBGR_delim); \
\
printf("DBGR_After %d of %d in %d\n", MIN, MAX, WINDOW); \
for (DBGR_j = OFFSET; DBGR_j < int32_t(OFFSET > 0 ? WINDOW : MAX); DBGR_j++) { \
sprintf(DBGR_buf, "%f\n", gr::lora::clamp(*(SAMPLE_SIG_FP + DBGR_j), -0.5f, 0.5f)); \
DBGR_out_file.write(DBGR_buf, strlen(DBGR_buf)); \
} DBGR_out_file.write(DBGR_delim, strlen(DBGR_delim)); \
\
printf("%s", DBGR_delim); \
\
/*if (FULL) { \
printf("DBGR_Full\n"); \
for (DBGR_j = 0; DBGR_j < WINDOW; DBGR_j++) { \
sprintf(buf, "%f\n\0", SAMPLE_SIG_FP[DBGR_j]); \
DBGR_out_file.write(DBGR_buf, strlen(DBGR_buf)); \
} DBGR_out_file.write(DBGR_delim, strlen(DBGR_delim)); \
printf("%s", DBGR_delim); \
}*/ \
\
printf("DBGR_End\n"); \
DBGR_out_file.close(); \
if(PAUSE) DBGR_PAUSE(MSG); \
} while(0)
#endif
#endif // DBUGR_HPP

Plik diff jest za duży Load Diff

Wyświetl plik

@ -21,112 +21,130 @@
#ifndef INCLUDED_LORA_DECODER_IMPL_H
#define INCLUDED_LORA_DECODER_IMPL_H
#include <lora/decoder.h>
#include <liquid/liquid.h>
#include "lora/decoder.h"
#include <list>
#include <string>
#include <vector>
#include <deque>
#include <fstream>
#define DECIMATOR_FILTER_SIZE 2*8*1+1 // 2*decim_factor*delay+1
#define DECIMATOR_FILTER_SIZE (2*8*1 + 1) // 2*decim_factor*delay+1
namespace gr {
namespace lora {
namespace lora {
typedef enum decoder_state {
DETECT,
SYNC,
PAUSE,
DECODE_HEADER,
DECODE_PAYLOAD,
STOP
} decoder_state;
enum class DecoderState {
DETECT,
SYNC,
PAUSE,
DECODE_HEADER,
DECODE_PAYLOAD,
STOP
};
class decoder_impl : public decoder
{
private:
decoder_state d_state;
std::vector<gr_complex> d_downchirp;
std::vector<gr_complex> d_upchirp;
std::vector<float> d_downchirp_ifreq;
std::vector<float> d_upchirp_ifreq;
std::vector<gr_complex> d_fft;
std::vector<gr_complex> d_mult;
uint8_t d_sf;
uint32_t d_bw;
uint8_t d_cr;
double d_bits_per_second;
uint32_t d_delay_after_sync;
uint32_t d_samples_per_second;
double d_symbols_per_second;
uint32_t d_bits_per_symbol;
uint32_t d_samples_per_symbol;
uint32_t d_number_of_bins;
uint32_t d_number_of_bins_hdr;
uint32_t d_compression;
uint32_t d_payload_symbols;
uint32_t d_payload_length;
uint32_t d_corr_fails;
std::vector<unsigned int> d_words;
std::vector<uint8_t> d_demodulated;
std::vector<uint8_t> d_words_deshuffled;
std::vector<uint8_t> d_words_dewhitened;
std::vector<uint8_t> d_data;
std::ofstream d_debug_samples;
std::ofstream d_debug;
fftplan d_q;
float d_decim_h[DECIMATOR_FILTER_SIZE];
uint32_t d_corr_decim_factor;
int d_decim_factor;
firdecim_crcf d_decim;
float d_cfo_estimation;
int d_cfo_step;
double d_dt;
class decoder_impl : public decoder {
private:
DecoderState d_state;
bool calc_energy_threshold(gr_complex* samples, int window_size, float threshold);
void build_ideal_chirps(void);
void samples_to_file(const std::string path, const gr_complex* v, int length, int elem_size);
void samples_debug(const gr_complex* v, int length);
float sliding_norm_cross_correlate(const float *samples_1, const float *samples_2, uint32_t window, uint32_t slide, int32_t* index);
float norm_cross_correlate(const float *samples_1, const float *samples_2, uint32_t window);
float detect_downchirp(const gr_complex *samples, uint32_t window);
float detect_upchirp(const gr_complex *samples_1, uint32_t window, uint32_t slide, int32_t* index);
float cross_correlate(const gr_complex *samples_1, const gr_complex *samples_2, int window);
unsigned int get_shift_fft(gr_complex* samples);
void determine_cfo(const gr_complex* samples);
void correct_cfo(gr_complex* samples, int num_samples);
int find_preamble_start(gr_complex* samples);
int find_preamble_start_fast(gr_complex* samples, uint32_t len);
unsigned int max_frequency_gradient_idx(gr_complex* samples);
bool demodulate(gr_complex* samples, bool is_header);
void deinterleave(int ppm);
int decode(uint8_t* out_data, bool is_header);
void deshuffle(const uint8_t* shuffle_pattern, bool is_header);
void dewhiten(const uint8_t* prng);
void hamming_decode(uint8_t* out_data);
void nibble_reverse(uint8_t* out_data, int len);
float stddev(const float *values, int len, float mean);
inline void instantaneous_phase(const gr_complex* in_samples, float* out_iphase, uint32_t window);
void instantaneous_frequency(const gr_complex* in_samples, float* out_ifreq, uint32_t window);
uint8_t lookup_cr(uint8_t bytevalue);
void msg_raw_chirp_debug(const gr_complex *raw_samples, uint32_t num_samples);
void msg_lora_frame(const uint8_t *frame_bytes, uint32_t frame_len);
/// using std::complex = gr_complex
std::vector<gr_complex> d_downchirp;
std::vector<float> d_downchirp_ifreq;
float d_downchirp_avg;
float d_downchirp_stddev;
std::vector<gr_complex> d_upchirp;
std::vector<float> d_upchirp_ifreq;
float d_upchirp_avg;
float d_upchirp_stddev;
public:
decoder_impl(float samp_rate, int sf);
~decoder_impl();
std::vector<gr_complex> d_fft;
std::vector<gr_complex> d_mult;
// Where all the action really happens
int work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items);
uint8_t d_sf;
uint32_t d_bw;
uint8_t d_cr;
double d_bits_per_second;
uint32_t d_delay_after_sync;
uint32_t d_samples_per_second;
double d_symbols_per_second;
uint32_t d_bits_per_symbol;
uint32_t d_samples_per_symbol;
uint32_t d_number_of_bins;
uint32_t d_number_of_bins_hdr;
uint32_t d_compression;
uint32_t d_payload_symbols;
uint32_t d_payload_length;
uint32_t d_corr_fails;
// GRC interfaces
virtual void set_sf(uint8_t sf);
virtual void set_samp_rate(float samp_rate);
};
std::vector<unsigned int> d_words;
std::vector<uint8_t> d_demodulated;
std::vector<uint8_t> d_words_deshuffled;
std::vector<uint8_t> d_words_dewhitened;
std::vector<uint8_t> d_data;
} // namespace lora
std::ofstream d_debug_samples;
std::ofstream d_debug;
fftplan d_q;
float d_decim_h[DECIMATOR_FILTER_SIZE];
uint32_t d_corr_decim_factor;
int d_decim_factor;
firdecim_crcf d_decim = nullptr;
float d_cfo_estimation;
int d_cfo_step;
double d_dt;
bool calc_energy_threshold(gr_complex *samples, int window_size, float threshold);
void build_ideal_chirps(void);
void samples_to_file(const std::string path, const gr_complex *v, uint32_t length, uint32_t elem_size);
void samples_debug(const gr_complex *v, uint32_t length);
float sliding_norm_cross_correlate_upchirp(const float *samples, uint32_t window, uint32_t slide, int32_t *index);
float norm_cross_correlate_downchirp(const float *samples, uint32_t window);
float detect_downchirp(const gr_complex *samples, uint32_t window);
float detect_upchirp(const gr_complex *samples_1, uint32_t window, uint32_t slide, int32_t *index);
float cross_correlate(const gr_complex *samples_1, const gr_complex *samples_2, int window);
unsigned int get_shift_fft(const gr_complex *samples);
void determine_cfo(const gr_complex *samples);
void correct_cfo(gr_complex *samples, uint32_t num_samples);
int find_preamble_start(gr_complex *samples);
int find_preamble_start_fast(gr_complex *samples, uint32_t len);
unsigned int max_frequency_gradient_idx(gr_complex *samples);
bool demodulate(gr_complex *samples, bool is_header);
void deinterleave(uint32_t ppm);
int decode(uint8_t *out_data, bool is_header);
void deshuffle(const uint8_t *shuffle_pattern, bool is_header);
void dewhiten(const uint8_t *prng);
void hamming_decode(uint8_t *out_data);
void nibble_reverse(uint8_t *out_data, int len);
float stddev(const float *values, uint32_t len, float mean);
inline void instantaneous_phase(const gr_complex *in_samples, float *out_iphase, uint32_t window);
void instantaneous_frequency(const gr_complex *in_samples, float *out_ifreq, uint32_t window);
uint8_t lookup_cr(uint8_t bytevalue);
void msg_raw_chirp_debug(const gr_complex *raw_samples, uint32_t num_samples);
void msg_lora_frame(const uint8_t *frame_bytes, uint32_t frame_len);
public:
decoder_impl(float samp_rate, uint8_t sf);
~decoder_impl();
/// Where all the action really happens
int work(int noutput_items,
gr_vector_const_void_star& input_items,
gr_vector_void_star& output_items);
/// GRC interfaces
virtual void set_sf(uint8_t sf);
virtual void set_samp_rate(float samp_rate);
};
} // namespace lora
} // namespace gr
#endif /* INCLUDED_LORA_DECODER_IMPL_H */

Wyświetl plik

@ -682,6 +682,8 @@
#include <gnuradio/io_signature.h>
#include "message_socket_sink_impl.h"
#define NDEBUG /// Debug printing
namespace gr {
namespace lora {

Wyświetl plik

@ -2,35 +2,35 @@
#define TABLES_H
namespace gr {
namespace lora {
const uint8_t prng_header[] = {
0x22, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
namespace lora {
const uint8_t prng_header[] = {
0x22, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
const uint8_t prng_payload_sf7[] = { // OK
0xdc, 0xec, 0xb0, 0xf4, 0x9c, 0xfc, 0xc4, 0xdc, 0x10, 0xf8, 0x40, 0x34, 0xa8, 0x5c, 0xf0, 0x94, 0x60, 0x8, 0xf8, 0x48, 0xbc, 0x88, 0xa4, 0xd4, 0x14, 0xe4, 0x84, 0x38, 0x68, 0xec, 0xe4, 0xbc, 0xb0, 0x1c, 0x14, 0xa4, 0x3c, 0x4c, 0x90, 0x60, 0x84, 0x70, 0x20, 0x44, 0x4, 0x24, 0x80, 0x98, 0x40, 0xa4, 0x58, 0x4, 0xa0, 0x80, 0x98, 0x40, 0xa4, 0x10, 0x4c, 0x40, 0x60, 0xa8, 0x38, 0xb8, 0xa4, 0x80, 0x14, 0xc8, 0x84, 0xa0, 0x68, 0x68, 0xac, 0xbc, 0x18, 0x1c, 0x8c, 0xa4, 0xb8, 0x4c, 0xd8, 0x28, 0x64, 0xd8, 0x58, 0xdc, 0xb0, 0xa0, 0x9c, 0xd0, 0xc4, 0x44, 0x10, 0x7c, 0x8, 0xb4, 0x0, 0x5c, 0x68, 0x94, 0xe4, 0x8, 0xb0, 0x0, 0x5c, 0x20, 0xdc, 0x4c, 0xa0, 0x60, 0x98, 0x70, 0xec, 0xc, 0xac, 0xc4, 0x18, 0xa8, 0x8c, 0xb8, 0xf0, 0xc8, 0x38, 0x28, 0x54, 0xd8, 0x44, 0xdc, 0x7c, 0xe8, 0x34, 0x30, 0x5c, 0x74, 0xdc, 0x60, 0xa0, 0xf8, 0x98, 0xf4, 0xa4, 0x1c, 0x4, 0xc4, 0x80, 0xa8, 0x8, 0xb8, 0xb8, 0x80, 0xd8, 0x80, 0x2c, 0x40, 0xf0, 0x58, 0x60, 0xa0, 0xb0, 0xd0, 0x14, 0xc, 0x74, 0xd4, 0x38, 0xe4, 0x54, 0x70, 0xc, 0x44, 0xd4, 0x6c, 0xe4, 0x30, 0x70, 0x74, 0xc, 0x28, 0xc4, 0x50, 0xa8, 0x24, 0xf0, 0x20, 0x60, 0x14, 0xb0, 0xcc, 0x5c, 0x88, 0x94, 0xd4, 0x8, 0xe4, 0x48, 0x70, 0xc0, 0xc, 0x7c, 0x8c, 0x7c, 0x0, 0xbc, 0x68, 0xa4, 0xe4, 0x5c, 0xf8, 0x64, 0xbc, 0x10, 0xec, 0x50, 0xbc, 0xe4, 0x54, 0x38, 0x44, 0xec, 0x34, 0xbc, 0xd4, 0x54, 0x24, 0xc, 0x68, 0xd4, 0xf4, 0xe4, 0xb4, 0x38, 0x74, 0xa4, 0x28, 0x5c, 0x50, 0x2c, 0x24, 0xb8, 0x68, 0x80, 0xbc, 0xc8, 0x54, 0xe8, 0xc, 0x88, 0x9c, 0x8c, 0x4, 0x0, 0x8, 0x68, 0xb8, 0xe4, 0x90, 0xb0, 0x84, 0x14, 0x20, 0x74, 0x4c, 0x38, 0x60, 0x1c, 0x70, 0xa4, 0x44, 0x4c, 0x6c, 0x60, 0x30, 0x38, 0x3c, 0xec, 0x80, 0xbc, 0xc8, 0x1c, 0xa0, 0xec, 0x68, 0xe4, 0xf4, 0xf8, 0xb4, 0xf4, 0x3c, 0xc, 0xc8, 0xc4, 0x60, 0xe0, 0x38, 0x10, 0xa4, 0x18, 0x14, 0x4, 0xcc, 0x8, 0xc0, 0xb8, 0x34, 0xd8, 0x9c, 0x64, 0xc4, 0x10, 0x58, 0x50, 0xa0, 0xac, 0xd0, 0xd8, 0x44, 0xdc, 0x34, 0xa0, 0xd4, 0x98, 0x6c, 0xa4, 0x88, 0x4c, 0xc4, 0x28, 0xa8, 0x90, 0xb8, 0x3c, 0x80, 0x90, 0xc8, 0xcc, 0xe8, 0x88, 0xc0, 0xd4, 0x24, 0xac, 0x98, 0x90
};
const uint8_t prng_payload_sf7[] = { // OK
0xdc, 0xec, 0xb0, 0xf4, 0x9c, 0xfc, 0xc4, 0xdc, 0x10, 0xf8, 0x40, 0x34, 0xa8, 0x5c, 0xf0, 0x94, 0x60, 0x08, 0xf8, 0x48, 0xbc, 0x88, 0xa4, 0xd4, 0x14, 0xe4, 0x84, 0x38, 0x68, 0xec, 0xe4, 0xbc, 0xb0, 0x1c, 0x14, 0xa4, 0x3c, 0x4c, 0x90, 0x60, 0x84, 0x70, 0x20, 0x44, 0x04, 0x24, 0x80, 0x98, 0x40, 0xa4, 0x58, 0x04, 0xa0, 0x80, 0x98, 0x40, 0xa4, 0x10, 0x4c, 0x40, 0x60, 0xa8, 0x38, 0xb8, 0xa4, 0x80, 0x14, 0xc8, 0x84, 0xa0, 0x68, 0x68, 0xac, 0xbc, 0x18, 0x1c, 0x8c, 0xa4, 0xb8, 0x4c, 0xd8, 0x28, 0x64, 0xd8, 0x58, 0xdc, 0xb0, 0xa0, 0x9c, 0xd0, 0xc4, 0x44, 0x10, 0x7c, 0x08, 0xb4, 0x00, 0x5c, 0x68, 0x94, 0xe4, 0x08, 0xb0, 0x00, 0x5c, 0x20, 0xdc, 0x4c, 0xa0, 0x60, 0x98, 0x70, 0xec, 0x0c, 0xac, 0xc4, 0x18, 0xa8, 0x8c, 0xb8, 0xf0, 0xc8, 0x38, 0x28, 0x54, 0xd8, 0x44, 0xdc, 0x7c, 0xe8, 0x34, 0x30, 0x5c, 0x74, 0xdc, 0x60, 0xa0, 0xf8, 0x98, 0xf4, 0xa4, 0x1c, 0x04, 0xc4, 0x80, 0xa8, 0x08, 0xb8, 0xb8, 0x80, 0xd8, 0x80, 0x2c, 0x40, 0xf0, 0x58, 0x60, 0xa0, 0xb0, 0xd0, 0x14, 0x0c, 0x74, 0xd4, 0x38, 0xe4, 0x54, 0x70, 0x0c, 0x44, 0xd4, 0x6c, 0xe4, 0x30, 0x70, 0x74, 0x0c, 0x28, 0xc4, 0x50, 0xa8, 0x24, 0xf0, 0x20, 0x60, 0x14, 0xb0, 0xcc, 0x5c, 0x88, 0x94, 0xd4, 0x08, 0xe4, 0x48, 0x70, 0xc0, 0x0c, 0x7c, 0x8c, 0x7c, 0x00, 0xbc, 0x68, 0xa4, 0xe4, 0x5c, 0xf8, 0x64, 0xbc, 0x10, 0xec, 0x50, 0xbc, 0xe4, 0x54, 0x38, 0x44, 0xec, 0x34, 0xbc, 0xd4, 0x54, 0x24, 0x0c, 0x68, 0xd4, 0xf4, 0xe4, 0xb4, 0x38, 0x74, 0xa4, 0x28, 0x5c, 0x50, 0x2c, 0x24, 0xb8, 0x68, 0x80, 0xbc, 0xc8, 0x54, 0xe8, 0x0c, 0x88, 0x9c, 0x8c, 0x04, 0x00, 0x08, 0x68, 0xb8, 0xe4, 0x90, 0xb0, 0x84, 0x14, 0x20, 0x74, 0x4c, 0x38, 0x60, 0x1c, 0x70, 0xa4, 0x44, 0x4c, 0x6c, 0x60, 0x30, 0x38, 0x3c, 0xec, 0x80, 0xbc, 0xc8, 0x1c, 0xa0, 0xec, 0x68, 0xe4, 0xf4, 0xf8, 0xb4, 0xf4, 0x3c, 0x0c, 0xc8, 0xc4, 0x60, 0xe0, 0x38, 0x10, 0xa4, 0x18, 0x14, 0x04, 0xcc, 0x08, 0xc0, 0xb8, 0x34, 0xd8, 0x9c, 0x64, 0xc4, 0x10, 0x58, 0x50, 0xa0, 0xac, 0xd0, 0xd8, 0x44, 0xdc, 0x34, 0xa0, 0xd4, 0x98, 0x6c, 0xa4, 0x88, 0x4c, 0xc4, 0x28, 0xa8, 0x90, 0xb8, 0x3c, 0x80, 0x90, 0xc8, 0xcc, 0xe8, 0x88, 0xc0, 0xd4, 0x24, 0xac, 0x98, 0x90
};
const uint8_t prng_payload_sf8[] = {
0xbd, 0xdf, 0xa4, 0xfb, 0x16, 0x7f, 0x85, 0xfe, 0x40, 0xdf, 0x5b, 0xb0, 0xa2, 0x9e, 0xd0, 0x86, 0x26, 0x20, 0x68, 0x4f, 0xf7, 0x2a, 0xb6, 0xd3, 0x5e, 0x46, 0x97, 0x7c, 0x43, 0x7f, 0xe3, 0xb5, 0x73, 0x3e, 0x45, 0x83, 0x25, 0xcb, 0x9b, 0xe0, 0xc7, 0x13, 0x10, 0x51, 0x8, 0xad, 0x2, 0x98, 0x40, 0xa7, 0x5b, 0x4, 0xa2, 0x80, 0x9b, 0x1, 0xc7, 0x20, 0x5b, 0x4f, 0xe9, 0x2a, 0x7a, 0x98, 0xf4, 0xa7, 0xe, 0x4f, 0x8f, 0x61, 0x49, 0x79, 0xea, 0x94, 0x89, 0x1a, 0xc4, 0x7, 0xa8, 0x4a, 0x92, 0x8a, 0x76, 0x9d, 0x70, 0x4c, 0xb6, 0xab, 0x5e, 0xf2, 0x97, 0x62, 0x8, 0xf8, 0x2, 0xb5, 0x40, 0x3e, 0x5b, 0x83, 0xe9, 0x80, 0x31, 0x1, 0x5e, 0x20, 0xdc, 0x4f, 0xa2, 0x61, 0x9b, 0x32, 0x8c, 0x3e, 0x9a, 0xd8, 0x95, 0x22, 0x4e, 0x9a, 0xa0, 0xac, 0x23, 0x8e, 0x5d, 0x5, 0x64, 0xcf, 0xb9, 0xc1, 0xc4, 0x37, 0x2, 0xdd, 0xce, 0xe7, 0xe9, 0x58, 0xc9, 0xb1, 0xbf, 0x98, 0xa, 0xcd, 0xc0, 0x8b, 0x7b, 0xdd, 0xb2, 0xf, 0x54, 0x3, 0x6d, 0x60, 0xe2, 0x4f, 0x6e, 0x2e, 0xb9, 0xc3, 0x16, 0x5, 0x76, 0xb6, 0x2f, 0xe6, 0xd7, 0x30, 0x6c, 0x37, 0xc3, 0x62, 0x4a, 0xbb, 0xa1, 0x54, 0x5e, 0x4d, 0xfd, 0xc6, 0xa2, 0xee, 0xd4, 0xb2, 0x24, 0x3e, 0x23, 0xe9, 0x56, 0x3e, 0x8d, 0x53, 0x42, 0x6, 0x7b, 0x37, 0xf9, 0x9e, 0xf6, 0x86, 0xbc, 0x20, 0xcf, 0xe, 0xbc, 0x7d, 0xd7, 0x7b, 0x26, 0xdf, 0x61, 0xcb, 0x5d, 0x38, 0xe4, 0x54, 0x39, 0xe, 0xef, 0x87, 0xb8, 0xd5, 0x57, 0x67, 0x6e, 0xd8, 0x82, 0xeb, 0x4b, 0x3c, 0x7a, 0x56, 0xf4, 0xd, 0x45, 0x96, 0x31, 0xc6, 0x1b, 0x73, 0xc6, 0x95, 0x7b, 0x11, 0xb2, 0xa5, 0x1f, 0x9a, 0xc7, 0xe6, 0x30, 0x4f, 0x47, 0x2a, 0xeb, 0x1a, 0x63, 0xa7, 0x65, 0x54, 0x6e, 0xcf, 0x39, 0xe2, 0xdf, 0x5b, 0xb6, 0x51, 0x57, 0xe6, 0xe3, 0xb0, 0x38, 0x3e, 0xcf, 0xc2, 0xbc, 0xd7, 0x9c, 0xe2, 0x8c, 0x58, 0xb1, 0xca, 0x74, 0x3c, 0xb6, 0x9d, 0x5e, 0xae, 0xfc, 0xe5, 0xe9, 0xf8, 0xa9, 0xb5, 0x5b, 0x3e, 0xb7, 0xd9, 0x7, 0x61, 0x28, 0x3a, 0x90, 0x7e, 0x76, 0xb3, 0x3f, 0xcb, 0x5f, 0xab, 0xee, 0xf3, 0xeb, 0x72, 0xc0, 0xb3, 0x28, 0x5c, 0xd9, 0x4d, 0xb6, 0x9d, 0x57, 0x4c, 0xa0, 0x29, 0x92, 0xb9, 0x1d, 0x83, 0x95, 0xd3, 0x8e, 0x2b, 0xe9, 0xf3, 0xa2, 0x29, 0x25, 0x15, 0x40, 0xcf, 0x6d, 0xca, 0x89, 0xd6, 0xd4, 0xa1, 0xc3, 0x51, 0x39, 0x4d, 0x85, 0x8d, 0x49, 0x44, 0xe8, 0xe2, 0xbb, 0x1a, 0x84, 0x0, 0x49, 0x98, 0xec, 0x65, 0x72, 0x10, 0x6e, 0x80, 0x40, 0xdd, 0x76, 0x65, 0x3b, 0x51, 0x8e, 0x2, 0xb8, 0x70, 0xd7, 0xe2, 0xa7, 0x9a, 0x48, 0xab, 0xc2, 0x38, 0x7d, 0x5e, 0xbe, 0x6, 0x86, 0x4c, 0x9, 0x72, 0xaf, 0xf4, 0x58, 0x9e, 0x3c, 0x80, 0xed, 0xdd, 0xa5, 0x2e, 0x55, 0xf8, 0xbc, 0xd8, 0xed, 0x4d, 0xb9, 0xa0, 0x16, 0xfe, 0x5f, 0xf9, 0xde, 0x79, 0xa7, 0x34, 0xd8, 0x37, 0xf6, 0xb9, 0x77, 0x5a, 0x6b, 0x2e, 0x76, 0xf8, 0x36, 0xb5, 0x8b, 0xc3, 0xc2, 0xe2, 0xc1, 0x53, 0x38, 0xa, 0xfd, 0x2b, 0xf2, 0x83, 0xf5, 0x64, 0x25, 0x5e, 0x33, 0x49, 0x50, 0xfb, 0x64, 0xd5, 0xa2, 0x41, 0x21, 0x85, 0x5c, 0x41, 0x25, 0x4d, 0x9, 0xe6, 0xe3, 0xa5, 0x79, 0xd9, 0x77, 0x6, 0x6e, 0x4c, 0xc0, 0x77, 0x35, 0xfc, 0x11, 0xd5, 0x5d, 0xa, 0x97, 0x50, 0x5, 0xa9, 0xe9, 0xb3, 0x7b, 0x79, 0x96, 0x15, 0x13, 0x4, 0x8f, 0x62, 0x91, 0x5e, 0x74, 0x12, 0x75, 0x9e, 0x3e, 0xad, 0x4b, 0x97, 0xe3, 0xf0, 0x8a, 0x3, 0x41, 0x60, 0xd1, 0xd2, 0x4b, 0xbb, 0xda, 0x3f, 0x3d
};
const uint8_t prng_payload_sf8[] = {
0xbd, 0xdf, 0xa4, 0xfb, 0x16, 0x7f, 0x85, 0xfe, 0x40, 0xdf, 0x5b, 0xb0, 0xa2, 0x9e, 0xd0, 0x86, 0x26, 0x20, 0x68, 0x4f, 0xf7, 0x2a, 0xb6, 0xd3, 0x5e, 0x46, 0x97, 0x7c, 0x43, 0x7f, 0xe3, 0xb5, 0x73, 0x3e, 0x45, 0x83, 0x25, 0xcb, 0x9b, 0xe0, 0xc7, 0x13, 0x10, 0x51, 0x08, 0xad, 0x02, 0x98, 0x40, 0xa7, 0x5b, 0x04, 0xa2, 0x80, 0x9b, 0x01, 0xc7, 0x20, 0x5b, 0x4f, 0xe9, 0x2a, 0x7a, 0x98, 0xf4, 0xa7, 0x0e, 0x4f, 0x8f, 0x61, 0x49, 0x79, 0xea, 0x94, 0x89, 0x1a, 0xc4, 0x07, 0xa8, 0x4a, 0x92, 0x8a, 0x76, 0x9d, 0x70, 0x4c, 0xb6, 0xab, 0x5e, 0xf2, 0x97, 0x62, 0x08, 0xf8, 0x02, 0xb5, 0x40, 0x3e, 0x5b, 0x83, 0xe9, 0x80, 0x31, 0x01, 0x5e, 0x20, 0xdc, 0x4f, 0xa2, 0x61, 0x9b, 0x32, 0x8c, 0x3e, 0x9a, 0xd8, 0x95, 0x22, 0x4e, 0x9a, 0xa0, 0xac, 0x23, 0x8e, 0x5d, 0x05, 0x64, 0xcf, 0xb9, 0xc1, 0xc4, 0x37, 0x02, 0xdd, 0xce, 0xe7, 0xe9, 0x58, 0xc9, 0xb1, 0xbf, 0x98, 0x0a, 0xcd, 0xc0, 0x8b, 0x7b, 0xdd, 0xb2, 0x0f, 0x54, 0x03, 0x6d, 0x60, 0xe2, 0x4f, 0x6e, 0x2e, 0xb9, 0xc3, 0x16, 0x50, 0x76, 0xb6, 0x2f, 0xe6, 0xd7, 0x30, 0x6c, 0x37, 0xc3, 0x62, 0x4a, 0xbb, 0xa1, 0x54, 0x5e, 0x4d, 0xfd, 0xc6, 0xa2, 0xee, 0xd4, 0xb2, 0x24, 0x3e, 0x23, 0xe9, 0x56, 0x3e, 0x8d, 0x53, 0x42, 0x06, 0x7b, 0x37, 0xf9, 0x9e, 0xf6, 0x86, 0xbc, 0x20, 0xcf, 0x0e, 0xbc, 0x7d, 0xd7, 0x7b, 0x26, 0xdf, 0x61, 0xcb, 0x5d, 0x38, 0xe4, 0x54, 0x39, 0x0e, 0xef, 0x87, 0xb8, 0xd5, 0x57, 0x67, 0x6e, 0xd8, 0x82, 0xeb, 0x4b, 0x3c, 0x7a, 0x56, 0xf4, 0x0d, 0x45, 0x96, 0x31, 0xc6, 0x1b, 0x73, 0xc6, 0x95, 0x7b, 0x11, 0xb2, 0xa5, 0x1f, 0x9a, 0xc7, 0xe6, 0x30, 0x4f, 0x47, 0x2a, 0xeb, 0x1a, 0x63, 0xa7, 0x65, 0x54, 0x6e, 0xcf, 0x39, 0xe2, 0xdf, 0x5b, 0xb6, 0x51, 0x57, 0xe6, 0xe3, 0xb0, 0x38, 0x3e, 0xcf, 0xc2, 0xbc, 0xd7, 0x9c, 0xe2, 0x8c, 0x58, 0xb1, 0xca, 0x74, 0x3c, 0xb6, 0x9d, 0x5e, 0xae, 0xfc, 0xe5, 0xe9, 0xf8, 0xa9, 0xb5, 0x5b, 0x3e, 0xb7, 0xd9, 0x07, 0x61, 0x28, 0x3a, 0x90, 0x7e, 0x76, 0xb3, 0x3f, 0xcb, 0x5f, 0xab, 0xee, 0xf3, 0xeb, 0x72, 0xc0, 0xb3, 0x28, 0x5c, 0xd9, 0x4d, 0xb6, 0x9d, 0x57, 0x4c, 0xa0, 0x29, 0x92, 0xb9, 0x1d, 0x83, 0x95, 0xd3, 0x8e, 0x2b, 0xe9, 0xf3, 0xa2, 0x29, 0x25, 0x15, 0x40, 0xcf, 0x6d, 0xca, 0x89, 0xd6, 0xd4, 0xa1, 0xc3, 0x51, 0x39, 0x4d, 0x85, 0x8d, 0x49, 0x44, 0xe8, 0xe2, 0xbb, 0x1a, 0x84, 0x00, 0x49, 0x98, 0xec, 0x65, 0x72, 0x10, 0x6e, 0x80, 0x40, 0xdd, 0x76, 0x65, 0x3b, 0x51, 0x8e, 0x02, 0xb8, 0x70, 0xd7, 0xe2, 0xa7, 0x9a, 0x48, 0xab, 0xc2, 0x38, 0x7d, 0x5e, 0xbe, 0x06, 0x86, 0x4c, 0x09, 0x72, 0xaf, 0xf4, 0x58, 0x9e, 0x3c, 0x80, 0xed, 0xdd, 0xa5, 0x2e, 0x55, 0xf8, 0xbc, 0xd8, 0xed, 0x4d, 0xb9, 0xa0, 0x16, 0xfe, 0x5f, 0xf9, 0xde, 0x79, 0xa7, 0x34, 0xd8, 0x37, 0xf6, 0xb9, 0x77, 0x5a, 0x6b, 0x2e, 0x76, 0xf8, 0x36, 0xb5, 0x8b, 0xc3, 0xc2, 0xe2, 0xc1, 0x53, 0x38, 0x0a, 0xfd, 0x2b, 0xf2, 0x83, 0xf5, 0x64, 0x25, 0x5e, 0x33, 0x49, 0x50, 0xfb, 0x64, 0xd5, 0xa2, 0x41, 0x21, 0x85, 0x5c, 0x41, 0x25, 0x4d, 0x09, 0xe6, 0xe3, 0xa5, 0x79, 0xd9, 0x77, 0x06, 0x6e, 0x4c, 0xc0, 0x77, 0x35, 0xfc, 0x11, 0xd5, 0x5d, 0x0a, 0x97, 0x50, 0x05, 0xa9, 0xe9, 0xb3, 0x7b, 0x79, 0x96, 0x15, 0x13, 0x04, 0x8f, 0x62, 0x91, 0x5e, 0x74, 0x12, 0x75, 0x9e, 0x3e, 0xad, 0x4b, 0x97, 0xe3, 0xf0, 0x8a, 0x03, 0x41, 0x60, 0xd1, 0xd2, 0x4b, 0xbb, 0xda, 0x3f, 0x3d
};
const uint8_t prng_payload_sf9[] = {
0xfd, 0xbe, 0x94, 0xef, 0x1a, 0xf7, 0x7, 0xfd, 0x1, 0xff, 0xb, 0x94, 0xba, 0x1a, 0xda, 0x7, 0x64, 0x1, 0x78, 0xb, 0xdf, 0xba, 0xb0, 0xda, 0x9e, 0x64, 0x86, 0x78, 0xb, 0xdf, 0xf1, 0xb0, 0x3b, 0x9e, 0x57, 0x86, 0x2d, 0xb, 0xb9, 0xf1, 0x83, 0x3b, 0x80, 0x57, 0x1, 0x2d, 0x40, 0xb9, 0x10, 0x83, 0x47, 0x80, 0xa8, 0x3, 0x99, 0x41, 0xa3, 0x12, 0x5f, 0x3, 0x69, 0x8, 0x79, 0x98, 0xf4, 0xa7, 0xe, 0x5f, 0xcf, 0x6d, 0xe9, 0x79, 0xab, 0xf6, 0xb9, 0x2e, 0xd8, 0xcf, 0x2e, 0x41, 0xd1, 0x2b, 0x26, 0xb9, 0x68, 0xb8, 0xb8, 0x22, 0x1c, 0xd1, 0x7, 0x27, 0x60, 0x48, 0x14, 0xb8, 0x88, 0x9c, 0x48, 0x86, 0xa1, 0x60, 0x3, 0x4, 0x16, 0x94, 0x4e, 0x42, 0xa9, 0xa1, 0xf9, 0x3, 0xc8, 0x16, 0x3e, 0x46, 0x98, 0xab, 0x8e, 0xf9, 0xf1, 0xe8, 0x3b, 0x32, 0x57, 0x9e, 0xe7, 0x8c, 0x18, 0xf1, 0x80, 0x3f, 0x9e, 0x5f, 0xcd, 0xe7, 0xe8, 0x58, 0xe9, 0xb1, 0x9f, 0x92, 0x82, 0xcf, 0x0, 0xea, 0x2b, 0x88, 0xbe, 0xaf, 0x56, 0x82, 0x2e, 0x8, 0x92, 0x6b, 0x17, 0xae, 0x3b, 0x4a, 0xd7, 0x2a, 0x66, 0x92, 0x13, 0x76, 0x21, 0x3b, 0xa5, 0xd3, 0xd3, 0x65, 0x26, 0x13, 0x2, 0x41, 0x52, 0xad, 0x46, 0xd3, 0xa8, 0x26, 0xb2, 0x23, 0x52, 0x12, 0xb3, 0xce, 0x97, 0xa9, 0xc6, 0x33, 0x30, 0x72, 0x27, 0xbf, 0x7b, 0x1d, 0x7b, 0xc7, 0x9d, 0x30, 0xeb, 0x27, 0x38, 0x73, 0xd6, 0x79, 0x2f, 0x9f, 0x3, 0xeb, 0x39, 0x2c, 0xe8, 0xd6, 0x7b, 0x27, 0x9d, 0x43, 0x80, 0x59, 0xc9, 0xec, 0xae, 0x79, 0x93, 0x9f, 0x16, 0x80, 0x74, 0xc9, 0x3e, 0xae, 0x56, 0x93, 0x4d, 0x57, 0xcd, 0x64, 0x2b, 0x3e, 0xc8, 0x56, 0xea, 0x6d, 0xa8, 0x8d, 0x9b, 0xf, 0x86, 0xc8, 0x2, 0xe8, 0x80, 0xe9, 0x27, 0xbb, 0xdd, 0x86, 0xe5, 0x4a, 0x79, 0x80, 0x2e, 0x7, 0x9b, 0xd9, 0x89, 0xed, 0xe2, 0x73, 0x18, 0x2e, 0xe9, 0xeb, 0x38, 0xd9, 0x95, 0xe0, 0x8d, 0x98, 0xd1, 0x8a, 0x74, 0x2c, 0x32, 0x1d, 0x17, 0x8e, 0x2d, 0x91, 0xf5, 0x44, 0xbf, 0x36, 0x1d, 0x15, 0xc7, 0x2d, 0x7b, 0xb5, 0x96, 0xbb, 0x50, 0x1d, 0x6b, 0xc5, 0x53, 0x3b, 0x41, 0xb6, 0x85, 0x54, 0x1a, 0x6d, 0x8d, 0x53, 0xdb, 0x41, 0x85, 0xa5, 0x29, 0x9a, 0xca, 0x8e, 0x8a, 0xfa, 0xd6, 0x91, 0xb8, 0xa5, 0x98, 0xc1, 0x8c, 0xca, 0xda, 0xe6, 0xaa, 0xa1, 0x27, 0x18, 0xc8, 0x8d, 0x5, 0xfb, 0x8d, 0xca, 0x40, 0xa7, 0x40, 0x51, 0x29, 0x4d, 0xc5, 0xbd, 0x7d, 0x1c, 0xe0, 0x60, 0xfb, 0x31, 0x94, 0x44, 0x71, 0x7d, 0xfe, 0xe8, 0xb0, 0x7a, 0x55, 0xd7, 0xbc, 0x21, 0xfd, 0xda, 0xf6, 0xb8, 0xfc, 0xdf, 0xd4, 0x9c, 0x21, 0xfc, 0xf2, 0x76, 0xf9, 0xfc, 0xbe, 0x17, 0xaf, 0x41, 0xe3, 0xca, 0xbe, 0x6f, 0x5f, 0xbf, 0xc, 0x87, 0x2d, 0xc3, 0x48, 0x36, 0x74, 0x57, 0x73, 0x4d, 0x43, 0xad, 0xd0, 0x18, 0xe3, 0xe0, 0xb0, 0x72, 0x35, 0x6f, 0x49, 0xf4, 0x52, 0x6b, 0xac, 0xb4, 0xd8, 0x35, 0xf6, 0x59, 0x77, 0x5e, 0x7b, 0xae, 0xbc, 0xda, 0x3e, 0xf7, 0x32, 0x53, 0x84, 0xeb, 0x23, 0x30, 0x18, 0x7e, 0xb1, 0x52, 0x64, 0xb4, 0xbe, 0x5, 0x56, 0xa, 0xc, 0x91, 0x76, 0x50, 0xb1, 0x3e, 0x59, 0x57, 0x6e, 0xd, 0xa3, 0xb6, 0x7e, 0x89, 0x76, 0x4b, 0x7d, 0x6e, 0xde, 0x82, 0x90, 0x5e, 0xca, 0x72, 0x4d, 0x71, 0xe9, 0xdc, 0x82, 0xd0, 0x15, 0x9a, 0x83, 0x4d, 0x9, 0xeb, 0x20, 0x82, 0x6f, 0x74, 0x1e, 0x93, 0x18, 0x8d, 0xb, 0x20, 0xb1, 0x2e, 0x60, 0x1e, 0xf1, 0x10, 0xfd, 0xf, 0x5e, 0xb7, 0x9b, 0x40, 0x94, 0xa, 0x89, 0x2, 0xa0, 0xb7, 0x66, 0x43, 0x77, 0xb6, 0xc7, 0x3e, 0x3f, 0xdf
};
const uint8_t prng_payload_sf9[] = {
0xfd, 0xbe, 0x94, 0xef, 0x1a, 0xf7, 0x07, 0xfd, 0x01, 0xff, 0x0b, 0x94, 0xba, 0x1a, 0xda, 0x07, 0x64, 0x01, 0x78, 0x0b, 0xdf, 0xba, 0xb0, 0xda, 0x9e, 0x64, 0x86, 0x78, 0x0b, 0xdf, 0xf1, 0xb0, 0x3b, 0x9e, 0x57, 0x86, 0x2d, 0x0b, 0xb9, 0xf1, 0x83, 0x3b, 0x80, 0x57, 0x01, 0x2d, 0x40, 0xb9, 0x10, 0x83, 0x47, 0x80, 0xa8, 0x03, 0x99, 0x41, 0xa3, 0x12, 0x5f, 0x03, 0x69, 0x08, 0x79, 0x98, 0xf4, 0xa7, 0x0e, 0x5f, 0xcf, 0x6d, 0xe9, 0x79, 0xab, 0xf6, 0xb9, 0x2e, 0xd8, 0xcf, 0x2e, 0x41, 0xd1, 0x2b, 0x26, 0xb9, 0x68, 0xb8, 0xb8, 0x22, 0x1c, 0xd1, 0x07, 0x27, 0x60, 0x48, 0x14, 0xb8, 0x88, 0x9c, 0x48, 0x86, 0xa1, 0x60, 0x03, 0x04, 0x16, 0x94, 0x4e, 0x42, 0xa9, 0xa1, 0xf9, 0x03, 0xc8, 0x16, 0x3e, 0x46, 0x98, 0xab, 0x8e, 0xf9, 0xf1, 0xe8, 0x3b, 0x32, 0x57, 0x9e, 0xe7, 0x8c, 0x18, 0xf1, 0x80, 0x3f, 0x9e, 0x5f, 0xcd, 0xe7, 0xe8, 0x58, 0xe9, 0xb1, 0x9f, 0x92, 0x82, 0xcf, 0x00, 0xea, 0x2b, 0x88, 0xbe, 0xaf, 0x56, 0x82, 0x2e, 0x08, 0x92, 0x6b, 0x17, 0xae, 0x3b, 0x4a, 0xd7, 0x2a, 0x66, 0x92, 0x13, 0x76, 0x21, 0x3b, 0xa5, 0xd3, 0xd3, 0x65, 0x26, 0x13, 0x02, 0x41, 0x52, 0xad, 0x46, 0xd3, 0xa8, 0x26, 0xb2, 0x23, 0x52, 0x12, 0xb3, 0xce, 0x97, 0xa9, 0xc6, 0x33, 0x30, 0x72, 0x27, 0xbf, 0x7b, 0x1d, 0x7b, 0xc7, 0x9d, 0x30, 0xeb, 0x27, 0x38, 0x73, 0xd6, 0x79, 0x2f, 0x9f, 0x03, 0xeb, 0x39, 0x2c, 0xe8, 0xd6, 0x7b, 0x27, 0x9d, 0x43, 0x80, 0x59, 0xc9, 0xec, 0xae, 0x79, 0x93, 0x9f, 0x16, 0x80, 0x74, 0xc9, 0x3e, 0xae, 0x56, 0x93, 0x4d, 0x57, 0xcd, 0x64, 0x2b, 0x3e, 0xc8, 0x56, 0xea, 0x6d, 0xa8, 0x8d, 0x9b, 0x0f, 0x86, 0xc8, 0x02, 0xe8, 0x80, 0xe9, 0x27, 0xbb, 0xdd, 0x86, 0xe5, 0x4a, 0x79, 0x80, 0x2e, 0x07, 0x9b, 0xd9, 0x89, 0xed, 0xe2, 0x73, 0x18, 0x2e, 0xe9, 0xeb, 0x38, 0xd9, 0x95, 0xe0, 0x8d, 0x98, 0xd1, 0x8a, 0x74, 0x2c, 0x32, 0x1d, 0x17, 0x8e, 0x2d, 0x91, 0xf5, 0x44, 0xbf, 0x36, 0x1d, 0x15, 0xc7, 0x2d, 0x7b, 0xb5, 0x96, 0xbb, 0x50, 0x1d, 0x6b, 0xc5, 0x53, 0x3b, 0x41, 0xb6, 0x85, 0x54, 0x1a, 0x6d, 0x8d, 0x53, 0xdb, 0x41, 0x85, 0xa5, 0x29, 0x9a, 0xca, 0x8e, 0x8a, 0xfa, 0xd6, 0x91, 0xb8, 0xa5, 0x98, 0xc1, 0x8c, 0xca, 0xda, 0xe6, 0xaa, 0xa1, 0x27, 0x18, 0xc8, 0x8d, 0x05, 0xfb, 0x8d, 0xca, 0x40, 0xa7, 0x40, 0x51, 0x29, 0x4d, 0xc5, 0xbd, 0x7d, 0x1c, 0xe0, 0x60, 0xfb, 0x31, 0x94, 0x44, 0x71, 0x7d, 0xfe, 0xe8, 0xb0, 0x7a, 0x55, 0xd7, 0xbc, 0x21, 0xfd, 0xda, 0xf6, 0xb8, 0xfc, 0xdf, 0xd4, 0x9c, 0x21, 0xfc, 0xf2, 0x76, 0xf9, 0xfc, 0xbe, 0x17, 0xaf, 0x41, 0xe3, 0xca, 0xbe, 0x6f, 0x5f, 0xbf, 0x0c, 0x87, 0x2d, 0xc3, 0x48, 0x36, 0x74, 0x57, 0x73, 0x4d, 0x43, 0xad, 0xd0, 0x18, 0xe3, 0xe0, 0xb0, 0x72, 0x35, 0x6f, 0x49, 0xf4, 0x52, 0x6b, 0xac, 0xb4, 0xd8, 0x35, 0xf6, 0x59, 0x77, 0x5e, 0x7b, 0xae, 0xbc, 0xda, 0x3e, 0xf7, 0x32, 0x53, 0x84, 0xeb, 0x23, 0x30, 0x18, 0x7e, 0xb1, 0x52, 0x64, 0xb4, 0xbe, 0x05, 0x56, 0x0a, 0x0c, 0x91, 0x76, 0x50, 0xb1, 0x3e, 0x59, 0x57, 0x6e, 0x0d, 0xa3, 0xb6, 0x7e, 0x89, 0x76, 0x4b, 0x7d, 0x6e, 0xde, 0x82, 0x90, 0x5e, 0xca, 0x72, 0x4d, 0x71, 0xe9, 0xdc, 0x82, 0xd0, 0x15, 0x9a, 0x83, 0x4d, 0x09, 0xeb, 0x20, 0x82, 0x6f, 0x74, 0x1e, 0x93, 0x18, 0x8d, 0x0b, 0x20, 0xb1, 0x2e, 0x60, 0x1e, 0xf1, 0x10, 0xfd, 0x0f, 0x5e, 0xb7, 0x9b, 0x40, 0x94, 0x0a, 0x89, 0x02, 0xa0, 0xb7, 0x66, 0x43, 0x77, 0xb6, 0xc7, 0x3e, 0x3f, 0xdf
};
const uint8_t prng_payload_sf10[] = {
0xfd, 0xfe, 0xf4, 0xdf, 0xe, 0xfb, 0x8f, 0x7f, 0x2, 0xfe, 0x4b, 0xb4, 0xea, 0x3e, 0xc2, 0x83, 0x6a, 0x88, 0xfa, 0x48, 0xfe, 0xaa, 0xf4, 0xf2, 0x4e, 0x62, 0xab, 0xf8, 0xd1, 0xfc, 0xe0, 0xb4, 0x73, 0x7e, 0x65, 0x83, 0x21, 0xcb, 0x93, 0x72, 0x87, 0x32, 0x40, 0x75, 0x50, 0x29, 0x2c, 0x19, 0x9a, 0x84, 0x4a, 0x0, 0xea, 0x30, 0xa9, 0x4, 0x8b, 0x88, 0x49, 0xa, 0xe2, 0x2a, 0x38, 0xb9, 0xa4, 0xa3, 0x16, 0xdf, 0xcd, 0x60, 0x4b, 0x7b, 0xea, 0x94, 0x89, 0x1a, 0xd0, 0x47, 0x28, 0x60, 0xd3, 0xaa, 0x26, 0xb9, 0x68, 0xb8, 0xb8, 0x22, 0x1c, 0xd1, 0x6, 0x65, 0x40, 0x18, 0x30, 0xa0, 0x3c, 0x92, 0xc9, 0x4c, 0xe2, 0x1, 0x73, 0x64, 0x2e, 0x34, 0xd0, 0x83, 0x20, 0xe2, 0x18, 0x32, 0x8e, 0x7c, 0x9a, 0xf8, 0xd5, 0x32, 0x46, 0x1e, 0xe0, 0xcd, 0x73, 0xca, 0x25, 0x8d, 0x7a, 0x64, 0xfe, 0x6a, 0xb5, 0x33, 0x5d, 0x35, 0xbd, 0x72, 0x96, 0xf0, 0x1b, 0xbf, 0x2, 0x1c, 0x40, 0xad, 0x30, 0x9e, 0x47, 0x55, 0x30, 0x4, 0xd3, 0x2, 0x6d, 0x62, 0xe2, 0x3f, 0x6a, 0x26, 0xb1, 0x41, 0x54, 0x2c, 0x2e, 0xb2, 0x3, 0x52, 0x1, 0xaf, 0xab, 0xd4, 0xd0, 0xe7, 0x26, 0x13, 0x62, 0x41, 0x6, 0xa5, 0x62, 0x53, 0xbb, 0xed, 0x92, 0x13, 0x17, 0x3a, 0x1b, 0x50, 0x94, 0x29, 0xd, 0xd2, 0x42, 0x6, 0x3b, 0x17, 0xc9, 0xda, 0xea, 0xe, 0x7e, 0x3, 0xbe, 0x2b, 0xe4, 0xa5, 0x69, 0xf4, 0xe8, 0x76, 0xb3, 0xfd, 0x14, 0x94, 0x36, 0x41, 0x64, 0xca, 0xf1, 0x28, 0xb6, 0xd6, 0x15, 0x46, 0x1f, 0x5c, 0x9a, 0x63, 0xcc, 0x3f, 0xfa, 0x54, 0xf4, 0xd, 0x5, 0xf6, 0x21, 0xe2, 0x93, 0xe9, 0x5, 0xb3, 0xa, 0x55, 0xfa, 0x29, 0x81, 0x1d, 0x9d, 0xa, 0x82, 0x4a, 0x48, 0x8b, 0x31, 0xfd, 0x2b, 0x23, 0x5f, 0x9d, 0x64, 0x48, 0x73, 0xc9, 0x4e, 0x57, 0xbf, 0xd1, 0x51, 0xe7, 0x67, 0x30, 0x39, 0x3e, 0xaf, 0xe3, 0xac, 0xef, 0x10, 0x70, 0x4e, 0x73, 0xa0, 0xde, 0x28, 0x90, 0xac, 0xba, 0x0, 0x4d, 0x86, 0x62, 0xa1, 0x58, 0x63, 0xd1, 0x26, 0x8a, 0x89, 0x45, 0xc9, 0xe2, 0xea, 0x13, 0x82, 0x7a, 0x5e, 0x3, 0x3d, 0xda, 0xdf, 0xa9, 0x6c, 0xf3, 0xc9, 0x12, 0xf0, 0x8f, 0xa0, 0x56, 0x1f, 0x27, 0xc7, 0xf8, 0x3b, 0xe8, 0xd6, 0x3e, 0xd4, 0x82, 0x2f, 0x85, 0x59, 0x29, 0x9d, 0xce, 0x96, 0x4e, 0x4c, 0xa4, 0xf, 0x9b, 0x12, 0xec, 0x1d, 0xce, 0xa1, 0x4e, 0x42, 0xaa, 0xeb, 0x50, 0x29, 0x8d, 0xc5, 0xfd, 0x5d, 0x4, 0xec, 0x46, 0x7a, 0x63, 0xf5, 0x94, 0x5, 0x21, 0x5e, 0x8e, 0xb9, 0xe1, 0x9d, 0xb3, 0x8f, 0x35, 0xb1, 0x32, 0x64, 0x97, 0xe1, 0x17, 0x35, 0xcf, 0x1c, 0x82, 0x16, 0x1c, 0x54, 0x7b, 0xed, 0xb3, 0xfe, 0xdd, 0xbf, 0x6, 0xc4, 0xc, 0x29, 0x46, 0xa7, 0x70, 0x8, 0xf5, 0xc, 0xd5, 0xd1, 0x61, 0x4f, 0x93, 0x80, 0x12, 0x4f, 0xc3, 0x20, 0x80, 0x43, 0x67, 0x49, 0xc2, 0xab, 0x6f, 0x5d, 0xf3, 0xef, 0x51, 0xe8, 0x81, 0xfb, 0xb5, 0xc9, 0x51, 0x72, 0x2e, 0x7e, 0xf8, 0x2e, 0xf7, 0xab, 0xd7, 0x86, 0x6a, 0xa3, 0xb1, 0x9, 0x7e, 0x91, 0x52, 0x4, 0x98, 0x2a, 0x8b, 0xd4, 0x48, 0x64, 0x0, 0xe2, 0x4c, 0x41, 0x28, 0x7c, 0xda, 0xac, 0x26, 0x93, 0xb3, 0x34, 0x49, 0x14, 0x52, 0x69, 0xa, 0x76, 0xd0, 0x75, 0xe, 0xc, 0x2c, 0xc4, 0x2b, 0x4, 0xf0, 0x42, 0x36, 0x6c, 0x3c, 0x89, 0x89, 0xab, 0x3a, 0x8e, 0xdd, 0xca, 0xa7, 0xeb, 0xbe, 0xa9, 0xd3, 0xe4, 0x94, 0xe7, 0xe0, 0xf9, 0xb8, 0x3e, 0xf9, 0xe7, 0xac, 0xd3, 0x9, 0x79, 0x61, 0x80, 0x82, 0x41, 0x31, 0x48, 0xa0, 0x50, 0x96, 0x2, 0x26, 0x64, 0x85, 0x16
};
const uint8_t prng_payload_sf10[] = {
0xfd, 0xfe, 0xf4, 0xdf, 0x0e, 0xfb, 0x8f, 0x7f, 0x02, 0xfe, 0x4b, 0xb4, 0xea, 0x3e, 0xc2, 0x83, 0x6a, 0x88, 0xfa, 0x48, 0xfe, 0xaa, 0xf4, 0xf2, 0x4e, 0x62, 0xab, 0xf8, 0xd1, 0xfc, 0xe0, 0xb4, 0x73, 0x7e, 0x65, 0x83, 0x21, 0xcb, 0x93, 0x72, 0x87, 0x32, 0x40, 0x75, 0x50, 0x29, 0x2c, 0x19, 0x9a, 0x84, 0x4a, 0x00, 0xea, 0x30, 0xa9, 0x04, 0x8b, 0x88, 0x49, 0x0a, 0xe2, 0x2a, 0x38, 0xb9, 0xa4, 0xa3, 0x16, 0xdf, 0xcd, 0x60, 0x4b, 0x7b, 0xea, 0x94, 0x89, 0x1a, 0xd0, 0x47, 0x28, 0x60, 0xd3, 0xaa, 0x26, 0xb9, 0x68, 0xb8, 0xb8, 0x22, 0x1c, 0xd1, 0x06, 0x65, 0x40, 0x18, 0x30, 0xa0, 0x3c, 0x92, 0xc9, 0x4c, 0xe2, 0x01, 0x73, 0x64, 0x2e, 0x34, 0xd0, 0x83, 0x20, 0xe2, 0x18, 0x32, 0x8e, 0x7c, 0x9a, 0xf8, 0xd5, 0x32, 0x46, 0x1e, 0xe0, 0xcd, 0x73, 0xca, 0x25, 0x8d, 0x7a, 0x64, 0xfe, 0x6a, 0xb5, 0x33, 0x5d, 0x35, 0xbd, 0x72, 0x96, 0xf0, 0x1b, 0xbf, 0x02, 0x1c, 0x40, 0xad, 0x30, 0x9e, 0x47, 0x55, 0x30, 0x04, 0xd3, 0x02, 0x6d, 0x62, 0xe2, 0x3f, 0x6a, 0x26, 0xb1, 0x41, 0x54, 0x2c, 0x2e, 0xb2, 0x03, 0x52, 0x01, 0xaf, 0xab, 0xd4, 0xd0, 0xe7, 0x26, 0x13, 0x62, 0x41, 0x06, 0xa5, 0x62, 0x53, 0xbb, 0xed, 0x92, 0x13, 0x17, 0x3a, 0x1b, 0x50, 0x94, 0x29, 0x0d, 0xd2, 0x42, 0x06, 0x3b, 0x17, 0xc9, 0xda, 0xea, 0x0e, 0x7e, 0x03, 0xbe, 0x2b, 0xe4, 0xa5, 0x69, 0xf4, 0xe8, 0x76, 0xb3, 0xfd, 0x14, 0x94, 0x36, 0x41, 0x64, 0xca, 0xf1, 0x28, 0xb6, 0xd6, 0x15, 0x46, 0x1f, 0x5c, 0x9a, 0x63, 0xcc, 0x3f, 0xfa, 0x54, 0xf4, 0x0d, 0x05, 0xf6, 0x21, 0xe2, 0x93, 0xe9, 0x05, 0xb3, 0x0a, 0x55, 0xfa, 0x29, 0x81, 0x1d, 0x9d, 0x0a, 0x82, 0x4a, 0x48, 0x8b, 0x31, 0xfd, 0x2b, 0x23, 0x5f, 0x9d, 0x64, 0x48, 0x73, 0xc9, 0x4e, 0x57, 0xbf, 0xd1, 0x51, 0xe7, 0x67, 0x30, 0x39, 0x3e, 0xaf, 0xe3, 0xac, 0xef, 0x10, 0x70, 0x4e, 0x73, 0xa0, 0xde, 0x28, 0x90, 0xac, 0xba, 0x00, 0x4d, 0x86, 0x62, 0xa1, 0x58, 0x63, 0xd1, 0x26, 0x8a, 0x89, 0x45, 0xc9, 0xe2, 0xea, 0x13, 0x82, 0x7a, 0x5e, 0x03, 0x3d, 0xda, 0xdf, 0xa9, 0x6c, 0xf3, 0xc9, 0x12, 0xf0, 0x8f, 0xa0, 0x56, 0x1f, 0x27, 0xc7, 0xf8, 0x3b, 0xe8, 0xd6, 0x3e, 0xd4, 0x82, 0x2f, 0x85, 0x59, 0x29, 0x9d, 0xce, 0x96, 0x4e, 0x4c, 0xa4, 0x0f, 0x9b, 0x12, 0xec, 0x1d, 0xce, 0xa1, 0x4e, 0x42, 0xaa, 0xeb, 0x50, 0x29, 0x8d, 0xc5, 0xfd, 0x5d, 0x04, 0xec, 0x46, 0x7a, 0x63, 0xf5, 0x94, 0x05, 0x21, 0x5e, 0x8e, 0xb9, 0xe1, 0x9d, 0xb3, 0x8f, 0x35, 0xb1, 0x32, 0x64, 0x97, 0xe1, 0x17, 0x35, 0xcf, 0x1c, 0x82, 0x16, 0x1c, 0x54, 0x7b, 0xed, 0xb3, 0xfe, 0xdd, 0xbf, 0x06, 0xc4, 0x0c, 0x29, 0x46, 0xa7, 0x70, 0x08, 0xf5, 0x0c, 0xd5, 0xd1, 0x61, 0x4f, 0x93, 0x80, 0x12, 0x4f, 0xc3, 0x20, 0x80, 0x43, 0x67, 0x49, 0xc2, 0xab, 0x6f, 0x5d, 0xf3, 0xef, 0x51, 0xe8, 0x81, 0xfb, 0xb5, 0xc9, 0x51, 0x72, 0x2e, 0x7e, 0xf8, 0x2e, 0xf7, 0xab, 0xd7, 0x86, 0x6a, 0xa3, 0xb1, 0x09, 0x7e, 0x91, 0x52, 0x04, 0x98, 0x2a, 0x8b, 0xd4, 0x48, 0x64, 0x00, 0xe2, 0x4c, 0x41, 0x28, 0x7c, 0xda, 0xac, 0x26, 0x93, 0xb3, 0x34, 0x49, 0x14, 0x52, 0x69, 0x0a, 0x76, 0xd0, 0x75, 0x0e, 0x0c, 0x2c, 0xc4, 0x2b, 0x04, 0xf0, 0x42, 0x36, 0x6c, 0x3c, 0x89, 0x89, 0xab, 0x3a, 0x8e, 0xdd, 0xca, 0xa7, 0xeb, 0xbe, 0xa9, 0xd3, 0xe4, 0x94, 0xe7, 0xe0, 0xf9, 0xb8, 0x3e, 0xf9, 0xe7, 0xac, 0xd3, 0x09, 0x79, 0x61, 0x80, 0x82, 0x41, 0x31, 0x48, 0xa0, 0x50, 0x96, 0x02, 0x26, 0x64, 0x85, 0x16
};
const uint8_t prng_payload_sf11[] = {
0xfd, 0xfe, 0xb4, 0xbf, 0x3e, 0x8f, 0xa3, 0xd3, 0xd0, 0x75, 0x4, 0xfe, 0xc1, 0xb5, 0xea, 0x3e, 0xc2, 0xc3, 0x4a, 0x80, 0x6e, 0x2c, 0x7a, 0x59, 0xfe, 0x6a, 0x94, 0x82, 0x2a, 0x7a, 0x47, 0x62, 0x84, 0xf8, 0x42, 0xfd, 0xa0, 0x94, 0x43, 0x4a, 0x39, 0x27, 0xd3, 0x6, 0x2d, 0x43, 0x9a, 0x21, 0xe7, 0x61, 0x54, 0x3d, 0xbc, 0xd3, 0x3, 0x2d, 0x9, 0x98, 0xc0, 0xe7, 0x7b, 0x74, 0xf6, 0x98, 0xab, 0xb, 0x99, 0x80, 0x87, 0x47, 0x6b, 0x3b, 0xd5, 0x86, 0xec, 0x87, 0xfb, 0x3, 0xb7, 0x86, 0x5e, 0x6b, 0xb7, 0xd5, 0x57, 0xe8, 0xec, 0x7b, 0x31, 0xb6, 0x98, 0x5e, 0xec, 0xb7, 0xbe, 0x7, 0x3a, 0xec, 0xd3, 0xab, 0xee, 0x9a, 0x38, 0xe4, 0xe4, 0xfe, 0x76, 0xa, 0x99, 0x43, 0x5, 0x64, 0x1, 0x38, 0x63, 0xe4, 0x14, 0x6, 0x9b, 0x99, 0x4a, 0x4f, 0xe1, 0x0, 0x73, 0x22, 0xe, 0x44, 0xa0, 0x97, 0x44, 0xc4, 0xaa, 0x61, 0x99, 0x72, 0xac, 0x4e, 0xce, 0xe0, 0x35, 0x4c, 0x9d, 0xa0, 0x4e, 0x98, 0xa1, 0xad, 0x43, 0xce, 0x59, 0x25, 0x54, 0x5, 0xe4, 0xcf, 0x78, 0xa1, 0x94, 0x43, 0xa, 0x19, 0x10, 0x40, 0x85, 0x66, 0xaa, 0xfb, 0xd8, 0x85, 0xd7, 0x6a, 0x28, 0x4, 0x6, 0x45, 0xc6, 0x28, 0x60, 0xd9, 0x8a, 0xd7, 0xc7, 0x38, 0xe1, 0x56, 0xa1, 0x82, 0xd0, 0xc8, 0x2e, 0x8a, 0x3, 0xe6, 0x49, 0xe5, 0x58, 0x31, 0xec, 0x51, 0x32, 0x25, 0x35, 0x3, 0x29, 0x19, 0x12, 0xd0, 0xb, 0xef, 0xe1, 0x30, 0x72, 0x75, 0x2e, 0x39, 0xa4, 0x3a, 0xf8, 0x9b, 0x2b, 0xec, 0xd5, 0x72, 0x46, 0x2e, 0x17, 0xb5, 0x8a, 0xd8, 0xd6, 0x25, 0x5, 0xd3, 0x42, 0x46, 0x3b, 0x16, 0xfd, 0xce, 0xfe, 0x16, 0xf7, 0x4, 0xfc, 0x40, 0xdf, 0x3b, 0x90, 0xfd, 0xcd, 0xf6, 0x5b, 0xfb, 0x6c, 0xfe, 0xf0, 0xde, 0x65, 0xb0, 0x7e, 0xcd, 0xea, 0xdf, 0xe7, 0xe5, 0xfe, 0x71, 0xd4, 0x65, 0x51, 0x2e, 0xcd, 0xfa, 0x87, 0xfd, 0x58, 0xfc, 0x27, 0xd4, 0x68, 0x51, 0x8c, 0xed, 0xab, 0xa7, 0xd1, 0x50, 0x2e, 0x2f, 0xf9, 0x48, 0xc3, 0x9a, 0xb3, 0x23, 0xc5, 0xde, 0x28, 0x2c, 0xd8, 0xa8, 0xd7, 0xc5, 0x68, 0x93, 0xd, 0x41, 0xca, 0xa1, 0x40, 0xd9, 0x13, 0x97, 0x41, 0x28, 0xc2, 0x55, 0x6c, 0xec, 0x38, 0xe2, 0xdf, 0x13, 0xd6, 0x61, 0x73, 0xe2, 0x4f, 0x6c, 0x6c, 0xb0, 0x6b, 0x5d, 0x1f, 0x95, 0xa0, 0x43, 0xc6, 0x5b, 0x9, 0x60, 0x4f, 0x72, 0xa0, 0x9e, 0x48, 0xe0, 0xe8, 0xe6, 0x4, 0x15, 0x82, 0x4c, 0x47, 0xa0, 0x82, 0x8, 0x7, 0x98, 0x96, 0x3c, 0x2c, 0x9a, 0xe, 0x4d, 0x4a, 0x8a, 0x9a, 0x27, 0xea, 0xee, 0xe8, 0x1a, 0xf5, 0x5, 0xb1, 0xb, 0x74, 0xba, 0x39, 0xee, 0x79, 0xec, 0x8f, 0x67, 0x48, 0x38, 0xeb, 0x75, 0xe8, 0x79, 0x9f, 0x9, 0x99, 0x1f, 0xcd, 0x6, 0x29, 0xe9, 0xf2, 0xe9, 0x79, 0x9f, 0xd, 0x9d, 0x9b, 0x4b, 0x5, 0xac, 0xeb, 0x71, 0xa2, 0x19, 0x25, 0x1d, 0x98, 0x97, 0x4f, 0x7, 0x2e, 0xeb, 0xf8, 0xa2, 0x9a, 0x5, 0x6d, 0xb0, 0xe7, 0x5f, 0xfb, 0xae, 0xf5, 0xf9, 0x65, 0xf8, 0x3e, 0x39, 0xfe, 0x4b, 0x71, 0xe0, 0xb6, 0xf1, 0x75, 0x65, 0x12, 0x1e, 0xdb, 0xb6, 0xb3, 0xe3, 0x9c, 0xb2, 0xf, 0x75, 0xd0, 0x22, 0x10, 0xd7, 0x2d, 0x8d, 0x76, 0x91, 0x37, 0x8f, 0x35, 0xd1, 0x22, 0x0, 0xc4, 0x25, 0x5c, 0xfe, 0xf0, 0x36, 0xbc, 0x35, 0x8e, 0x42, 0xe8, 0xa4, 0x3, 0xfc, 0xd2, 0x7d, 0xa6, 0xbc, 0xba, 0xcf, 0xc8, 0xb8, 0x15, 0x23, 0x54, 0x58, 0xb3, 0x2f, 0x5f, 0xb2, 0x9c, 0xa8, 0x89, 0x65, 0x39, 0x54, 0x38, 0xb3, 0xd7, 0x5b, 0x8c, 0xdc, 0xa6, 0x99, 0xb1, 0x79, 0x18, 0x38, 0x10, 0x57, 0xc0
};
const uint8_t prng_payload_sf11[] = {
0xfd, 0xfe, 0xb4, 0xbf, 0x3e, 0x8f, 0xa3, 0xd3, 0xd0, 0x75, 0x04, 0xfe, 0xc1, 0xb5, 0xea, 0x3e, 0xc2, 0xc3, 0x4a, 0x80, 0x6e, 0x2c, 0x7a, 0x59, 0xfe, 0x6a, 0x94, 0x82, 0x2a, 0x7a, 0x47, 0x62, 0x84, 0xf8, 0x42, 0xfd, 0xa0, 0x94, 0x43, 0x4a, 0x39, 0x27, 0xd3, 0x06, 0x2d, 0x43, 0x9a, 0x21, 0xe7, 0x61, 0x54, 0x3d, 0xbc, 0xd3, 0x03, 0x2d, 0x09, 0x98, 0xc0, 0xe7, 0x7b, 0x74, 0xf6, 0x98, 0xab, 0x0b, 0x99, 0x80, 0x87, 0x47, 0x6b, 0x3b, 0xd5, 0x86, 0xec, 0x87, 0xfb, 0x03, 0xb7, 0x86, 0x5e, 0x6b, 0xb7, 0xd5, 0x57, 0xe8, 0xec, 0x7b, 0x31, 0xb6, 0x98, 0x5e, 0xec, 0xb7, 0xbe, 0x07, 0x3a, 0xec, 0xd3, 0xab, 0xee, 0x9a, 0x38, 0xe4, 0xe4, 0xfe, 0x76, 0x0a, 0x99, 0x43, 0x05, 0x64, 0x01, 0x38, 0x63, 0xe4, 0x14, 0x06, 0x9b, 0x99, 0x4a, 0x4f, 0xe1, 0x00, 0x73, 0x22, 0x0e, 0x44, 0xa0, 0x97, 0x44, 0xc4, 0xaa, 0x61, 0x99, 0x72, 0xac, 0x4e, 0xce, 0xe0, 0x35, 0x4c, 0x9d, 0xa0, 0x4e, 0x98, 0xa1, 0xad, 0x43, 0xce, 0x59, 0x25, 0x54, 0x05, 0xe4, 0xcf, 0x78, 0xa1, 0x94, 0x43, 0x0a, 0x19, 0x10, 0x40, 0x85, 0x66, 0xaa, 0xfb, 0xd8, 0x85, 0xd7, 0x6a, 0x28, 0x04, 0x06, 0x45, 0xc6, 0x28, 0x60, 0xd9, 0x8a, 0xd7, 0xc7, 0x38, 0xe1, 0x56, 0xa1, 0x82, 0xd0, 0xc8, 0x2e, 0x8a, 0x03, 0xe6, 0x49, 0xe5, 0x58, 0x31, 0xec, 0x51, 0x32, 0x25, 0x35, 0x03, 0x29, 0x19, 0x12, 0xd0, 0x0b, 0xef, 0xe1, 0x30, 0x72, 0x75, 0x2e, 0x39, 0xa4, 0x3a, 0xf8, 0x9b, 0x2b, 0xec, 0xd5, 0x72, 0x46, 0x2e, 0x17, 0xb5, 0x8a, 0xd8, 0xd6, 0x25, 0x05, 0xd3, 0x42, 0x46, 0x3b, 0x16, 0xfd, 0xce, 0xfe, 0x16, 0xf7, 0x04, 0xfc, 0x40, 0xdf, 0x3b, 0x90, 0xfd, 0xcd, 0xf6, 0x5b, 0xfb, 0x6c, 0xfe, 0xf0, 0xde, 0x65, 0xb0, 0x7e, 0xcd, 0xea, 0xdf, 0xe7, 0xe5, 0xfe, 0x71, 0xd4, 0x65, 0x51, 0x2e, 0xcd, 0xfa, 0x87, 0xfd, 0x58, 0xfc, 0x27, 0xd4, 0x68, 0x51, 0x8c, 0xed, 0xab, 0xa7, 0xd1, 0x50, 0x2e, 0x2f, 0xf9, 0x48, 0xc3, 0x9a, 0xb3, 0x23, 0xc5, 0xde, 0x28, 0x2c, 0xd8, 0xa8, 0xd7, 0xc5, 0x68, 0x93, 0x0d, 0x41, 0xca, 0xa1, 0x40, 0xd9, 0x13, 0x97, 0x41, 0x28, 0xc2, 0x55, 0x6c, 0xec, 0x38, 0xe2, 0xdf, 0x13, 0xd6, 0x61, 0x73, 0xe2, 0x4f, 0x6c, 0x6c, 0xb0, 0x6b, 0x5d, 0x1f, 0x95, 0xa0, 0x43, 0xc6, 0x5b, 0x09, 0x60, 0x4f, 0x72, 0xa0, 0x9e, 0x48, 0xe0, 0xe8, 0xe6, 0x04, 0x15, 0x82, 0x4c, 0x47, 0xa0, 0x82, 0x08, 0x07, 0x98, 0x96, 0x3c, 0x2c, 0x9a, 0x0e, 0x4d, 0x4a, 0x8a, 0x9a, 0x27, 0xea, 0xee, 0xe8, 0x1a, 0xf5, 0x05, 0xb1, 0x0b, 0x74, 0xba, 0x39, 0xee, 0x79, 0xec, 0x8f, 0x67, 0x48, 0x38, 0xeb, 0x75, 0xe8, 0x79, 0x9f, 0x09, 0x99, 0x1f, 0xcd, 0x06, 0x29, 0xe9, 0xf2, 0xe9, 0x79, 0x9f, 0x0d, 0x9d, 0x9b, 0x4b, 0x05, 0xac, 0xeb, 0x71, 0xa2, 0x19, 0x25, 0x1d, 0x98, 0x97, 0x4f, 0x07, 0x2e, 0xeb, 0xf8, 0xa2, 0x9a, 0x05, 0x6d, 0xb0, 0xe7, 0x5f, 0xfb, 0xae, 0xf5, 0xf9, 0x65, 0xf8, 0x3e, 0x39, 0xfe, 0x4b, 0x71, 0xe0, 0xb6, 0xf1, 0x75, 0x65, 0x12, 0x1e, 0xdb, 0xb6, 0xb3, 0xe3, 0x9c, 0xb2, 0x0f, 0x75, 0xd0, 0x22, 0x10, 0xd7, 0x2d, 0x8d, 0x76, 0x91, 0x37, 0x8f, 0x35, 0xd1, 0x22, 0x00, 0xc4, 0x25, 0x5c, 0xfe, 0xf0, 0x36, 0xbc, 0x35, 0x8e, 0x42, 0xe8, 0xa4, 0x03, 0xfc, 0xd2, 0x7d, 0xa6, 0xbc, 0xba, 0xcf, 0xc8, 0xb8, 0x15, 0x23, 0x54, 0x58, 0xb3, 0x2f, 0x5f, 0xb2, 0x9c, 0xa8, 0x89, 0x65, 0x39, 0x54, 0x38, 0xb3, 0xd7, 0x5b, 0x8c, 0xdc, 0xa6, 0x99, 0xb1, 0x79, 0x18, 0x38, 0x10, 0x57, 0xc0
};
const uint8_t prng_payload_sf12[] = {
0xfd, 0x7c, 0xb4, 0xff, 0x5f, 0x9f, 0xd7, 0xab, 0x28, 0x73, 0x91, 0xff, 0xc5, 0xb5, 0xab, 0x1c, 0x92, 0xe7, 0x76, 0x74, 0x54, 0x9f, 0xfd, 0xc3, 0x7f, 0xa9, 0xb5, 0xd2, 0x5e, 0x46, 0xb7, 0x5c, 0x47, 0x7f, 0xfb, 0xff, 0xef, 0x35, 0x33, 0x1d, 0x15, 0xe7, 0x3d, 0x5f, 0x85, 0x5d, 0x91, 0xea, 0x87, 0xb7, 0x2, 0x55, 0x41, 0x4d, 0x30, 0xed, 0x18, 0x17, 0x11, 0x8d, 0x4c, 0x2, 0xab, 0xa0, 0xd9, 0x24, 0xd7, 0x24, 0x3, 0x97, 0x43, 0x1, 0x62, 0x8a, 0x7b, 0x99, 0xf4, 0xa6, 0x4e, 0x6f, 0xbb, 0x55, 0x49, 0xed, 0xea, 0x73, 0xbb, 0x36, 0xd9, 0x3e, 0x9c, 0xe3, 0xb2, 0x97, 0x24, 0xe1, 0x51, 0x38, 0x6f, 0x9e, 0x38, 0xec, 0x64, 0xbe, 0x54, 0x1a, 0x99, 0x4b, 0x5, 0x60, 0x1, 0x79, 0x48, 0xd4, 0xf0, 0x5a, 0x37, 0x2f, 0xd7, 0x4f, 0x6f, 0x2, 0x30, 0x1, 0x5e, 0x60, 0xbc, 0x5f, 0xf7, 0x1d, 0xbf, 0x4e, 0x13, 0xb0, 0xcd, 0x1e, 0xe8, 0xed, 0xe9, 0x9e, 0xa4, 0x39, 0x6b, 0x55, 0x72, 0x4f, 0x38, 0xaa, 0x15, 0x39, 0x16, 0xe8, 0x40, 0x11, 0x7e, 0xd8, 0x3e, 0x34, 0x1f, 0x57, 0x8d, 0x6, 0xca, 0xc, 0x81, 0x55, 0x49, 0xa1, 0x8c, 0xc, 0x3, 0xcf, 0xc0, 0x88, 0x5b, 0xad, 0x92, 0x33, 0x2c, 0x1, 0x5c, 0x92, 0xae, 0x1, 0x93, 0x2b, 0x16, 0x9e, 0x1f, 0xa, 0xaf, 0xf6, 0x1d, 0xab, 0x64, 0xd1, 0x73, 0x44, 0x25, 0x35, 0x5, 0x9, 0xb8, 0x43, 0x9b, 0xe6, 0x61, 0x30, 0x70, 0x75, 0x2e, 0x19, 0xc4, 0x4e, 0xd8, 0xdf, 0x25, 0xee, 0x52, 0x30, 0x26, 0x76, 0x63, 0xd8, 0xf6, 0x5a, 0xc5, 0xbb, 0x26, 0x54, 0x2, 0x65, 0xb, 0x13, 0x90, 0x2a, 0x10, 0x23, 0x41, 0x1, 0xf6, 0x13, 0xfc, 0xc8, 0xf4, 0x83, 0x45, 0x2c, 0x2a, 0x53, 0x5, 0xfc, 0xa4, 0x7f, 0xdf, 0xb5, 0x27, 0x35, 0x8, 0x42, 0xa3, 0x87, 0x46, 0xb4, 0xaa, 0xdd, 0xd7, 0x67, 0x6e, 0x18, 0x82, 0xcb, 0x1a, 0x18, 0xfe, 0x82, 0x75, 0xdd, 0xb6, 0xae, 0x14, 0xf0, 0x3d, 0x52, 0xe5, 0xc8, 0xe1, 0x7f, 0x99, 0x34, 0xc9, 0x5c, 0xeb, 0x4d, 0xa9, 0x9d, 0xdf, 0x7f, 0xb6, 0x12, 0xf, 0xca, 0x41, 0xa9, 0x20, 0xfb, 0x23, 0x93, 0x7d, 0xa8, 0xec, 0xc6, 0x69, 0xc3, 0xb1, 0xf0, 0x5f, 0xd3, 0xb7, 0x1, 0x43, 0xf6, 0x13, 0xf0, 0xca, 0xb3, 0x7a, 0x17, 0xb8, 0xa7, 0xc4, 0xf, 0x72, 0x25, 0x26, 0x65, 0xc4, 0xf5, 0x73, 0xfe, 0x3b, 0x95, 0xc4, 0x4a, 0x62, 0x50, 0x3e, 0x44, 0xc6, 0xef, 0xe2, 0xfb, 0x63, 0x15, 0xe, 0xa, 0xdb, 0x64, 0x39, 0x40, 0x7, 0x6a, 0x8, 0x32, 0x81, 0x7e, 0x36, 0x93, 0x3f, 0xdf, 0xcf, 0x47, 0x5b, 0x38, 0xa7, 0x52, 0xda, 0x44, 0xbc, 0x57, 0xc6, 0x9d, 0x87, 0x42, 0x51, 0xa6, 0xa0, 0x18, 0x2, 0x6c, 0xfa, 0xde, 0x8e, 0x5d, 0xeb, 0x9e, 0x39, 0x0, 0x1a, 0x42, 0x8f, 0xcb, 0xf8, 0x96, 0xde, 0xb5, 0x13, 0x20, 0x80, 0x13, 0xc0, 0x4d, 0x68, 0x8b, 0x8b, 0xe6, 0xc0, 0xa5, 0x7f, 0x2d, 0x40, 0x59, 0xea, 0x2c, 0xf1, 0xb8, 0xd, 0xe8, 0xa, 0x75, 0x1a, 0x59, 0xf4, 0x73, 0x35, 0xb7, 0x14, 0x35, 0x17, 0x20, 0x1b, 0xb0, 0x24, 0x41, 0xd2, 0xaf, 0xc7, 0xd6, 0xa0, 0x6, 0x8, 0x17, 0x96, 0xca, 0x9a, 0x93, 0x21, 0xe7, 0x50, 0xe3, 0xa6, 0x58, 0x68, 0x9b, 0xc6, 0x4c, 0x89, 0xae, 0x55, 0x4a, 0x76, 0x67, 0xf7, 0x58, 0x65, 0xbb, 0x37, 0x2f, 0xbb, 0xc2, 0x47, 0x71, 0x4f, 0xbe, 0x20, 0x75, 0x62, 0x39, 0x5e, 0x5d, 0xba, 0xb5, 0x52, 0x3, 0x60, 0xe2, 0xf2, 0x93, 0x4, 0x6a, 0x21, 0x44, 0x48, 0x50, 0x5c, 0xef, 0x2e, 0x38, 0xda, 0x37, 0x96, 0x9, 0x33, 0x56, 0x6f, 0x68, 0x66, 0x24, 0xb2, 0x99, 0x5f
};
}
const uint8_t prng_payload_sf12[] = {
0xfd, 0x7c, 0xb4, 0xff, 0x5f, 0x9f, 0xd7, 0xab, 0x28, 0x73, 0x91, 0xff, 0xc5, 0xb5, 0xab, 0x1c, 0x92, 0xe7, 0x76, 0x74, 0x54, 0x9f, 0xfd, 0xc3, 0x7f, 0xa9, 0xb5, 0xd2, 0x5e, 0x46, 0xb7, 0x5c, 0x47, 0x7f, 0xfb, 0xff, 0xef, 0x35, 0x33, 0x1d, 0x15, 0xe7, 0x3d, 0x5f, 0x85, 0x5d, 0x91, 0xea, 0x87, 0xb7, 0x02, 0x55, 0x41, 0x4d, 0x30, 0xed, 0x18, 0x17, 0x11, 0x8d, 0x4c, 0x02, 0xab, 0xa0, 0xd9, 0x24, 0xd7, 0x24, 0x03, 0x97, 0x43, 0x01, 0x62, 0x8a, 0x7b, 0x99, 0xf4, 0xa6, 0x4e, 0x6f, 0xbb, 0x55, 0x49, 0xed, 0xea, 0x73, 0xbb, 0x36, 0xd9, 0x3e, 0x9c, 0xe3, 0xb2, 0x97, 0x24, 0xe1, 0x51, 0x38, 0x6f, 0x9e, 0x38, 0xec, 0x64, 0xbe, 0x54, 0x1a, 0x99, 0x4b, 0x05, 0x60, 0x01, 0x79, 0x48, 0xd4, 0xf0, 0x5a, 0x37, 0x2f, 0xd7, 0x4f, 0x6f, 0x02, 0x30, 0x01, 0x5e, 0x60, 0xbc, 0x5f, 0xf7, 0x1d, 0xbf, 0x4e, 0x13, 0xb0, 0xcd, 0x1e, 0xe8, 0xed, 0xe9, 0x9e, 0xa4, 0x39, 0x6b, 0x55, 0x72, 0x4f, 0x38, 0xaa, 0x15, 0x39, 0x16, 0xe8, 0x40, 0x11, 0x7e, 0xd8, 0x3e, 0x34, 0x1f, 0x57, 0x8d, 0x06, 0xca, 0x0c, 0x81, 0x55, 0x49, 0xa1, 0x8c, 0x0c, 0x03, 0xcf, 0xc0, 0x88, 0x5b, 0xad, 0x92, 0x33, 0x2c, 0x01, 0x5c, 0x92, 0xae, 0x01, 0x93, 0x2b, 0x16, 0x9e, 0x1f, 0x0a, 0xaf, 0xf6, 0x1d, 0xab, 0x64, 0xd1, 0x73, 0x44, 0x25, 0x35, 0x05, 0x09, 0xb8, 0x43, 0x9b, 0xe6, 0x61, 0x30, 0x70, 0x75, 0x2e, 0x19, 0xc4, 0x4e, 0xd8, 0xdf, 0x25, 0xee, 0x52, 0x30, 0x26, 0x76, 0x63, 0xd8, 0xf6, 0x5a, 0xc5, 0xbb, 0x26, 0x54, 0x02, 0x65, 0x0b, 0x13, 0x90, 0x2a, 0x10, 0x23, 0x41, 0x01, 0xf6, 0x13, 0xfc, 0xc8, 0xf4, 0x83, 0x45, 0x2c, 0x2a, 0x53, 0x05, 0xfc, 0xa4, 0x7f, 0xdf, 0xb5, 0x27, 0x35, 0x08, 0x42, 0xa3, 0x87, 0x46, 0xb4, 0xaa, 0xdd, 0xd7, 0x67, 0x6e, 0x18, 0x82, 0xcb, 0x1a, 0x18, 0xfe, 0x82, 0x75, 0xdd, 0xb6, 0xae, 0x14, 0xf0, 0x3d, 0x52, 0xe5, 0xc8, 0xe1, 0x7f, 0x99, 0x34, 0xc9, 0x5c, 0xeb, 0x4d, 0xa9, 0x9d, 0xdf, 0x7f, 0xb6, 0x12, 0x0f, 0xca, 0x41, 0xa9, 0x20, 0xfb, 0x23, 0x93, 0x7d, 0xa8, 0xec, 0xc6, 0x69, 0xc3, 0xb1, 0xf0, 0x5f, 0xd3, 0xb7, 0x01, 0x43, 0xf6, 0x13, 0xf0, 0xca, 0xb3, 0x7a, 0x17, 0xb8, 0xa7, 0xc4, 0x0f, 0x72, 0x25, 0x26, 0x65, 0xc4, 0xf5, 0x73, 0xfe, 0x3b, 0x95, 0xc4, 0x4a, 0x62, 0x50, 0x3e, 0x44, 0xc6, 0xef, 0xe2, 0xfb, 0x63, 0x15, 0x0e, 0x0a, 0xdb, 0x64, 0x39, 0x40, 0x07, 0x6a, 0x08, 0x32, 0x81, 0x7e, 0x36, 0x93, 0x3f, 0xdf, 0xcf, 0x47, 0x5b, 0x38, 0xa7, 0x52, 0xda, 0x44, 0xbc, 0x57, 0xc6, 0x9d, 0x87, 0x42, 0x51, 0xa6, 0xa0, 0x18, 0x02, 0x6c, 0xfa, 0xde, 0x8e, 0x5d, 0xeb, 0x9e, 0x39, 0x00, 0x1a, 0x42, 0x8f, 0xcb, 0xf8, 0x96, 0xde, 0xb5, 0x13, 0x20, 0x80, 0x13, 0xc0, 0x4d, 0x68, 0x8b, 0x8b, 0xe6, 0xc0, 0xa5, 0x7f, 0x2d, 0x40, 0x59, 0xea, 0x2c, 0xf1, 0xb8, 0x0d, 0xe8, 0x0a, 0x75, 0x1a, 0x59, 0xf4, 0x73, 0x35, 0xb7, 0x14, 0x35, 0x17, 0x20, 0x1b, 0xb0, 0x24, 0x41, 0xd2, 0xaf, 0xc7, 0xd6, 0xa0, 0x06, 0x08, 0x17, 0x96, 0xca, 0x9a, 0x93, 0x21, 0xe7, 0x50, 0xe3, 0xa6, 0x58, 0x68, 0x9b, 0xc6, 0x4c, 0x89, 0xae, 0x55, 0x4a, 0x76, 0x67, 0xf7, 0x58, 0x65, 0xbb, 0x37, 0x2f, 0xbb, 0xc2, 0x47, 0x71, 0x4f, 0xbe, 0x20, 0x75, 0x62, 0x39, 0x5e, 0x5d, 0xba, 0xb5, 0x52, 0x03, 0x60, 0xe2, 0xf2, 0x93, 0x04, 0x6a, 0x21, 0x44, 0x48, 0x50, 0x5c, 0xef, 0x2e, 0x38, 0xda, 0x37, 0x96, 0x09, 0x33, 0x56, 0x6f, 0x68, 0x66, 0x24, 0xb2, 0x99, 0x5f
};
}
}
#endif /* TABLES_H */

Wyświetl plik

@ -1,87 +1,89 @@
#ifndef UTILITIES_H
#define UTILITIES_H
namespace gr {
namespace lora {
#include <cstdint>
namespace gr {
namespace lora {
/**
* \brief Clamp given value in the given range.
*
* \tparam T
* The type of variable to clamp.
* <br>`d`, `min` and `max` must be of this type.
* \param d
* The value to clamp.
* \param min
* The lower bound of the range.
* \param max
* The upper bound of the range.
*/
template <class T>
inline T clamp(T d, T min, T max) {
const T t = d < min ? min : d;
return t > max ? max : t;
}
template <typename T>
std::string to_bin(T v, int element_len_bits) {
T mask = 0;
unsigned int maxpow = element_len_bits;
std::string to_bin(T v, uint32_t bitwidth) {
unsigned long long maxpow = bitwidth ? (1ull << (bitwidth - 1)) : 0,
mask;
std::string result = "";
for(int i = 0; i < maxpow; i++) {
mask = pow(2, i);
//std::cout << (unsigned int)v << " AND " << mask << " is " << (v & mask) << std::endl;
if((v & mask) > 0) {
result += "1";
} else {
result += "0";
}
}
return result;
}
template <typename T>
inline void print_vector(std::ostream& out, std::vector<T>& v, std::string prefix, int element_len_bits) {
out << prefix << ": ";
for(int i = 0; i < v.size(); i++) {
out << to_bin(v[i], element_len_bits) << ", ";
}
out << std::endl << std::flush;
}
template <typename T>
inline void print_vector_raw(std::ostream& out, std::vector<T>& v, int element_len_bits) {
for(int i = 0; i < v.size(); i++) {
out << to_bin(v[i], element_len_bits);
}
out << std::flush;
}
bool check_parity(std::string word, bool even) {
int count = 0;
for(int i = 0; i < 7; i++) {
if(word[i] == '1')
count += 1;
}
if(even)
return ((count % 2) == 0);
else
return (((count+1) % 2) == 0);
}
uint32_t select_bits(uint32_t data, uint8_t* indices, uint8_t n) {
uint32_t result = 0;
for(uint32_t j = 0; j < n; j++) {
uint32_t power = pow(2, indices[j]);
if((data & power) > 0) {
result += pow(2, j);
}
for (mask = 0x1; mask <= maxpow; mask <<= 1) {
result += (v & mask) ? "1" : "0";
}
return result;
}
void fec_extract_data_only(uint8_t* in_data, uint32_t len, uint8_t* indices, uint8_t n, uint8_t* out_data) {
uint8_t out_index = 0;
template <typename T>
inline void print_vector(std::ostream& out, std::vector<T>& v, std::string prefix, int element_len_bits) {
out << prefix << ": ";
for(uint32_t i = 0; i < len; i+=2) {
uint8_t d1 = 0;
d1 = select_bits(in_data[i], indices, n) & 0xff;
for (T x : v)
out << to_bin(x, element_len_bits) << ", ";
out << std::endl << std::flush;
}
uint8_t d2 = 0;
if(i+1 < len)
d2 = select_bits(in_data[i+1], indices, n) & 0xff;
template <typename T>
inline void print_vector_raw(std::ostream& out, std::vector<T>& v, int element_len_bits) {
out_data[out_index] = (d1 << 4) | d2;
out_index++;
for (T x : v)
out << to_bin(x, element_len_bits);
out << std::flush;
}
bool check_parity(std::string& word, bool even) {
size_t count = 0, i = 0;
while(i < 7) {
if (word[i++] == '1')
++count;
}
return (count & 0x1) == (even ? 0 : 1);
}
uint32_t select_bits(uint32_t data, uint8_t *indices, uint8_t n) {
uint32_t r = 0;
for(uint8_t i = 0; i < n; ++i)
r |= (data & (1 << indices[i])) ? (1 << i) : 0;
return r;
}
void fec_extract_data_only(uint8_t *in_data, uint32_t len, uint8_t *indices, uint8_t n, uint8_t *out_data) {
for (uint32_t i = 0, out_index = 0; i < len; i += 2) {
uint8_t d1 = (select_bits(in_data[i], indices, n) & 0xff) << 4;
d1 |= (i + 1 < len) ? select_bits(in_data[i + 1], indices, n) & 0xff : 0;
out_data[out_index++] = d1;
}
}
@ -127,11 +129,7 @@ namespace gr {
// p4 01010101
// Syndrome matrix = columns of "cover bits" above
uint8_t H[16];
for(uint8_t i = 0; i < 16; i++) {
H[i] = 0;
}
uint8_t H[16] = { 0 };
uint8_t i0 = pack_nibble(1, 0, 0, 0);
uint8_t i1 = pack_nibble(0, 1, 1, 1);
@ -164,9 +162,8 @@ namespace gr {
uint8_t syndrome = pack_nibble((uint8_t)(p1 != p1c), (uint8_t)(p2 != p2c), (uint8_t)(p3 != p3c), (uint8_t)(p4 != p4c));
if(syndrome != 0) {
uint8_t index = H[syndrome];
v = v ^ pow2[index];
if (syndrome) {
v ^= pow2[ H[syndrome] ];
}
uint8_t d1 = bit(v, 1);
@ -178,22 +175,16 @@ namespace gr {
}
// Manual Hamming
void hamming_decode_soft(uint8_t* words, uint32_t len, uint8_t* out_data) {
uint32_t out_index = 0;
for(int i = 0; i < len; i+=2) {
uint8_t d1 = 0;
d1 = hamming_decode_soft_byte(words[i]);
void hamming_decode_soft(uint8_t *words, uint32_t len, uint8_t *out_data) {
for (uint32_t i = 0, out_index = 0; i < len; i += 2) {
uint8_t d1 = hamming_decode_soft_byte(words[i]) << 4;
d1 |= (i + 1 < len) ? hamming_decode_soft_byte(words[i + 1]) : 0;
uint8_t d2 = 0;
if(i+1 < len)
d2 = hamming_decode_soft_byte(words[i+1]);
out_data[out_index] = (d1 << 4) | d2;
out_index++;
out_data[out_index++] = d1;
}
}
}
}
}
#endif /* UTILITIES_H */