tof_control/device/
pca9548a.rs

1use 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}