## Launcher - Launcher now has optional power button to show - Launcher layout improvements - Removed text from Launcher (translations with larger amounts of text did not fit small device formats) ## T-Lora Pager - Implement power off (created `BQ25896` driver) - Implemented haptics (created `DRV2605` driver project) and buzz on startup - Reversed scroll wheel - Created `TloraEncoder` device and relocated its logic from `TloraKeyboard` - Disabled SPIRAM test to save 0.5 seconds of boot time (current boot time is very slow) - Update `ST7796` esp_lcd driver to v1.3.4 - Fixed keyboard bug: delete queue in destructor - Fixed driver dependencies: Avoiding usage of global static shared_ptr. Properly constructor-inject everywhere, or use `tt::hal::findDevices()` - I2C configuration is now immutable (you cannot disable it anymore from the I2C Settings app, as it would break crucial drivers) - Renamed I2C and UART subsystems to "Internal" ## Drivers - On/off interface added to `PowerDevice` - Created `tt::hal::Configuration.createDevices`, which is intended to replace all custom create calls for display, keyboard, etc. - Created `EncoderDevice` as a `Device` subtype ## Other Improvements - Changed `findDevices(type, function)` into a templatized function. - Improved SD card mounting ## Fixes - Show Screenshot app again - Fixed Statusbar: some updates were allowed to time out and fail silently: When the Statusbar service would do a state update, the LVGL statusbar would never get updated due to this timeout. - Fixed memory leaks in all `createSdCard()` functions (in most board implementations)
82 lines
2.4 KiB
C++
82 lines
2.4 KiB
C++
#include "Tactility/hal/i2c/I2cDevice.h"
|
|
|
|
#include <cstdint>
|
|
|
|
namespace tt::hal::i2c {
|
|
|
|
bool I2cDevice::read(uint8_t* data, size_t dataSize, TickType_t timeout) {
|
|
return masterRead(port, address, data, dataSize, timeout);
|
|
}
|
|
|
|
bool I2cDevice::write(const uint8_t* data, uint16_t dataSize, TickType_t timeout) {
|
|
return masterWrite(port, address, data, dataSize, timeout);
|
|
}
|
|
|
|
bool I2cDevice::writeRead(const uint8_t* writeData, size_t writeDataSize, uint8_t* readData, size_t readDataSize, TickType_t timeout) {
|
|
return masterWriteRead(port, address, writeData, writeDataSize, readData, readDataSize, timeout);
|
|
}
|
|
|
|
bool I2cDevice::writeRegister(uint8_t reg, const uint8_t* data, uint16_t dataSize, TickType_t timeout) {
|
|
return masterWriteRegister(port, address, reg, data, dataSize, timeout);
|
|
}
|
|
|
|
bool I2cDevice::readRegister12(uint8_t reg, float& out) const {
|
|
std::uint8_t data[2] = {0};
|
|
if (masterReadRegister(port, address, reg, data, 2, DEFAULT_TIMEOUT)) {
|
|
out = (data[0] & 0x0F) << 8 | data[1];
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool I2cDevice::readRegister14(uint8_t reg, float& out) const {
|
|
std::uint8_t data[2] = {0};
|
|
if (masterReadRegister(port, address, reg, data, 2, DEFAULT_TIMEOUT)) {
|
|
out = (data[0] & 0x3F) << 8 | data[1];
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool I2cDevice::readRegister16(uint8_t reg, uint16_t& out) const {
|
|
std::uint8_t data[2] = {0};
|
|
if (masterReadRegister(port, address, reg, data, 2, DEFAULT_TIMEOUT)) {
|
|
out = data[0] << 8 | data[1];
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool I2cDevice::readRegister8(uint8_t reg, uint8_t& result) const {
|
|
return masterWriteRead(port, address, ®, 1, &result, 1, DEFAULT_TIMEOUT);
|
|
}
|
|
|
|
bool I2cDevice::writeRegister8(uint8_t reg, uint8_t value) const {
|
|
return masterWriteRegister(port, address, reg, &value, 1, DEFAULT_TIMEOUT);
|
|
}
|
|
|
|
bool I2cDevice::bitOn(uint8_t reg, uint8_t bitmask) const {
|
|
uint8_t state;
|
|
if (readRegister8(reg, state)) {
|
|
state |= bitmask;
|
|
return writeRegister8(reg, state);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool I2cDevice::bitOff(uint8_t reg, uint8_t bitmask) const {
|
|
uint8_t state;
|
|
if (readRegister8(reg, state)) {
|
|
state &= ~bitmask;
|
|
return writeRegister8(reg, state);
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
} // namespace tt::hal::i2c
|