(&self, reg: ControlRegisters, data: &[u8])
| 247 | } |
| 248 | |
| 249 | fn ccgx_write(&self, reg: ControlRegisters, data: &[u8]) -> EcResult<()> { |
| 250 | let addr = reg as u16; |
| 251 | trace!( |
| 252 | "ccgx_write(reg: {:?}, addr: {}, data.len(): {}", |
| 253 | reg, |
| 254 | addr, |
| 255 | data.len() |
| 256 | ); |
| 257 | let mut data_written = 0; |
| 258 | |
| 259 | while data_written < data.len() { |
| 260 | let chunk_len = std::cmp::min(MAX_I2C_CHUNK, data.len()); |
| 261 | let buffer = &data[data_written..data_written + chunk_len]; |
| 262 | let offset = addr + data_written as u16; |
| 263 | |
| 264 | let i2c_response = self.i2c_write(offset, buffer)?; |
| 265 | if let Err(EcError::DeviceError(err)) = i2c_response.is_successful() { |
| 266 | return Err(EcError::DeviceError(format!( |
| 267 | "I2C write was not successful: {:?}", |
| 268 | err |
| 269 | ))); |
| 270 | } |
| 271 | |
| 272 | data_written += chunk_len; |
| 273 | } |
| 274 | |
| 275 | Ok(()) |
| 276 | } |
| 277 | |
| 278 | pub fn get_silicon_id(&self) -> EcResult<u16> { |
| 279 | let data = self.ccgx_read(ControlRegisters::SiliconId, 2)?; |
no test coverage detected