gr-rylr998/examples/rylr998_bladerf_rx.grc
Ryan Malloy c839d225a8 Initial release: complete LoRa TX/RX for RYLR998 modems
GNU Radio Out-of-Tree module providing:
- Complete TX chain: PHYEncode → FrameGen → CSSMod
- Complete RX chain: CSSDemod → FrameSync → PHYDecode
- NETWORKID extraction/encoding (0-255 range)
- All SF (7-12) and CR (4/5-4/8) combinations
- Loopback tested with 24/24 configurations passing

Key features:
- Fractional SFD (2.25 downchirp) handling
- Gray encode/decode with proper inverse operations
- gr-lora_sdr compatible decode modes
- GRC block definitions and example flowgraphs
- Comprehensive documentation

Discovered RYLR998 sync word mapping:
  sync_bin_1 = (NETWORKID >> 4) * 8
  sync_bin_2 = (NETWORKID & 0x0F) * 8
2026-02-05 13:38:07 -07:00

159 lines
5.1 KiB
XML

<?xml version="1.0"?>
<flow_graph>
<timestamp>2024-01-01 00:00:00</timestamp>
<block>
<key>options</key>
<param>
<key>id</key>
<value>rylr998_bladerf_rx</value>
</param>
<param>
<key>title</key>
<value>RYLR998 BladeRF Receiver</value>
</param>
<param>
<key>author</key>
<value>gr-rylr998</value>
</param>
<param>
<key>description</key>
<value>Receive and decode RYLR998 LoRa frames via BladeRF SDR</value>
</param>
<param>
<key>generate_options</key>
<value>qt_gui</value>
</param>
</block>
<!-- Variables -->
<block>
<key>variable</key>
<param><key>id</key><value>sf</value></param>
<param><key>value</key><value>9</value></param>
</block>
<block>
<key>variable</key>
<param><key>id</key><value>sample_rate</value></param>
<param><key>value</key><value>250e3</value></param>
</block>
<block>
<key>variable</key>
<param><key>id</key><value>bw</value></param>
<param><key>value</key><value>125e3</value></param>
</block>
<block>
<key>variable</key>
<param><key>id</key><value>center_freq</value></param>
<param><key>value</key><value>915e6</value></param>
</block>
<block>
<key>variable</key>
<param><key>id</key><value>networkid</value></param>
<param><key>value</key><value>18</value></param>
</block>
<block>
<key>variable</key>
<param><key>id</key><value>rf_gain</value></param>
<param><key>value</key><value>30</value></param>
</block>
<!-- GUI Controls -->
<block>
<key>variable_qtgui_range</key>
<param><key>id</key><value>gain_slider</value></param>
<param><key>label</key><value>RF Gain</value></param>
<param><key>value</key><value>rf_gain</value></param>
<param><key>start</key><value>0</value></param>
<param><key>stop</key><value>60</value></param>
<param><key>step</key><value>1</value></param>
</block>
<!-- BladeRF Source (using SoapySDR) -->
<block>
<key>soapy_bladerf_source</key>
<param><key>id</key><value>bladerf_source</value></param>
<param><key>dev_args</key><value></value></param>
<param><key>samp_rate</key><value>sample_rate</value></param>
<param><key>center_freq0</key><value>center_freq</value></param>
<param><key>bandwidth0</key><value>bw</value></param>
<param><key>gain0</key><value>gain_slider</value></param>
</block>
<!-- Alternative: osmocom Source for broader SDR support -->
<!-- Uncomment to use instead of soapy_bladerf_source -->
<!--
<block>
<key>osmosdr_source</key>
<param><key>id</key><value>osmocom_source</value></param>
<param><key>args</key><value>bladerf=0</value></param>
<param><key>sample_rate</key><value>sample_rate</value></param>
<param><key>freq0</key><value>center_freq</value></param>
<param><key>gain0</key><value>rf_gain</value></param>
</block>
-->
<!-- RYLR998 Receiver -->
<block>
<key>rylr998_rx</key>
<param><key>id</key><value>rylr998_rx_0</value></param>
<param><key>sf</key><value>sf</value></param>
<param><key>sample_rate</key><value>sample_rate</value></param>
<param><key>bw</key><value>bw</value></param>
<param><key>cr</key><value>1</value></param>
<param><key>has_crc</key><value>True</value></param>
<param><key>expected_networkid</key><value>networkid</value></param>
</block>
<!-- Message Debug -->
<block>
<key>blocks_message_debug</key>
<param><key>id</key><value>message_debug</value></param>
<param><key>en_uvec</key><value>True</value></param>
</block>
<!-- QT GUI Displays -->
<block>
<key>qtgui_waterfall_sink_x</key>
<param><key>id</key><value>waterfall</value></param>
<param><key>fft_size</key><value>1024</value></param>
<param><key>samp_rate</key><value>sample_rate</value></param>
<param><key>center_freq</key><value>center_freq</value></param>
<param><key>name</key><value>Waterfall</value></param>
</block>
<block>
<key>qtgui_freq_sink_x</key>
<param><key>id</key><value>freq_sink</value></param>
<param><key>fft_size</key><value>1024</value></param>
<param><key>samp_rate</key><value>sample_rate</value></param>
<param><key>center_freq</key><value>center_freq</value></param>
<param><key>name</key><value>Spectrum</value></param>
</block>
<!-- Connections -->
<connection>
<source_block_id>bladerf_source</source_block_id>
<sink_block_id>rylr998_rx_0</sink_block_id>
<source_key>0</source_key>
<sink_key>in</sink_key>
</connection>
<connection>
<source_block_id>bladerf_source</source_block_id>
<sink_block_id>waterfall</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>bladerf_source</source_block_id>
<sink_block_id>freq_sink</sink_block_id>
<source_key>0</source_key>
<sink_key>0</sink_key>
</connection>
<connection>
<source_block_id>rylr998_rx_0</source_block_id>
<sink_block_id>message_debug</sink_block_id>
<source_key>payload</source_key>
<sink_key>print</sink_key>
</connection>
</flow_graph>