- More flexible test suite system

- Remove unneeded files
- Fix bits per symbol calculation
pull/61/head
Pieter Robyns 2017-09-06 15:57:44 +02:00
rodzic 95131c0719
commit 2d0e9245b0
26 zmienionych plików z 479 dodań i 2642 usunięć

1
.gitignore vendored
Wyświetl plik

@ -6,3 +6,4 @@ build/
*.cfile
dev/
examples/lora-samples
apps/test-suites

Wyświetl plik

@ -0,0 +1,199 @@
#!/usr/bin/python2
# A tool to generate test suites for gr-lora
# Authors: Pieter Robyns and William Thenaers
import time
import collections
import os
import argparse
import copy
import lora
import pmt
import osmosdr
from loranode import RN2483Controller
from datetime import datetime
from sigmf.sigmffile import SigMFFile
from gnuradio import gr, blocks
from lora.loraconfig import LoRaConfig
Test = collections.namedtuple('Test', ['payload', 'times'])
class TestSuite():
def __init__(self, name, args, config_set, test_set):
self.name = name
self.config_set = config_set
self.test_set = test_set
self.capture_freq = args.frequency
self.sample_rate = args.sample_rate
self.hw = args.hw
self.name += "_" + self.hw
self.path = os.path.join(args.data_out, self.name)
self.pre_delay = 0.150
self.post_delay = 0.150
self.intra_delay = 0.1
self.lc = RN2483Controller("/dev/lora")
self.test_count = 0
# Prepare SigMF global metadata (identical for all tests)
self.global_meta = {
"core:datatype": "cf32_le",
"core:version": "0.0.1",
"core:license": "CC0",
"core:hw": self.hw,
"core:sample_rate": self.sample_rate,
"core:author": "Pieter Robyns"
}
# Prepare paths for storing suite
try:
if not os.path.exists(self.path):
os.makedirs(self.path)
except:
Exception("Error creating output directory.")
def __del__(self):
self.lc = None
def run(self):
for config in self.config_set:
for test in self.test_set:
self._run_test(config, test)
def _run_test(self, config, test):
test_name = "{:s}-{:s}-{:n}".format(self.hw, config.file_repr(), self.test_count)
test_data_path = os.path.join(self.path, test_name + '.sigmf-data')
test_meta_path = os.path.join(self.path, test_name + '.sigmf-meta')
self.test_count += 1
capture_meta = {
"core:sample_start": 0,
"core:frequency": self.capture_freq,
"core:datetime": str(datetime.utcnow()),
"lora:frequency": config.freq,
"lora:sf": config.sf,
"lora:cr": config.cr,
"lora:bw": config.bw,
"lora:prlen": config.prlen,
"lora:crc": config.crc,
"lora:implicit": config.implicit,
"test:expected": test.payload,
"test:times": test.times,
}
# Configure transmitter
try:
#self.lc.set_freq(config.freq)
self.lc.set_sf(config.sf)
self.lc.set_cr(config.cr)
self.lc.set_bw(config.bw / 1e3)
self.lc.set_prlen(str(config.prlen))
self.lc.set_crc("on" if config.crc else "off")
#self.lc.set_implicit("on" if config.implicit else "off")
self.lc.set_pwr(1)
except Exception as e:
print(e)
exit(1)
# Build GNU Radio flowgraph
tb = gr.top_block()
osmosdr_source = osmosdr.source(args="numchan=" + str(1) + " " + '' )
osmosdr_source.set_sample_rate(self.sample_rate)
osmosdr_source.set_center_freq(self.capture_freq, 0)
osmosdr_source.set_freq_corr(0, 0)
osmosdr_source.set_dc_offset_mode(0, 0)
osmosdr_source.set_iq_balance_mode(0, 0)
osmosdr_source.set_gain_mode(False, 0)
osmosdr_source.set_gain(10, 0)
osmosdr_source.set_if_gain(20, 0)
osmosdr_source.set_bb_gain(20, 0)
osmosdr_source.set_antenna('', 0)
osmosdr_source.set_bandwidth(0, 0)
file_sink = blocks.file_sink(gr.sizeof_gr_complex, test_data_path, False)
# Connect blocks
tb.connect((osmosdr_source, 0), (file_sink, 0))
# Run
print("Running %s" % test_name)
tb.start()
self.transmit_data(test)
tb.stop()
tb.wait()
# Save metadata file
with open(test_meta_path, 'w') as f:
test_sigmf = SigMFFile(data_file=test_data_path, global_info=copy.deepcopy(self.global_meta))
test_sigmf.add_capture(0, metadata=capture_meta)
test_sigmf.dump(f, pretty=True)
def transmit_data(self, test):
time.sleep(self.pre_delay)
for i in range(0, test.times):
self.lc.send_p2p(test.payload)
time.sleep(self.intra_delay)
time.sleep(self.post_delay)
if __name__ == '__main__':
"""
Generate test suites.
"""
parser = argparse.ArgumentParser(description="Tool to generate test suites for gr-lora.")
parser.add_argument('hw', type=str, help='SDR used to capture test suite.')
parser.add_argument('-O', '--data-out', type=str, default='./test-suites/', help='Output directory for the test suites.')
parser.add_argument('-s', '--sample-rate', type=int, default=1000000, help='Sample rate of the SDR.')
parser.add_argument('-f', '--frequency', type=int, default=868e6, help='Center frequency.')
args = parser.parse_args()
# ------------------------------------------------------------------------
# Test suite: decode_long
# A quick test suite for long payloads
# ------------------------------------------------------------------------
decode_long_config_set = [LoRaConfig(freq=868.1e6, sf=7, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=8, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=9, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=10, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=11, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=12, cr="4/8"),
]
decode_long_test_set = [Test(payload="000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfe", times=1),]
TestSuite(name='decode_long', args=args, config_set=decode_long_config_set, test_set=decode_long_test_set).run()
# ------------------------------------------------------------------------
# Test suite: short
# A test suite with several short payloads for all configurations. Inten-
# ded for all-around testing of syncing and decoding.
# ------------------------------------------------------------------------
short_config_set = [LoRaConfig(freq=868.1e6, sf=7, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=7, cr="4/7"),
LoRaConfig(freq=868.1e6, sf=7, cr="4/6"),
LoRaConfig(freq=868.1e6, sf=7, cr="4/5"),
LoRaConfig(freq=868.1e6, sf=8, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=8, cr="4/7"),
LoRaConfig(freq=868.1e6, sf=8, cr="4/6"),
LoRaConfig(freq=868.1e6, sf=8, cr="4/5"),
LoRaConfig(freq=868.1e6, sf=9, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=9, cr="4/7"),
LoRaConfig(freq=868.1e6, sf=9, cr="4/6"),
LoRaConfig(freq=868.1e6, sf=9, cr="4/5"),
LoRaConfig(freq=868.1e6, sf=10, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=10, cr="4/7"),
LoRaConfig(freq=868.1e6, sf=10, cr="4/6"),
LoRaConfig(freq=868.1e6, sf=10, cr="4/5"),
LoRaConfig(freq=868.1e6, sf=11, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=11, cr="4/7"),
LoRaConfig(freq=868.1e6, sf=11, cr="4/6"),
LoRaConfig(freq=868.1e6, sf=11, cr="4/5"),
LoRaConfig(freq=868.1e6, sf=12, cr="4/8"),
LoRaConfig(freq=868.1e6, sf=12, cr="4/7"),
LoRaConfig(freq=868.1e6, sf=12, cr="4/6"),
LoRaConfig(freq=868.1e6, sf=12, cr="4/5"),
]
short_test_set = [Test(payload="deadbeef", times=5),
Test(payload="88", times=1),
Test(payload="ffff", times=10),
]
TestSuite(name='short', args=args, config_set=short_config_set, test_set=short_test_set).run()

Wyświetl plik

@ -1,241 +0,0 @@
#!/usr/bin/python2
import struct
import time
import collections
import os
from loranode import RN2483Controller
import lora, pmt, osmosdr
from gnuradio import gr, blocks
FileData = collections.namedtuple('FileData', ['path', 'data', 'times'])
class Examplify:
def __init__(self, spreadingFactor = 7, codingRate = "4/5", output_dir = './lora-samples/', output_prefix = 'examplify_data', gains = [10, 20, 20]):
##################################################
# Variables #
##################################################
self.target_freq = 868.1e6
self.sf = spreadingFactor # 6 7 8 12
self.samp_rate = 1e6
self.capture_freq = 868.0e6
self.bw = 125e3
#self.symbols_per_sec = self.bw / (2**self.sf)
self.offset = -(self.capture_freq - self.target_freq)
#self.bitrate = self.sf * (1 / (2**self.sf / self.bw ))
self.crc = True
self.pwr = 1
self.codingRate = codingRate # 4/5 4/6 4/7
try:
if not os.path.exists(output_dir):
os.makedirs(output_dir)
except:
Exception("Error creating output directory.")
self.output_dir = output_dir
self.output_prefix = output_prefix
self.output_ext = '.cfile'
self.outputFile = self.output_dir + self.output_prefix + self.output_ext
self.pre_delay = 0.150
self.post_delay = 0.350
self.trans_delay = 0.1
self.examples_output = []
##################################################
# LoRa transmitter #
##################################################
try:
self.lc = RN2483Controller("/dev/lora")
self.lc.set_cr ( self.codingRate)
self.lc.set_bw ( self.bw / 1e3)
self.lc.set_sf ( self.sf )
self.lc.set_crc( "on" if self.crc else "off")
self.lc.set_pwr( self.pwr )
except:
raise Exception("Error initialising LoRa transmitter: RN2483Controller")
##################################################
# Blocks #
##################################################
self.tb = gr.top_block ()
self.osmosdr_source_0 = osmosdr.source( args="numchan=" + str(1) + " " + '' )
self.osmosdr_source_0.set_sample_rate(self.samp_rate)
self.osmosdr_source_0.set_center_freq(self.capture_freq, 0)
self.osmosdr_source_0.set_freq_corr(0, 0)
self.osmosdr_source_0.set_dc_offset_mode(0, 0)
self.osmosdr_source_0.set_iq_balance_mode(0, 0)
self.osmosdr_source_0.set_gain_mode(False, 0)
self.osmosdr_source_0.set_gain(gains[0], 0)
self.osmosdr_source_0.set_if_gain(gains[1], 0)
self.osmosdr_source_0.set_bb_gain(gains[2], 0)
self.osmosdr_source_0.set_antenna('', 0)
self.osmosdr_source_0.set_bandwidth(0, 0)
def __del__(self):
self.lc = None
self.tb = None
def setPreDelay(self, delay_s):
self.pre_delay = delay_s
def setPostDelay(self, delay_s):
self.post_delay = delay_s
def setTransmitDelay(self, delay_s):
self.trans_delay = delay_s
def getOutput(self):
return self.examples_output
def transmitRawData(self, data_list):
print ("Transmitting...")
time.sleep(self.pre_delay)
for x in data_list:
self.lc.send_p2p(x)
time.sleep(self.trans_delay)
time.sleep(self.post_delay)
def transmitToCapture(self, data_list):
self.blocks_file_sink_0 = blocks.file_sink(gr.sizeof_gr_complex*1, self.outputFile, False)
self.blocks_file_sink_0.set_unbuffered(False)
self.tb.connect( (self.osmosdr_source_0, 0), (self.blocks_file_sink_0, 0))
print ("Start run")
self.tb.start()
self.transmitRawData(data_list)
self.tb.lock()
print ("Stop run")
self.tb.disconnect( (self.osmosdr_source_0, 0), (self.blocks_file_sink_0, 0))
self.blocks_file_sink_0 = None
self.tb.unlock()
self.tb.wait()
def transmitToFile(self, data_list, output):
prev = self.outputFile
self.outputFile = output
self.transmitToCapture(data_list)
self.outputFile = prev
def appendAndCaptureExample(self, data, times, idx = 0):
name = (self.output_prefix + "_cr{0:s}_bw{1:d}_sf{2:d}_crc{3:d}_pwr{4:d}_{5:03d}"
.format(self.codingRate.replace("/", "-"),
int(self.bw / 1e3),
self.sf,
1 if self.crc else 0,
self.pwr,
len(self.examples_output) if idx == 0 else (idx - 1))
+ self.output_ext)
self.examples_output.append( FileData( name, '["{0:s}"]'.format(data), times ) )
self.outputFile = self.output_dir + name
self.transmitToCapture([data] * times)
def appendResultsToFile(self, file_path):
f = open(file_path, 'a')
stro = '\n' + (' ' * 20) + 'FILE' + (' ' * 23) + '|' + (' ' * 10) + 'HEX'
f.write(stro + '\n')
print stro
stro = ('-' * 47) + '+' + ('-' * 27)
f.write(stro + '\n')
print stro
for x in self.examples_output:
stro = ' {0:45s} | {1:s} * {2:d}'.format(x[0], x[1], x[2])
f.write(stro + '\n')
print stro
f.close()
def appendToXML(self, file_path, idx = 0):
# To xml
# f = open("qa_BasicTest_Data_" + self.output_prefix + ".xml", 'w')
# f.write('<?xml version="1.0" encoding="UTF-8"?>\n<lora-test-data set="{0:s}">\n'.format(self.output_prefix))
f = open(file_path, 'a')
for i, x in enumerate(self.examples_output):
f.write(' <TEST id="{0:d}">\n'.format(idx if idx > 0 else (i+1)))
f.write(' <file>../../examples/lora-samples/{0:s}</file>\n'.format(x[0]))
f.write(' <spreading-factor>{0:d}</spreading-factor>\n'.format(self.sf))
f.write(' <expected-data-all />\n <expected-hdr />\n')
f.write(' <expected-data-only>{0:s}</expected-data-only>\n'
.format(' '.join([ x[1][2:-2][i:i+2] for i in range(0, len(x[1][2:-2]), 2) ])))
f.write(' <expected-times>{0:d}</expected-times>\n'.format(x[2]))
f.write(' </TEST>\n')
# f.write('</lora-test-data>')
f.close()
if __name__ == '__main__':
# e = Examplify(7, "4/6", './lora-samples/', '2345')
#
# e.appendAndCaptureExample("0123456789abcdef", 10)
#
# e.appendAndCaptureExample("111111", 1)
# e.appendAndCaptureExample("111111", 5)
#
# e.appendAndCaptureExample("aaaaaaaa", 3)
#
# e.appendAndCaptureExample("ffffffff", 1)
# e.appendAndCaptureExample("ffffffff", 10)
#
# e.appendAndCaptureExample("55555555", 3)
# e.appendAndCaptureExample("55555555", 10)
#
# e.appendAndCaptureExample("88888888", 1)
# e.appendAndCaptureExample("88888888", 5)
# e.appendAndCaptureExample("88888888", 10)
# e.appendResultsToFile('./expected_results.txt')
exampledir = "./lora-samples/"
testprefix = "usrp"
xmlfiledir = "./qa_BasicTest_Data_" + testprefix + ".xml"
gains = [32, 38, 38] # [10, 20, 20], for usrp: [32, 38, 38]
idx = 1
f = open(xmlfiledir, 'w')
f.write('<?xml version="1.0" encoding="UTF-8"?>\n<lora-test-data set="{0:s}">\n'.format(testprefix))
f.close()
sampleset = [ ( 7, "4/5", 1),
( 8, "4/5", 1),
(12, "4/5", 1),
( 6, "4/7", 1),
( 7, "4/7", 1),
( 6, "4/6", 1),
( 7, "4/6", 1)
]
testset = [ ("0123456789abcdef", 10),
("111111", 1),
("111111", 5),
("aaaaaaaa", 3),
("ffffffff", 1),
("ffffffff", 10),
("55555555", 3),
("55555555", 10),
("88888888", 1),
("88888888", 5),
("88888888", 10)
]
for t in testset:
for i, s in enumerate(sampleset):
e = Examplify(s[0], s[1], exampledir, testprefix, gains)
e.appendAndCaptureExample(t[0], t[1], s[2])
e.appendToXML(xmlfiledir, idx)
e = None
sampleset[i] = (s[0], s[1], s[2] + 1)
idx = idx + 1
f = open(xmlfiledir, 'a')
f.write('</lora-test-data>\n')
f.close()

Wyświetl plik

@ -1,3 +0,0 @@
const uint8_t prng_payload_sf10[] = {
0xFD, 0xFE, 0xF4, 0x54, 0x04, 0x70, 0x04, 0x74, 0x00, 0x74, 0x48, 0x3C, 0x68, 0x34, 0x40, 0x08, 0x64, 0x00, 0x78, 0x48, 0x74, 0x28, 0x7C, 0x70, 0x04, 0x68, 0x04, 0x78, 0x48, 0x74, 0x60, 0x3C, 0x70, 0x34, 0x4C, 0x08, 0x2C, 0x40, 0x18, 0x60, 0x0C, 0x30, 0x40, 0x7C, 0x50, 0x20, 0x2C, 0x10, 0x10, 0x0C, 0x48, 0x00, 0x68, 0x30, 0x28, 0x04, 0x04, 0x00, 0x48, 0x00, 0x60, 0x28, 0x38, 0x38, 0x2C, 0x28, 0x1C, 0x5C, 0x44, 0x60, 0x48, 0x78, 0x68, 0x1C, 0x08, 0x10, 0x58, 0x44, 0x28, 0x68, 0x50, 0x28, 0x2C, 0x38, 0x68, 0x30, 0x30, 0x28, 0x1C, 0x50, 0x0C, 0x6C, 0x40, 0x18, 0x10, 0x38, 0x3C, 0x14, 0x48, 0x04, 0x60, 0x00, 0x70, 0x20, 0x24, 0x14, 0x48, 0x00, 0x28, 0x60, 0x18, 0x30, 0x04, 0x34, 0x38, 0x60, 0x50, 0x38, 0x4C, 0x1C, 0x60, 0x44, 0x70, 0x48, 0x4C, 0x1C, 0x70, 0x64, 0x78, 0x68, 0x3C, 0x30, 0x54, 0x7C, 0x14, 0x78, 0x00, 0x70, 0x18, 0x34, 0x08, 0x14, 0x40, 0x24, 0x30, 0x1C, 0x44, 0x54, 0x38, 0x04, 0x50, 0x00, 0x64, 0x60, 0x60, 0x3C, 0x60, 0x24, 0x30, 0x40, 0x5C, 0x2C, 0x2C, 0x30, 0x00, 0x58, 0x10, 0x2C, 0x2C, 0x5C, 0x50, 0x6C, 0x2C, 0x50, 0x40, 0x48, 0x08, 0x2C, 0x68, 0x50, 0x28, 0x6C, 0x10, 0x50, 0x1C, 0x20, 0x3C, 0x58, 0x1C, 0x28, 0x0C, 0x50, 0x40, 0x0C, 0x38, 0x24, 0x4C, 0x18, 0x68, 0x04, 0x74, 0x00, 0x34, 0x28, 0x4C, 0x74, 0x60, 0x74, 0x64, 0x74, 0x30, 0x74, 0x1C, 0x5C, 0x1C, 0x48, 0x64, 0x44, 0x78, 0x30, 0x3C, 0x5C, 0x1C, 0x0C, 0x14, 0x4C, 0x1C, 0x68, 0x64, 0x3C, 0x78, 0x5C, 0x7C, 0x44, 0x2C, 0x64, 0x28, 0x68, 0x18, 0x60, 0x0C, 0x3C, 0x08, 0x7C, 0x18, 0x00, 0x04, 0x14, 0x04, 0x08, 0x08, 0x48, 0x48, 0x08, 0x30, 0x0C, 0x1C, 0x1C, 0x08, 0x00, 0x60, 0x2C, 0x10
};

Wyświetl plik

@ -1,3 +0,0 @@
const uint8_t prng_payload_sf11[] = {
0xFD, 0xFE, 0xB4, 0xBF, 0x34, 0x04, 0x28, 0x58, 0x10, 0x74, 0x04, 0x74, 0x48, 0x34, 0x68, 0x34, 0x40, 0x48, 0x40, 0x00, 0x6C, 0x2C, 0x78, 0x58, 0x74, 0x68, 0x1C, 0x00, 0x20, 0x70, 0x44, 0x68, 0x04, 0x78, 0x48, 0x74, 0x20, 0x1C, 0x40, 0x40, 0x30, 0x24, 0x58, 0x04, 0x24, 0x48, 0x18, 0x20, 0x2C, 0x40, 0x44, 0x30, 0x34, 0x58, 0x08, 0x24, 0x00, 0x18, 0x40, 0x6C, 0x78, 0x74, 0x74, 0x18, 0x28, 0x08, 0x18, 0x00, 0x0C, 0x44, 0x68, 0x38, 0x54, 0x04, 0x6C, 0x0C, 0x70, 0x08, 0x3C, 0x0C, 0x54, 0x68, 0x3C, 0x54, 0x44, 0x6C, 0x6C, 0x70, 0x38, 0x3C, 0x18, 0x54, 0x64, 0x7C, 0x1C, 0x14, 0x3C, 0x6C, 0x58, 0x28, 0x6C, 0x18, 0x38, 0x64, 0x2C, 0x5C, 0x6C, 0x0C, 0x18, 0x48, 0x0C, 0x6C, 0x00, 0x38, 0x60, 0x2C, 0x14, 0x0C, 0x18, 0x10, 0x40, 0x4C, 0x60, 0x00, 0x70, 0x60, 0x24, 0x54, 0x2C, 0x1C, 0x44, 0x44, 0x28, 0x60, 0x18, 0x70, 0x64, 0x64, 0x5C, 0x6C, 0x3C, 0x4C, 0x1C, 0x20, 0x44, 0x18, 0x20, 0x64, 0x60, 0x5C, 0x54, 0x2C, 0x54, 0x04, 0x6C, 0x44, 0x78, 0x20, 0x5C, 0x60, 0x10, 0x14, 0x18, 0x48, 0x04, 0x6C, 0x20, 0x78, 0x58, 0x5C, 0x5C, 0x20, 0x08, 0x04, 0x00, 0x4C, 0x44, 0x28, 0x68, 0x58, 0x08, 0x5C, 0x04, 0x38, 0x50, 0x5C, 0x24, 0x00, 0x50, 0x48, 0x24, 0x08, 0x00, 0x64, 0x20, 0x64, 0x5C, 0x20, 0x6C, 0x58, 0x30, 0x2C, 0x3C, 0x00, 0x20, 0x30, 0x00, 0x58, 0x40, 0x6C, 0x64, 0x30, 0x70, 0x3C, 0x04, 0x20, 0x08, 0x30, 0x60, 0x58, 0x28, 0x6C, 0x50, 0x70, 0x0C, 0x04, 0x04, 0x38, 0x20, 0x50, 0x1C, 0x24, 0x0C, 0x50, 0x40, 0x0C, 0x18, 0x04, 0x78, 0x44, 0x7C, 0x1C, 0x7C, 0x04, 0x74, 0x40, 0x14, 0x18, 0x08, 0x78, 0x40, 0x74, 0x50, 0x78, 0x64, 0x74, 0x70, 0x14, 0x0C, 0x08, 0x60, 0x40, 0x68, 0x54, 0x64, 0x6C, 0x74, 0x70
};

Wyświetl plik

@ -1,6 +0,0 @@
const uint8_t prng_payload_sf12[] = {
0xFD, 0x58, 0xB5, 0xFF, 0x5E, 0x9C, 0xD4, 0xA8, 0x28, 0x70, 0x10, 0xFC, 0xC4, 0xB4, 0xA8, 0x1C, 0x90, 0xE4, 0x74, 0x74, 0x54, 0x9C, 0xFC, 0xC0, 0x7C, 0xA8, 0xB4, 0xD0, 0x5C, 0x44, 0xB4, 0x5C, 0x44, 0x78, 0xF0, 0x7C, 0xEC, 0x34, 0x30, 0x1C, 0x14, 0xE4, 0x3C, 0x5C, 0x84, 0x5C, 0x90, 0xE8, 0x84, 0xB4, 0x00, 0x54, 0x40, 0x4C, 0x30, 0xFC, 0x1C, 0x1C, 0x90, 0x8C, 0x4C, 0x00, 0xA8, 0xA0, 0xD8, 0x64, 0xD4, 0x24, 0x00, 0x94, 0x40, 0x00, 0x60, 0x88, 0x78, 0x98, 0xF4, 0xA4, 0x4C, 0x2C, 0x98, 0x44, 0x4C, 0xE4, 0x68, 0x70, 0xB8, 0x34, 0xD8, 0x3C, 0x9C, 0xE0, 0xF0, 0x94, 0x24, 0xE0, 0x50, 0x38, 0x6C, 0x9C, 0x38, 0xAC, 0x44, 0xAC, 0x50, 0x10, 0x18, 0x48, 0x04, 0x60, 0x00, 0x78, 0x48, 0x94, 0xD0, 0x58, 0x34, 0x2C, 0xD4, 0x4C, 0x6C, 0x00, 0x30, 0x00, 0x5C, 0x60, 0xFC, 0x7C, 0xE4, 0x18, 0xB4, 0xCC, 0x10, 0xB0, 0xCC, 0x1C, 0xE8, 0xEC, 0xA8, 0xBC, 0xB4, 0x38, 0xE8, 0x54, 0x70, 0x4C, 0x38, 0xA8, 0x14, 0x78, 0x34, 0xF8, 0x44, 0x18, 0xFC, 0xD8, 0x3C, 0x34, 0x1C, 0x54, 0x8C, 0x44, 0xF8, 0x1C, 0x80, 0x44, 0x4C, 0xB8, 0x0C, 0x1C, 0x00, 0xCC, 0xC0, 0x88, 0x58, 0xEC, 0xB0, 0x20, 0x2C, 0x0C, 0x5C, 0x90, 0x2C, 0x00, 0x90, 0x28, 0x14, 0x8C, 0x18, 0x10, 0x2C, 0xD4, 0x5C, 0xA8, 0x64, 0xD0, 0x70, 0x04, 0x04, 0x24, 0x00, 0x00, 0x38, 0x40, 0x98, 0xE4, 0x60, 0x30, 0x70, 0x34, 0x4C, 0x68, 0x94, 0x08, 0x90, 0x1C, 0x24, 0xAC, 0x10, 0x30, 0x24, 0x74, 0x20, 0xF8, 0xE4, 0x5C, 0xCC, 0x38, 0x24, 0x54, 0x00, 0x64, 0x08, 0x50, 0xF0, 0x18, 0x04, 0x2C, 0xC0, 0x00, 0xF4, 0x10, 0xFC, 0xC8, 0xF4, 0xC0, 0x64, 0x3C, 0x2C, 0x58, 0x84, 0xFC, 0xA4, 0x7C, 0xDC, 0xB4, 0x24, 0x74, 0x28, 0x50, 0xE4, 0xAC, 0x40, 0xB4, 0x38, 0xD4, 0xD4, 0x64, 0x6C
};
const uint8_t prng_payload_sf12[] = {
0x7D, 0xFE, 0xB7, 0xFF, 0x5E, 0x9C, 0xD4, 0xA8, 0x28, 0x70, 0x10, 0xFC, 0xC4, 0xB4, 0xA8, 0x1C, 0x90, 0xE4, 0x74, 0x74, 0x54, 0x1C, 0xFC, 0xC0, 0x7C, 0x28, 0xBC, 0xD0, 0x5C, 0x44, 0x3C, 0x5C, 0x44, 0x78, 0xF0, 0x74, 0xEC, 0x34, 0x30, 0x1C, 0x1C, 0x64, 0x74, 0x5C, 0x14, 0x5C, 0x90, 0xE8, 0x04, 0x34, 0x00, 0x54, 0x40, 0x4C, 0x30, 0xFC, 0x1C, 0x1C, 0x10, 0x04, 0x4C, 0x00, 0x28, 0x20, 0x58, 0x64, 0x7C, 0x24, 0x00, 0x94, 0x40, 0x00, 0x60, 0x88, 0x78, 0x18, 0x7C, 0xA4, 0x4C, 0x2C, 0x10, 0x44, 0x4C, 0x64, 0x68, 0x70, 0xB8, 0x3C, 0xD8, 0x3C, 0x14, 0xE8, 0x50, 0x14, 0x20, 0x60, 0x50, 0x38, 0x6C, 0x1C, 0x38, 0x2C, 0x44, 0xEC, 0x50, 0x10, 0x10, 0x48, 0x04, 0x60, 0x00, 0x78, 0x48, 0x9C, 0xD0, 0x50, 0x34, 0x2C, 0xD4, 0x44, 0x64, 0x00, 0x30, 0x00, 0x54, 0x60, 0xFC, 0x7C, 0x64, 0x18, 0x34, 0x4C, 0x18, 0xB0, 0xCC, 0x1C, 0xE8
};

Wyświetl plik

@ -1,3 +0,0 @@
const uint8_t prng_payload_sf6[] = {
0x65, 0xFA, 0xB7, 0xFF, 0x5E, 0x14, 0x5C, 0x20, 0x28, 0x78, 0x10, 0x74, 0x4C, 0x34, 0x28, 0x14, 0x10, 0x6C, 0x7C, 0x74, 0x54, 0x1C, 0x74, 0x48, 0x7C, 0x28, 0x3C, 0x50, 0x54, 0x4C, 0x3C, 0x5C, 0x44, 0x78, 0x70, 0x74, 0x64, 0x3C, 0x38, 0x14, 0x1C, 0x6C, 0x74, 0x7C, 0x04, 0x5C, 0x10, 0x68, 0x0C, 0x34, 0x00, 0x5C, 0x40, 0x44, 0x30, 0x7C, 0x1C, 0x1C, 0x10, 0x04, 0x4C, 0x00, 0x28, 0x20, 0x58, 0x64, 0x7C, 0x34, 0x04, 0x1C, 0x40, 0x00, 0x60, 0x08, 0x78, 0x18, 0x7C, 0x2C, 0x44, 0x2C, 0x10, 0x44, 0x4C, 0x64, 0x68, 0x70, 0x38, 0x3C, 0x58, 0x34, 0x14, 0x68, 0x50, 0x04, 0x20, 0x60, 0x50, 0x38, 0x6C, 0x1C, 0x38, 0x24, 0x4C, 0x6C, 0x78, 0x10, 0x10, 0x48, 0x04, 0x68, 0x00, 0x78, 0x40, 0x1C, 0x58, 0x40, 0x30, 0x24, 0x54, 0x44, 0x64, 0x00, 0x30, 0x00, 0x54, 0x20, 0x54, 0x6C, 0x60, 0x10, 0x3C, 0x4C, 0x18, 0x38, 0x44, 0x14, 0x68, 0x64, 0x28, 0x3C, 0x3C, 0x3C, 0x60, 0x54, 0x70, 0x44, 0x30, 0x28, 0x14, 0x78, 0x7C, 0x50, 0x54, 0x1C, 0x74, 0x58, 0x34, 0x34, 0x14, 0x5C, 0x04, 0x4C, 0x38, 0x3C, 0x04, 0x4C, 0x44, 0x30, 0x04, 0x14, 0x00, 0x44, 0x40, 0x48, 0x70, 0x7C, 0x34, 0x28, 0x2C, 0x04, 0x54, 0x10, 0x24, 0x00, 0x10, 0x68, 0x3C, 0x1C, 0x1C, 0x10, 0x2C, 0x58, 0x54, 0x20, 0x6C, 0x50, 0x70, 0x0C, 0x0C, 0x24, 0x28, 0x00, 0x38, 0x50, 0x50, 0x6C, 0x64, 0x30, 0x70, 0x3C, 0x04, 0x20, 0x78, 0x10, 0x50, 0x5C, 0x28, 0x64, 0x50, 0x30, 0x2C, 0x34, 0x00, 0x60, 0x08, 0x54, 0x44, 0x30, 0x24, 0x54, 0x00, 0x6C, 0x00, 0x10, 0x50, 0x00, 0x00, 0x24, 0x40, 0x00, 0x7C, 0x18, 0x74, 0x48, 0x7C, 0x00, 0x0C, 0x0C, 0x30, 0x54, 0x04, 0x7C, 0x2C, 0x74, 0x5C, 0x34, 0x2C, 0x7C, 0x68, 0x78, 0x7C, 0x28, 0x48, 0x34, 0x30, 0x5C, 0x5C, 0x6C, 0x64
};

Wyświetl plik

@ -1,3 +0,0 @@
const uint8_t prng_payload_sf7[] = {
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, 0x80, 0x00, 0x40, 0x20, 0xA4, 0x28, 0xE8, 0x04, 0x54, 0x70
};

Wyświetl plik

@ -1,3 +0,0 @@
const uint8_t prng_payload_sf8[] = {
0xBD, 0x54, 0x2C, 0x70, 0x1C, 0x74, 0x0C, 0x74, 0x40, 0x54, 0x58, 0x38, 0x20, 0x14, 0x50, 0x0C, 0x2C, 0x20, 0x68, 0x4C, 0x7C, 0x28, 0x3C, 0x50, 0x54, 0x4C, 0x1C, 0x7C, 0x40, 0x74, 0x60, 0x3C, 0x70, 0x34, 0x4C, 0x08, 0x2C, 0x48, 0x18, 0x60, 0x4C, 0x10, 0x10, 0x58, 0x08, 0x24, 0x00, 0x18, 0x40, 0x2C, 0x58, 0x04, 0x20, 0x00, 0x18, 0x00, 0x4C, 0x20, 0x58, 0x4C, 0x68, 0x28, 0x78, 0x18, 0x7C, 0x2C, 0x04, 0x4C, 0x04, 0x60, 0x48, 0x78, 0x68, 0x1C, 0x08, 0x10, 0x4C, 0x0C, 0x28, 0x48, 0x10, 0x08, 0x7C, 0x1C, 0x70, 0x44, 0x3C, 0x28, 0x54, 0x70, 0x1C, 0x68, 0x08, 0x78, 0x00, 0x3C, 0x40, 0x34, 0x58, 0x08, 0x68, 0x00, 0x30, 0x00, 0x54, 0x20, 0x54, 0x4C, 0x20, 0x60, 0x18, 0x30, 0x04, 0x34, 0x38, 0x40, 0x10, 0x28, 0x44, 0x18, 0x20, 0x64, 0x20, 0x2C, 0x54, 0x18, 0x6C, 0x44, 0x38, 0x40, 0x2C, 0x34, 0x1C, 0x5C, 0x44, 0x6C, 0x68, 0x58, 0x08, 0x38, 0x04, 0x14, 0x00, 0x44, 0x40, 0x08, 0x58, 0x1C, 0x20, 0x0C, 0x50, 0x00, 0x64, 0x20, 0x40, 0x4C, 0x64, 0x28, 0x30, 0x50, 0x1C, 0x04, 0x7C, 0x54, 0x38, 0x6C, 0x5C, 0x30, 0x64, 0x7C, 0x40, 0x68, 0x64, 0x30, 0x30, 0x5C, 0x54, 0x04, 0x54, 0x54, 0x20, 0x6C, 0x50, 0x30, 0x2C, 0x34, 0x20, 0x40, 0x1C, 0x28, 0x0C, 0x50, 0x40, 0x4C, 0x58, 0x34, 0x68, 0x14, 0x78, 0x0C, 0x34, 0x20, 0x64, 0x4C, 0x34, 0x60, 0x5C, 0x78, 0x2C, 0x54, 0x20, 0x70, 0x54, 0x3C, 0x6C, 0x5C, 0x38, 0x0C, 0x64, 0x04, 0x30, 0x54, 0x5C, 0x6C, 0x64, 0x58, 0x00, 0x60, 0x40, 0x3C, 0x70, 0x5C, 0x7C, 0x04, 0x4C, 0x14, 0x38, 0x44, 0x18, 0x78, 0x4C, 0x1C, 0x78, 0x18, 0x30, 0x2C, 0x1C, 0x18, 0x4C, 0x6C, 0x10, 0x5C, 0x44, 0x20, 0x40, 0x18, 0x40, 0x60, 0x10, 0x14, 0x54, 0x34, 0x58, 0x34, 0x38
};

Wyświetl plik

@ -1,3 +0,0 @@
const uint8_t prng_payload_sf9[] = {
0xFD, 0xBE, 0x1C, 0x64, 0x10, 0x7C, 0x0C, 0x74, 0x00, 0x74, 0x08, 0x1C, 0x38, 0x10, 0x58, 0x0C, 0x6C, 0x00, 0x78, 0x08, 0x54, 0x38, 0x38, 0x58, 0x14, 0x6C, 0x0C, 0x78, 0x08, 0x54, 0x70, 0x38, 0x38, 0x14, 0x5C, 0x0C, 0x24, 0x08, 0x38, 0x70, 0x08, 0x38, 0x00, 0x5C, 0x00, 0x24, 0x40, 0x38, 0x10, 0x08, 0x40, 0x00, 0x28, 0x00, 0x18, 0x40, 0x2C, 0x10, 0x4C, 0x40, 0x60, 0x28, 0x78, 0x18, 0x7C, 0x2C, 0x04, 0x4C, 0x04, 0x60, 0x48, 0x78, 0x28, 0x7C, 0x38, 0x04, 0x40, 0x04, 0x28, 0x48, 0x50, 0x28, 0x2C, 0x38, 0x68, 0x40, 0x34, 0x28, 0x14, 0x50, 0x0C, 0x2C, 0x20, 0x68, 0x04, 0x34, 0x00, 0x14, 0x48, 0x0C, 0x20, 0x20, 0x20, 0x04, 0x1C, 0x14, 0x44, 0x48, 0x20, 0x20, 0x78, 0x00, 0x40, 0x1C, 0x3C, 0x4C, 0x18, 0x28, 0x04, 0x78, 0x70, 0x60, 0x38, 0x30, 0x5C, 0x1C, 0x6C, 0x04, 0x18, 0x70, 0x08, 0x3C, 0x1C, 0x5C, 0x44, 0x6C, 0x68, 0x58, 0x68, 0x38, 0x14, 0x18, 0x00, 0x44, 0x00, 0x68, 0x28, 0x00, 0x3C, 0x24, 0x54, 0x00, 0x24, 0x00, 0x10, 0x68, 0x1C, 0x2C, 0x38, 0x48, 0x5C, 0x20, 0x6C, 0x10, 0x10, 0x7C, 0x28, 0x38, 0x2C, 0x58, 0x50, 0x6C, 0x2C, 0x10, 0x00, 0x48, 0x58, 0x2C, 0x44, 0x50, 0x28, 0x2C, 0x30, 0x20, 0x58, 0x18, 0x38, 0x44, 0x14, 0x28, 0x4C, 0x30, 0x10, 0x68, 0x64, 0x30, 0x70, 0x14, 0x78, 0x44, 0x14, 0x10, 0x60, 0x64, 0x34, 0x60, 0x5C, 0x78, 0x2C, 0x14, 0x00, 0x60, 0x50, 0x3C, 0x64, 0x5C, 0x78, 0x2C, 0x54, 0x60, 0x08, 0x54, 0x50, 0x6C, 0x24, 0x78, 0x10, 0x54, 0x3C, 0x08, 0x74, 0x5C, 0x34, 0x24, 0x5C, 0x10, 0x04, 0x5C, 0x5C, 0x64, 0x0C, 0x34, 0x48, 0x5C, 0x68, 0x24, 0x08, 0x1C, 0x10, 0x04, 0x00, 0x48, 0x08, 0x68, 0x00, 0x08, 0x14, 0x08, 0x00, 0x00, 0x6C, 0x08, 0x20
};

Wyświetl plik

@ -1,85 +0,0 @@
#!/usr/bin/python2
import collections
import os
from loranode import RN2483Controller
# from ../_examplify.py import Examplify
import os
os.sys.path.append(os.path.dirname(os.path.abspath('.')))
from _examplify 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'
testset = [ (7, "4/6"), (7, "4/7"), (8, "4/5"), (12, "4/6"), (9, "4/5"), (10, "4/5"), (11, "4/5"), (6, "4/5")]
for settings in testset:
dataf = './test_out_SF{0:d}_CR{1:s}.csv'.format(settings[0], '-'.join(settings[1].split('/')))
out = open(dataf, 'a')
out.close()
examplifr = Examplify(settings[0], settings[1], gains = [32, 38, 38])
whitening = ReceiveWhitening(settings[0], dataf)
for i in range(8):
print("Sample {0:d} of 16".format(i))
examplifr.transmitToFile(['0' * 256] * 4, ofile)
whitening.captureSequence(ofile)
for i in range(8):
print("Sample {0:d} of 16".format(i + 8))
examplifr.transmitToFile(['0' * 256] * 8, ofile)
whitening.captureSequence(ofile)
examplifr = None
whitening = None

Wyświetl plik

@ -1 +0,0 @@
./lora-whitening-sequencer -sf 7 -in ./test_out.csv

Wyświetl plik

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<lora-test-data set="extra">
<TEST id="2">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_000.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="4">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_000.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="1">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="7">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<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 />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
</lora-test-data>

Wyświetl plik

@ -1,619 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<lora-test-data set="hackrf">
<TEST id="1">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 80 0b 01 -->
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="2">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_000.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 80 0b 01 -->
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="3">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_000.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 80 0b 01 -->
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="4">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_000.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 80 0f 02 -->
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="5">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 80 0f 02 -->
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="6">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_000.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 80 0d 05 -->
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="7">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 80 0d 05 -->
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="8">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0b 02 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="9">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_001.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0b 02 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="10">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_001.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0b 02 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="11">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_001.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0f 01 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="12">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0f 01 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="13">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_001.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0d 06 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="14">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0d 06 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="15">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0b 02 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="16">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_002.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0b 02 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="17">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_002.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0b 02 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="18">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_002.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0f 01 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="19">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0f 01 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="20">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_002.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0d 06 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="21">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 30 0d 06 -->
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="22">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="23">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_003.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="24">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_003.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="25">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_003.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="26">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="27">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_003.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="28">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="29">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="30">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_004.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="31">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_004.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="32">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_004.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="33">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="34">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_004.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="35">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="36">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="37">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_005.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="38">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_005.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="39">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_005.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="40">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="41">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_005.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 03 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="42">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 03 -->
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="43">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="44">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_006.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="45">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_006.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="46">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_006.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="47">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="48">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_006.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="49">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="50">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="51">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_007.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="52">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_007.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="53">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_007.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="54">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="55">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_007.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="56">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="57">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="58">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf8_crc1_pwr1_008.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="59">
<file>../../examples/lora-samples/hackrf_cr4-5_bw125_sf12_crc1_pwr1_008.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="60">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf6_crc1_pwr1_008.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="61">
<file>../../examples/lora-samples/hackrf_cr4-7_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="62">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf6_crc1_pwr1_008.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="63">
<file>../../examples/lora-samples/hackrf_cr4-6_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0b 07 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0f 04 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<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 />
<expected-hdr /><!-- 40 0d 03 -->
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
</lora-test-data>

Wyświetl plik

@ -1,619 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<lora-test-data set="rtlsdr">
<TEST id="1">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="2">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_000.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="3">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_000.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="4">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_000.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="5">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="6">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_000.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="7">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="8">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="9">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_001.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="10">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_001.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="11">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_001.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="12">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="13">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_001.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="14">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="15">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="16">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_002.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="17">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_002.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="18">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_002.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="19">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="20">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_002.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="21">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="22">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="23">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_003.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="24">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_003.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="25">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_003.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="26">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="27">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_003.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="28">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="29">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="30">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_004.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="31">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_004.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="32">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_004.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="33">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="34">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_004.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="35">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="36">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="37">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_005.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="38">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_005.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="39">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_005.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="40">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="41">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_005.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="42">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="43">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="44">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_006.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="45">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_006.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="46">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_006.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="47">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="48">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_006.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="49">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="50">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="51">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_007.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="52">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_007.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="53">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_007.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="54">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="55">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_007.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="56">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="57">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="58">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_008.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="59">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_008.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="60">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_008.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="61">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="62">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_008.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="63">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="64">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="65">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_009.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="66">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_009.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="67">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_009.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="68">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="69">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_009.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="70">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="71">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="72">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf8_crc1_pwr1_010.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="73">
<file>../../examples/lora-samples/rtlsdr_cr4-5_bw125_sf12_crc1_pwr1_010.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="74">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf6_crc1_pwr1_010.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="75">
<file>../../examples/lora-samples/rtlsdr_cr4-7_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="76">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf6_crc1_pwr1_010.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="77">
<file>../../examples/lora-samples/rtlsdr_cr4-6_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
</lora-test-data>

Wyświetl plik

@ -1,619 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<lora-test-data set="usrp">
<TEST id="1">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="2">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_000.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="3">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_000.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="4">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_000.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="5">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="6">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_000.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="7">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_000.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>01 23 45 67 89 ab cd ef</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="8">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="9">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_001.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="10">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_001.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="11">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_001.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="12">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="13">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_001.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="14">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_001.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="15">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="16">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_002.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="17">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_002.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="18">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_002.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="19">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="20">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_002.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="21">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_002.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>11 11 11</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="22">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="23">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_003.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="24">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_003.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="25">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_003.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="26">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="27">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_003.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="28">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_003.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>aa aa aa aa</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="29">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="30">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_004.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="31">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_004.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="32">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_004.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="33">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="34">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_004.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="35">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_004.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="36">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="37">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_005.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="38">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_005.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="39">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_005.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="40">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="41">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_005.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="42">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_005.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>ff ff ff ff</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="43">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="44">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_006.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="45">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_006.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="46">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_006.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="47">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="48">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_006.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="49">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_006.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>3</expected-times>
</TEST>
<TEST id="50">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="51">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_007.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="52">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_007.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="53">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_007.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="54">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="55">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_007.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="56">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_007.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>55 55 55 55</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="57">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="58">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_008.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="59">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_008.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="60">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_008.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="61">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="62">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_008.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="63">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_008.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>1</expected-times>
</TEST>
<TEST id="64">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="65">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_009.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="66">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_009.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="67">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_009.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="68">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="69">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_009.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="70">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_009.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>5</expected-times>
</TEST>
<TEST id="71">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="72">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf8_crc1_pwr1_010.cfile</file>
<spreading-factor>8</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="73">
<file>../../examples/lora-samples/usrp_cr4-5_bw125_sf12_crc1_pwr1_010.cfile</file>
<spreading-factor>12</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="74">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf6_crc1_pwr1_010.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="75">
<file>../../examples/lora-samples/usrp_cr4-7_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="76">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf6_crc1_pwr1_010.cfile</file>
<spreading-factor>6</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
<TEST id="77">
<file>../../examples/lora-samples/usrp_cr4-6_bw125_sf7_crc1_pwr1_010.cfile</file>
<spreading-factor>7</spreading-factor>
<expected-data-all />
<expected-hdr />
<expected-data-only>88 88 88 88</expected-data-only>
<expected-times>10</expected-times>
</TEST>
</lora-test-data>

Wyświetl plik

@ -1,114 +0,0 @@
-------- Test Results on 2017-08-31 14:36:31 ---------
Test serie 0: [u'01 23 45 67 89 ab cd ef'] * 10
Test 1 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 2 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 3 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 4 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 5 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 6 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 7 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
=> Total passed: 69 out of 70 (98.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 1 out of 1 (100.00%)
Test 11 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 1 out of 1 (100.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 1 out of 1 (100.00%)
Test 14 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
=> Total passed: 7 out of 7 (100.00%)
Test serie 2: [u'11 11 11'] * 5
Test 15 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.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 5 out of 5 (100.00%)
Test 18 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 5 out of 5 (100.00%)
Test 19 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%)
Test 20 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 5 out of 5 (100.00%)
Test 21 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 5 out of 5 (100.00%)
=> Total passed: 35 out of 35 (100.00%)
Test serie 3: [u'aa aa aa aa'] * 3
Test 22 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 23 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 24 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 25 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 3 out of 3 (100.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 3 out of 3 (100.00%)
Test 28 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
=> Total passed: 21 out of 21 (100.00%)
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 1 out of 1 (100.00%)
Test 32 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 33 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 34 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 35 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
=> Total passed: 6 out of 7 (85.71%)
Test serie 5: [u'ff ff ff ff'] * 10
Test 36 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.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 9 out of 10 ( 90.00%)
Test 39 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
Test 40 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 41 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 42 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
=> Total passed: 55 out of 70 (78.57%)
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 3 out of 3 (100.00%)
Test 46 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 47 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 48 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 3 out of 3 (100.00%)
Test 49 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 3 out of 3 (100.00%)
=> Total passed: 21 out of 21 (100.00%)
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 10 out of 10 (100.00%)
Test 52 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 53 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 9 out of 10 ( 90.00%)
Test 54 :: cr4-7 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 55 :: cr4-6 bw125 sf6 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 56 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 10 out of 10 (100.00%)
=> Total passed: 69 out of 70 (98.57%)
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 1 out of 1 (100.00%)
Test 59 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 1 out of 1 (100.00%)
Test 60 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 1 out of 1 (100.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 1 out of 1 (100.00%)
Test 63 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 0 out of 1 ( 0.00%)
=> Total passed: 4 out of 7 (57.14%)
Test serie 9: [u'88 88 88 88'] * 5
Test 64 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
Test 65 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 5 out of 5 (100.00%)
Test 66 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 5 out of 5 (100.00%)
Test 67 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 5 out of 5 (100.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 5 out of 5 (100.00%)
Test 70 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 0 out of 5 ( 0.00%)
=> Total passed: 20 out of 35 (57.14%)
Test serie 10: [u'88 88 88 88'] * 10
Test 71 :: cr4-5 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
Test 72 :: cr4-5 bw125 sf8 crc1 pwr1 :: passed 10 out of 10 (100.00%)
Test 73 :: cr4-5 bw125 sf12 crc1 pwr1 :: passed 8 out of 10 ( 80.00%)
Test 74 :: cr4-7 bw125 sf6 crc1 pwr1 :: passed 10 out of 10 (100.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 9 out of 10 ( 90.00%)
Test 77 :: cr4-6 bw125 sf7 crc1 pwr1 :: passed 0 out of 10 ( 0.00%)
=> Total passed: 37 out of 70 (52.86%)
====== Total passed: 344 out of 413 (83.29%) ======

Wyświetl plik

@ -1,17 +0,0 @@
if [ -e ./qa_BasicTest_Data_hackrf.xml ] && [ -e ./qa_BasicTest_Data_rtlsdr.xml ] && [ -e ./qa_BasicTest_Data_usrp.xml ]; then
mv ./qa_BasicTest_Data.xml ./qa_BasicTest_Data_extra.xml
mv ./qa_BasicTest_Data_hackrf.xml ./qa_BasicTest_Data.xml
echo "Current: HACKRF TESTS"
elif [ -e ./qa_BasicTest_Data_rtlsdr.xml ] && [ -e ./qa_BasicTest_Data_usrp.xml ] && [ -e ./qa_BasicTest_Data_extra.xml ]; then
mv ./qa_BasicTest_Data.xml ./qa_BasicTest_Data_hackrf.xml
mv ./qa_BasicTest_Data_rtlsdr.xml ./qa_BasicTest_Data.xml
echo "Current: RTL-SDR TESTS"
elif [ -e ./qa_BasicTest_Data_hackrf.xml ] && [ -e ./qa_BasicTest_Data_usrp.xml ] && [ -e ./qa_BasicTest_Data_extra.xml ]; then
mv ./qa_BasicTest_Data.xml ./qa_BasicTest_Data_rtlsdr.xml
mv ./qa_BasicTest_Data_usrp.xml ./qa_BasicTest_Data.xml
echo "Current: USRP TESTS"
elif [ -e ./qa_BasicTest_Data_hackrf.xml ] && [ -e ./qa_BasicTest_Data_rtlsdr.xml ] && [ -e ./qa_BasicTest_Data_extra.xml ]; then
mv ./qa_BasicTest_Data.xml ./qa_BasicTest_Data_usrp.xml
mv ./qa_BasicTest_Data_extra.xml ./qa_BasicTest_Data.xml
echo "Current: EXTRA TESTS"
fi

Wyświetl plik

@ -75,7 +75,7 @@ namespace gr {
d_cfo_estimation = 0.0f;
d_dt = 1.0f / d_samples_per_second;
d_sf = sf;
d_bits_per_second = (double)d_sf * (double)(1u + d_cr) / (1u << d_sf) * d_bw;
d_bits_per_second = (double)d_sf * (double)(4.0 / (4.0 + d_cr)) / (1u << d_sf) * d_bw;
d_symbols_per_second = (double)d_bw / (1u << d_sf);
d_period = 1.0f / (double)d_symbols_per_second;
d_bits_per_symbol = (uint32_t)(d_bits_per_second / d_symbols_per_second);
@ -88,7 +88,7 @@ namespace gr {
d_fine_sync = 0;
set_output_multiple(2 * d_samples_per_symbol);
std::cout << "Bits per symbol: \t" << d_bits_per_symbol << std::endl;
std::cout << "Bits (nominal) per symbol: \t" << d_bits_per_symbol << std::endl;
std::cout << "Bins per symbol: \t" << d_number_of_bins << std::endl;
std::cout << "Samples per symbol: \t" << d_samples_per_symbol << std::endl;
std::cout << "Decimation: \t\t" << d_decim_factor << std::endl;

Wyświetl plik

@ -84,6 +84,7 @@ namespace gr {
uint8_t *data = (uint8_t*) pmt::blob_data(msg);
size_t size = pmt::blob_length(msg);
/*
#ifdef DEBUG
printf("Received message:\n\t");
@ -92,11 +93,9 @@ namespace gr {
putchar('\n');
#endif
*/
if (sendto(d_socket, data, size, 0,
(const struct sockaddr*) d_sock_addr,
sizeof(*d_sock_addr))
!= (ssize_t)size) {
if (sendto(d_socket, data, size, 0, (const struct sockaddr*)d_sock_addr, sizeof(*d_sock_addr)) != (ssize_t)size) {
perror("[message_socket_sink] Mismatch in number of bytes sent");
exit(EXIT_FAILURE);
}

Wyświetl plik

@ -33,6 +33,7 @@ GR_PYTHON_INSTALL(
__init__.py
lora_decoder.py
lora_receiver.py
loraconfig.py
message_wireshark_sink.py DESTINATION ${GR_PYTHON_DIR}/lora
)

Wyświetl plik

@ -0,0 +1,30 @@
class LoRaConfig():
def __init__(self, freq, sf, cr, bw=125e3, prlen=8, crc=True, implicit=False):
self.freq = freq
self.sf = sf
self.cr = cr
self.bw = bw
self.prlen = prlen
self.crc = crc
self.implicit = implicit
def file_repr(self):
cr_num = int(self.cr.rpartition('/')[2])-4
format_string = "{:n}-sf{:n}-cr{:n}-bw{:n}".format(self.freq/1000000.0, self.sf, cr_num, self.bw/1000.0)
if self.crc:
format_string += "-crc"
if self.implicit:
format_string += "-imp"
return format_string
def string_repr(self):
format_string = "{:n} MHz, SF {:n}, CR {:s}, BW {:n} kHz, prlen {:n}, crc {:s}, implicit {:s}".format(
self.freq/1000000.0,
self.sf,
self.cr,
self.bw/1000.0,
self.prlen,
"on" if self.crc else "off",
"on" if self.implicit else "off"
)
return format_string

Wyświetl plik

@ -1,254 +0,0 @@
#!/usr/bin/env python2
import lora, socket, pmt, time
import collections, datetime
import os.path
import os
import xmltodict
from gnuradio import gr, gr_unittest, blocks, filter
from gnuradio.filter import firdes
TestResultData = collections.namedtuple('TestResultData', ['id', 'fromfile', 'passing', 'total', 'rate'])
TestSerieSettings = collections.namedtuple('TestSerieSettings', ['data', 'times'])
class qa_BasicTest_XML (gr_unittest.TestCase):
#
# Listen on socket for data, append to list if any and return list of captured data.
#
def gatherFromSocket(self, amount):
total_data = []
data = ''
for i in range(amount):
try:
data = self.server.recv(4096)
if data:
total_data.append(data)
except Exception as e:
print(e)
pass
return total_data
#
# Compare captured data list with the expected data list.
# Print received data, expected data and if they match.
# Also give feedback about successrate in the decoding (percentage correctly captured and decoded).
#
def compareDataSets(self, total_data, expected_data, fromfile, test_idx):
global testResults
total_passing = 0
print '\nReceived:'
for idx, val in enumerate(expected_data):
data_str = '?'
passed = True
try:
data_str = " ".join("{:02x}".format(ord(n)) for n in total_data[idx])
self.assertEqual(val, data_str if self.hasHDR else data_str[9:])
except:
passed = False
if passed:
total_passing += 1
print "{0: 3d} :: match:\n {1:s}".format(idx, val)
else:
print "{0: 3d} :: mismatch:\n {1:s}".format(idx, data_str)
print "should be:\n {0:s}".format(expected_data[idx])
results = TestResultData(test_idx, fromfile, total_passing, len(expected_data), float(total_passing) / len(expected_data) * 100.0)
testResults[len(testResults) - 1].append(results)
print ("\nPassed rate: {0:d} out of {1:d} ({2:.2f}%)\n"
.format(results.passing, results.total, results.rate))
#
# Set up flowgraph before Unit Test. (Gets therefore called before EVERY test)
#
# 1. Set variables for various blocks (spreading factor from test_series settings)
# 2. Make UDP socket server to listen for outputted messages
# 3. Connect blocks: (file_source) -> throttle -> lora_receiver -> message_socket_sink
#
def setUp (self):
##################################################
# Variables #
##################################################
self.target_freq = 868.1e6
self.sf = 7
self.samp_rate = 1e6
self.capture_freq = 868.0e6
self.threshold = 0.002
#self.bw = 125e3
#self.symbols_per_sec = self.bw / (2**self.sf)
self.hasHDR = True
# For FFT, determine Center Frequency Offset first, then set here.
# For RN2483, usually -14.1e3
self.center_offset = 0
self.inputFile = "./"
# Socket connection for sink
self.host = "127.0.0.1"
self.port = 40868
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server.bind((self.host, self.port))
self.server.setblocking(0) ## or self.server.settimeout(0.5) ?
# gr-lora/python
current_dir = os.path.dirname(os.path.realpath(__file__)) + "/"
self.xmlFile = current_dir + '../examples/qa_BasicTest_Data.xml'
if os.path.isfile(self.xmlFile):
f = open(self.xmlFile, 'r')
self.xmlTests = xmltodict.parse(f.read())["lora-test-data"]
self.logFile = current_dir + '../examples/qa_BasicTest_' + self.xmlTests['@set'] + '.log'
self.xmlTests = self.xmlTests["TEST"]
if type(self.xmlTests) is not list:
self.xmlTests = [ self.xmlTests ]
f.close()
else:
raise Exception("[BasicTest_XML] '" + self.xmlFile + "' does not exist!")
#
# Clean-up flowgraph after Unit Test. (Gets therefore called after EVERY test)
#
# Because tests are completed, report results.
#
def tearDown (self):
self.tb = None
self.xmlTests = None
self.server.close()
flog = open(self.logFile, 'w')
passed_t_a = 0
passed_t = 0
total_t_a = 0
total_t = 0
stro = ("-" * 8) + " Test Results on " + str(datetime.datetime.now())[:19] + " " + ("-" * 9)
print(stro)
flog.write(stro + '\n')
for j, serie in enumerate(testResults):
total_t = passed_t = 0
stro = ("Test serie {0: 3d}: {1:s} * {2:d}"
.format(j, test_series[j].data, test_series[j].times))
print(stro)
flog.write(stro + '\n')
for x in serie:
passed_t += x.passing
total_t += x.total
stro = (" Test {0: 3d} :: {1:5s} {2:5s} {3:4s} {4:4s} {5:4s} :: passed {6: 3d} out of {7: 3d} ({8:6.2f}%)"
.format(x.id, *(x.fromfile.split('_')[1:-1] + [x.passing] + [x.total] + [x.rate])))
print(stro)
flog.write(stro + '\n')
passed_t_a += passed_t
total_t_a += total_t
stro = (" => Total passed: {0:d} out of {1:d} ({2:.2f}%)\n"
.format(passed_t, total_t, float(passed_t) / (total_t if total_t else 1.0) * 100.0))
print(stro)
flog.write(stro + '\n')
stro = ("\n ====== Total passed: {0:d} out of {1:d} ({2:.2f}%) ======"
.format(passed_t_a, total_t_a, float(passed_t_a) / (total_t_a if total_t_a else 1.0) * 100.0))
print(stro)
flog.write(stro + '\n\n')
flog.close()
print ("Log written to: " + self.logFile)
###############################################################################################
# Unit tests series from qa_BasicTest_Data.xml #
###############################################################################################
def test_000 (self):
prevData = ""
prevTimes = 0
for test in self.xmlTests:
# print (("Test {0: 3d}\n"
# + " File: {1:s}\n"
# + " SF: {2: 2d}\n"
# + " All data: {3:s}\n"
# + " HDR: {4:s}\n"
# + " DATA: {5:s}\n"
# + " times: {6: 2d}")
# .format(int(test['@id']), test['file'], int(test['spreading-factor']),
# test['expected-data-all'], test['expected-hdr'],
# test['expected-data-only'], int(test['expected-times']))
# )
self.sf = int(test['spreading-factor'])
self.inputFile = str(test['file'])
self.hasHDR = True
data = test['expected-data-all']
times = int(test['expected-times'])
if not data:
data = test['expected-hdr']
if not data:
self.hasHDR = False
data = test['expected-data-only']
else:
data = data + " " + test['expected-data-only']
if data and os.path.isfile(self.inputFile):
if (data != prevData) or (times != prevTimes):
testResults.append( [] )
test_series.append( TestSerieSettings([data], times) )
prevData = data
prevTimes = times
print "++++++++++ Starting test {0: 3d} from data in: \n {1:s}\n".format(int(test['@id']), self.inputFile)
##################################################
# Blocks #
##################################################
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, [868100000], self.sf, self.samp_rate, self.threshold)
self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, self.samp_rate, True)
self.blocks_message_socket_sink_0 = lora.message_socket_sink()
self.freq_xlating_fir_filter_0 = filter.freq_xlating_fir_filter_ccc(1, (firdes.low_pass(1, self.samp_rate, 200000, 100000, firdes.WIN_HAMMING, 6.67)), self.center_offset, self.samp_rate)
self.tb.connect( (self.file_source, 0), (self.blocks_throttle_0, 0))
self.tb.connect( (self.blocks_throttle_0, 0), (self.freq_xlating_fir_filter_0, 0))
self.tb.connect( (self.freq_xlating_fir_filter_0, 0), (self.lora_lora_receiver_0, 0))
self.tb.msg_connect( (self.lora_lora_receiver_0, 'frames'), (self.blocks_message_socket_sink_0, 'in'))
self.tb.run()
total_data = self.gatherFromSocket(test_series[len(test_series) - 1].times)
self.compareDataSets(total_data,
test_series[len(test_series) - 1].data * test_series[len(test_series) - 1].times,
os.path.splitext(os.path.basename(self.inputFile))[0],
int(test['@id']))
self.tb = None
else:
print("No test data or file does not exist, skipping test {0: 3d}...".format(int(test['@id'])))
###################################################################################################
# Unit tests #
# These assume a directory "./examples/lora-samples" #
# with the specified .cfiles existing. #
###################################################################################################
if __name__ == '__main__':
global testResults
testResults = []
global test_series
test_series = []
gr_unittest.run(qa_BasicTest_XML)

0
python/qa_receiver.py 100755 → 100644
Wyświetl plik

Wyświetl plik

@ -0,0 +1,243 @@
#!/usr/bin/env python2
import lora
import socket
import pmt
import time
import collections
import datetime
import os.path
import os
import json
import binascii
import signal
import argparse
from gnuradio import gr, gr_unittest, blocks, filter
from gnuradio.filter import firdes
from sigmf.sigmffile import SigMFFile
from lora.loraconfig import LoRaConfig
Test = collections.namedtuple('Test', ['payload', 'times'])
TestResult = collections.namedtuple('TestResult', ['decoded_data', 'lora_config', 'test'])
def signal_handler(signal, frame):
exit(0)
def trunc(target, max_len=30):
result = ""
if len(target) > max_len:
result += target[0:max_len/2-1]
result += ".."
result += target[-max_len/2+1:]
else:
result = target
assert(len(result) <= max_len)
return result
class TestSummary():
def __init__(self, suite):
self.suite = suite
self._summary = []
self._summary_text = "-------- Test suite '{:s}' results on {:s} ---------\n".format(suite, str(datetime.datetime.utcnow()))
self._summary_markdown = ""
self._num_total_correct_payloads = 0
self._num_total_payloads = 0
self._num_tests = 0
self._last_config = None
def add(self, test_result, print_intermediate=False):
if type(test_result) == TestResult:
self._summary.append(test_result)
self._evaluate_result(test_result, print_intermediate)
else:
raise Exception("Test result must be of type TestResult")
def export_summary(self, print_output=True):
self._summary_text += "\nRan a total of {:n} tests, together containing {:n} payloads.\n".format(
self._num_tests,
self._num_total_payloads
)
self._summary_text += "====== Total payloads passed: {:>5n} out of {:<5n} ({:.2%}) ======\n".format(
self._num_total_correct_payloads,
self._num_total_payloads,
float(self._num_total_correct_payloads) / self._num_total_payloads
)
if print_output:
print(self._summary_text)
def _evaluate_result(self, test_result, print_intermediate):
"""
Given a test result, evaluate it and generate text / markdown for the report.
"""
self._num_tests += 1
evaluation_text = ""
evaluation_markdown = ""
# Shorter names
decoded_data = test_result.decoded_data
lora_config = test_result.lora_config
test = test_result.test
expected_data = [test.payload] * test.times
# Don't reprint configuration if it is the same as before
if(self._last_config != vars(lora_config)):
evaluation_text += "Configuration {:s}:\n".format(lora_config.string_repr())
self._last_config = vars(lora_config)
# Determine number of correct payloads
num_payloads = 0
num_correct_payloads = 0
for i in range(0, test.times):
num_payloads += 1
self._num_total_payloads += 1
try:
decoded = decoded_data[i]
except IndexError:
decoded = "?"
try:
expected = expected_data[i]
except IndexError:
expected = "?"
if decoded == expected:
num_correct_payloads += 1
self._num_total_correct_payloads += 1
# Append to text report
evaluation_text += "\tTest {:>3n}: {:<30s} * {:<3n} :: passed {:>3n} out of {:<3n} ({:.2%})\n".format(self._num_tests, trunc(test.payload), test.times, num_correct_payloads, num_payloads, float(num_correct_payloads)/num_payloads)
self._summary_text += evaluation_text
if(print_intermediate):
print(evaluation_text)
class qa_testsuite():
def __init__(self):
"""
Determine installed test suites and setup socket server for receiving payloads decoded by gr-lora.
"""
# Variables
self.center_offset = 0
self.host = "127.0.0.1"
self.port = 40868
# Setup socket
self.server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
self.server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.server.bind((self.host, self.port))
self.server.settimeout(10)
# Determine test suites directory
current_dir = os.path.dirname(os.path.realpath(__file__)) + "/"
self.test_suites_directory = os.path.abspath(current_dir + '../apps/test-suites')
# List test suites
self.test_suites = []
if os.path.exists(self.test_suites_directory):
self.test_suites = [x for x in os.listdir(self.test_suites_directory) if os.path.isdir(os.path.join(self.test_suites_directory, x))]
else:
print("No test suites found! Skipping...")
def __del__(self):
self.server.close()
def get_payloads(self, number):
"""
Returns array of <number> hexadecimal LoRa payload datagrams received on a socket.
"""
total_data = []
data = ''
for i in range(number):
try:
data = self.server.recvfrom(65535)[0]
if data:
total_data.append(binascii.hexlify(data[3:])) # Discard header and convert to hex text
except Exception as e:
print(e)
pass
return total_data
def run(self, suites_to_run):
for test_suite in self.test_suites:
# Skip test suites that we don't want to run
if suites_to_run != [] and (not test_suite in suites_to_run):
continue
print("[+] Testing suite: '%s'" % test_suite)
summary = TestSummary(suite=test_suite)
# Get all metadata files associated with the suite
get_mtime = lambda f: os.stat(os.path.join(self.test_suites_directory, test_suite, f)).st_mtime
metadata_files = [os.path.join(self.test_suites_directory, test_suite, x) for x in sorted(os.listdir(os.path.join(self.test_suites_directory, test_suite)), key=get_mtime) if x.endswith('.sigmf-meta')]
# Parse metadata files
for metadata_file in metadata_files:
print("[+] %s" % metadata_file)
data_file = os.path.splitext(metadata_file)[0] + '.sigmf-data'
# Load sigmf data TODO abstract
f = open(metadata_file, 'r')
sigmf = SigMFFile(metadata=f.read())
if not sigmf.validate():
raise Exception("Invalid SigMF format")
global_meta = sigmf.get_global_info()
capture_meta = sigmf.get_capture_info(0)
f.close()
# Initialize test parameters
sample_rate = global_meta["core:sample_rate"]
# Get LoRa configuration
capture_freq = capture_meta["core:frequency"]
transmit_freq = capture_meta["lora:frequency"]
sf = capture_meta["lora:sf"]
cr = capture_meta["lora:cr"]
bw = capture_meta["lora:bw"]
prlen = capture_meta["lora:prlen"]
crc = capture_meta["lora:crc"]
implicit = capture_meta["lora:implicit"]
lora_config = LoRaConfig(transmit_freq, sf, cr, bw, prlen, crc, implicit)
# Get test case configuration
payload = capture_meta["test:expected"]
times = capture_meta["test:times"]
test = Test(payload, times)
# Build flowgraph
tb = gr.top_block()
file_source = blocks.file_source(gr.sizeof_gr_complex, data_file, False)
lora_receiver = lora.lora_receiver(sample_rate, capture_freq, [868100000], sf, 1000000, 0.002)
throttle = blocks.throttle(gr.sizeof_gr_complex, sample_rate, True)
message_socket_sink = lora.message_socket_sink()
freq_xlating_fir_filter = filter.freq_xlating_fir_filter_ccc(1, (firdes.low_pass(1, sample_rate, 200000, 100000, firdes.WIN_HAMMING, 6.67)), self.center_offset, sample_rate)
# Make connections
tb.connect((file_source, 0), (throttle, 0))
tb.connect((throttle, 0), (freq_xlating_fir_filter, 0))
tb.connect((freq_xlating_fir_filter, 0), (lora_receiver, 0))
tb.msg_connect((lora_receiver, 'frames'), (message_socket_sink, 'in'))
tb.start()
tb.wait()
decoded_data = self.get_payloads(times) # Output from the flowgraph
summary.add(TestResult(decoded_data=decoded_data, lora_config=lora_config, test=test), print_intermediate=True)
# Finally, export the result for the suite
summary.export_summary()
if __name__ == '__main__':
"""
Tool to evaluate decoding test suites in apps/test-suites/
"""
# Parse args
parser = argparse.ArgumentParser(description="Tool to evaluate decoding test suites for gr-lora.")
parser.add_argument('suites', type=str, nargs="*", help='Names of the test suites to execute.')
args = parser.parse_args()
# Make sure CTRL+C exits the whole test suite instead of only the current GNU Radio top block
signal.signal(signal.SIGINT, signal_handler)
suite = qa_testsuite()
suite.run(args.suites)