1use core::I2CDevice;
9use std::io;
10
11pub type I2CResult<T> = io::Result<T>;
12
13pub struct I2CRegisterMap {
14 registers: [u8; 0xFF],
15 offset: usize,
16}
17
18impl I2CRegisterMap {
19 pub fn new() -> I2CRegisterMap {
20 I2CRegisterMap {
21 registers: [0x00; 0xFF],
22 offset: 0,
23 }
24 }
25
26 pub fn write_regs(&mut self, offset: usize, data: &[u8]) {
27 println!("WRITE | 0x{:X} : {:?}", offset, data);
28 for i in 0..data.len() {
29 self.registers[offset + i] = data[i];
30 }
31 }
32}
33
34impl I2CRegisterMap {
35 fn read(&mut self, data: &mut [u8]) -> I2CResult<()> {
37 for i in 0..data.len() {
38 data[i] = self.registers[self.offset];
39 self.offset += 1;
40 }
41 println!("READ | 0x{:X} : {:?}", self.offset - data.len(), data);
42 Ok(())
43 }
44
45 fn write(&mut self, data: &[u8]) -> I2CResult<()> {
47 let offset = data[0] as usize;
50 let remdata = &data[1..];
51 self.write_regs(offset, remdata);
52 self.offset = offset + remdata.len();
53 Ok(())
54 }
55}
56
57pub struct MockI2CDevice {
58 pub regmap: I2CRegisterMap,
59}
60
61
62impl MockI2CDevice {
63 pub fn new() -> MockI2CDevice {
64 MockI2CDevice { regmap: I2CRegisterMap::new() }
65 }
66}
67
68impl I2CDevice for MockI2CDevice {
69 type Error = io::Error;
70
71 fn read(&mut self, data: &mut [u8]) -> I2CResult<()> {
72 self.regmap.read(data)
73 }
74
75 fn write(&mut self, data: &[u8]) -> I2CResult<()> {
76 self.regmap.write(data)
77 }
78
79 fn smbus_write_quick(&mut self, _bit: bool) -> I2CResult<()> {
80 unimplemented!()
81 }
82
83 fn smbus_read_block_data(&mut self, _register: u8) -> I2CResult<Vec<u8>> {
84 unimplemented!()
85 }
86
87 fn smbus_write_block_data(&mut self, _register: u8, _values: &[u8]) -> I2CResult<()> {
88 unimplemented!()
89 }
90
91 fn smbus_process_block(&mut self, _register: u8, _values: &[u8]) -> I2CResult<Vec<u8>> {
92 unimplemented!()
93 }
94
95 fn smbus_read_i2c_block_data(&mut self, _register: u8, _len: u8) -> I2CResult<Vec<u8>> {
96 unimplemented!()
97 }
98
99 fn smbus_write_i2c_block_data(&mut self, _register: u8, _values: &[u8]) -> I2CResult<()> {
100 unimplemented!()
101 }
102}