Quellcode durchsuchen

Fixed incorrect determination of the GPIO index when editing a sensor

Victor vor 3 Jahren
Ursprung
Commit
f0150887a5
7 geänderte Dateien mit 63 neuen und 12 gelöschten Zeilen
  1. 16 1
      Sensors.c
  2. 20 1
      interfaces/OneWireSensor.c
  3. 6 0
      sensors/BMP280.c
  4. 4 4
      unitemp.c
  5. 2 0
      unitemp.h
  6. 1 1
      views/General_view.c
  7. 14 5
      views/SensorEdit_view.c

+ 16 - 1
Sensors.c

@@ -251,7 +251,9 @@ void unitemp_sensors_add(Sensor* sensor) {
 }
 }
 
 
 bool unitemp_sensors_load(void) {
 bool unitemp_sensors_load(void) {
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(APP_NAME, "Loading sensors...");
     FURI_LOG_D(APP_NAME, "Loading sensors...");
+#endif
 
 
     //Выделение памяти на поток
     //Выделение памяти на поток
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
@@ -352,7 +354,9 @@ bool unitemp_sensors_load(void) {
 }
 }
 
 
 bool unitemp_sensors_save(void) {
 bool unitemp_sensors_save(void) {
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(APP_NAME, "Saving sensors...");
     FURI_LOG_D(APP_NAME, "Saving sensors...");
+#endif
 
 
     //Выделение памяти для потока
     //Выделение памяти для потока
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
@@ -429,7 +433,7 @@ void unitemp_sensors_reload(void) {
 
 
 bool unitemp_sensor_isContains(Sensor* sensor) {
 bool unitemp_sensor_isContains(Sensor* sensor) {
     for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
     for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
-        if(unitemp_sensor_getActive(i) == sensor) return true;
+        if(app->sensors[i] == sensor) return true;
     }
     }
     return false;
     return false;
 }
 }
@@ -494,12 +498,15 @@ void unitemp_sensor_free(Sensor* sensor) {
     bool status = false;
     bool status = false;
     //Высвобождение памяти под инстанс
     //Высвобождение памяти под инстанс
     status = sensor->type->interface->mem_releaser(sensor);
     status = sensor->type->interface->mem_releaser(sensor);
+    UNUSED(status);
+#ifdef UNITEMP_DEBUG
 
 
     if(status) {
     if(status) {
         FURI_LOG_D(APP_NAME, "Sensor %s memory successfully released", sensor->name);
         FURI_LOG_D(APP_NAME, "Sensor %s memory successfully released", sensor->name);
     } else {
     } else {
         FURI_LOG_E(APP_NAME, "Sensor %s memory is not released", sensor->name);
         FURI_LOG_E(APP_NAME, "Sensor %s memory is not released", sensor->name);
     }
     }
+#endif
     free(sensor->name);
     free(sensor->name);
     //free(sensor);
     //free(sensor);
 }
 }
@@ -520,7 +527,9 @@ bool unitemp_sensors_init(void) {
         //Может пропасть при отключении USB
         //Может пропасть при отключении USB
         if(furi_hal_power_is_otg_enabled() != true) {
         if(furi_hal_power_is_otg_enabled() != true) {
             furi_hal_power_enable_otg();
             furi_hal_power_enable_otg();
+#ifdef UNITEMP_DEBUG
             FURI_LOG_D(APP_NAME, "OTG enabled");
             FURI_LOG_D(APP_NAME, "OTG enabled");
+#endif
         }
         }
         if(!(*app->sensors[i]->type->initializer)(app->sensors[i])) {
         if(!(*app->sensors[i]->type->initializer)(app->sensors[i])) {
             FURI_LOG_E(
             FURI_LOG_E(
@@ -529,7 +538,9 @@ bool unitemp_sensors_init(void) {
                 app->sensors[i]->name);
                 app->sensors[i]->name);
             result = false;
             result = false;
         }
         }
+#ifdef UNITEMP_DEBUG
         FURI_LOG_D(APP_NAME, "Sensor %s successfully initialized", app->sensors[i]->name);
         FURI_LOG_D(APP_NAME, "Sensor %s successfully initialized", app->sensors[i]->name);
+#endif
     }
     }
     app->sensors_ready = true;
     app->sensors_ready = true;
     return result;
     return result;
@@ -540,7 +551,9 @@ bool unitemp_sensors_deInit(void) {
     //Выключение 5 В если до этого оно не было включено
     //Выключение 5 В если до этого оно не было включено
     if(app->settings.lastOTGState != true) {
     if(app->settings.lastOTGState != true) {
         furi_hal_power_disable_otg();
         furi_hal_power_disable_otg();
+#ifdef UNITEMP_DEBUG
         FURI_LOG_D(APP_NAME, "OTG disabled");
         FURI_LOG_D(APP_NAME, "OTG disabled");
+#endif
     }
     }
 
 
     //Перебор датчиков из списка
     //Перебор датчиков из списка
@@ -576,8 +589,10 @@ UnitempStatus unitemp_sensor_updateData(Sensor* sensor) {
 
 
     sensor->status = sensor->type->interface->updater(sensor);
     sensor->status = sensor->type->interface->updater(sensor);
 
 
+#ifdef UNITEMP_DEBUG
     if(sensor->status != UT_OK && sensor->status != UT_POLLING)
     if(sensor->status != UT_OK && sensor->status != UT_POLLING)
         FURI_LOG_D(APP_NAME, "Sensor %s update status %d", sensor->name, sensor->status);
         FURI_LOG_D(APP_NAME, "Sensor %s update status %d", sensor->name, sensor->status);
+#endif
 
 
     if(app->settings.unit == FAHRENHEIT && sensor->status == UT_OK)
     if(app->settings.unit == FAHRENHEIT && sensor->status == UT_OK)
         uintemp_celsiumToFarengate(sensor);
         uintemp_celsiumToFarengate(sensor);

+ 20 - 1
interfaces/OneWireSensor.c

@@ -41,8 +41,9 @@ OneWireBus* uintemp_onewire_bus_alloc(const GPIO* gpio) {
     bus->device_count = 0;
     bus->device_count = 0;
     bus->gpio = gpio;
     bus->gpio = gpio;
     bus->powerMode = PWR_ACTIVE;
     bus->powerMode = PWR_ACTIVE;
-
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(APP_NAME, "one wire bus (port %d) allocated", gpio->num);
     FURI_LOG_D(APP_NAME, "one wire bus (port %d) allocated", gpio->num);
+#endif
 
 
     return bus;
     return bus;
 }
 }
@@ -66,7 +67,10 @@ bool unitemp_onewire_bus_init(OneWireBus* bus) {
     return true;
     return true;
 }
 }
 bool unitemp_onewire_bus_deinit(OneWireBus* bus) {
 bool unitemp_onewire_bus_deinit(OneWireBus* bus) {
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(APP_NAME, "devices on wire %d: %d", bus->gpio->num, bus->device_count);
     FURI_LOG_D(APP_NAME, "devices on wire %d: %d", bus->gpio->num, bus->device_count);
+#endif
+
     bus->device_count--;
     bus->device_count--;
     if(bus->device_count <= 0) {
     if(bus->device_count <= 0) {
         bus->device_count = 0;
         bus->device_count = 0;
@@ -215,11 +219,17 @@ void unitemp_onewire_bus_enum_init(void) {
 uint8_t* unitemp_onewire_bus_enum_next(OneWireBus* bus) {
 uint8_t* unitemp_onewire_bus_enum_next(OneWireBus* bus) {
     furi_delay_ms(10);
     furi_delay_ms(10);
     if(!onewire_enum_fork_bit) { // Если на предыдущем шаге уже не было разногласий
     if(!onewire_enum_fork_bit) { // Если на предыдущем шаге уже не было разногласий
+#ifdef UNITEMP_DEBUG
         FURI_LOG_D(APP_NAME, "All devices on wire %d is found", unitemp_gpio_toInt(bus->gpio));
         FURI_LOG_D(APP_NAME, "All devices on wire %d is found", unitemp_gpio_toInt(bus->gpio));
+#endif
+
         return 0; // то просто выходим ничего не возвращая
         return 0; // то просто выходим ничего не возвращая
     }
     }
     if(!unitemp_onewire_bus_start(bus)) {
     if(!unitemp_onewire_bus_start(bus)) {
+#ifdef UNITEMP_DEBUG
         FURI_LOG_D(APP_NAME, "Wire %d is empty", unitemp_gpio_toInt(bus->gpio));
         FURI_LOG_D(APP_NAME, "Wire %d is empty", unitemp_gpio_toInt(bus->gpio));
+#endif
+
         return 0;
         return 0;
     }
     }
     uint8_t bp = 8;
     uint8_t bp = 8;
@@ -253,7 +263,10 @@ uint8_t* unitemp_onewire_bus_enum_next(OneWireBus* bus) {
             if(!not1) { // Присутствует единица
             if(!not1) { // Присутствует единица
                 next |= 0x80;
                 next |= 0x80;
             } else { // Нет ни нулей ни единиц - ошибочная ситуация
             } else { // Нет ни нулей ни единиц - ошибочная ситуация
+#ifdef UNITEMP_DEBUG
                 FURI_LOG_D(APP_NAME, "Wrong wire %d situation", unitemp_gpio_toInt(bus->gpio));
                 FURI_LOG_D(APP_NAME, "Wrong wire %d situation", unitemp_gpio_toInt(bus->gpio));
+#endif
+
                 return 0;
                 return 0;
             }
             }
         }
         }
@@ -389,7 +402,10 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
             unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad
             unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad
             unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9);
             unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9);
             if(!unitemp_onewire_CRC_check(buff, 9)) {
             if(!unitemp_onewire_CRC_check(buff, 9)) {
+#ifdef UNITEMP_DEBUG
                 FURI_LOG_D(APP_NAME, "Sensor %s is not found", sensor->name);
                 FURI_LOG_D(APP_NAME, "Sensor %s is not found", sensor->name);
+#endif
+
                 return UT_TIMEOUT;
                 return UT_TIMEOUT;
             }
             }
         }
         }
@@ -414,7 +430,10 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
         unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad
         unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad
         unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9);
         unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9);
         if(!unitemp_onewire_CRC_check(buff, 9)) {
         if(!unitemp_onewire_CRC_check(buff, 9)) {
+#ifdef UNITEMP_DEBUG
             FURI_LOG_D(APP_NAME, "Failed CRC check: %s", sensor->name);
             FURI_LOG_D(APP_NAME, "Failed CRC check: %s", sensor->name);
+#endif
+
             return UT_BADCRC;
             return UT_BADCRC;
         }
         }
         int16_t raw = buff[0] | ((int16_t)buff[1] << 8);
         int16_t raw = buff[0] | ((int16_t)buff[1] << 8);

+ 6 - 0
sensors/BMP280.c

@@ -100,6 +100,7 @@ static bool bmp280_readCalValues(I2CSensor* i2c_sensor) {
     if(!unitemp_i2c_readRegArray(
     if(!unitemp_i2c_readRegArray(
            i2c_sensor, TEMP_CAL_START_ADDR, 6, (uint8_t*)&bmp280_instance->temp_cal))
            i2c_sensor, TEMP_CAL_START_ADDR, 6, (uint8_t*)&bmp280_instance->temp_cal))
         return false;
         return false;
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(
     FURI_LOG_D(
         APP_NAME,
         APP_NAME,
         "Sensor BMP280 (0x%02X) calibration values: T1: %d, T2: %d, T3: %d",
         "Sensor BMP280 (0x%02X) calibration values: T1: %d, T2: %d, T3: %d",
@@ -107,9 +108,12 @@ static bool bmp280_readCalValues(I2CSensor* i2c_sensor) {
         bmp280_instance->temp_cal.dig_T1,
         bmp280_instance->temp_cal.dig_T1,
         bmp280_instance->temp_cal.dig_T2,
         bmp280_instance->temp_cal.dig_T2,
         bmp280_instance->temp_cal.dig_T3);
         bmp280_instance->temp_cal.dig_T3);
+#endif
+
     if(!unitemp_i2c_readRegArray(
     if(!unitemp_i2c_readRegArray(
            i2c_sensor, PRESS_CAL_START_ADDR, 18, (uint8_t*)&bmp280_instance->press_cal))
            i2c_sensor, PRESS_CAL_START_ADDR, 18, (uint8_t*)&bmp280_instance->press_cal))
         return false;
         return false;
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(
     FURI_LOG_D(
         APP_NAME,
         APP_NAME,
         "Sensor BMP280 (0x%02X): P1-9: %d, %d, %d, %d, %d, %d, %d, %d, %d",
         "Sensor BMP280 (0x%02X): P1-9: %d, %d, %d, %d, %d, %d, %d, %d, %d",
@@ -123,6 +127,8 @@ static bool bmp280_readCalValues(I2CSensor* i2c_sensor) {
         bmp280_instance->press_cal.dig_P7,
         bmp280_instance->press_cal.dig_P7,
         bmp280_instance->press_cal.dig_P8,
         bmp280_instance->press_cal.dig_P8,
         bmp280_instance->press_cal.dig_P9);
         bmp280_instance->press_cal.dig_P9);
+#endif
+
     bmp280_instance->last_cal_update_time = furi_get_tick();
     bmp280_instance->last_cal_update_time = furi_get_tick();
     return true;
     return true;
 }
 }

+ 4 - 4
unitemp.c

@@ -7,14 +7,11 @@
 #include <m-string.h>
 #include <m-string.h>
 
 
 /* ****************************** Интерфейс ****************************** */
 /* ****************************** Интерфейс ****************************** */
-//TODO: В меню выбора нового датчика добавить помогалку выбора датчика
-//TODO: Help, about
+//TODO: about
 //TODO: Добавить настройку единицы измерения давления
 //TODO: Добавить настройку единицы измерения давления
 //TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
 //TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
 
 
 /* ******************************* Датчики ******************************* */
 /* ******************************* Датчики ******************************* */
-//TODO: Исправить некорректное отображение пина при редактировании (отловлено на DHT11)
-
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
 //TODO: BMP280 SPI
 //TODO: BMP280 SPI
 
 
@@ -72,7 +69,10 @@ bool unitemp_saveSettings(void) {
 }
 }
 
 
 bool unitemp_loadSettings(void) {
 bool unitemp_loadSettings(void) {
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(APP_NAME, "Loading settings...");
     FURI_LOG_D(APP_NAME, "Loading settings...");
+#endif
+
     //Выделение памяти на поток
     //Выделение памяти на поток
     app->file_stream = file_stream_alloc(app->storage);
     app->file_stream = file_stream_alloc(app->storage);
 
 

+ 2 - 0
unitemp.h

@@ -31,6 +31,8 @@
 //Размер буффера текста
 //Размер буффера текста
 #define BUFF_SIZE 32
 #define BUFF_SIZE 32
 
 
+#define UNITEMP_DEBUG
+
 /* Объявление перечислений */
 /* Объявление перечислений */
 //Единицы измерения
 //Единицы измерения
 typedef enum { CELSIUS, FAHRENHEIT } measureUnit;
 typedef enum { CELSIUS, FAHRENHEIT } measureUnit;

+ 1 - 1
views/General_view.c

@@ -394,7 +394,7 @@ static void _draw_callback(Canvas* canvas, void* _model) {
 }
 }
 
 
 static bool _input_callback(InputEvent* event, void* context) {
 static bool _input_callback(InputEvent* event, void* context) {
-    Unitemp* app = context;
+    UNUSED(context);
 
 
     //Обработка короткого нажатия "ок"
     //Обработка короткого нажатия "ок"
     if(event->key == InputKeyOk && event->type == InputTypeShort) {
     if(event->key == InputKeyOk && event->type == InputTypeShort) {

+ 14 - 5
views/SensorEdit_view.c

@@ -40,11 +40,14 @@ bool _onewire_id_exist(uint8_t* id) {
 
 
 static void _onewire_scan(void) {
 static void _onewire_scan(void) {
     OneWireSensor* ow_sensor = editable_sensor->instance;
     OneWireSensor* ow_sensor = editable_sensor->instance;
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(
     FURI_LOG_D(
         APP_NAME,
         APP_NAME,
         "devices on wire %d: %d",
         "devices on wire %d: %d",
         ow_sensor->bus->gpio->num,
         ow_sensor->bus->gpio->num,
         ow_sensor->bus->device_count);
         ow_sensor->bus->device_count);
+#endif
+
     //Сканирование шины one wire
     //Сканирование шины one wire
     unitemp_onewire_bus_init(ow_sensor->bus);
     unitemp_onewire_bus_init(ow_sensor->bus);
     uint8_t* id = NULL;
     uint8_t* id = NULL;
@@ -66,7 +69,7 @@ static void _onewire_scan(void) {
             unitemp_onewire_bus_deinit(ow_sensor->bus);
             unitemp_onewire_bus_deinit(ow_sensor->bus);
             variable_item_set_current_value_text(onewire_addr_item, "empty");
             variable_item_set_current_value_text(onewire_addr_item, "empty");
             variable_item_set_current_value_text(
             variable_item_set_current_value_text(
-                onewire_type_item, editable_sensor->type->typename);
+                onewire_type_item, unitemp_onewire_sensor_getModel(editable_sensor));
             return;
             return;
         }
         }
     }
     }
@@ -75,6 +78,7 @@ static void _onewire_scan(void) {
 
 
     memcpy(ow_sensor->deviceID, id, 8);
     memcpy(ow_sensor->deviceID, id, 8);
     ow_sensor->familyCode = id[0];
     ow_sensor->familyCode = id[0];
+#ifdef UNITEMP_DEBUG
     FURI_LOG_D(
     FURI_LOG_D(
         APP_NAME,
         APP_NAME,
         "Found sensor's ID: %02X%02X%02X%02X%02X%02X%02X%02X",
         "Found sensor's ID: %02X%02X%02X%02X%02X%02X%02X%02X",
@@ -86,6 +90,7 @@ static void _onewire_scan(void) {
         id[5],
         id[5],
         id[6],
         id[6],
         id[7]);
         id[7]);
+#endif
 
 
     if(ow_sensor->familyCode != 0) {
     if(ow_sensor->familyCode != 0) {
         char id_buff[10];
         char id_buff[10];
@@ -98,12 +103,11 @@ static void _onewire_scan(void) {
             ow_sensor->deviceID[3]);
             ow_sensor->deviceID[3]);
         //А больше не лезет(
         //А больше не лезет(
         variable_item_set_current_value_text(onewire_addr_item, id_buff);
         variable_item_set_current_value_text(onewire_addr_item, id_buff);
-        variable_item_set_current_value_text(
-            onewire_type_item, unitemp_onewire_sensor_getModel(editable_sensor));
     } else {
     } else {
         variable_item_set_current_value_text(onewire_addr_item, "empty");
         variable_item_set_current_value_text(onewire_addr_item, "empty");
-        variable_item_set_current_value_text(onewire_type_item, editable_sensor->type->typename);
     }
     }
+    variable_item_set_current_value_text(
+        onewire_type_item, unitemp_onewire_sensor_getModel(editable_sensor));
 }
 }
 
 
 /**
 /**
@@ -256,7 +260,12 @@ void unitemp_SensorEdit_switch(Sensor* sensor) {
 
 
     //Порт подключения датчка (для one wire и single wire)
     //Порт подключения датчка (для one wire и single wire)
     if(sensor->type->interface == &ONE_WIRE || sensor->type->interface == &SINGLE_WIRE) {
     if(sensor->type->interface == &ONE_WIRE || sensor->type->interface == &SINGLE_WIRE) {
-        initial_gpio = ((SingleWireSensor*)editable_sensor->instance)->gpio;
+        if(sensor->type->interface == &ONE_WIRE) {
+            initial_gpio = ((OneWireSensor*)editable_sensor->instance)->bus->gpio;
+        } else {
+            initial_gpio = ((SingleWireSensor*)editable_sensor->instance)->gpio;
+        }
+
         uint8_t aviable_gpio_count =
         uint8_t aviable_gpio_count =
             unitemp_gpio_getAviablePortsCount(sensor->type->interface, initial_gpio);
             unitemp_gpio_getAviablePortsCount(sensor->type->interface, initial_gpio);
         VariableItem* item = variable_item_list_add(
         VariableItem* item = variable_item_list_add(