summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2021-04-16 17:43:32 +0300
committerYuval Adam <_@yuv.al>2021-04-17 10:33:57 +0300
commitcc3a300afcba8fffaee5feb5f56792cfd697bf28 (patch)
treee73c759cc54ba3f59dcd5f765f03cb0f2163d5c6
parent01824ebaa3096d40a962b921ed239241f92e1076 (diff)
Dynamic dispatch of tuner
-rw-r--r--src/devices/fc0013.rs22
-rw-r--r--src/devices/r820t.rs4
-rw-r--r--src/lib.rs6
3 files changed, 19 insertions, 13 deletions
diff --git a/src/devices/fc0013.rs b/src/devices/fc0013.rs
index 7c64758..9eb03f4 100644
--- a/src/devices/fc0013.rs
+++ b/src/devices/fc0013.rs
@@ -1,27 +1,31 @@
use super::{Tuner, TunerInfo};
+use usb::RtlSdrDeviceHandle;
-#[allow(dead_code)]
-pub struct FC0013 {
+pub struct FC0013<'a> {
pub device: TunerInfo,
+ pub handle: &'a RtlSdrDeviceHandle,
}
-#[allow(dead_code)]
+pub const TUNER_ID: &str = "fc0013";
+
pub const TUNER_INFO: TunerInfo = TunerInfo {
- id: "fc0013",
+ id: TUNER_ID,
name: "Fitipower FC0013",
i2c_addr: 0xc6,
check_addr: 0x00,
check_val: 0xa3,
};
-#[allow(dead_code)]
-impl FC0013 {
- pub fn new() -> FC0013 {
- FC0013 { device: TUNER_INFO }
+impl<'a> FC0013<'a> {
+ pub fn new(handle: &'a RtlSdrDeviceHandle) -> FC0013<'a> {
+ FC0013 {
+ device: TUNER_INFO,
+ handle: handle,
+ }
}
}
-impl Tuner for FC0013 {
+impl<'a> Tuner for FC0013<'a> {
fn init(&self) {
println!("Init {}", self.device.name);
}
diff --git a/src/devices/r820t.rs b/src/devices/r820t.rs
index ad4720d..ec0f173 100644
--- a/src/devices/r820t.rs
+++ b/src/devices/r820t.rs
@@ -8,8 +8,10 @@ pub struct R820T<'a> {
pub handle: &'a RtlSdrDeviceHandle,
}
+pub const TUNER_ID: &str = "r820t";
+
pub const TUNER_INFO: TunerInfo = TunerInfo {
- id: "r820t",
+ id: TUNER_ID,
name: "Rafael Micro R820T",
i2c_addr: 0x34,
check_addr: 0x00,
diff --git a/src/lib.rs b/src/lib.rs
index b3c2a05..d068e57 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -51,9 +51,10 @@ impl RtlSdr {
handle.init_baseband();
handle.set_i2c_repeater(true);
- let tuner = match self.search_tuner(&handle) {
+ let tuner: Box<dyn Tuner> = match self.search_tuner(&handle) {
Some(tuner) => match tuner {
- "r820t" => Some(r820t::R820T::new(&handle)),
+ r820t::TUNER_ID => Box::new(r820t::R820T::new(&handle)),
+ fc0013::TUNER_ID => Box::new(fc0013::FC0013::new(&handle)),
_ => {
println!("No valid tuner found");
return;
@@ -65,7 +66,6 @@ impl RtlSdr {
}
};
- let tuner = tuner.unwrap();
tuner.init();
// handle.deinit_baseband();