summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2021-04-18 17:57:21 +0300
committerYuval Adam <_@yuv.al>2021-04-18 17:57:38 +0300
commit6419d9db8b7e5eb29ccc92ac58a7288c91b74bad (patch)
treea1671211ab8d9c11de75ba58a070f7bedbea657b
parenta4fb29bee94d68b8956158f603b0366af98507e9 (diff)
Fix tuner init
-rw-r--r--src/lib.rs6
-rw-r--r--src/usb.rs39
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<Box<dyn Tuner>> {
- 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<Box<dyn Tuner>> = 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"),
}
}