Skip to content

Latest commit

 

History

History
81 lines (59 loc) · 2.01 KB

File metadata and controls

81 lines (59 loc) · 2.01 KB

Dverf

Powerful SDR toolkit designed in pure Rust for HackRF One

Supported and tested devices

Examples

Open device

Open usb device as you like with nusb crate

use nusb::{list_devices, MaybeFuture};
use dverf::{Device, VENDOR_ID};

fn open() -> anyhow::Result<Device> {
	let device_info = list_devices()
		.wait()?
		.find(|dev| dev.vendor_id() == VENDOR_ID && dev.product_id() == 0x6089)
		.context("device not connected")?;

	let device = device_info.open().wait().context("failed to open device")?;
	let interface = device.claim_interface(0).wait()?;

	let ep = Endpoints::open(interface, 512 * 512, 4)?;
	let device = Device::new(ep);

  Ok(device)
}

Tune

Identical interface to libhackrf

device.set_freq(2412, 0).await?;
device.set_sample_rate(200_000_000, 10).await?;
device.set_baseband_filter_bandwidth(15_000_000).await?;
device.set_lna_gain(40).await?;
device.set_vga_gain(8).await?;
device.set_transceiver_mode(TransceiverMode::Receive).await?;

Receive

/// Put the device into receive mode
device.set_transceiver_mode(TransceiverMode::Receive).await?;
/// Allocate buffer
let mut buf = vec![Sample::default(), 512 * 256];
/// Get rx-half and receive requested amount of samples into the buffer
device.rx().read_exact(&mut buf)?;

Transmit

/// Put the device into transmit mode
device.set_transceiver_mode(TransceiverMode::Transmit).await?;
// Get tx-half
let tx = device.tx();
// Feed chunks
for chunk in samples_iter {
  tx.write_all(chunk).await?;
}
// Flush when you finish transmitting
tx.flush().await?;

License

Licensed under either of

at your option.