tof_control/device/
pca9548a.rs1use i2cdev::core::*;
2use i2cdev::linux::{LinuxI2CDevice, LinuxI2CError};
3
4pub struct PCA9548A {
5 bus: u8,
6 address: u16,
7}
8
9impl PCA9548A {
10 pub fn new(bus: u8, address: u16) -> Self {
11 Self { bus, address }
12 }
13 pub fn select(&self, channel: u8) -> Result<(), LinuxI2CError> {
14 let mut dev = LinuxI2CDevice::new(&format!("/dev/i2c-{}", self.bus), self.address)?;
15
16 dev.smbus_write_byte_data(
17 0x00,
18 match channel {
19 0 => 0x01,
20 1 => 0x02,
21 2 => 0x04,
22 3 => 0x08,
23 4 => 0x10,
24 5 => 0x20,
25 6 => 0x40,
26 7 => 0x80,
27 _ => 0x00,
28 },
29 )
30 }
31 pub fn reset(&self) -> Result<(), LinuxI2CError> {
32 let mut dev = LinuxI2CDevice::new(&format!("/dev/i2c-{}", self.bus), self.address)?;
33
34 dev.smbus_write_byte_data(0x00, 0x00)
35 }
36}