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

Now the sensors allocator only allocates memory

Victor 3 лет назад
Родитель
Сommit
2fd5bdeded
3 измененных файлов с 7 добавлено и 5 удалено
  1. 5 3
      Sensors.c
  2. 1 1
      interfaces/OneWireSensor.c
  3. 1 1
      interfaces/SingleWireSensor.c

+ 5 - 3
Sensors.c

@@ -254,7 +254,10 @@ bool unitemp_sensors_load() {
         uint8_t otherValues[] = {otherValue};
         //Проверка типа датчика
         if(type < SENSOR_TYPES_COUNT && sizeof(name) <= 11) {
-            unitemp_sensor_alloc(name, unitemp_getTypeFromInt(type), otherValues);
+            Sensor* sensor = unitemp_sensor_alloc(name, unitemp_getTypeFromInt(type), otherValues);
+            if(sensor != NULL) {
+                app->sensors[app->sensors_count++] = sensor;
+            }
         } else {
             FURI_LOG_E(APP_NAME, "Unsupported sensor name (%s) or sensor type (%d)", name, type);
         }
@@ -354,9 +357,8 @@ Sensor* unitemp_sensor_alloc(char* name, const SensorType* type, uint8_t* anothe
     //Выделение памяти под инстанс датчика в зависимости от его интерфейса
     status = sensor->type->interface->allocator(sensor, anotherValues);
 
-    //Если датчик успешно развёрнут, то добавление его в общий список и выход
+    //Выход если датчик успешно развёрнут
     if(status) {
-        app->sensors[app->sensors_count++] = sensor;
         return sensor;
     }
     //Если ни один из типов не подошёл, то выход с очисткой

+ 1 - 1
interfaces/OneWireSensor.c

@@ -20,7 +20,6 @@ OneWireBus* uintemp_OneWire_bus_alloc(const GPIO* gpio) {
         return NULL;
     }
 
-    unitemp_gpio_lock(gpio, &ONE_WIRE);
     //Проверка на наличие шины на этом порте
     for(uint8_t i = 0; i < app->sensors_count; i++) {
         if(app->sensors[i]->type == &DS18x2x &&
@@ -29,6 +28,7 @@ OneWireBus* uintemp_OneWire_bus_alloc(const GPIO* gpio) {
             return ((OneWireBus*)(app->sensors[i]->instance));
         }
     }
+    unitemp_gpio_lock(gpio, &ONE_WIRE);
     //Высокий уровень по умолчанию
     furi_hal_gpio_write(gpio->pin, true);
     //Режим работы - OpenDrain, подтяжка включается на всякий случай

+ 1 - 1
interfaces/SingleWireSensor.c

@@ -81,6 +81,7 @@ bool unitemp_singleWire_init(Sensor* sensor) {
         FURI_LOG_E(APP_NAME, "Sensor pointer is null!");
         return false;
     }
+    unitemp_gpio_lock(instance->gpio, &SINGLE_WIRE);
     //Высокий уровень по умолчанию
     furi_hal_gpio_write(instance->gpio->pin, true);
     //Режим работы - OpenDrain, подтяжка включается на всякий случай
@@ -111,7 +112,6 @@ bool unitemp_singleWire_sensorSetGPIO(Sensor* sensor, const GPIO* gpio) {
     if(sensor == NULL || gpio == NULL) return false;
     SingleWireSensor* instance = sensor->instance;
     instance->gpio = gpio;
-    unitemp_gpio_lock(gpio, &SINGLE_WIRE);
     return true;
 }
 const GPIO* unitemp_singleWire_sensorGetGPIO(Sensor* sensor) {