mirror of
https://github.com/ByteWelder/Tactility.git
synced 2026-02-18 19:03:16 +00:00
Add I2C register8 functions
This commit is contained in:
parent
3a24d058c9
commit
b7a2503a21
@ -237,7 +237,7 @@ static error_t stop(Device* device) {
|
|||||||
return ERROR_NONE;
|
return ERROR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
const static I2cControllerApi esp32_i2c_api = {
|
static constexpr I2cControllerApi ESP32_I2C_API = {
|
||||||
.read = read,
|
.read = read,
|
||||||
.write = write,
|
.write = write,
|
||||||
.write_read = write_read,
|
.write_read = write_read,
|
||||||
@ -245,14 +245,14 @@ const static I2cControllerApi esp32_i2c_api = {
|
|||||||
.write_register = write_register
|
.write_register = write_register
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct Module platform_module;
|
extern Module platform_module;
|
||||||
|
|
||||||
Driver esp32_i2c_driver = {
|
Driver esp32_i2c_driver = {
|
||||||
.name = "esp32_i2c",
|
.name = "esp32_i2c",
|
||||||
.compatible = (const char*[]) { "espressif,esp32-i2c", nullptr },
|
.compatible = (const char*[]) { "espressif,esp32-i2c", nullptr },
|
||||||
.start_device = start,
|
.start_device = start,
|
||||||
.stop_device = stop,
|
.stop_device = stop,
|
||||||
.api = (void*)&esp32_i2c_api,
|
.api = &ESP32_I2C_API,
|
||||||
.device_type = &I2C_CONTROLLER_TYPE,
|
.device_type = &I2C_CONTROLLER_TYPE,
|
||||||
.owner = &platform_module,
|
.owner = &platform_module,
|
||||||
.internal = nullptr
|
.internal = nullptr
|
||||||
|
|||||||
@ -143,6 +143,14 @@ error_t i2c_controller_read_register(struct Device* device, uint8_t address, uin
|
|||||||
*/
|
*/
|
||||||
error_t i2c_controller_write_register(struct Device* device, uint8_t address, uint8_t reg, const uint8_t* data, uint16_t dataSize, TickType_t timeout);
|
error_t i2c_controller_write_register(struct Device* device, uint8_t address, uint8_t reg, const uint8_t* data, uint16_t dataSize, TickType_t timeout);
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_set(struct Device* device, uint8_t address, uint8_t reg, uint8_t value, TickType_t timeout);
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_get(struct Device* device, uint8_t address, uint8_t reg, uint8_t* value, TickType_t timeout);
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_set_bits(struct Device* device, uint8_t address, uint8_t reg, uint8_t bits_to_set, TickType_t timeout);
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_reset_bits(struct Device* device, uint8_t address, uint8_t reg, uint8_t bits_to_reset, TickType_t timeout);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Writes an array of register-value pairs to an I2C device.
|
* @brief Writes an array of register-value pairs to an I2C device.
|
||||||
* @param[in] device the I2C controller device
|
* @param[in] device the I2C controller device
|
||||||
|
|||||||
@ -31,6 +31,34 @@ error_t i2c_controller_write_register(Device* device, uint8_t address, uint8_t r
|
|||||||
return I2C_DRIVER_API(driver)->write_register(device, address, reg, data, dataSize, timeout);
|
return I2C_DRIVER_API(driver)->write_register(device, address, reg, data, dataSize, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_set(Device* device, uint8_t address, uint8_t reg, uint8_t value, TickType_t timeout) {
|
||||||
|
const auto* driver = device_get_driver(device);
|
||||||
|
return I2C_DRIVER_API(driver)->write_register(device, address, reg, &value, 1, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_get(Device* device, uint8_t address, uint8_t reg, uint8_t* value, TickType_t timeout) {
|
||||||
|
const auto* driver = device_get_driver(device);
|
||||||
|
return I2C_DRIVER_API(driver)->read_register(device, address, reg, value, 1, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_set_bits(Device* device, uint8_t address, uint8_t reg, uint8_t bits_to_set, TickType_t timeout) {
|
||||||
|
const auto* driver = device_get_driver(device);
|
||||||
|
uint8_t data = 0;
|
||||||
|
auto error = I2C_DRIVER_API(driver)->read_register(device, address, reg, &data, 1, timeout);
|
||||||
|
if (error != ERROR_NONE) return error;
|
||||||
|
data |= bits_to_set;
|
||||||
|
return I2C_DRIVER_API(driver)->write_register(device, address, reg, &data, 1, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
|
error_t i2c_controller_register8_reset_bits(Device* device, uint8_t address, uint8_t reg, uint8_t bits_to_reset, TickType_t timeout) {
|
||||||
|
const auto* driver = device_get_driver(device);
|
||||||
|
uint8_t data = 0;
|
||||||
|
auto error = I2C_DRIVER_API(driver)->read_register(device, address, reg, &data, 1, timeout);
|
||||||
|
if (error != ERROR_NONE) return error;
|
||||||
|
data &= ~bits_to_reset;
|
||||||
|
return I2C_DRIVER_API(driver)->write_register(device, address, reg, &data, 1, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
error_t i2c_controller_write_register_array(Device* device, uint8_t address, const uint8_t* data, uint16_t dataSize, TickType_t timeout) {
|
error_t i2c_controller_write_register_array(Device* device, uint8_t address, const uint8_t* data, uint16_t dataSize, TickType_t timeout) {
|
||||||
const auto* driver = device_get_driver(device);
|
const auto* driver = device_get_driver(device);
|
||||||
if (dataSize % 2 != 0) {
|
if (dataSize % 2 != 0) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user