diff options
| author | Yuval Adam <_@yuv.al> | 2021-04-16 15:05:22 +0300 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2021-04-17 10:33:57 +0300 |
| commit | ef64d358a25e69e440305e1216824921536d5587 (patch) | |
| tree | 4fccfa6d8655aff2259cbb37aec5f52c95b398e3 /src/lib.rs | |
| parent | 43e56d7e4c5ce653a52a678a14411125d682b7e6 (diff) | |
Initial rusb version that actually compiles!
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 89 |
1 files changed, 39 insertions, 50 deletions
@@ -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); } } |
