diff options
| author | Yuval Adam <_@yuv.al> | 2021-04-23 15:22:59 +0300 |
|---|---|---|
| committer | Yuval Adam <_@yuv.al> | 2021-04-23 15:22:59 +0300 |
| commit | 75e330a0bdac57523550ac9fe1aa7ea8aa0e5def (patch) | |
| tree | 49c96ff4d34a1c9d380dc92cb43bec4054686d7e | |
| parent | 7641e0d8e75ac5de285935311e27c4529e69e154 (diff) | |
Cleanup I2C write functions
| -rw-r--r-- | src/tuners/r820t.rs | 5 | ||||
| -rw-r--r-- | src/usb.rs | 23 |
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 { @@ -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, ®, 1) { + match self.write_array(BLOCK_IICB, addr, ®) { 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, |
