summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2021-04-23 15:22:59 +0300
committerYuval Adam <_@yuv.al>2021-04-23 15:22:59 +0300
commit75e330a0bdac57523550ac9fe1aa7ea8aa0e5def (patch)
tree49c96ff4d34a1c9d380dc92cb43bec4054686d7e
parent7641e0d8e75ac5de285935311e27c4529e69e154 (diff)
Cleanup I2C write functions
-rw-r--r--src/tuners/r820t.rs5
-rw-r--r--src/usb.rs23
2 files changed, 18 insertions, 10 deletions
diff --git a/src/tuners/r820t.rs b/src/tuners/r820t.rs
index 1cd3d0e..eb9bea0 100644
--- a/src/tuners/r820t.rs
+++ b/src/tuners/r820t.rs
@@ -172,6 +172,11 @@ impl R820T {
];
(lut[byte & 0xf] << 4) | lut[byte >> 4]
}
+
+ fn read(&self, reg: u8, val: u8, len: usize) {
+ let p: u8 = self.buf[1];
+ self.buf[0] = reg;
+ }
}
impl Drop for R820T {
diff --git a/src/usb.rs b/src/usb.rs
index 639caf7..f4fefe6 100644
--- a/src/usb.rs
+++ b/src/usb.rs
@@ -190,7 +190,7 @@ impl RtlSdrDeviceHandle {
self.demod_read_reg(0x0a, 0x01, 1)
}
- pub fn read_array(&self, block: u8, addr: u16, arr: &mut [u8], _len: u8) -> usize {
+ pub fn read_array(&self, block: u8, addr: u16, arr: &mut [u8]) -> usize {
let type_vendor_in =
rusb::request_type(Direction::In, RequestType::Vendor, Recipient::Device);
let index: u16 = (block as u16) << 8;
@@ -199,13 +199,7 @@ impl RtlSdrDeviceHandle {
.unwrap()
}
- pub fn write_array(
- &self,
- block: u8,
- addr: u16,
- arr: &[u8],
- _len: u8,
- ) -> Result<usize, rusb::Error> {
+ pub fn write_array(&self, block: u8, addr: u16, arr: &[u8]) -> Result<usize, rusb::Error> {
let type_vendor_out =
rusb::request_type(Direction::Out, RequestType::Vendor, Recipient::Device);
let index: u16 = ((block as u16) << 8) | 0x10;
@@ -218,15 +212,24 @@ impl RtlSdrDeviceHandle {
let reg: [u8; 1] = [reg];
let mut data: [u8; 1] = [0];
- match self.write_array(BLOCK_IICB, addr, &reg, 1) {
+ match self.write_array(BLOCK_IICB, addr, &reg) {
Ok(_res) => {
- self.read_array(BLOCK_IICB, addr, &mut data, 1);
+ self.read_array(BLOCK_IICB, addr, &mut data);
Ok(data[0])
}
Err(_) => Err("I2C read error"),
}
}
+ pub fn i2c_write(&self, i2c_addr: u8, buf: &[u8], len: usize) {
+ self.write_array(BLOCK_IICB, i2c_addr as u16, buf);
+ }
+
+ pub fn i2c_write_reg(&self, i2c_addr: u8, reg: u8, val: u8) {
+ let data: [u8; 2] = [reg, val];
+ self.write_array(BLOCK_IICB, i2c_addr as u16, &data);
+ }
+
pub fn set_i2c_repeater(&self, on: bool) {
let val = match on {
true => 0x18,