summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md2
-rw-r--r--src/lib.rs51
-rw-r--r--src/main.rs4
3 files changed, 33 insertions, 24 deletions
diff --git a/README.md b/README.md
index 621fa5a..1a0ee4c 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,8 @@ $ cargo build
$ cargo test
```
+Since there isn't (?) any good USB device mocking setup, for tests to pass an RTL-SDR device must be connected.
+
## License
[GPLv3](LICENSE)
diff --git a/src/lib.rs b/src/lib.rs
index 268c0bd..0030a71 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,48 +1,55 @@
extern crate libusb;
-pub struct Dongle {
- vendor: u16,
- product: u16,
- name: &'static str
-}
+const KNOWN_DEVICES: [(u16, u16, &str); 2] = [
+ (0x0bda, 0x2832, "Generic RTL2832U"),
+ (0x0bda, 0x2838, "Generic RTL2832U OEM")
+];
pub struct RtlSdr {
- usb_ctx: libusb::Context
+ usb_ctx: libusb::Context,
+ usb_dd: Option<libusb::DeviceDescriptor>
}
impl RtlSdr {
+
pub fn new() -> RtlSdr {
let usb_ctx = libusb::Context::new().unwrap();
+ let usb_dd = None;
RtlSdr {
- usb_ctx
+ usb_ctx,
+ usb_dd
}
}
- pub fn find(&self) {
+ pub fn init(&mut self) {
+ self.usb_dd = self.find_device();
+ }
+
+ pub fn find_device(&self) -> Option<libusb::DeviceDescriptor> {
for mut dev in self.usb_ctx.devices().unwrap().iter() {
let desc = dev.device_descriptor().unwrap();
- println!("Bus {:03} Device {:03} ID {:04x}:{:04x}",
- dev.bus_number(),
- dev.address(),
- desc.vendor_id(),
- desc.product_id());
+ let vid = desc.vendor_id();
+ let pid = desc.product_id();
+
+ for kd in KNOWN_DEVICES.iter() {
+ if kd.0 == vid && kd.1 == pid {
+ return Some(desc)
+ }
+ }
}
+ None
}
}
-
-
#[cfg(test)]
mod tests {
use super::*;
#[test]
- fn dongle() {
- let _dongle = Dongle {
- vendor: 0x1234,
- product: 0x5678,
- name: "Test"
- };
- assert!(_dongle.name == "Test");
+ fn test_init() {
+ let mut rtlsdr = RtlSdr::new();
+ assert!(rtlsdr.usb_dd.is_none());
+ rtlsdr.init();
+ assert!(rtlsdr.usb_dd.is_some());
}
}
diff --git a/src/main.rs b/src/main.rs
index ce80d1b..e1dfc5d 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -6,6 +6,6 @@ use lib::RtlSdr;
fn main() {
println!("Running");
- let rtlsdr = RtlSdr::new();
- rtlsdr.find();
+ let mut rtlsdr = RtlSdr::new();
+ rtlsdr.init();
}