Procházet zdrojové kódy

Merge unitemp from https://github.com/quen0n/unitemp-flipperzero

# Conflicts:
#	unitemp/application.fam
#	unitemp/unitemp.c
#	unitemp/unitemp.h
Willy-JL před 1 rokem
rodič
revize
b5229c4417
5 změnil soubory, kde provedl 37 přidání a 22 odebrání
  1. 10 1
      unitemp/Sensors.c
  2. 2 1
      unitemp/application.fam
  3. 17 11
      unitemp/unitemp.c
  4. 2 2
      unitemp/unitemp.h
  5. 6 7
      unitemp/views/General_view.c

+ 10 - 1
unitemp/Sensors.c

@@ -568,6 +568,8 @@ void unitemp_sensors_free(void) {
 bool unitemp_sensors_init(void) {
     bool result = true;
 
+    app->sensors_ready = false;
+
     //Перебор датчиков из списка
     for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
         //Включение 5V если на порту 1 FZ его нет
@@ -585,12 +587,15 @@ bool unitemp_sensors_init(void) {
         }
         FURI_LOG_I(APP_NAME, "Sensor %s successfully initialized", app->sensors[i]->name);
     }
+
     app->sensors_ready = true;
+
     return result;
 }
 
 bool unitemp_sensors_deInit(void) {
     bool result = true;
+
     //Выключение 5 В если до этого оно не было включено
     if(app->settings.lastOTGState != true) {
         furi_hal_power_disable_otg();
@@ -607,11 +612,14 @@ bool unitemp_sensors_deInit(void) {
             result = false;
         }
     }
+
     return result;
 }
 
 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) {
@@ -655,6 +663,7 @@ UnitempStatus unitemp_sensor_updateData(Sensor* sensor) {
             unitemp_pascalToHPa(sensor);
         }
     }
+
     return sensor->status;
 }
 

+ 2 - 1
unitemp/application.fam

@@ -9,10 +9,11 @@ App(
     stack_size=2 * 1024,
     order=100,
     fap_description="Application for reading temperature, humidity and pressure sensors like a DHT11/22, DS18B20, BMP280, HTU21 and more",
-    fap_version="1.5",
     fap_author="@quen0n & (fixes by @xMasterX)",
     fap_weburl="https://github.com/quen0n/unitemp-flipperzero",
     fap_category="GPIO/Sensors",
     fap_icon="icon.png",
     fap_icon_assets="assets",
+    fap_libs=["assets"],
+    fap_version="1.6",
 )

+ 17 - 11
unitemp/unitemp.c

@@ -16,7 +16,6 @@
     along with this program.  If not, see <https://www.gnu.org/licenses/>.
 */
 #include "unitemp.h"
-#include "interfaces/SingleWireSensor.h"
 #include "Sensors.h"
 #include "./views/UnitempViews.h"
 
@@ -220,16 +219,12 @@ bool unitemp_loadSettings(void) {
     return true;
 }
 
-static void unitemp_sensors_update_callback(void* context) {
-    Unitemp* app = context;
-    if(!app->processing) {
-        view_dispatcher_stop(app->view_dispatcher);
-        return;
-    }
-    if(app->sensors_ready) {
+static void view_dispatcher_tick_event_callback(void* context) {
+    UNUSED(context);
+
+    if((app->sensors_ready) && (app->sensors_update)) {
         unitemp_sensors_updateValues();
     }
-    view_port_update(app->view_port);
 }
 
 /**
@@ -241,8 +236,8 @@ static void unitemp_sensors_update_callback(void* context) {
 static bool unitemp_alloc(void) {
     //Выделение памяти под данные приложения
     app = malloc(sizeof(Unitemp));
-    //Разрешение работы приложения
-    app->processing = true;
+
+    app->sensors_ready = false;
 
     //Открытие хранилища (?)
     app->storage = furi_record_open(RECORD_STORAGE);
@@ -258,6 +253,7 @@ static bool unitemp_alloc(void) {
     app->settings.heat_index = false;
 
     app->gui = furi_record_open(RECORD_GUI);
+
     //Диспетчер окон
     app->view_dispatcher = view_dispatcher_alloc();
 
@@ -288,6 +284,9 @@ static bool unitemp_alloc(void) {
 
     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);
 
     return true;
@@ -349,14 +348,18 @@ int32_t unitemp_app() {
 
     //Загрузка настроек из SD-карты
     unitemp_loadSettings();
+
     //Применение настроек
     if(app->settings.infinityBacklight == true) {
         //Постоянное свечение подсветки
         notification_message(app->notifications, &sequence_display_backlight_enforce_on);
     }
+
     app->settings.lastOTGState = furi_hal_power_is_otg_enabled();
+
     //Загрузка датчиков из SD-карты
     unitemp_sensors_load();
+
     //Инициализация датчиков
     unitemp_sensors_init();
 
@@ -366,11 +369,14 @@ int32_t unitemp_app() {
 
     //Деинициализация датчиков
     unitemp_sensors_deInit();
+
     //Автоматическое управление подсветкой
     if(app->settings.infinityBacklight == true)
         notification_message(app->notifications, &sequence_display_backlight_enforce_auto);
+
     //Освобождение памяти
     unitemp_free();
+
     //Выход
     return 0;
 }

+ 2 - 2
unitemp/unitemp.h

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

+ 6 - 7
unitemp/views/General_view.c

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