- Show I2C device name in I2C Scanner app - Register various I2C devices from board implementations - Fix M5Stack Core2 power status - Fix pre-allocation issue in `hal::Device`
45 lines
1.2 KiB
C++
45 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#include "I2c.h"
|
|
#include "../Device.h"
|
|
|
|
namespace tt::hal::i2c {
|
|
|
|
/**
|
|
* Represents an I2C peripheral at a specific port and address.
|
|
* It helps to read and write registers.
|
|
*
|
|
* All read and write calls are thread-safe.
|
|
*/
|
|
class I2cDevice : public Device {
|
|
|
|
protected:
|
|
|
|
i2c_port_t port;
|
|
uint8_t address;
|
|
|
|
static constexpr TickType_t DEFAULT_TIMEOUT = 1000 / portTICK_PERIOD_MS;
|
|
|
|
bool readRegister8(uint8_t reg, uint8_t& result) const;
|
|
bool writeRegister8(uint8_t reg, uint8_t value) const;
|
|
bool readRegister12(uint8_t reg, float& out) const;
|
|
bool readRegister14(uint8_t reg, float& out) const;
|
|
bool readRegister16(uint8_t reg, uint16_t& out) const;
|
|
bool bitOn(uint8_t reg, uint8_t bitmask) const;
|
|
bool bitOff(uint8_t reg, uint8_t bitmask) const;
|
|
bool bitOnByIndex(uint8_t reg, uint8_t index) const { return bitOn(reg, 1 << index); }
|
|
bool bitOffByIndex(uint8_t reg, uint8_t index) const { return bitOff(reg, 1 << index); }
|
|
|
|
public:
|
|
|
|
explicit I2cDevice(i2c_port_t port, uint32_t address) : port(port), address(address) {}
|
|
|
|
Type getType() const override { return Type::I2c; }
|
|
|
|
i2c_port_t getPort() const { return port; }
|
|
|
|
uint8_t getAddress() const { return address; }
|
|
};
|
|
|
|
}
|