diff --git a/applications/plugins/unitemp/README.md b/applications/plugins/unitemp/README.md index 80a296e9b..817f6f481 100644 --- a/applications/plugins/unitemp/README.md +++ b/applications/plugins/unitemp/README.md @@ -3,9 +3,9 @@ [![GitHub release](https://img.shields.io/github/release/quen0n/unitemp-flipperzero?include_prereleases=&sort=semver&color=blue)](https://github.com/quen0n/unitemp-flipperzero/releases/) [![GitHub](https://img.shields.io/github/license/quen0n/unitemp-flipperzero)](https://github.com/quen0n/unitemp-flipperzero/blob/dev/LICENSE.md) [![Build dev](https://github.com/quen0n/unitemp-flipperzero/actions/workflows/build_dev.yml/badge.svg?branch=dev)](https://github.com/quen0n/unitemp-flipperzero/actions/workflows/build_dev.yml) -[Flipper Zero](https://flipperzero.one/) application for reading temperature, humidity and pressure sensors using Onewire, Singlewire, I2C protocols. +[Flipper Zero](https://flipperzero.one/) application for reading temperature, humidity and pressure sensors like a DHT11/22, DS18B20, BMP280, HTU21 and more. ## List of supported sensors (supplemented) -![image](https://user-images.githubusercontent.com/10090793/210119924-51119deb-f950-40ee-bc27-22b971243527.png) +![image](https://user-images.githubusercontent.com/10090793/211131502-c1560eb5-f59c-4cfa-86f7-27f037490a35.png) ## Installation Copy the contents of the repository to the `applications/plugins/unitemp` folder and build the project. Flash FZ along with resources. [More...](https://github.com/flipperdevices/flipperzero-firmware/blob/dev/documentation/fbt.md) ## Some community photos diff --git a/applications/plugins/unitemp/Sensors.c b/applications/plugins/unitemp/Sensors.c index 33f62b201..87a218fe0 100644 --- a/applications/plugins/unitemp/Sensors.c +++ b/applications/plugins/unitemp/Sensors.c @@ -79,10 +79,12 @@ static const SensorType* sensorTypes[] = { &Dallas, &AM2320_SW, &AM2320_I2C, + &HTU21x, &AHT10, &SHT30, &GXHT30, &LM75, + &HDC1080, &BMP180, &BMP280, &BME280}; @@ -281,9 +283,7 @@ void unitemp_sensors_add(Sensor* sensor) { } bool unitemp_sensors_load(void) { -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Loading sensors..."); -#endif + UNITEMP_DEBUG("Loading sensors..."); //Выделение памяти на поток app->file_stream = file_stream_alloc(app->storage); @@ -392,9 +392,7 @@ bool unitemp_sensors_load(void) { } bool unitemp_sensors_save(void) { -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Saving sensors..."); -#endif + UNITEMP_DEBUG("Saving sensors..."); //Выделение памяти для потока app->file_stream = file_stream_alloc(app->storage); @@ -540,15 +538,12 @@ void unitemp_sensor_free(Sensor* sensor) { bool status = false; //Высвобождение памяти под инстанс status = sensor->type->interface->mem_releaser(sensor); - UNUSED(status); -#ifdef UNITEMP_DEBUG if(status) { - FURI_LOG_D(APP_NAME, "Sensor %s memory successfully released", sensor->name); + UNITEMP_DEBUG("Sensor %s memory successfully released", sensor->name); } else { FURI_LOG_E(APP_NAME, "Sensor %s memory is not released", sensor->name); } -#endif free(sensor->name); //free(sensor); } @@ -569,9 +564,7 @@ bool unitemp_sensors_init(void) { //Может пропасть при отключении USB if(furi_hal_power_is_otg_enabled() != true) { furi_hal_power_enable_otg(); -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "OTG enabled"); -#endif + UNITEMP_DEBUG("OTG enabled"); } if(!(*app->sensors[i]->type->initializer)(app->sensors[i])) { FURI_LOG_E( @@ -580,9 +573,7 @@ bool unitemp_sensors_init(void) { app->sensors[i]->name); result = false; } -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Sensor %s successfully initialized", app->sensors[i]->name); -#endif + UNITEMP_DEBUG("Sensor %s successfully initialized", app->sensors[i]->name); } app->sensors_ready = true; return result; @@ -593,9 +584,7 @@ bool unitemp_sensors_deInit(void) { //Выключение 5 В если до этого оно не было включено if(app->settings.lastOTGState != true) { furi_hal_power_disable_otg(); -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "OTG disabled"); -#endif + UNITEMP_DEBUG("OTG disabled"); } //Перебор датчиков из списка @@ -631,10 +620,9 @@ UnitempStatus unitemp_sensor_updateData(Sensor* sensor) { sensor->status = sensor->type->interface->updater(sensor); -#ifdef UNITEMP_DEBUG - if(sensor->status != UT_SENSORSTATUS_OK && sensor->status != UT_SENSORSTATUS_POLLING) - FURI_LOG_D(APP_NAME, "Sensor %s update status %d", sensor->name, sensor->status); -#endif + if(sensor->status != UT_SENSORSTATUS_OK && sensor->status != UT_SENSORSTATUS_POLLING) { + UNITEMP_DEBUG("Sensor %s update status %d", sensor->name, sensor->status); + } if(app->settings.temp_unit == UT_TEMP_FAHRENHEIT && sensor->status == UT_SENSORSTATUS_OK) uintemp_celsiumToFarengate(sensor); diff --git a/applications/plugins/unitemp/Sensors.h b/applications/plugins/unitemp/Sensors.h index 2193ce466..fcbb395fa 100644 --- a/applications/plugins/unitemp/Sensors.h +++ b/applications/plugins/unitemp/Sensors.h @@ -324,4 +324,6 @@ const GPIO* #include "./sensors/DHT20.h" #include "./sensors/SHT30.h" #include "./sensors/BMP180.h" +#include "./sensors/HTU21x.h" +#include "./sensors/HDC1080.h" #endif diff --git a/applications/plugins/unitemp/interfaces/OneWireSensor.c b/applications/plugins/unitemp/interfaces/OneWireSensor.c index 740ba3365..4d5db5d0e 100644 --- a/applications/plugins/unitemp/interfaces/OneWireSensor.c +++ b/applications/plugins/unitemp/interfaces/OneWireSensor.c @@ -58,9 +58,7 @@ OneWireBus* uintemp_onewire_bus_alloc(const GPIO* gpio) { bus->device_count = 0; bus->gpio = gpio; bus->powerMode = PWR_PASSIVE; -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "one wire bus (port %d) allocated", gpio->num); -#endif + UNITEMP_DEBUG("one wire bus (port %d) allocated", gpio->num); return bus; } @@ -84,9 +82,7 @@ bool unitemp_onewire_bus_init(OneWireBus* bus) { return true; } bool unitemp_onewire_bus_deinit(OneWireBus* bus) { -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "devices on wire %d: %d", bus->gpio->num, bus->device_count); -#endif + UNITEMP_DEBUG("devices on wire %d: %d", bus->gpio->num, bus->device_count); bus->device_count--; if(bus->device_count <= 0) { bus->device_count = 0; @@ -236,15 +232,11 @@ void unitemp_onewire_bus_enum_init(void) { uint8_t* unitemp_onewire_bus_enum_next(OneWireBus* bus) { furi_delay_ms(10); if(!onewire_enum_fork_bit) { // Если на предыдущем шаге уже не было разногласий -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "All devices on wire %d is found", unitemp_gpio_toInt(bus->gpio)); -#endif + UNITEMP_DEBUG("All devices on wire %d is found", unitemp_gpio_toInt(bus->gpio)); return 0; // то просто выходим ничего не возвращая } if(!unitemp_onewire_bus_start(bus)) { -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Wire %d is empty", unitemp_gpio_toInt(bus->gpio)); -#endif + UNITEMP_DEBUG("Wire %d is empty", unitemp_gpio_toInt(bus->gpio)); return 0; } uint8_t bp = 8; @@ -278,9 +270,8 @@ uint8_t* unitemp_onewire_bus_enum_next(OneWireBus* bus) { if(!not1) { // Присутствует единица next |= 0x80; } else { // Нет ни нулей ни единиц - ошибочная ситуация -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Wrong wire %d situation", unitemp_gpio_toInt(bus->gpio)); -#endif + + UNITEMP_DEBUG("Wrong wire %d situation", unitemp_gpio_toInt(bus->gpio)); return 0; } } @@ -421,9 +412,7 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) { unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9); if(!unitemp_onewire_CRC_check(buff, 9)) { -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Sensor %s is not found", sensor->name); -#endif + UNITEMP_DEBUG("Sensor %s is not found", sensor->name); return UT_SENSORSTATUS_TIMEOUT; } } @@ -462,9 +451,7 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) { unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9); if(!unitemp_onewire_CRC_check(buff, 9)) { -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Failed CRC check: %s", sensor->name); -#endif + UNITEMP_DEBUG("Failed CRC check: %s", sensor->name); return UT_SENSORSTATUS_BADCRC; } int16_t raw = buff[0] | ((int16_t)buff[1] << 8); diff --git a/applications/plugins/unitemp/sensors/BMP180.c b/applications/plugins/unitemp/sensors/BMP180.c index 6fd5f2fa5..d17e78c09 100644 --- a/applications/plugins/unitemp/sensors/BMP180.c +++ b/applications/plugins/unitemp/sensors/BMP180.c @@ -101,9 +101,8 @@ bool unitemp_BMP180_init(Sensor* sensor) { bmp180_instance->bmp180_cal.MC = (buff[18] << 8) | buff[19]; bmp180_instance->bmp180_cal.MD = (buff[20] << 8) | buff[21]; -#ifdef UNITEMP_DEBUG - FURI_LOG_D( - APP_NAME, + +UNITEMP_DEBUG( "Sensor BMP180 (0x%02X) calibration values: %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d", i2c_sensor->currentI2CAdr, bmp180_instance->bmp180_cal.AC1, @@ -117,7 +116,6 @@ bool unitemp_BMP180_init(Sensor* sensor) { bmp180_instance->bmp180_cal.MB, bmp180_instance->bmp180_cal.MC, bmp180_instance->bmp180_cal.MD); -#endif return true; } diff --git a/applications/plugins/unitemp/sensors/BMx280.c b/applications/plugins/unitemp/sensors/BMx280.c index a64daaa1d..d572f09c3 100644 --- a/applications/plugins/unitemp/sensors/BMx280.c +++ b/applications/plugins/unitemp/sensors/BMx280.c @@ -180,22 +180,19 @@ static bool bmx280_readCalValues(I2CSensor* i2c_sensor) { if(!unitemp_i2c_readRegArray( i2c_sensor, TEMP_CAL_START_ADDR, 6, (uint8_t*)&bmx280_instance->temp_cal)) return false; -#ifdef UNITEMP_DEBUG - FURI_LOG_D( - APP_NAME, + + UNITEMP_DEBUG( "Sensor BMx280 (0x%02X) T1-T3: %d, %d, %d", i2c_sensor->currentI2CAdr, bmx280_instance->temp_cal.dig_T1, bmx280_instance->temp_cal.dig_T2, bmx280_instance->temp_cal.dig_T3); -#endif if(!unitemp_i2c_readRegArray( i2c_sensor, PRESS_CAL_START_ADDR, 18, (uint8_t*)&bmx280_instance->press_cal)) return false; -#ifdef UNITEMP_DEBUG - FURI_LOG_D( - APP_NAME, + + UNITEMP_DEBUG( "Sensor BMx280 (0x%02X): P1-P9: %d, %d, %d, %d, %d, %d, %d, %d, %d", i2c_sensor->currentI2CAdr, bmx280_instance->press_cal.dig_P1, @@ -207,7 +204,6 @@ static bool bmx280_readCalValues(I2CSensor* i2c_sensor) { bmx280_instance->press_cal.dig_P7, bmx280_instance->press_cal.dig_P8, bmx280_instance->press_cal.dig_P9); -#endif if(bmx280_instance->chip_id == BME280_ID) { uint8_t buff[7] = {0}; @@ -221,9 +217,7 @@ static bool bmx280_readCalValues(I2CSensor* i2c_sensor) { bmx280_instance->hum_cal.dig_H5 = (buff[4] & 0x0F) | ((int16_t)buff[5] << 4); bmx280_instance->hum_cal.dig_H6 = buff[6]; -#ifdef UNITEMP_DEBUG - FURI_LOG_D( - APP_NAME, + UNITEMP_DEBUG( "Sensor BMx280 (0x%02X): H1-H6: %d, %d, %d, %d, %d, %d", i2c_sensor->currentI2CAdr, bmx280_instance->hum_cal.dig_H1, @@ -232,7 +226,6 @@ static bool bmx280_readCalValues(I2CSensor* i2c_sensor) { bmx280_instance->hum_cal.dig_H4, bmx280_instance->hum_cal.dig_H5, bmx280_instance->hum_cal.dig_H6); -#endif } bmx280_instance->last_cal_update_time = furi_get_tick(); diff --git a/applications/plugins/unitemp/sensors/HDC1080.c b/applications/plugins/unitemp/sensors/HDC1080.c new file mode 100644 index 000000000..5f2c59b24 --- /dev/null +++ b/applications/plugins/unitemp/sensors/HDC1080.c @@ -0,0 +1,94 @@ +/* + Unitemp - Universal temperature reader + Copyright (C) 2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#include "HDC1080.h" +#include "../interfaces/I2CSensor.h" + +const SensorType HDC1080 = { + .typename = "HDC1080", + .interface = &I2C, + .datatype = UT_DATA_TYPE_TEMP_HUM, + .pollingInterval = 250, + .allocator = unitemp_HDC1080_alloc, + .mem_releaser = unitemp_HDC1080_free, + .initializer = unitemp_HDC1080_init, + .deinitializer = unitemp_HDC1080_deinit, + .updater = unitemp_HDC1080_update}; + +bool unitemp_HDC1080_alloc(Sensor* sensor, char* args) { + UNUSED(args); + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + + //Адреса на шине I2C (7 бит) + i2c_sensor->minI2CAdr = 0x40 << 1; + i2c_sensor->maxI2CAdr = 0x40 << 1; + return true; +} + +bool unitemp_HDC1080_free(Sensor* sensor) { + //Нечего высвобождать, так как ничего не было выделено + UNUSED(sensor); + return true; +} + +bool unitemp_HDC1080_init(Sensor* sensor) { + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + + uint8_t data[2]; + if(!unitemp_i2c_readRegArray(i2c_sensor, 0xFF, 2, data)) return UT_SENSORSTATUS_TIMEOUT; + uint16_t device_id = ((uint16_t)data[0] << 8) | data[1]; + if(device_id != 0x1050) { + FURI_LOG_E( + APP_NAME, + "Sensor %s returned wrong ID 0x%02X, expected 0x1050", + sensor->name, + device_id); + return false; + } + data[0] = 0b0001000; + data[1] = 0; + //Установка режима работы и разрядности измерений + if(!unitemp_i2c_writeRegArray(i2c_sensor, 0x02, 2, data)) return UT_SENSORSTATUS_TIMEOUT; + + return true; +} + +bool unitemp_HDC1080_deinit(Sensor* sensor) { + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + UNUSED(i2c_sensor); + return true; +} + +UnitempStatus unitemp_HDC1080_update(Sensor* sensor) { + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + + uint8_t data[2] = {0}; + //Запуск измерения + if(!unitemp_i2c_writeArray(i2c_sensor, 1, data)) return UT_SENSORSTATUS_TIMEOUT; + furi_delay_ms(10); + if(!unitemp_i2c_readArray(i2c_sensor, 2, data)) return UT_SENSORSTATUS_TIMEOUT; + + sensor->temp = ((float)(((uint16_t)data[0] << 8) | data[1]) / 65536) * 165 - 40; + + data[0] = 1; + if(!unitemp_i2c_writeArray(i2c_sensor, 1, data)) return UT_SENSORSTATUS_TIMEOUT; + furi_delay_ms(10); + if(!unitemp_i2c_readArray(i2c_sensor, 2, data)) return UT_SENSORSTATUS_TIMEOUT; + sensor->hum = ((float)(((uint16_t)data[0] << 8) | data[1]) / 65536) * 100; + + return UT_SENSORSTATUS_OK; +} diff --git a/applications/plugins/unitemp/sensors/HDC1080.h b/applications/plugins/unitemp/sensors/HDC1080.h new file mode 100644 index 000000000..59ba0673c --- /dev/null +++ b/applications/plugins/unitemp/sensors/HDC1080.h @@ -0,0 +1,62 @@ +/* + Unitemp - Universal temperature reader + Copyright (C) 2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#ifndef UNITEMP_HDC1080 +#define UNITEMP_HDC1080 + +#include "../unitemp.h" +#include "../Sensors.h" +extern const SensorType HDC1080; +/** + * @brief Выделение памяти и установка начальных значений датчика HDC1080 + * + * @param sensor Указатель на создаваемый датчик + * @return Истина при успехе + */ +bool unitemp_HDC1080_alloc(Sensor* sensor, char* args); + +/** + * @brief Инициализации датчика HDC1080 + * + * @param sensor Указатель на датчик + * @return Истина если инициализация упспешная + */ +bool unitemp_HDC1080_init(Sensor* sensor); + +/** + * @brief Деинициализация датчика + * + * @param sensor Указатель на датчик + */ +bool unitemp_HDC1080_deinit(Sensor* sensor); + +/** + * @brief Обновление значений из датчика + * + * @param sensor Указатель на датчик + * @return Статус обновления + */ +UnitempStatus unitemp_HDC1080_update(Sensor* sensor); + +/** + * @brief Высвободить память датчика + * + * @param sensor Указатель на датчик + */ +bool unitemp_HDC1080_free(Sensor* sensor); + +#endif \ No newline at end of file diff --git a/applications/plugins/unitemp/sensors/HTU21x.c b/applications/plugins/unitemp/sensors/HTU21x.c new file mode 100644 index 000000000..74fc47d5d --- /dev/null +++ b/applications/plugins/unitemp/sensors/HTU21x.c @@ -0,0 +1,105 @@ +/* + Unitemp - Universal temperature reader + Copyright (C) 2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#include "HTU21x.h" +#include "../interfaces/I2CSensor.h" + +const SensorType HTU21x = { + .typename = "HTU21x", + .interface = &I2C, + .datatype = UT_DATA_TYPE_TEMP_HUM, + .pollingInterval = 250, + .allocator = unitemp_HTU21x_alloc, + .mem_releaser = unitemp_HTU21x_free, + .initializer = unitemp_HTU21x_init, + .deinitializer = unitemp_HTU21x_deinit, + .updater = unitemp_HTU21x_update}; + +static uint8_t checkCRC(uint16_t data) { + for(uint8_t i = 0; i < 16; i++) { + if(data & 0x8000) + data = (data << 1) ^ 0x13100; + else + data <<= 1; + } + return (data >> 8); +} + +bool unitemp_HTU21x_alloc(Sensor* sensor, char* args) { + UNUSED(args); + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + + //Адреса на шине I2C (7 бит) + i2c_sensor->minI2CAdr = 0x40 << 1; + i2c_sensor->maxI2CAdr = 0x40 << 1; + return true; +} + +bool unitemp_HTU21x_free(Sensor* sensor) { + //Нечего высвобождать, так как ничего не было выделено + UNUSED(sensor); + return true; +} + +bool unitemp_HTU21x_init(Sensor* sensor) { + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + + UNUSED(i2c_sensor); + return true; +} + +bool unitemp_HTU21x_deinit(Sensor* sensor) { + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + UNUSED(i2c_sensor); + return true; +} + +UnitempStatus unitemp_HTU21x_update(Sensor* sensor) { + I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance; + + //Датчик может быть всего один, так что норм + static bool temp_hum = false; + + uint8_t data[3]; + + if(sensor->status == UT_SENSORSTATUS_POLLING) { + if(!unitemp_i2c_readArray(i2c_sensor, 3, data)) return UT_SENSORSTATUS_TIMEOUT; + + uint16_t raw = ((uint16_t)data[0] << 8) | data[1]; + if(checkCRC(raw) != data[2]) return UT_SENSORSTATUS_BADCRC; + + if(temp_hum) { + sensor->temp = (0.002681f * raw - 46.85f); + } else { + sensor->hum = ((0.001907 * (raw ^ 0x02)) - 6); + } + temp_hum = !temp_hum; + return UT_SENSORSTATUS_OK; + } + + if(temp_hum) { + //Запрос температуры + data[0] = 0xF3; + if(!unitemp_i2c_writeArray(i2c_sensor, 1, data)) return UT_SENSORSTATUS_TIMEOUT; + } else { + //Запрос влажности + data[0] = 0xF5; + if(!unitemp_i2c_writeArray(i2c_sensor, 1, data)) return UT_SENSORSTATUS_TIMEOUT; + } + + return UT_SENSORSTATUS_POLLING; +} diff --git a/applications/plugins/unitemp/sensors/HTU21x.h b/applications/plugins/unitemp/sensors/HTU21x.h new file mode 100644 index 000000000..ffe062a24 --- /dev/null +++ b/applications/plugins/unitemp/sensors/HTU21x.h @@ -0,0 +1,62 @@ +/* + Unitemp - Universal temperature reader + Copyright (C) 2023 Victor Nikitchuk (https://github.com/quen0n) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#ifndef UNITEMP_HTU21x +#define UNITEMP_HTU21x + +#include "../unitemp.h" +#include "../Sensors.h" +extern const SensorType HTU21x; +/** + * @brief Выделение памяти и установка начальных значений датчика HTU21x + * + * @param sensor Указатель на создаваемый датчик + * @return Истина при успехе + */ +bool unitemp_HTU21x_alloc(Sensor* sensor, char* args); + +/** + * @brief Инициализации датчика HTU21x + * + * @param sensor Указатель на датчик + * @return Истина если инициализация упспешная + */ +bool unitemp_HTU21x_init(Sensor* sensor); + +/** + * @brief Деинициализация датчика + * + * @param sensor Указатель на датчик + */ +bool unitemp_HTU21x_deinit(Sensor* sensor); + +/** + * @brief Обновление значений из датчика + * + * @param sensor Указатель на датчик + * @return Статус обновления + */ +UnitempStatus unitemp_HTU21x_update(Sensor* sensor); + +/** + * @brief Высвободить память датчика + * + * @param sensor Указатель на датчик + */ +bool unitemp_HTU21x_free(Sensor* sensor); + +#endif \ No newline at end of file diff --git a/applications/plugins/unitemp/sensors/Sensors.xlsx b/applications/plugins/unitemp/sensors/Sensors.xlsx index 9983aeb6e..bd47d4948 100644 Binary files a/applications/plugins/unitemp/sensors/Sensors.xlsx and b/applications/plugins/unitemp/sensors/Sensors.xlsx differ diff --git a/applications/plugins/unitemp/unitemp.c b/applications/plugins/unitemp/unitemp.c index 9ff108395..31ab057d6 100644 --- a/applications/plugins/unitemp/unitemp.c +++ b/applications/plugins/unitemp/unitemp.c @@ -78,9 +78,7 @@ bool unitemp_saveSettings(void) { } bool unitemp_loadSettings(void) { -#ifdef UNITEMP_DEBUG - FURI_LOG_D(APP_NAME, "Loading settings..."); -#endif + UNITEMP_DEBUG("Loading settings..."); //Выделение памяти на поток app->file_stream = file_stream_alloc(app->storage); diff --git a/applications/plugins/unitemp/unitemp.h b/applications/plugins/unitemp/unitemp.h index 144780968..5947a3e3c 100644 --- a/applications/plugins/unitemp/unitemp.h +++ b/applications/plugins/unitemp/unitemp.h @@ -39,19 +39,25 @@ /* Объявление макроподстановок */ //Имя приложения #define APP_NAME "Unitemp" +//Версия приложения +#define UNITEMP_APP_VER "1.1" //Путь хранения файлов плагина #define APP_PATH_FOLDER "/ext/unitemp" //Имя файла с настройками #define APP_FILENAME_SETTINGS "settings.cfg" //Имя файла с датчиками #define APP_FILENAME_SENSORS "sensors.cfg" -//Версия приложения -#define UNITEMP_APP_VER "1.0" //Размер буффера текста #define BUFF_SIZE 32 -#define UNITEMP_DEBUG +#define UNITEMP_D + +#ifdef FURI_DEBUG +#define UNITEMP_DEBUG(msg, ...) FURI_LOG_D(APP_NAME, msg, ##__VA_ARGS__) +#else +#define UNITEMP_DEBUG(msg, ...) +#endif /* Объявление перечислений */ //Единицы измерения температуры diff --git a/applications/plugins/unitemp/views/SensorEdit_view.c b/applications/plugins/unitemp/views/SensorEdit_view.c index d1660bc2e..f1de4ff11 100644 --- a/applications/plugins/unitemp/views/SensorEdit_view.c +++ b/applications/plugins/unitemp/views/SensorEdit_view.c @@ -63,13 +63,9 @@ bool _onewire_id_exist(uint8_t* id) { static void _onewire_scan(void) { OneWireSensor* ow_sensor = editable_sensor->instance; -#ifdef UNITEMP_DEBUG - FURI_LOG_D( - APP_NAME, - "devices on wire %d: %d", - ow_sensor->bus->gpio->num, - ow_sensor->bus->device_count); -#endif + + UNITEMP_DEBUG( + "devices on wire %d: %d", ow_sensor->bus->gpio->num, ow_sensor->bus->device_count); //Сканирование шины one wire unitemp_onewire_bus_init(ow_sensor->bus); @@ -101,9 +97,8 @@ static void _onewire_scan(void) { memcpy(ow_sensor->deviceID, id, 8); ow_sensor->familyCode = id[0]; -#ifdef UNITEMP_DEBUG - FURI_LOG_D( - APP_NAME, + + UNITEMP_DEBUG( "Found sensor's ID: %02X%02X%02X%02X%02X%02X%02X%02X", id[0], id[1], @@ -113,7 +108,6 @@ static void _onewire_scan(void) { id[5], id[6], id[7]); -#endif if(ow_sensor->familyCode != 0) { char id_buff[10];