diff options
Diffstat (limited to 'src/tuners')
| -rw-r--r-- | src/tuners/fc0013.rs | 56 | ||||
| -rw-r--r-- | src/tuners/mod.rs | 20 | ||||
| -rw-r--r-- | src/tuners/r820t.rs | 73 |
3 files changed, 149 insertions, 0 deletions
diff --git a/src/tuners/fc0013.rs b/src/tuners/fc0013.rs new file mode 100644 index 0000000..9eb03f4 --- /dev/null +++ b/src/tuners/fc0013.rs @@ -0,0 +1,56 @@ +use super::{Tuner, TunerInfo}; +use usb::RtlSdrDeviceHandle; + +pub struct FC0013<'a> { + pub device: TunerInfo, + pub handle: &'a RtlSdrDeviceHandle, +} + +pub const TUNER_ID: &str = "fc0013"; + +pub const TUNER_INFO: TunerInfo = TunerInfo { + id: TUNER_ID, + name: "Fitipower FC0013", + i2c_addr: 0xc6, + check_addr: 0x00, + check_val: 0xa3, +}; + +impl<'a> FC0013<'a> { + pub fn new(handle: &'a RtlSdrDeviceHandle) -> FC0013<'a> { + FC0013 { + device: TUNER_INFO, + handle: handle, + } + } +} + +impl<'a> Tuner for FC0013<'a> { + fn init(&self) { + println!("Init {}", self.device.name); + } + + fn exit(&self) { + unimplemented!() + } + + fn set_freq(&self, _freq: u32) { + unimplemented!() + } + + fn set_bw(&self, _bw: u32) { + unimplemented!() + } + + fn set_gain(&self, _gain: u32) { + unimplemented!() + } + + fn set_if_gain(&self, _if_gain: u32) { + unimplemented!() + } + + fn set_gain_mode(&self, _mode: bool) { + unimplemented!() + } +} diff --git a/src/tuners/mod.rs b/src/tuners/mod.rs new file mode 100644 index 0000000..cbd7edf --- /dev/null +++ b/src/tuners/mod.rs @@ -0,0 +1,20 @@ +pub mod fc0013; +pub mod r820t; + +pub struct TunerInfo { + pub id: &'static str, + pub name: &'static str, + pub i2c_addr: u8, + pub check_addr: u8, + pub check_val: u8, +} + +pub trait Tuner { + fn init(&self); + fn exit(&self); + fn set_freq(&self, freq: u32); + fn set_bw(&self, bw: u32); + fn set_gain(&self, gain: u32); + fn set_if_gain(&self, if_gain: u32); + fn set_gain_mode(&self, mode: bool); +} diff --git a/src/tuners/r820t.rs b/src/tuners/r820t.rs new file mode 100644 index 0000000..2638917 --- /dev/null +++ b/src/tuners/r820t.rs @@ -0,0 +1,73 @@ +use super::{Tuner, TunerInfo}; +use usb::RtlSdrDeviceHandle; + +const R82XX_IF_FREQ: u32 = 3570000; + +pub struct R820T<'a> { + pub device: TunerInfo, + pub handle: &'a RtlSdrDeviceHandle, +} + +pub const TUNER_ID: &str = "r820t"; + +pub const TUNER_INFO: TunerInfo = TunerInfo { + id: TUNER_ID, + name: "Rafael Micro R820T", + i2c_addr: 0x34, + check_addr: 0x00, + check_val: 0x69, +}; + +impl<'a> R820T<'a> { + pub fn new(handle: &'a RtlSdrDeviceHandle) -> R820T<'a> { + R820T { + device: TUNER_INFO, + handle: handle, + } + } +} + +impl<'a> Drop for R820T<'a> { + fn drop(&mut self) { + self.exit(); + } +} + +impl<'a> Tuner for R820T<'a> { + fn init(&self) { + // disable Zero-IF mode + self.handle.demod_write_reg(1, 0xb1, 0x1a, 1); + + // only enable In-phase ADC input + self.handle.demod_write_reg(0, 0x08, 0x4d, 1); + + // the R82XX use 3.57 MHz IF for the DVB-T 6 MHz mode, and + // 4.57 MHz for the 8 MHz mode + self.handle.set_if_freq(R82XX_IF_FREQ); + + // enable spectrum inversion + self.handle.demod_write_reg(1, 0x15, 0x01, 1); + } + + fn exit(&self) {} + + fn set_freq(&self, _freq: u32) { + unimplemented!() + } + + fn set_bw(&self, _bw: u32) { + unimplemented!() + } + + fn set_gain(&self, _gain: u32) { + unimplemented!() + } + + fn set_if_gain(&self, _if_gain: u32) { + unimplemented!() + } + + fn set_gain_mode(&self, _mode: bool) { + unimplemented!() + } +} |
