Przeglądaj źródła

Added sensor analogues names

Victor 3 lat temu
rodzic
commit
878a974645

+ 1 - 1
Sensors.c

@@ -55,7 +55,7 @@ const Interface ONE_WIRE = {
 //static const Interface* interfaces[] = {&SINGLE_WIRE, &I2C, &ONE_WIRE};
 //static const Interface* interfaces[] = {&SINGLE_WIRE, &I2C, &ONE_WIRE};
 //Перечень датчиков
 //Перечень датчиков
 static const SensorType* sensorTypes[] =
 static const SensorType* sensorTypes[] =
-    {&DHT11, &DHT12_SW, &DHT21, &DHT22, &AM2320_SW, &LM75, &BMP280, &DS18x2x};
+    {&DHT11, &DHT12_SW, &DHT21, &DHT22, &AM2320_SW, &LM75, &BMP280, &Dallas};
 
 
 const SensorType* unitemp_sensors_getTypeFromInt(uint8_t index) {
 const SensorType* unitemp_sensors_getTypeFromInt(uint8_t index) {
     if(index > SENSOR_TYPES_COUNT) return NULL;
     if(index > SENSOR_TYPES_COUNT) return NULL;

+ 3 - 1
Sensors.h

@@ -72,8 +72,10 @@ typedef struct Interface {
 
 
 //Типы датчиков
 //Типы датчиков
 typedef struct {
 typedef struct {
-    //Имя типа датчика
+    //Модель датчика
     const char* typename;
     const char* typename;
+    //Полное имя с аналогами
+    const char* fullname;
     //Тип возвращаемых данных
     //Тип возвращаемых данных
     SensorDataType datatype;
     SensorDataType datatype;
     //Интерфейс подключения
     //Интерфейс подключения

+ 3 - 2
interfaces/OneWireSensor.c

@@ -1,12 +1,13 @@
-//Использован код Дмитрия Погребняка: https://aterlux.ru/article/1wire
+//Использован код Дмитрия Погребняка: https://aterlux.ru/article/1wireDS18x2x
 
 
 #include "OneWireSensor.h"
 #include "OneWireSensor.h"
 #include <furi.h>
 #include <furi.h>
 #include <furi_hal.h>
 #include <furi_hal.h>
 #include <one_wire/one_wire_host.h>
 #include <one_wire/one_wire_host.h>
 
 
-const SensorType DS18x2x = {
+const SensorType Dallas = {
     .typename = "Dallas",
     .typename = "Dallas",
+    .altname = "Dallas (DS18x2x)",
     .interface = &ONE_WIRE,
     .interface = &ONE_WIRE,
     .datatype = UT_DATA_TYPE_TEMP,
     .datatype = UT_DATA_TYPE_TEMP,
     .pollingInterval = 250,
     .pollingInterval = 250,

+ 1 - 1
interfaces/OneWireSensor.h

@@ -202,5 +202,5 @@ uint8_t* unitemp_onewire_bus_enum_next(OneWireBus* bus);
  */
  */
 bool unitemp_onewire_id_compare(uint8_t* id1, uint8_t* id2);
 bool unitemp_onewire_id_compare(uint8_t* id1, uint8_t* id2);
 
 
-extern const SensorType DS18x2x;
+extern const SensorType Dallas;
 #endif
 #endif

+ 3 - 1
interfaces/SingleWireSensor.c

@@ -26,6 +26,7 @@ const SensorType DHT12_SW = {
     .updater = unitemp_singlewire_update};
     .updater = unitemp_singlewire_update};
 const SensorType DHT21 = {
 const SensorType DHT21 = {
     .typename = "DHT21",
     .typename = "DHT21",
+    .altname = "DHT21 (AM2301)",
     .interface = &SINGLE_WIRE,
     .interface = &SINGLE_WIRE,
     .datatype = UT_DATA_TYPE_TEMP_HUM,
     .datatype = UT_DATA_TYPE_TEMP_HUM,
     .pollingInterval = 1000,
     .pollingInterval = 1000,
@@ -36,6 +37,7 @@ const SensorType DHT21 = {
     .updater = unitemp_singlewire_update};
     .updater = unitemp_singlewire_update};
 const SensorType DHT22 = {
 const SensorType DHT22 = {
     .typename = "DHT22",
     .typename = "DHT22",
+    .altname = "DHT22 (AM2302)",
     .interface = &SINGLE_WIRE,
     .interface = &SINGLE_WIRE,
     .datatype = UT_DATA_TYPE_TEMP_HUM,
     .datatype = UT_DATA_TYPE_TEMP_HUM,
     .pollingInterval = 2000,
     .pollingInterval = 2000,
@@ -45,7 +47,7 @@ const SensorType DHT22 = {
     .deinitializer = unitemp_singlewire_deinit,
     .deinitializer = unitemp_singlewire_deinit,
     .updater = unitemp_singlewire_update};
     .updater = unitemp_singlewire_update};
 const SensorType AM2320_SW = {
 const SensorType AM2320_SW = {
-    .typename = "AM2320",
+    .typename = "AM2320 (1W)",
     .interface = &SINGLE_WIRE,
     .interface = &SINGLE_WIRE,
     .datatype = UT_DATA_TYPE_TEMP_HUM,
     .datatype = UT_DATA_TYPE_TEMP_HUM,
     .pollingInterval = 2000,
     .pollingInterval = 2000,

BIN
sensors/Sensors.xlsx


+ 9 - 4
unitemp.c

@@ -11,17 +11,17 @@
 //TODO: Реализовать ограничение на добавление датчиков если интерфейс недоступен
 //TODO: Реализовать ограничение на добавление датчиков если интерфейс недоступен
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
 
 
+//TODO: В режиме ожидания датчика указать в какому пину цепляться
 //TODO: В меню выбора нового датчика добавить помогалку выбора датчика
 //TODO: В меню выбора нового датчика добавить помогалку выбора датчика
 //TODO: Добавить настройку единицы измерения давления
 //TODO: Добавить настройку единицы измерения давления
-//TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
-//TODO: В режиме ожидания датчика указать в какому пину цепляться
 //TODO: Ограничивать длину имени датчика только тогда, когда имя действительно не вмещается
 //TODO: Ограничивать длину имени датчика только тогда, когда имя действительно не вмещается
+//TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
 
 
 /* ******************************* Датчики ******************************* */
 /* ******************************* Датчики ******************************* */
-//TODO: Не выкидывать датчик в ошибку при первом же неудачном опросе
+//TODO: Исправить сканирование one wire существующего датчика
 //TODO: Исправить зависание BMP280
 //TODO: Исправить зависание BMP280
+//TODO: Не выкидывать датчик в ошибку при первом же неудачном опросе
 //TODO: BMP280 SPI
 //TODO: BMP280 SPI
-//TODO: Исправить сканирование one wire существующего датчика
 
 
 /* Переменные */
 /* Переменные */
 //Данные приложения
 //Данные приложения
@@ -202,7 +202,10 @@ static bool unitemp_alloc(void) {
 
 
     app->sensors = NULL;
     app->sensors = NULL;
 
 
+    app->buff = malloc(BUFF_SIZE);
+
     unitemp_General_alloc();
     unitemp_General_alloc();
+
     unitemp_MainMenu_alloc();
     unitemp_MainMenu_alloc();
     unitemp_Settings_alloc();
     unitemp_Settings_alloc();
     unitemp_SensorsList_alloc();
     unitemp_SensorsList_alloc();
@@ -231,6 +234,8 @@ static void unitemp_free(void) {
     unitemp_MainMenu_free();
     unitemp_MainMenu_free();
     unitemp_General_free();
     unitemp_General_free();
 
 
+    free(app->buff);
+
     view_dispatcher_free(app->view_dispatcher);
     view_dispatcher_free(app->view_dispatcher);
     furi_record_close(RECORD_GUI);
     furi_record_close(RECORD_GUI);
     //Очистка датчиков
     //Очистка датчиков

+ 5 - 0
unitemp.h

@@ -27,6 +27,8 @@
 #define APP_FILENAME_SETTINGS "settings.cfg"
 #define APP_FILENAME_SETTINGS "settings.cfg"
 //Имя файла с датчиками
 //Имя файла с датчиками
 #define APP_FILENAME_SENSORS "sensors.cfg"
 #define APP_FILENAME_SENSORS "sensors.cfg"
+//Размер буффера текста
+#define BUFF_SIZE 32
 
 
 /* Объявление перечислений */
 /* Объявление перечислений */
 //Единицы измерения
 //Единицы измерения
@@ -63,6 +65,9 @@ typedef struct {
     ViewDispatcher* view_dispatcher;
     ViewDispatcher* view_dispatcher;
     NotificationApp* notifications;
     NotificationApp* notifications;
     Widget* widget;
     Widget* widget;
+
+    //Буффер для различного текста
+    char* buff;
 } Unitemp;
 } Unitemp;
 
 
 /* Объявление прототипов функций */
 /* Объявление прототипов функций */

+ 23 - 29
views/General_view.c

@@ -3,8 +3,6 @@
 
 
 #include <assets_icons.h>
 #include <assets_icons.h>
 
 
-#define BUFF_SIZE 17
-
 static View* view;
 static View* view;
 
 
 typedef enum general_views {
 typedef enum general_views {
@@ -25,8 +23,6 @@ static const uint16_t selector_timeout = 2000;
 
 
 static carousel_info carousel_info_selector = CAROUSEL_VALUES;
 static carousel_info carousel_info_selector = CAROUSEL_VALUES;
 
 
-static char* buff;
-
 static general_view current_view;
 static general_view current_view;
 
 
 static void _draw_temperature(Canvas* canvas, Sensor* sensor, uint8_t x, uint8_t y, Color color) {
 static void _draw_temperature(Canvas* canvas, Sensor* sensor, uint8_t x, uint8_t y, Color color) {
@@ -48,27 +44,27 @@ static void _draw_temperature(Canvas* canvas, Sensor* sensor, uint8_t x, uint8_t
         canvas, x + 3, y + 3, (app->settings.unit == CELSIUS ? &I_temp_C_11x14 : &I_temp_F_11x14));
         canvas, x + 3, y + 3, (app->settings.unit == CELSIUS ? &I_temp_C_11x14 : &I_temp_F_11x14));
 
 
     if((int16_t)sensor->temp == -128 || sensor->status == UT_TIMEOUT) {
     if((int16_t)sensor->temp == -128 || sensor->status == UT_TIMEOUT) {
-        snprintf(buff, BUFF_SIZE, "--");
+        snprintf(app->buff, BUFF_SIZE, "--");
         canvas_set_font(canvas, FontBigNumbers);
         canvas_set_font(canvas, FontBigNumbers);
-        canvas_draw_str_aligned(canvas, x + 27, y + 10, AlignCenter, AlignCenter, buff);
-        snprintf(buff, BUFF_SIZE, ". -");
+        canvas_draw_str_aligned(canvas, x + 27, y + 10, AlignCenter, AlignCenter, app->buff);
+        snprintf(app->buff, BUFF_SIZE, ". -");
         canvas_set_font(canvas, FontPrimary);
         canvas_set_font(canvas, FontPrimary);
-        canvas_draw_str_aligned(canvas, x + 50, y + 10 + 3, AlignRight, AlignCenter, buff);
+        canvas_draw_str_aligned(canvas, x + 50, y + 10 + 3, AlignRight, AlignCenter, app->buff);
         if(color == ColorBlack) canvas_invert_color(canvas);
         if(color == ColorBlack) canvas_invert_color(canvas);
         return;
         return;
     }
     }
 
 
     //Целая часть температуры
     //Целая часть температуры
-    snprintf(buff, BUFF_SIZE, "%d", temp_int);
+    snprintf(app->buff, BUFF_SIZE, "%d", temp_int);
     canvas_set_font(canvas, FontBigNumbers);
     canvas_set_font(canvas, FontBigNumbers);
     canvas_draw_str_aligned(
     canvas_draw_str_aligned(
-        canvas, x + 27 + ((temp_int <= -10) ? 5 : 0), y + 10, AlignCenter, AlignCenter, buff);
+        canvas, x + 27 + ((temp_int <= -10) ? 5 : 0), y + 10, AlignCenter, AlignCenter, app->buff);
     //Печать дробной части температуры в диапазоне от -9 до 99 (когда два знака в числе)
     //Печать дробной части температуры в диапазоне от -9 до 99 (когда два знака в числе)
     if(temp_int > -10 && temp_int <= 99) {
     if(temp_int > -10 && temp_int <= 99) {
-        uint8_t int_len = canvas_string_width(canvas, buff);
-        snprintf(buff, BUFF_SIZE, ".%d", temp_dec);
+        uint8_t int_len = canvas_string_width(canvas, app->buff);
+        snprintf(app->buff, BUFF_SIZE, ".%d", temp_dec);
         canvas_set_font(canvas, FontPrimary);
         canvas_set_font(canvas, FontPrimary);
-        canvas_draw_str(canvas, x + 27 + int_len / 2 + 2, y + 10 + 7, buff);
+        canvas_draw_str(canvas, x + 27 + int_len / 2 + 2, y + 10 + 7, app->buff);
     }
     }
     if(color == ColorBlack) canvas_invert_color(canvas);
     if(color == ColorBlack) canvas_invert_color(canvas);
 }
 }
@@ -82,21 +78,22 @@ static void _draw_humidity(Canvas* canvas, Sensor* sensor, const uint8_t pos[2])
     canvas_draw_icon(canvas, pos[0] + 3, pos[1] + 2, &I_hum_9x15);
     canvas_draw_icon(canvas, pos[0] + 3, pos[1] + 2, &I_hum_9x15);
 
 
     if((int8_t)sensor->hum == -128 || sensor->status == UT_TIMEOUT) {
     if((int8_t)sensor->hum == -128 || sensor->status == UT_TIMEOUT) {
-        snprintf(buff, BUFF_SIZE, "--");
+        snprintf(app->buff, BUFF_SIZE, "--");
         canvas_set_font(canvas, FontBigNumbers);
         canvas_set_font(canvas, FontBigNumbers);
-        canvas_draw_str_aligned(canvas, pos[0] + 27, pos[1] + 10, AlignCenter, AlignCenter, buff);
-        snprintf(buff, BUFF_SIZE, ". -");
+        canvas_draw_str_aligned(
+            canvas, pos[0] + 27, pos[1] + 10, AlignCenter, AlignCenter, app->buff);
+        snprintf(app->buff, BUFF_SIZE, ". -");
         canvas_set_font(canvas, FontPrimary);
         canvas_set_font(canvas, FontPrimary);
         canvas_draw_str_aligned(
         canvas_draw_str_aligned(
-            canvas, pos[0] + 50, pos[1] + 10 + 3, AlignRight, AlignCenter, buff);
+            canvas, pos[0] + 50, pos[1] + 10 + 3, AlignRight, AlignCenter, app->buff);
         return;
         return;
     }
     }
 
 
     //Целая часть влажности
     //Целая часть влажности
-    snprintf(buff, BUFF_SIZE, "%d", (uint8_t)sensor->hum);
+    snprintf(app->buff, BUFF_SIZE, "%d", (uint8_t)sensor->hum);
     canvas_set_font(canvas, FontBigNumbers);
     canvas_set_font(canvas, FontBigNumbers);
-    canvas_draw_str_aligned(canvas, pos[0] + 27, pos[1] + 10, AlignCenter, AlignCenter, buff);
-    uint8_t int_len = canvas_string_width(canvas, buff);
+    canvas_draw_str_aligned(canvas, pos[0] + 27, pos[1] + 10, AlignCenter, AlignCenter, app->buff);
+    uint8_t int_len = canvas_string_width(canvas, app->buff);
     //Единица измерения
     //Единица измерения
     canvas_set_font(canvas, FontPrimary);
     canvas_set_font(canvas, FontPrimary);
     canvas_draw_str(canvas, pos[0] + 27 + int_len / 2 + 4, pos[1] + 10 + 7, "%");
     canvas_draw_str(canvas, pos[0] + 27 + int_len / 2 + 4, pos[1] + 10 + 7, "%");
@@ -112,9 +109,9 @@ static void _draw_pressure(Canvas* canvas, Sensor* sensor) {
     canvas_draw_icon(canvas, x + 3, y + 4, &I_pressure_7x13);
     canvas_draw_icon(canvas, x + 3, y + 4, &I_pressure_7x13);
 
 
     //Давление
     //Давление
-    snprintf(buff, BUFF_SIZE, "%d", (uint16_t)sensor->pressure);
+    snprintf(app->buff, BUFF_SIZE, "%d", (uint16_t)sensor->pressure);
     canvas_set_font(canvas, FontBigNumbers);
     canvas_set_font(canvas, FontBigNumbers);
-    canvas_draw_str_aligned(canvas, x + 30, y + 10, AlignCenter, AlignCenter, buff);
+    canvas_draw_str_aligned(canvas, x + 30, y + 10, AlignCenter, AlignCenter, app->buff);
     //Единица измерения
     //Единица измерения
     canvas_draw_icon(canvas, x + 50, y + 3, &I_mm_hg_17x15);
     canvas_draw_icon(canvas, x + 50, y + 3, &I_mm_hg_17x15);
 }
 }
@@ -274,7 +271,7 @@ static void _draw_carousel_info(Canvas* canvas) {
             unitemp_onewire_sensor_getModel(unitemp_sensor_getActive(sensor_index)));
             unitemp_onewire_sensor_getModel(unitemp_sensor_getActive(sensor_index)));
         canvas_draw_str(canvas, 41, 35, s->bus->gpio->name);
         canvas_draw_str(canvas, 41, 35, s->bus->gpio->name);
         snprintf(
         snprintf(
-            buff,
+            app->buff,
             BUFF_SIZE,
             BUFF_SIZE,
             "%02X%02X%02X%02X%02X%02X%02X%02X",
             "%02X%02X%02X%02X%02X%02X%02X%02X",
             s->deviceID[0],
             s->deviceID[0],
@@ -285,7 +282,7 @@ static void _draw_carousel_info(Canvas* canvas) {
             s->deviceID[5],
             s->deviceID[5],
             s->deviceID[6],
             s->deviceID[6],
             s->deviceID[7]);
             s->deviceID[7]);
-        canvas_draw_str(canvas, 24, 47, buff);
+        canvas_draw_str(canvas, 24, 47, app->buff);
     }
     }
 
 
     if(unitemp_sensor_getActive(sensor_index)->type->interface == &SINGLE_WIRE) {
     if(unitemp_sensor_getActive(sensor_index)->type->interface == &SINGLE_WIRE) {
@@ -308,11 +305,11 @@ static void _draw_carousel_info(Canvas* canvas) {
         canvas_set_font(canvas, FontSecondary);
         canvas_set_font(canvas, FontSecondary);
         canvas_draw_str(canvas, 41, 23, unitemp_sensor_getActive(sensor_index)->type->typename);
         canvas_draw_str(canvas, 41, 23, unitemp_sensor_getActive(sensor_index)->type->typename);
         snprintf(
         snprintf(
-            buff,
+            app->buff,
             BUFF_SIZE,
             BUFF_SIZE,
             "0x%02X",
             "0x%02X",
             ((I2CSensor*)unitemp_sensor_getActive(sensor_index)->instance)->currentI2CAdr);
             ((I2CSensor*)unitemp_sensor_getActive(sensor_index)->instance)->currentI2CAdr);
-        canvas_draw_str(canvas, 57, 35, buff);
+        canvas_draw_str(canvas, 57, 35, app->buff);
     }
     }
 }
 }
 static void _draw_view_sensorsCarousel(Canvas* canvas) {
 static void _draw_view_sensorsCarousel(Canvas* canvas) {
@@ -463,8 +460,6 @@ void unitemp_General_alloc(void) {
     view_set_input_callback(view, _input_callback);
     view_set_input_callback(view, _input_callback);
 
 
     view_dispatcher_add_view(app->view_dispatcher, VIEW_GENERAL, view);
     view_dispatcher_add_view(app->view_dispatcher, VIEW_GENERAL, view);
-
-    buff = malloc(10);
 }
 }
 
 
 void unitemp_General_switch(void) {
 void unitemp_General_switch(void) {
@@ -474,5 +469,4 @@ void unitemp_General_switch(void) {
 
 
 void unitemp_General_free(void) {
 void unitemp_General_free(void) {
     view_free(view);
     view_free(view);
-    free(buff);
 }
 }

+ 1 - 1
views/SensorEdit_view.c

@@ -26,7 +26,7 @@ static VariableItem* onewire_type_item;
 bool _onewire_id_exist(uint8_t* id) {
 bool _onewire_id_exist(uint8_t* id) {
     if(id == NULL) return false;
     if(id == NULL) return false;
     for(uint8_t i = 0; i < unitemp_sensors_getActiveCount(); i++) {
     for(uint8_t i = 0; i < unitemp_sensors_getActiveCount(); i++) {
-        if(unitemp_sensor_getActive(i)->type == &DS18x2x) {
+        if(unitemp_sensor_getActive(i)->type == &Dallas) {
             if(unitemp_onewire_id_compare(
             if(unitemp_onewire_id_compare(
                    id, ((OneWireSensor*)(unitemp_sensor_getActive(i)->instance))->deviceID)) {
                    id, ((OneWireSensor*)(unitemp_sensor_getActive(i)->instance))->deviceID)) {
                 return true;
                 return true;

+ 7 - 2
views/SensorsList_view.c

@@ -82,8 +82,13 @@ void unitemp_SensorsList_alloc(void) {
 
 
     //Добавление в список доступных датчиков
     //Добавление в список доступных датчиков
     for(uint8_t i = 0; i < unitemp_sensors_getTypesCount(); i++) {
     for(uint8_t i = 0; i < unitemp_sensors_getTypesCount(); i++) {
-        variable_item_list_add(
-            variable_item_list, unitemp_sensors_getTypes()[i]->typename, 1, NULL, app);
+        if(unitemp_sensors_getTypes()[i]->altname == NULL) {
+            variable_item_list_add(
+                variable_item_list, unitemp_sensors_getTypes()[i]->typename, 1, NULL, app);
+        } else {
+            variable_item_list_add(
+                variable_item_list, unitemp_sensors_getTypes()[i]->altname, 1, NULL, app);
+        }
     }
     }
 
 
     //Добавление колбека на нажатие средней кнопки
     //Добавление колбека на нажатие средней кнопки