Просмотр исходного кода

Merge pull request #47 from vladin79/master

Fix for issue #41
Victor Nikitchuk 1 год назад
Родитель
Сommit
ebec477b39
5 измененных файлов с 46 добавлено и 23 удалено
  1. 10 1
      Sensors.c
  2. 4 4
      application.fam
  3. 23 8
      unitemp.c
  4. 3 3
      unitemp.h
  5. 6 7
      views/General_view.c

+ 10 - 1
Sensors.c

@@ -561,6 +561,8 @@ void unitemp_sensors_free(void) {
 bool unitemp_sensors_init(void) {
 bool unitemp_sensors_init(void) {
     bool result = true;
     bool result = true;
 
 
+    app->sensors_ready = false;
+
     //Перебор датчиков из списка
     //Перебор датчиков из списка
     for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
     for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
         //Включение 5V если на порту 1 FZ его нет
         //Включение 5V если на порту 1 FZ его нет
@@ -578,12 +580,15 @@ bool unitemp_sensors_init(void) {
         }
         }
         FURI_LOG_I(APP_NAME, "Sensor %s successfully initialized", app->sensors[i]->name);
         FURI_LOG_I(APP_NAME, "Sensor %s successfully initialized", app->sensors[i]->name);
     }
     }
+
     app->sensors_ready = true;
     app->sensors_ready = true;
+
     return result;
     return result;
 }
 }
 
 
 bool unitemp_sensors_deInit(void) {
 bool unitemp_sensors_deInit(void) {
     bool result = true;
     bool result = true;
+
     //Выключение 5 В если до этого оно не было включено
     //Выключение 5 В если до этого оно не было включено
     if(app->settings.lastOTGState != true) {
     if(app->settings.lastOTGState != true) {
         furi_hal_power_disable_otg();
         furi_hal_power_disable_otg();
@@ -600,11 +605,14 @@ bool unitemp_sensors_deInit(void) {
             result = false;
             result = false;
         }
         }
     }
     }
+
     return result;
     return result;
 }
 }
 
 
 UnitempStatus unitemp_sensor_updateData(Sensor* sensor) {
 UnitempStatus unitemp_sensor_updateData(Sensor* sensor) {
-    if(sensor == NULL) return UT_SENSORSTATUS_ERROR;
+    if(sensor == NULL) {
+        return UT_SENSORSTATUS_ERROR;
+    }
 
 
     //Проверка на допустимость опроса датчика
     //Проверка на допустимость опроса датчика
     if(furi_get_tick() - sensor->lastPollingTime < sensor->type->pollingInterval) {
     if(furi_get_tick() - sensor->lastPollingTime < sensor->type->pollingInterval) {
@@ -641,6 +649,7 @@ UnitempStatus unitemp_sensor_updateData(Sensor* sensor) {
             unitemp_pascalToKPa(sensor);
             unitemp_pascalToKPa(sensor);
         }
         }
     }
     }
+
     return sensor->status;
     return sensor->status;
 }
 }
 
 

+ 4 - 4
application.fam

@@ -9,12 +9,12 @@ App(
     ],
     ],
     stack_size=2 * 1024,
     stack_size=2 * 1024,
     order=100,
     order=100,
-    fap_description = "Application for reading temperature, humidity and pressure sensors like a DHT11/22, DS18B20, BMP280, HTU21 and more",
-    fap_author = "Quenon",
-    fap_weburl = "https://github.com/quen0n/Unitemp-Flipper-Zero-Plugin",
+    fap_description="Application for reading temperature, humidity and pressure sensors like a DHT11/22, DS18B20, BMP280, HTU21 and more",
+    fap_author="Quenon",
+    fap_weburl="https://github.com/quen0n/Unitemp-Flipper-Zero-Plugin",
     fap_category="GPIO",
     fap_category="GPIO",
     fap_icon="icon.png",
     fap_icon="icon.png",
     fap_icon_assets="assets",
     fap_icon_assets="assets",
     fap_libs=["assets"],
     fap_libs=["assets"],
-	fap_version="1.5"
+    fap_version="1.6"
 )
 )

+ 23 - 8
unitemp.c

@@ -16,7 +16,6 @@
     along with this program.  If not, see <https://www.gnu.org/licenses/>.
     along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
 */
 #include "unitemp.h"
 #include "unitemp.h"
-#include "interfaces/SingleWireSensor.h"
 #include "Sensors.h"
 #include "Sensors.h"
 #include "./views/UnitempViews.h"
 #include "./views/UnitempViews.h"
 
 
@@ -178,6 +177,14 @@ bool unitemp_loadSettings(void) {
     return true;
     return true;
 }
 }
 
 
+static void view_dispatcher_tick_event_callback(void* context) {
+    UNUSED(context);
+
+    if((app->sensors_ready) && (app->sensors_update)) {
+        unitemp_sensors_updateValues();
+    }
+}
+
 /**
 /**
  * @brief Выделение места под переменные плагина
  * @brief Выделение места под переменные плагина
  * 
  * 
@@ -187,8 +194,8 @@ bool unitemp_loadSettings(void) {
 static bool unitemp_alloc(void) {
 static bool unitemp_alloc(void) {
     //Выделение памяти под данные приложения
     //Выделение памяти под данные приложения
     app = malloc(sizeof(Unitemp));
     app = malloc(sizeof(Unitemp));
-    //Разрешение работы приложения
-    app->processing = true;
+
+    app->sensors_ready = false;
 
 
     //Открытие хранилища (?)
     //Открытие хранилища (?)
     app->storage = furi_record_open(RECORD_STORAGE);
     app->storage = furi_record_open(RECORD_STORAGE);
@@ -202,6 +209,7 @@ static bool unitemp_alloc(void) {
     app->settings.pressure_unit = UT_PRESSURE_MM_HG; //Единица измерения давления - мм рт. ст.
     app->settings.pressure_unit = UT_PRESSURE_MM_HG; //Единица измерения давления - мм рт. ст.
 
 
     app->gui = furi_record_open(RECORD_GUI);
     app->gui = furi_record_open(RECORD_GUI);
+
     //Диспетчер окон
     //Диспетчер окон
     app->view_dispatcher = view_dispatcher_alloc();
     app->view_dispatcher = view_dispatcher_alloc();
 
 
@@ -223,6 +231,9 @@ static bool unitemp_alloc(void) {
     app->popup = popup_alloc();
     app->popup = popup_alloc();
     view_dispatcher_add_view(app->view_dispatcher, UnitempViewPopup, popup_get_view(app->popup));
     view_dispatcher_add_view(app->view_dispatcher, UnitempViewPopup, popup_get_view(app->popup));
 
 
+    view_dispatcher_set_tick_event_callback(
+        app->view_dispatcher, view_dispatcher_tick_event_callback, furi_ms_to_ticks(100));
+
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
     view_dispatcher_attach_to_gui(app->view_dispatcher, app->gui, ViewDispatcherTypeFullscreen);
 
 
     return true;
     return true;
@@ -279,31 +290,35 @@ int32_t unitemp_app() {
 
 
     //Загрузка настроек из SD-карты
     //Загрузка настроек из SD-карты
     unitemp_loadSettings();
     unitemp_loadSettings();
+
     //Применение настроек
     //Применение настроек
     if(app->settings.infinityBacklight == true) {
     if(app->settings.infinityBacklight == true) {
         //Постоянное свечение подсветки
         //Постоянное свечение подсветки
         notification_message(app->notifications, &sequence_display_backlight_enforce_on);
         notification_message(app->notifications, &sequence_display_backlight_enforce_on);
     }
     }
+
     app->settings.lastOTGState = furi_hal_power_is_otg_enabled();
     app->settings.lastOTGState = furi_hal_power_is_otg_enabled();
+
     //Загрузка датчиков из SD-карты
     //Загрузка датчиков из SD-карты
     unitemp_sensors_load();
     unitemp_sensors_load();
+
     //Инициализация датчиков
     //Инициализация датчиков
     unitemp_sensors_init();
     unitemp_sensors_init();
 
 
     unitemp_General_switch();
     unitemp_General_switch();
 
 
-    while(app->processing) {
-        if(app->sensors_ready) unitemp_sensors_updateValues();
-        furi_delay_ms(100);
-    }
+    view_dispatcher_run(app->view_dispatcher);
 
 
     //Деинициализация датчиков
     //Деинициализация датчиков
     unitemp_sensors_deInit();
     unitemp_sensors_deInit();
+
     //Автоматическое управление подсветкой
     //Автоматическое управление подсветкой
     if(app->settings.infinityBacklight == true)
     if(app->settings.infinityBacklight == true)
         notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
         notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
+
     //Освобождение памяти
     //Освобождение памяти
     unitemp_free();
     unitemp_free();
+
     //Выход
     //Выход
     return 0;
     return 0;
-}
+}

+ 3 - 3
unitemp.h

@@ -40,7 +40,7 @@
 //Имя приложения
 //Имя приложения
 #define APP_NAME "Unitemp"
 #define APP_NAME "Unitemp"
 //Версия приложения
 //Версия приложения
-#define UNITEMP_APP_VER "1.4-store"
+#define UNITEMP_APP_VER "1.6"
 //Путь хранения файлов плагина
 //Путь хранения файлов плагина
 #define APP_PATH_FOLDER "/ext/unitemp"
 #define APP_PATH_FOLDER "/ext/unitemp"
 //Имя файла с настройками
 //Имя файла с настройками
@@ -86,8 +86,8 @@ typedef struct {
 //Основная структура плагина
 //Основная структура плагина
 typedef struct {
 typedef struct {
     //Система
     //Система
-    bool processing; //Флаг работы приложения. При ложном значении приложение закрывается
     bool sensors_ready; //Флаг готовности датчиков к опросу
     bool sensors_ready; //Флаг готовности датчиков к опросу
+    bool sensors_update; // Флаг допустимости опроса датчиков
     //Основные настройки
     //Основные настройки
     UnitempSettings settings;
     UnitempSettings settings;
     //Массив указателей на датчики
     //Массив указателей на датчики
@@ -151,4 +151,4 @@ bool unitemp_saveSettings(void);
 bool unitemp_loadSettings(void);
 bool unitemp_loadSettings(void);
 
 
 extern Unitemp* app;
 extern Unitemp* app;
-#endif
+#endif

+ 6 - 7
views/General_view.c

@@ -438,11 +438,11 @@ static void _draw_view_sensorsCarousel(Canvas* canvas) {
 static void _draw_callback(Canvas* canvas, void* _model) {
 static void _draw_callback(Canvas* canvas, void* _model) {
     UNUSED(_model);
     UNUSED(_model);
 
 
-    app->sensors_ready = true;
+    app->sensors_update = true;
 
 
     uint8_t sensors_count = unitemp_sensors_getActiveCount();
     uint8_t sensors_count = unitemp_sensors_getActiveCount();
 
 
-    if(generalview_sensor_index + 1 > sensors_count) generalview_sensor_index = 0;
+    if(generalview_sensor_index >= sensors_count) generalview_sensor_index = 0;
 
 
     if(sensors_count == 0) {
     if(sensors_count == 0) {
         current_view = G_NO_SENSORS_VIEW;
         current_view = G_NO_SENSORS_VIEW;
@@ -462,14 +462,14 @@ static bool _input_callback(InputEvent* event, void* context) {
     if(event->key == InputKeyOk && event->type == InputTypeShort) {
     if(event->key == InputKeyOk && event->type == InputTypeShort) {
         //Меню добавления датчика при их отсутствии
         //Меню добавления датчика при их отсутствии
         if(current_view == G_NO_SENSORS_VIEW) {
         if(current_view == G_NO_SENSORS_VIEW) {
-            app->sensors_ready = false;
+            app->sensors_update = false;
             unitemp_SensorsList_switch();
             unitemp_SensorsList_switch();
         } else if(current_view == G_LIST_VIEW) {
         } else if(current_view == G_LIST_VIEW) {
             //Переход в главное меню при выключенном селекторе
             //Переход в главное меню при выключенном селекторе
-            app->sensors_ready = false;
+            app->sensors_update = false;
             unitemp_MainMenu_switch();
             unitemp_MainMenu_switch();
         } else if(current_view == G_CAROUSEL_VIEW) {
         } else if(current_view == G_CAROUSEL_VIEW) {
-            app->sensors_ready = false;
+            app->sensors_update = false;
             unitemp_SensorActions_switch(unitemp_sensor_getActive(generalview_sensor_index));
             unitemp_SensorActions_switch(unitemp_sensor_getActive(generalview_sensor_index));
         }
         }
     }
     }
@@ -553,7 +553,7 @@ static bool _input_callback(InputEvent* event, void* context) {
         //Выход из приложения при карусели или отсутствии датчиков
         //Выход из приложения при карусели или отсутствии датчиков
         if(current_view == G_NO_SENSORS_VIEW ||
         if(current_view == G_NO_SENSORS_VIEW ||
            ((current_view == G_CAROUSEL_VIEW) && (carousel_info_selector == CAROUSEL_VALUES))) {
            ((current_view == G_CAROUSEL_VIEW) && (carousel_info_selector == CAROUSEL_VALUES))) {
-            app->processing = false;
+            view_dispatcher_stop(app->view_dispatcher);
             return true;
             return true;
         }
         }
         //Переключение селектора вида карусели
         //Переключение селектора вида карусели
@@ -585,7 +585,6 @@ void unitemp_General_alloc(void) {
 }
 }
 
 
 void unitemp_General_switch(void) {
 void unitemp_General_switch(void) {
-    app->sensors_ready = true;
     view_dispatcher_switch_to_view(app->view_dispatcher, UnitempViewGeneral);
     view_dispatcher_switch_to_view(app->view_dispatcher, UnitempViewGeneral);
 }
 }