|
|
@@ -19,29 +19,65 @@
|
|
|
|
|
|
static uint8_t sensors_count = 0;
|
|
|
|
|
|
+void unitemp_i2c_acquire(FuriHalI2cBusHandle* handle) {
|
|
|
+ furi_hal_i2c_acquire(handle);
|
|
|
+ LL_GPIO_SetPinPull(gpio_ext_pc1.port, gpio_ext_pc1.pin, LL_GPIO_PULL_UP);
|
|
|
+ LL_GPIO_SetPinPull(gpio_ext_pc0.port, gpio_ext_pc0.pin, LL_GPIO_PULL_UP);
|
|
|
+}
|
|
|
+
|
|
|
+bool unitemp_i2c_isDeviceReady(I2CSensor* i2c_sensor) {
|
|
|
+ unitemp_i2c_acquire(i2c_sensor->i2c);
|
|
|
+ bool status = furi_hal_i2c_is_device_ready(i2c_sensor->i2c, i2c_sensor->currentI2CAdr, 10);
|
|
|
+ furi_hal_i2c_release(i2c_sensor->i2c);
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
uint8_t unitemp_i2c_readReg(I2CSensor* i2c_sensor, uint8_t reg) {
|
|
|
//Блокировка шины
|
|
|
- furi_hal_i2c_acquire(i2c_sensor->i2c);
|
|
|
+ unitemp_i2c_acquire(i2c_sensor->i2c);
|
|
|
uint8_t buff[1] = {0};
|
|
|
- furi_hal_i2c_read_mem(i2c_sensor->i2c, i2c_sensor->currentI2CAdr << 1, reg, buff, 1, 10);
|
|
|
+ furi_hal_i2c_read_mem(i2c_sensor->i2c, i2c_sensor->currentI2CAdr, reg, buff, 1, 10);
|
|
|
furi_hal_i2c_release(i2c_sensor->i2c);
|
|
|
return buff[0];
|
|
|
}
|
|
|
|
|
|
+bool unitemp_i2c_readArray(I2CSensor* i2c_sensor, uint8_t len, uint8_t* data) {
|
|
|
+ unitemp_i2c_acquire(i2c_sensor->i2c);
|
|
|
+ bool status = furi_hal_i2c_rx(i2c_sensor->i2c, i2c_sensor->currentI2CAdr, data, len, 10);
|
|
|
+ furi_hal_i2c_release(i2c_sensor->i2c);
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
bool unitemp_i2c_readRegArray(I2CSensor* i2c_sensor, uint8_t startReg, uint8_t len, uint8_t* data) {
|
|
|
- furi_hal_i2c_acquire(i2c_sensor->i2c);
|
|
|
- bool status = furi_hal_i2c_read_mem(
|
|
|
- i2c_sensor->i2c, i2c_sensor->currentI2CAdr << 1, startReg, data, len, 10);
|
|
|
+ unitemp_i2c_acquire(i2c_sensor->i2c);
|
|
|
+ bool status =
|
|
|
+ furi_hal_i2c_read_mem(i2c_sensor->i2c, i2c_sensor->currentI2CAdr, startReg, data, len, 10);
|
|
|
furi_hal_i2c_release(i2c_sensor->i2c);
|
|
|
return status;
|
|
|
}
|
|
|
|
|
|
bool unitemp_i2c_writeReg(I2CSensor* i2c_sensor, uint8_t reg, uint8_t value) {
|
|
|
//Блокировка шины
|
|
|
- furi_hal_i2c_acquire(i2c_sensor->i2c);
|
|
|
+ unitemp_i2c_acquire(i2c_sensor->i2c);
|
|
|
uint8_t buff[1] = {value};
|
|
|
bool status =
|
|
|
- furi_hal_i2c_write_mem(i2c_sensor->i2c, i2c_sensor->currentI2CAdr << 1, reg, buff, 1, 10);
|
|
|
+ furi_hal_i2c_write_mem(i2c_sensor->i2c, i2c_sensor->currentI2CAdr, reg, buff, 1, 10);
|
|
|
+ furi_hal_i2c_release(i2c_sensor->i2c);
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+bool unitemp_i2c_writeArray(I2CSensor* i2c_sensor, uint8_t len, uint8_t* data) {
|
|
|
+ unitemp_i2c_acquire(i2c_sensor->i2c);
|
|
|
+ bool status = furi_hal_i2c_tx(i2c_sensor->i2c, i2c_sensor->currentI2CAdr, data, len, 10);
|
|
|
+ furi_hal_i2c_release(i2c_sensor->i2c);
|
|
|
+ return status;
|
|
|
+}
|
|
|
+
|
|
|
+bool unitemp_i2c_writeRegArray(I2CSensor* i2c_sensor, uint8_t startReg, uint8_t len, uint8_t* data) {
|
|
|
+ //Блокировка шины
|
|
|
+ unitemp_i2c_acquire(i2c_sensor->i2c);
|
|
|
+ bool status = furi_hal_i2c_write_mem(
|
|
|
+ i2c_sensor->i2c, i2c_sensor->currentI2CAdr, startReg, data, len, 10);
|
|
|
furi_hal_i2c_release(i2c_sensor->i2c);
|
|
|
return status;
|
|
|
}
|