Skip to content

ccostes/rtl-sdr-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RTL-SDR

An RTL-SDR library written in Rust!

What is RTL-SDR?

RTL-SDR is a family of low-cost (~$30) USB software-defined radio (SDR) receivers that can tune a wide range of frequencies which are then processed in software (thus the 'software' in SDR).

They can receive all kinds of signals such as FM radio (see the simple_fm example in this project), aircraft radio and position data (like what you see on adsb-exchange), weather satellite imagery, and more!

rtl-sdr.com has a great page with much more explanation.

Getting Started

You can run the example FM radio receiver with the following command on Mac:

cargo run --example simple_fm | play -r 32k -t raw -e s -b 16 -c 1 -V1 -

and similarly on Linux:

cargo run --example simple_fm | aplay -r 32000 -f S16_LE

Opening Devices

This library supports multiple ways to open RTL-SDR devices:

By device index (default method):

use rtl_sdr_rs::{DeviceId, RtlSdr};

// Method 1: Using DeviceId enum
let sdr = RtlSdr::open(DeviceId::Index(0))?;

// Method 2: Using convenience function 
let sdr = RtlSdr::open_with_index(0)?;

By file descriptor (useful on Android):

use rtl_sdr_rs::{DeviceId, RtlSdr};

// Method 1: Using DeviceId enum
let sdr = RtlSdr::open(DeviceId::Fd(fd))?;

// Method 2: Using convenience function
let sdr = RtlSdr::open_with_fd(fd)?;

See the demo_device_id example for a complete demonstration of all opening methods.

Uload Kernel Modules

If the RTL kernel modules are installed you will need to temporarily unload them before using this library as follows:

sudo rmmod rtl2832_sdr
sudo rmmod dvb_usb_rtl28xxu
sudo rmmod rtl2832
sudo rmmod rtl8xxxu

Failure to do so will result in the following USB error:

thread 'main' panicked at 'Unable to open SDR device!: Usb(Busy)'

The example is thoroughly documented to clearly show how to use this library, and hopefully make the FM demodulation process understandable too!

Build Options

This library includes the RTL-SDR Blog modifications to the original Osmocom library as a feature. Enable it in cargo with the --features rtl_sdr_blog flag.

Supported Tuners

  • Rafael Micro R820T

    • Common tuner found in RTL-SDR V3 and many DVB-T dongles
    • Frequency range: 24 - 1766 MHz
  • Rafael Micro R828D

    • Found in RTL-SDR Blog V4
    • Frequency range: 24 - 1766 MHz
    • Automatically detects RTL-SDR Blog V4 hardware via USB strings
    • Blog V4 features:
      • 28.8 MHz upconverter support with automatic frequency translation
      • Automatic input switching for HF/VHF/UHF bands
      • Notch filter control based on frequency

Contributing

Contributions to this project are welcome! Check out the Issues page to see what's on the roadmap that you could help with, or open a new Issue.

Acknowledgments

This library originated as a port of the Osmocom rtl-sdr library, with modifications from the RTL-SDR Blog fork.

About

RTL-SDR library written in Rust

Topics

Resources

License

Stars

Watchers

Forks

Contributors 7

Languages