common/i2c: make thread safe (#29706)

Co-authored-by: Comma Device <device@comma.ai>
old-commit-hash: 6333ff94e7
beeps
Adeeb Shihadeh 2 years ago committed by GitHub
parent debd00f9e5
commit 92014fc125
  1. 8
      common/i2c.cc
  2. 2
      common/i2c.h

@ -31,10 +31,14 @@ I2CBus::I2CBus(uint8_t bus_id) {
} }
I2CBus::~I2CBus() { 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) { 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; int ret = 0;
ret = HANDLE_EINTR(ioctl(i2c_fd, I2C_SLAVE, device_address)); 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) { int I2CBus::set_register(uint8_t device_address, uint register_address, uint8_t data) {
std::lock_guard lk(m);
int ret = 0; int ret = 0;
ret = HANDLE_EINTR(ioctl(i2c_fd, I2C_SLAVE, device_address)); ret = HANDLE_EINTR(ioctl(i2c_fd, I2C_SLAVE, device_address));

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

Loading…
Cancel
Save