summaryrefslogtreecommitdiff
path: root/src/lib.rs
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2021-04-16 15:05:22 +0300
committerYuval Adam <_@yuv.al>2021-04-17 10:33:57 +0300
commitef64d358a25e69e440305e1216824921536d5587 (patch)
tree4fccfa6d8655aff2259cbb37aec5f52c95b398e3 /src/lib.rs
parent43e56d7e4c5ce653a52a678a14411125d682b7e6 (diff)
Initial rusb version that actually compiles!
Diffstat (limited to 'src/lib.rs')
-rw-r--r--src/lib.rs89
1 files changed, 39 insertions, 50 deletions
diff --git a/src/lib.rs b/src/lib.rs
index 7d10e13..d32299a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,82 +1,71 @@
-extern crate libusb;
+extern crate rusb;
mod devices;
mod usb;
use devices::*;
-use usb::Usb;
+use usb::RtlSdrDeviceHandle;
const INTERFACE_ID: u8 = 0;
const KNOWN_DEVICES: [(u16, u16, &str); 2] = [
(0x0bda, 0x2832, "Generic RTL2832U"),
- (0x0bda, 0x2838, "Generic RTL2832U OEM")
+ (0x0bda, 0x2838, "Generic RTL2832U OEM"),
];
-pub struct RtlSdr<'a> {
- ctx: &'a libusb::Context,
- iface_id: u8
+pub struct RtlSdr {
+ // ctx: rusb::Context,
+ // device: UsbDevice,
+ iface_id: u8,
}
-impl<'a> RtlSdr<'a> {
-
- pub fn new(ctx: &'a libusb::Context) -> RtlSdr<'a> {
+impl RtlSdr {
+ pub fn new() -> RtlSdr {
RtlSdr {
- ctx,
- iface_id: INTERFACE_ID
+ // ctx: rusb::Context::new().unwrap(),
+ iface_id: INTERFACE_ID,
}
}
pub fn open(&mut self) {
- for dev in self.ctx.devices().unwrap().iter() {
+ for dev in rusb::devices().unwrap().iter() {
let desc = dev.device_descriptor().unwrap();
let vid = desc.vendor_id();
let pid = desc.product_id();
for kd in KNOWN_DEVICES.iter() {
if kd.0 == vid && kd.1 == pid {
- let mut handle = dev.open().unwrap();
+ let usb_handle = dev.open().unwrap();
+ let mut handle = RtlSdrDeviceHandle::new(usb_handle, self.iface_id);
+ let kernel_driver_attached = handle.detach_kernel_driver();
- let has_kernel_driver = match handle.kernel_driver_active(self.iface_id) {
- Ok(true) => {
- handle.detach_kernel_driver(self.iface_id).ok();
- true
- },
- _ => false
- };
+ let _iface = handle.claim_interface();
- let _iface = handle.claim_interface(self.iface_id).unwrap();
+ handle.test_write();
+ // reset device if write didn't succeed
- {
- let usb = Usb::new(&handle);
+ handle.init_baseband();
+ handle.set_i2c_repeater(true);
- usb.test_write();
- // reset device if write didn't succeed
+ let d = r820t::R820T::new(handle);
+ // let _found = match handle.i2c_read_reg(d.device.i2c_addr, d.device.check_addr) {
+ // Ok(reg) => {
+ // if reg == d.device.check_val {
+ // println!("Found {} tuner\n", d.device.name);
+ // true
+ // } else {
+ // false
+ // }
+ // }
+ // Err(_) => false,
+ // };
- usb.init_baseband();
- usb.set_i2c_repeater( true);
+ d.init();
- let d = r820t::R820T::new(&usb);
- let _found = match usb.i2c_read_reg(d.device.i2c_addr, d.device.check_addr) {
- Ok(reg) => {
- if reg == d.device.check_val {
- println!("Found {} tuner\n", d.device.name);
- true
- }
- else {
- false
- }
- },
- Err(_) => false
- };
+ // handle.deinit_baseband();
- d.init();
-
- usb.deinit_baseband();
- }
-
- if has_kernel_driver {
- handle.attach_kernel_driver(self.iface_id).ok();
+ if kernel_driver_attached {
+ // handle.attach_kernel_driver();
}
}
}
@@ -90,8 +79,8 @@ mod tests {
#[test]
fn test_init() {
- let ctx = libusb::Context::new().unwrap();
- let mut rtlsdr = RtlSdr::new(&ctx);
- rtlsdr.open();
+ let mut rtlsdr = RtlSdr::new();
+ let x = rtlsdr.open();
+ assert_eq!(x, 1);
}
}