Przeglądaj źródła

Minor GUI improvements

Victor 3 lat temu
rodzic
commit
97775f85e4

+ 11 - 11
Sensors.c

@@ -207,7 +207,7 @@ const GPIO*
 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;
+            app->sensors[i]->status = UT_SENSORSTATUS_INACTIVE;
             unitemp_sensors_save();
             unitemp_sensors_reload();
             return;
@@ -218,7 +218,7 @@ void unitemp_sensor_delete(Sensor* sensor) {
 Sensor* unitemp_sensor_getActive(uint8_t index) {
     uint8_t aviable_index = 0;
     for(uint8_t i = 0; i < app->sensors_count; i++) {
-        if(app->sensors[i]->status != UT_INACTIVE) {
+        if(app->sensors[i]->status != UT_SENSORSTATUS_INACTIVE) {
             if(aviable_index == index) {
                 return app->sensors[i];
             } else {
@@ -238,7 +238,7 @@ uint8_t unitemp_sensors_getActiveCount(void) {
     if(app->sensors == NULL) return 0;
     uint8_t counter = 0;
     for(uint8_t i = 0; i < unitemp_sensors_getCount(); i++) {
-        if(app->sensors[i]->status != UT_INACTIVE) counter++;
+        if(app->sensors[i]->status != UT_SENSORSTATUS_INACTIVE) counter++;
     }
     return counter;
 }
@@ -459,7 +459,7 @@ Sensor* unitemp_sensor_alloc(char* name, const SensorType* type, char* args) {
     //Тип датчика
     sensor->type = type;
     //Статус датчика по умолчанию - ошибка
-    sensor->status = UT_ERROR;
+    sensor->status = UT_SENSORSTATUS_ERROR;
     //Время последнего опроса
     sensor->lastPollingTime =
         furi_get_tick() - 10000; //чтобы первый опрос произошёл как можно раньше
@@ -570,15 +570,15 @@ bool unitemp_sensors_deInit(void) {
 }
 
 UnitempStatus unitemp_sensor_updateData(Sensor* sensor) {
-    if(sensor == NULL) return UT_ERROR;
+    if(sensor == NULL) return UT_SENSORSTATUS_ERROR;
 
     //Проверка на допустимость опроса датчика
     if(furi_get_tick() - sensor->lastPollingTime < sensor->type->pollingInterval) {
         //Возврат ошибки если последний опрос датчика был неудачным
-        if(sensor->status == UT_TIMEOUT) {
-            return UT_TIMEOUT;
+        if(sensor->status == UT_SENSORSTATUS_TIMEOUT) {
+            return UT_SENSORSTATUS_TIMEOUT;
         }
-        return UT_EARLYPOOL;
+        return UT_SENSORSTATUS_EARLYPOOL;
     }
 
     sensor->lastPollingTime = furi_get_tick();
@@ -590,13 +590,13 @@ UnitempStatus unitemp_sensor_updateData(Sensor* sensor) {
     sensor->status = sensor->type->interface->updater(sensor);
 
 #ifdef UNITEMP_DEBUG
-    if(sensor->status != UT_OK && sensor->status != UT_POLLING)
+    if(sensor->status != UT_SENSORSTATUS_OK && sensor->status != UT_SENSORSTATUS_POLLING)
         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_SENSORSTATUS_OK)
         uintemp_celsiumToFarengate(sensor);
-    if(sensor->status == UT_OK) {
+    if(sensor->status == UT_SENSORSTATUS_OK) {
         unitemp_pascalToMmHg(sensor);
     }
     return sensor->status;

+ 7 - 7
Sensors.h

@@ -18,13 +18,13 @@ typedef enum {
 
 //Типы возвращаемых данных
 typedef enum {
-    UT_OK, //Всё хорошо, опрос успешен
-    UT_TIMEOUT, //Датчик не отозвался
-    UT_EARLYPOOL, //Опрос раньше положенной задержки
-    UT_BADCRC, //Неверная контрольная сумма
-    UT_ERROR, //Прочие ошибки
-    UT_POLLING, //В датчике происходит преобразование
-    UT_INACTIVE, //Датчик на редактировании или удалён
+    UT_SENSORSTATUS_OK, //Всё хорошо, опрос успешен
+    UT_SENSORSTATUS_TIMEOUT, //Датчик не отозвался
+    UT_SENSORSTATUS_EARLYPOOL, //Опрос раньше положенной задержки
+    UT_SENSORSTATUS_BADCRC, //Неверная контрольная сумма
+    UT_SENSORSTATUS_ERROR, //Прочие ошибки
+    UT_SENSORSTATUS_POLLING, //В датчике происходит преобразование
+    UT_SENSORSTATUS_INACTIVE, //Датчик на редактировании или удалён
 
 } UnitempStatus;
 

+ 1 - 1
interfaces/I2CSensor.c

@@ -71,7 +71,7 @@ bool unitemp_I2C_sensor_free(Sensor* sensor) {
 }
 
 UnitempStatus unitemp_I2C_sensor_update(Sensor* sensor) {
-    if(sensor->status != UT_OK) {
+    if(sensor->status != UT_SENSORSTATUS_OK) {
         sensor->type->initializer(sensor);
     }
     return sensor->type->updater(sensor);

+ 9 - 9
interfaces/OneWireSensor.c

@@ -394,10 +394,10 @@ bool unitemp_onewire_sensor_deinit(Sensor* sensor) {
 UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
     OneWireSensor* instance = sensor->instance;
     uint8_t buff[9] = {0};
-    if(sensor->status != UT_POLLING) {
+    if(sensor->status != UT_SENSORSTATUS_POLLING) {
         //Если датчик в прошлый раз не отозвался, проверка его наличия на шине
-        if(sensor->status == UT_TIMEOUT || sensor->status == UT_BADCRC) {
-            if(!unitemp_onewire_bus_start(instance->bus)) return UT_TIMEOUT;
+        if(sensor->status == UT_SENSORSTATUS_TIMEOUT || sensor->status == UT_SENSORSTATUS_BADCRC) {
+            if(!unitemp_onewire_bus_start(instance->bus)) return UT_SENSORSTATUS_TIMEOUT;
             unitemp_onewire_bus_select_sensor(instance);
             unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad
             unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9);
@@ -406,11 +406,11 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
                 FURI_LOG_D(APP_NAME, "Sensor %s is not found", sensor->name);
 #endif
 
-                return UT_TIMEOUT;
+                return UT_SENSORSTATUS_TIMEOUT;
             }
         }
 
-        if(!unitemp_onewire_bus_start(instance->bus)) return UT_TIMEOUT;
+        if(!unitemp_onewire_bus_start(instance->bus)) return UT_SENSORSTATUS_TIMEOUT;
         unitemp_onewire_bus_select_sensor(instance);
         unitemp_onewire_bus_send_byte(instance->bus, 0x44); // convert t
         if(instance->bus->powerMode == PWR_PASSIVE) {
@@ -418,14 +418,14 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
             furi_hal_gpio_init(
                 instance->bus->gpio->pin, GpioModeOutputPushPull, GpioPullUp, GpioSpeedVeryHigh);
         }
-        return UT_POLLING;
+        return UT_SENSORSTATUS_POLLING;
     } else {
         if(instance->bus->powerMode == PWR_PASSIVE) {
             furi_hal_gpio_write(instance->bus->gpio->pin, true);
             furi_hal_gpio_init(
                 instance->bus->gpio->pin, GpioModeOutputOpenDrain, GpioPullUp, GpioSpeedVeryHigh);
         }
-        if(!unitemp_onewire_bus_start(instance->bus)) return UT_TIMEOUT;
+        if(!unitemp_onewire_bus_start(instance->bus)) return UT_SENSORSTATUS_TIMEOUT;
         unitemp_onewire_bus_select_sensor(instance);
         unitemp_onewire_bus_send_byte(instance->bus, 0xBE); // Read Scratch-pad
         unitemp_onewire_bus_read_byteArray(instance->bus, buff, 9);
@@ -434,7 +434,7 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
             FURI_LOG_D(APP_NAME, "Failed CRC check: %s", sensor->name);
 #endif
 
-            return UT_BADCRC;
+            return UT_SENSORSTATUS_BADCRC;
         }
         int16_t raw = buff[0] | ((int16_t)buff[1] << 8);
         if(instance->familyCode == FC_DS18S20) {
@@ -444,7 +444,7 @@ UnitempStatus unitemp_onewire_sensor_update(Sensor* sensor) {
         }
     }
 
-    return UT_OK;
+    return UT_SENSORSTATUS_OK;
 }
 
 bool unitemp_onewire_id_compare(uint8_t* id1, uint8_t* id2) {

+ 6 - 6
interfaces/SingleWireSensor.c

@@ -155,7 +155,7 @@ UnitempStatus unitemp_singlewire_update(Sensor* sensor) {
             //Включение прерываний
             __enable_irq();
             //Возврат признака отсутствующего датчика
-            return UT_TIMEOUT;
+            return UT_SENSORSTATUS_TIMEOUT;
         }
     }
     timeout = 0;
@@ -167,7 +167,7 @@ UnitempStatus unitemp_singlewire_update(Sensor* sensor) {
             //Включение прерываний
             __enable_irq();
             //Возврат признака отсутствующего датчика
-            return UT_TIMEOUT;
+            return UT_SENSORSTATUS_TIMEOUT;
         }
     }
 
@@ -178,7 +178,7 @@ UnitempStatus unitemp_singlewire_update(Sensor* sensor) {
             //Включение прерываний
             __enable_irq();
             //Возврат признака отсутствующего датчика
-            return UT_TIMEOUT;
+            return UT_SENSORSTATUS_TIMEOUT;
         }
     }
     timeout = 0;
@@ -190,7 +190,7 @@ UnitempStatus unitemp_singlewire_update(Sensor* sensor) {
             //Включение прерываний
             __enable_irq();
             //Возврат признака отсутствующего датчика
-            return UT_TIMEOUT;
+            return UT_SENSORSTATUS_TIMEOUT;
         }
     }
 
@@ -213,7 +213,7 @@ UnitempStatus unitemp_singlewire_update(Sensor* sensor) {
     //Проверка контрольной суммы
     if((uint8_t)(data[0] + data[1] + data[2] + data[3]) != data[4]) {
         //Если контрольная сумма не совпала, возврат ошибки
-        return UT_BADCRC;
+        return UT_SENSORSTATUS_BADCRC;
     }
 
     /* Преобразование данных в явный вид */
@@ -249,5 +249,5 @@ UnitempStatus unitemp_singlewire_update(Sensor* sensor) {
         }
     }
     //Возврат признака успешного опроса
-    return UT_OK;
+    return UT_SENSORSTATUS_OK;
 }

+ 5 - 5
sensors/BMP280.c

@@ -209,22 +209,22 @@ UnitempStatus unitemp_BMP280_update(Sensor* sensor) {
     unitemp_i2c_readRegArray(i2c_sensor, 0xF4, 2, buff);
     if(buff[0] == 0) {
         FURI_LOG_W(APP_NAME, "Sensor %s is not initialized!", sensor->name);
-        return UT_ERROR;
+        return UT_SENSORSTATUS_ERROR;
     }
 
     while(bmp280_isMeasuring(sensor)) {
         if(furi_get_tick() - t > 100) {
-            return UT_TIMEOUT;
+            return UT_SENSORSTATUS_TIMEOUT;
         }
     }
 
-    if(!unitemp_i2c_readRegArray(i2c_sensor, 0xFA, 3, buff)) return UT_TIMEOUT;
+    if(!unitemp_i2c_readRegArray(i2c_sensor, 0xFA, 3, buff)) return UT_SENSORSTATUS_TIMEOUT;
     int32_t adc_T = ((int32_t)buff[0] << 12) | ((int32_t)buff[1] << 4) | ((int32_t)buff[2] >> 4);
-    if(!unitemp_i2c_readRegArray(i2c_sensor, 0xF7, 3, buff)) return UT_TIMEOUT;
+    if(!unitemp_i2c_readRegArray(i2c_sensor, 0xF7, 3, buff)) return UT_SENSORSTATUS_TIMEOUT;
     int32_t adc_P = ((int32_t)buff[0] << 12) | ((int32_t)buff[1] << 4) | ((int32_t)buff[2] >> 4);
     sensor->temp = bmp280_compensate_T_double(i2c_sensor, adc_T);
     sensor->pressure = bmp280_compensate_P_int(i2c_sensor, adc_P);
-    return UT_OK;
+    return UT_SENSORSTATUS_OK;
 }
 
 bool unitemp_BMP280_free(Sensor* sensor) {

+ 3 - 2
sensors/LM75.c

@@ -62,7 +62,8 @@ UnitempStatus unitemp_LM75_update(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
 
     uint8_t buff[2];
-    if(!unitemp_i2c_readRegArray(i2c_sensor, LM75_REG_TEMP, 2, buff)) return UT_TIMEOUT;
+    if(!unitemp_i2c_readRegArray(i2c_sensor, LM75_REG_TEMP, 2, buff))
+        return UT_SENSORSTATUS_TIMEOUT;
     int16_t raw = ((((uint16_t)buff[0] << 8) | buff[1]) >> 7);
 
     if(FURI_BIT(raw, 8)) {
@@ -71,5 +72,5 @@ UnitempStatus unitemp_LM75_update(Sensor* sensor) {
     }
     sensor->temp = (float)raw / 2.0f;
 
-    return UT_OK;
+    return UT_SENSORSTATUS_OK;
 }

+ 1 - 0
unitemp.c

@@ -12,6 +12,7 @@
 //TODO: Обновлять данные только с тех датчиков, которые присутствуют на экране
 
 /* ******************************* Датчики ******************************* */
+//TODO: Пассивное питание DS18x2x
 //TODO: Ограничение на добавление датчика I2C с адресом уже имеющегося датчика
 //TODO: BMP280 SPI
 

+ 10 - 6
views/General_view.c

@@ -38,7 +38,7 @@ static void _draw_temperature(Canvas* canvas, Sensor* sensor, uint8_t x, uint8_t
     canvas_draw_icon(
         canvas, x + 3, y + 3, (app->settings.unit == CELSIUS ? &I_temp_C_11x14 : &I_temp_F_11x14));
 
-    if((int16_t)sensor->temp == -128 || sensor->status == UT_TIMEOUT) {
+    if((int16_t)sensor->temp == -128 || sensor->status == UT_SENSORSTATUS_TIMEOUT) {
         snprintf(app->buff, BUFF_SIZE, "--");
         canvas_set_font(canvas, FontBigNumbers);
         canvas_draw_str_aligned(canvas, x + 27, y + 10, AlignCenter, AlignCenter, app->buff);
@@ -77,7 +77,7 @@ static void _draw_humidity(Canvas* canvas, Sensor* sensor, const uint8_t pos[2])
     //Рисование иконки
     canvas_draw_icon(canvas, pos[0] + 3, pos[1] + 2, &I_hum_9x15);
 
-    if((int8_t)sensor->hum == -128 || sensor->status == UT_TIMEOUT) {
+    if((int8_t)sensor->hum == -128 || sensor->status == UT_SENSORSTATUS_TIMEOUT) {
         snprintf(app->buff, BUFF_SIZE, "--");
         canvas_set_font(canvas, FontBigNumbers);
         canvas_draw_str_aligned(
@@ -198,7 +198,8 @@ static void _draw_view_sensorsList(Canvas* canvas) {
 }
 
 static void _draw_carousel_values(Canvas* canvas) {
-    if(unitemp_sensor_getActive(generalview_sensor_index)->status == UT_TIMEOUT) {
+    UnitempStatus sensor_status = unitemp_sensor_getActive(generalview_sensor_index)->status;
+    if(sensor_status == UT_SENSORSTATUS_ERROR || sensor_status == UT_SENSORSTATUS_TIMEOUT) {
         const Icon* frames[] = {
             &I_flipper_happy_60x38, &I_flipper_happy_2_60x38, &I_flipper_sad_60x38};
         canvas_draw_icon(canvas, 34, 23, frames[furi_get_tick() % 2250 / 750]);
@@ -321,7 +322,8 @@ static void _draw_carousel_info(Canvas* canvas) {
     if(unitemp_sensor_getActive(generalview_sensor_index)->type->interface == &I2C) {
         canvas_set_font(canvas, FontPrimary);
         canvas_draw_str(canvas, 10, 35, "I2C addr:");
-
+        canvas_draw_str(canvas, 10, 46, "SDA pin:");
+        canvas_draw_str(canvas, 10, 58, "SCL pin:");
         canvas_set_font(canvas, FontSecondary);
         canvas_draw_str(
             canvas, 41, 23, unitemp_sensor_getActive(generalview_sensor_index)->type->typename);
@@ -332,6 +334,8 @@ static void _draw_carousel_info(Canvas* canvas) {
             ((I2CSensor*)unitemp_sensor_getActive(generalview_sensor_index)->instance)
                 ->currentI2CAdr);
         canvas_draw_str(canvas, 57, 35, app->buff);
+        canvas_draw_str(canvas, 54, 46, "16 (C1)");
+        canvas_draw_str(canvas, 54, 58, "15 (C0)");
     }
 }
 static void _draw_view_sensorsCarousel(Canvas* canvas) {
@@ -447,7 +451,7 @@ static bool _input_callback(InputEvent* event, void* context) {
         if(current_view == G_CAROUSEL_VIEW) {
             if(++generalview_sensor_index >= unitemp_sensors_getActiveCount()) {
                 generalview_sensor_index = 0;
-                current_view = G_LIST_VIEW;
+                if(carousel_info_selector == CAROUSEL_VALUES) current_view = G_LIST_VIEW;
             }
 
             return true;
@@ -469,7 +473,7 @@ static bool _input_callback(InputEvent* event, void* context) {
         if(current_view == G_CAROUSEL_VIEW) {
             if(--generalview_sensor_index >= unitemp_sensors_getActiveCount()) {
                 generalview_sensor_index = unitemp_sensors_getActiveCount() - 1;
-                current_view = G_LIST_VIEW;
+                if(carousel_info_selector == CAROUSEL_VALUES) current_view = G_LIST_VIEW;
             }
 
             return true;

+ 3 - 3
views/SensorEdit_view.c

@@ -118,7 +118,7 @@ static void _onewire_scan(void) {
  */
 static uint32_t _exit_callback(void* context) {
     UNUSED(context);
-    editable_sensor->status = UT_TIMEOUT;
+    editable_sensor->status = UT_SENSORSTATUS_TIMEOUT;
     if(!unitemp_sensor_isContains(editable_sensor)) unitemp_sensor_free(editable_sensor);
     unitemp_sensors_reload();
     //Возврат предыдущий вид
@@ -148,7 +148,7 @@ static void _enter_callback(void* context, uint32_t index) {
             unitemp_gpio_unlock(initial_gpio);
             initial_gpio = NULL;
         }
-        editable_sensor->status = UT_TIMEOUT;
+        editable_sensor->status = UT_SENSORSTATUS_TIMEOUT;
         if(!unitemp_sensor_isContains(editable_sensor)) unitemp_sensors_add(editable_sensor);
         unitemp_sensors_save();
         unitemp_sensors_reload();
@@ -237,7 +237,7 @@ void unitemp_SensorEdit_alloc(void) {
 void unitemp_SensorEdit_switch(Sensor* sensor) {
     editable_sensor = sensor;
 
-    editable_sensor->status = UT_INACTIVE;
+    editable_sensor->status = UT_SENSORSTATUS_INACTIVE;
 
     //Сброс всех элементов меню
     variable_item_list_reset(variable_item_list);