Victor 3 лет назад
Родитель
Сommit
574264ef4e
5 измененных файлов с 29 добавлено и 6 удалено
  1. 12 1
      Sensors.c
  2. 8 1
      Sensors.h
  3. 6 3
      unitemp.c
  4. 2 0
      views/General_view.c
  5. 1 1
      views/SensorActions_view.c

+ 12 - 1
Sensors.c

@@ -191,6 +191,17 @@ const GPIO*
     return NULL;
 }
 
+void unitemp_sensor_delete(Sensor* sensor) {
+    for(uint8_t i = 0; i < app->sensors_count; i++) {
+        if(app->sensors[i] == sensor) {
+            app->sensors[i]->status = UT_INACTIVE;
+            unitemp_sensors_save();
+            unitemp_sensors_reload();
+            return;
+        }
+    }
+}
+
 Sensor* unitemp_sensor_getActive(uint8_t index) {
     uint8_t aviable_index = 0;
     for(uint8_t i = 0; i < app->sensors_count; i++) {
@@ -353,7 +364,7 @@ bool unitemp_sensors_save(void) {
     }
 
     //Сохранение датчиков
-    for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
+    for(uint8_t i = 0; i < unitemp_sensors_getActiveCount(); i++) {
         if(unitemp_sensor_getActive(i)->type->interface == &SINGLE_WIRE) {
             stream_write_format(
                 app->file_stream,

+ 8 - 1
Sensors.h

@@ -169,11 +169,18 @@ bool unitemp_sensors_load();
 void unitemp_sensors_reload(void);
 
 /**
- * @brief Сохранение настроек на SD-карту
+ * @brief Сохранение датчиков на SD-карту
  * @return Истина если сохранение прошло успешно
  */
 bool unitemp_sensors_save(void);
 
+/**
+ * @brief Удаление датчика
+ * 
+ * @param sensor Указатель на датчик
+ */
+void unitemp_sensor_delete(Sensor* sensor);
+
 /**
  * @brief Инициализация загруженных датчиков
  * @return Истина если всё прошло успешно

+ 6 - 3
unitemp.c

@@ -7,20 +7,23 @@
 #include <m-string.h>
 
 /* ****************************** Интерфейс ****************************** */
-//TODO: В меню выбора нового датчика добавить помогалку выбора датчика
-//TODO: Реализовать ограничение на добавление датчиков если интерфейс недоступен
+//TODO: Прибавлять цифру к стартовому имени датчка при наличии подобного
+//TODO: Вынести информирующих дельфинов в отдельную функцию
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
+//TODO: Реализовать ограничение на добавление датчиков если интерфейс недоступен
+//TODO: В меню выбора нового датчика добавить помогалку выбора датчика
 //TODO: Добавить настройку единицы измерения давления
 //TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
 //TODO: В режиме ожидания датчика указать в какому пину цепляться
 //TODO: Ограничивать длину имени датчика только тогда, когда имя действительно не вмещается
-//TODO: Вынести информирующих дельфинов в отдельную функцию
 
 /* ******************************* Датчики ******************************* */
 //TODO: Не выкидывать датчик в ошибку при первом же неудачном опросе
 //TODO: Исправить зависание BMP280
 //TODO: BMP280 SPI
 //TODO: Исправить сканирование one wire существующего датчика
+//TODO: Отловить и исправить BusFault при добавлении I2C датчика
+//TODO: Отловить и исправить HardFault при удалении I2C датчика
 
 /* Переменные */
 //Данные приложения

+ 2 - 0
views/General_view.c

@@ -356,6 +356,8 @@ static void _draw_callback(Canvas* canvas, void* _model) {
 
     uint8_t sensors_count = unitemp_sensors_getActiveCount();
 
+    if(sensor_index + 1 > sensors_count) sensor_index = 0;
+
     if(sensors_count == 0) {
         current_view = G_NO_SENSORS_VIEW;
         _draw_view_noSensors(canvas);

+ 1 - 1
views/SensorActions_view.c

@@ -39,7 +39,7 @@ static void _delete_click_callback(GuiButtonType result, InputType type, void* c
     //Коротко нажата правая кнопка (Delete)
     if(result == GuiButtonTypeRight && type == InputTypeShort) {
         //Удаление датчика
-        //
+        unitemp_sensor_delete(current_sensor);
         //Выход из меню
         unitemp_General_switch();
     }