From 6419d9db8b7e5eb29ccc92ac58a7288c91b74bad Mon Sep 17 00:00:00 2001 From: Yuval Adam <_@yuv.al> Date: Sun, 18 Apr 2021 17:57:21 +0300 Subject: Fix tuner init --- src/lib.rs | 6 ++++-- src/usb.rs | 39 ++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 06af1c2..9804243 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -32,11 +32,11 @@ impl RtlSdr { let vid = desc.vendor_id(); let pid = desc.product_id(); - trace!("Found USB device with vid {} and pid {}", vid, pid); + trace!("Found USB device {{{:04x}:{:04x}}}", vid, pid); for kd in KNOWN_DEVICES.iter() { if kd.0 == vid && kd.1 == pid { - info!("Found device {} {{{:04x}:{:04x}}}", kd.2, vid, pid); + info!("Found RTL-SDR device {} {{{:04x}:{:04x}}}", kd.2, vid, pid); let usb_handle = dev.open().unwrap(); let mut handle = RtlSdrDeviceHandle::new(usb_handle, INTERFACE_ID); // let kernel_driver_attached = handle.detach_kernel_driver(); @@ -49,6 +49,8 @@ impl RtlSdr { handle.init_baseband(); handle.set_i2c_repeater(true); + handle.init_tuner(); + return Some(handle); } } diff --git a/src/usb.rs b/src/usb.rs index 19d34cc..ccddf79 100644 --- a/src/usb.rs +++ b/src/usb.rs @@ -56,44 +56,41 @@ impl RtlSdrDeviceHandle { kernel_driver_active: false, }; - handle.tuner = Self::open_tuner(&handle); - handle.detach_kernel_driver(); handle } - fn open_tuner(handle: &RtlSdrDeviceHandle) -> Option> { - let tuner_id = match Self::search_tuner(&handle) { + pub fn init_tuner(&mut self) { + let tuner_id: &str = match self.search_tuner() { Some(tid) => { - info!("Got tuner ID {}", tid); + trace!("Found tuner ID {}", tid); tid } - None => { - error!("Could not find a value tuner, aborting."); - return None; - } + None => "", }; let tuner: Option> = match tuner_id { - r820t::TUNER_ID => Some(Box::new(r820t::R820T::new(&handle))), - fc0013::TUNER_ID => Some(Box::new(fc0013::FC0013::new(&handle))), + r820t::TUNER_ID => Some(Box::new(r820t::R820T::new(&self))), + fc0013::TUNER_ID => Some(Box::new(fc0013::FC0013::new(&self))), _ => { - error!("Could not find any valid tuner, aborting."); - return None; + error!("Could not find any valid tuner."); + None } }; - // info!("Found tuner {}", self.tuner.unwrap().display()); - return tuner; + self.tuner = tuner; + + info!("Found tuner {}", self.tuner.as_ref().unwrap().display()); } /// Probe all known tuners at their I2C addresses /// and search for expected return values - fn search_tuner(handle: &RtlSdrDeviceHandle) -> Option<&str> { + fn search_tuner(&self) -> Option<&str> { for tuner_info in KNOWN_TUNERS.iter() { - let regval = handle.i2c_read_reg(tuner_info.i2c_addr, tuner_info.check_addr); + let regval = self.i2c_read_reg(tuner_info.i2c_addr, tuner_info.check_addr); trace!( - "Probing I2C address {:#02x} checking address {:#02x}", + "Probing tuner {} at I2C address {:#02x} and checking address {:#02x}", + tuner_info.name, tuner_info.i2c_addr, tuner_info.check_addr, ); @@ -108,8 +105,8 @@ impl RtlSdrDeviceHandle { return Some(tuner_info.id); } } - Err(_) => { - warn!("Reading failed, continuing"); + Err(e) => { + warn!("Reading failed with {}, continuing", e); } }; } @@ -226,7 +223,7 @@ impl RtlSdrDeviceHandle { self.read_array(BLOCK_IICB, addr, &mut data, 1); Ok(data[0]) } - Err(_) => Err("Error"), + Err(_) => Err("I2C read error"), } } -- cgit v1.3.1