diff options
| author | Yuval Adam <_@yuv.al> | 2021-04-18 10:09:43 +0300 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2021-04-18 10:09:43 +0300 |
| commit | 4965dfdb43111d002c262c4de3011359e41bd2c3 (patch) | |
| tree | 3da7f36b3a698805eb8d05b95d88f93877a41bec | |
| parent | 23dd9ed9eede40d033c22645fdc3eec310901b9b (diff) | |
Handle refactoring WIP
| -rw-r--r-- | src/lib.rs | 20 | ||||
| -rw-r--r-- | src/usb.rs | 18 | ||||
| -rw-r--r-- | src/utils/rustl_test.rs | 15 |
3 files changed, 38 insertions, 15 deletions
@@ -19,19 +19,18 @@ const KNOWN_DEVICES: [(u16, u16, &str); 2] = [ const KNOWN_TUNERS: [TunerInfo; 2] = [r820t::TUNER_INFO, fc0013::TUNER_INFO]; pub struct RtlSdr { - // ctx: rusb::Context, - // device: UsbDevice, iface_id: u8, tuner: Option<Box<dyn Tuner>>, + handle: Option<RtlSdrDeviceHandle>, } impl RtlSdr { pub fn new() -> RtlSdr { pretty_env_logger::init(); RtlSdr { - // ctx: rusb::Context::new().unwrap(), iface_id: INTERFACE_ID, tuner: None, + handle: None, } } @@ -49,6 +48,7 @@ impl RtlSdr { info!("Found device {} {{{:04x}:{:04x}}}", kd.2, vid, pid); let usb_handle = dev.open().unwrap(); let mut handle = RtlSdrDeviceHandle::new(usb_handle, self.iface_id); + self.handle = Some(handle); // let kernel_driver_attached = handle.detach_kernel_driver(); let _iface = handle.claim_interface(); @@ -117,7 +117,19 @@ impl RtlSdr { } pub fn set_sample_rate(&self, samp_rate: u32) { - self.handle.set_sample_rate(samp_rate); + self.handle.unwrap().set_sample_rate(samp_rate); + } + + pub fn set_test_mode(&self, on: bool) { + let val = match on { + true => 0x03, + false => 0x05, + }; + self.handle.unwrap().demod_write_reg(0, 0x19, val, 1); + } + + pub fn reset_buffer(&self) { + self.handle.unwrap().reset_buffer(); } } @@ -4,6 +4,7 @@ extern crate rusb; use log::{error, info}; use rusb::{DeviceHandle, Direction, GlobalContext, Recipient, RequestType}; +use std::convert::TryInto; use std::time::Duration; // const BLOCK_DEMODB: u16 = 0; @@ -269,23 +270,22 @@ impl RtlSdrDeviceHandle { info!("Exact sample rate is: {} Hz", real_rate); self.set_i2c_repeater(true); - self.tuner.set_bw(self.handle); + // self.tuner.set_bw(self.handle); self.set_i2c_repeater(false); - let mut tmp: u16 = rsamp_ratio >> 16; - self.handle.demod_write_reg(1, 0x9f, tmp, 2); - tmp = rsamp_ratio & 0xffff; - self.handle.demod_write_reg(1, 0xa1, tmp, 2); + let mut tmp: u16 = (rsamp_ratio >> 16).try_into().unwrap(); + self.demod_write_reg(1, 0x9f, tmp, 2); + tmp = (rsamp_ratio & 0xffff).try_into().unwrap(); + self.demod_write_reg(1, 0xa1, tmp, 2); // self.set_sample_freq_corr(); // reset demod (bit 3, soft_rst) - self.handle.demod_write_reg(1, 0x01, 0x14, 1); - self.handle.demod_write_reg(1, 0x01, 0x10, 1); - + self.demod_write_reg(1, 0x01, 0x14, 1); + self.demod_write_reg(1, 0x01, 0x10, 1); + // self.set_offset_tuning(); } - pub fn reset_buffer(&self) { self.write_reg(BLOCK_USBB, ADDR_USB_EPA_CTL, 0x1002, 2); self.write_reg(BLOCK_USBB, ADDR_USB_EPA_CTL, 0x0000, 2); diff --git a/src/utils/rustl_test.rs b/src/utils/rustl_test.rs index 7d6309f..e9a8bf7 100644 --- a/src/utils/rustl_test.rs +++ b/src/utils/rustl_test.rs @@ -1,9 +1,20 @@ -const _DEFAULT_SAMPLE_RATE: u32 = 2048000; +const DEFAULT_SAMPLE_RATE: u32 = 2048000; const DEFAULT_BUF_LENGTH: usize = 16 * 16384; pub fn main() { println!("Starting rustl_test"); - let _buffer: [u8; DEFAULT_BUF_LENGTH]; let mut r = rustl_sdr::RtlSdr::new(); r.open(); + r.set_sample_rate(DEFAULT_SAMPLE_RATE); + r.set_test_mode(true); + r.reset_buffer(); + println!("Reading buffers in sync mode"); + loop { + let samples = r.read_sync(DEFAULT_BUF_LENGTH); + println!( + "Expected {} samples and got {}", + DEFAULT_BUF_LENGTH, + samples.len() + ) + } } |
