common/i2c: make thread safe (#29706)

Co-authored-by: Comma Device <device@comma.ai>
old-commit-hash: 6333ff94e7
This commit is contained in:
Adeeb Shihadeh 2023-08-29 18:34:30 -07:00 committed by GitHub
parent debd00f9e5
commit 92014fc125
2 changed files with 9 additions and 1 deletions

View File

@ -31,10 +31,14 @@ I2CBus::I2CBus(uint8_t bus_id) {
}
I2CBus::~I2CBus() {
if (i2c_fd >= 0) { close(i2c_fd); }
if (i2c_fd >= 0) {
close(i2c_fd);
}
}
int I2CBus::read_register(uint8_t device_address, uint register_address, uint8_t *buffer, uint8_t len) {
std::lock_guard lk(m);
int ret = 0;
ret = HANDLE_EINTR(ioctl(i2c_fd, I2C_SLAVE, device_address));
@ -48,6 +52,8 @@ fail:
}
int I2CBus::set_register(uint8_t device_address, uint register_address, uint8_t data) {
std::lock_guard lk(m);
int ret = 0;
ret = HANDLE_EINTR(ioctl(i2c_fd, I2C_SLAVE, device_address));

View File

@ -1,12 +1,14 @@
#pragma once
#include <cstdint>
#include <mutex>
#include <sys/types.h>
class I2CBus {
private:
int i2c_fd;
std::mutex m;
public:
I2CBus(uint8_t bus_id);