Victor 3 år sedan
förälder
incheckning
ce1edad880
4 ändrade filer med 10 tillägg och 4 borttagningar
  1. 7 2
      Sensors.c
  2. 0 1
      Sensors.h
  3. 1 0
      unitemp.c
  4. 2 1
      unitemp.h

+ 7 - 2
Sensors.c

@@ -192,13 +192,16 @@ const GPIO* unitemp_gpio_getAviablePort(const Interface* interface, uint8_t inde
 
 uint8_t unitemp_sensors_getCount(void) {
     if(app->sensors == NULL) return 0;
-    return sizeof(app->sensors) / sizeof(Sensor**);
+    return app->sensors_count;
 }
 
 void unitemp_sensors_add(Sensor* sensor) {
+    FURI_LOG_D(APP_NAME, "realloc to %d", unitemp_sensors_getCount() + 1);
     app->sensors =
         (Sensor**)realloc(app->sensors, (unitemp_sensors_getCount() + 1) * sizeof(Sensor*));
+    FURI_LOG_D(APP_NAME, "adding to %d", unitemp_sensors_getCount());
     app->sensors[unitemp_sensors_getCount()] = sensor;
+    app->sensors_count++;
 }
 
 bool unitemp_sensors_load(void) {
@@ -280,6 +283,7 @@ bool unitemp_sensors_load(void) {
 
         char* args = ((char*)(file_buf + line_end + offset));
         const SensorType* stype = unitemp_sensors_getTypeFromStr(type);
+
         //Проверка типа датчика
         if(stype != NULL && sizeof(name) > 0 && sizeof(name) <= 11) {
             Sensor* sensor =
@@ -414,6 +418,7 @@ Sensor* unitemp_sensor_alloc(char* name, const SensorType* type, char* args) {
 
     //Выход если датчик успешно развёрнут
     if(status) {
+        FURI_LOG_I(APP_NAME, "Sensor %s allocated", name);
         return sensor;
     }
     //Если ни один из типов не подошёл, то выход с очисткой
@@ -453,7 +458,7 @@ void unitemp_sensors_free(void) {
     for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
         unitemp_sensor_free(app->sensors[i]);
     }
-    free(app->sensors);
+    app->sensors_count = 0;
 }
 
 bool unitemp_sensors_init(void) {

+ 0 - 1
Sensors.h

@@ -83,7 +83,6 @@ typedef struct Sensor {
     float temp;
     //Относительная влажность
     float hum;
-
     //Тип датчика
     const SensorType* type;
     //Статус последнего опроса датчика

+ 1 - 0
unitemp.c

@@ -214,6 +214,7 @@ static void unitemp_free(void) {
     //Очистка датчиков
     //Высвыбождение данных датчиков
     unitemp_sensors_free();
+    free(app->sensors);
 
     //Закрытие уведомлений
     furi_record_close(RECORD_NOTIFICATION);

+ 2 - 1
unitemp.h

@@ -54,7 +54,8 @@ typedef struct {
     UnitempSettings settings;
     //Массив указателей на датчики
     Sensor** sensors;
-
+    //Количество загруженных датчиков
+    uint8_t sensors_count;
     //SD-карта
     Storage* storage; //Хранилище
     Stream* file_stream; //Файловый поток