Victor 3 лет назад
Родитель
Сommit
7589de1032

+ 6 - 6
Sensors.h

@@ -19,27 +19,27 @@ typedef struct GPIO {
     const char* name;
     const GpioPin* pin;
 } GPIO;
-
+typedef struct Sensor Sensor;
 /**
  * @brief Указатель функции выделения памяти и подготовки экземпляра датчика
  */
-typedef bool(SensorAllocator)(void* sensor, uint8_t* anotherValues);
+typedef bool(SensorAllocator)(Sensor* sensor, uint8_t* anotherValues);
 /**
  * @brief Указатель на функцию высвобождении памяти датчика
  */
-typedef bool(SensorFree)(void* sensor);
+typedef bool(SensorFree)(Sensor* sensor);
 /**
  * @brief Указатель функции инициализации датчика
  */
-typedef bool(SensorInitializer)(void* sensor);
+typedef bool(SensorInitializer)(Sensor* sensor);
 /**
  * @brief Указатель функции деинициализации датчика
  */
-typedef bool(SensorDeinitializer)(void* sensor);
+typedef bool(SensorDeinitializer)(Sensor* sensor);
 /**
  * @brief Указатель функции обновления значения датчика
  */
-typedef UnitempStatus(SensorUpdater)(void* sensor);
+typedef UnitempStatus(SensorUpdater)(Sensor* sensor);
 
 //Типы подключения датчиков
 typedef struct Interface {

+ 3 - 6
interfaces/I2CSensor.c

@@ -27,8 +27,7 @@ bool writeReg(I2CSensor* i2c_sensor, uint8_t reg, uint8_t value) {
     return status;
 }
 
-bool unitemp_I2C_sensor_alloc(void* s, uint8_t* anotherValues) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_I2C_sensor_alloc(Sensor* sensor, uint8_t* anotherValues) {
     bool status = false;
     I2CSensor* instance = malloc(sizeof(I2CSensor));
     if(instance == NULL) {
@@ -50,15 +49,13 @@ bool unitemp_I2C_sensor_alloc(void* s, uint8_t* anotherValues) {
     return status;
 }
 
-bool unitemp_I2C_sensor_free(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_I2C_sensor_free(Sensor* sensor) {
     bool status = sensor->type->mem_releaser(sensor);
     free(sensor->instance);
     return status;
 }
 
-UnitempStatus unitemp_I2C_sensor_update(void* s) {
-    Sensor* sensor = (Sensor*)s;
+UnitempStatus unitemp_I2C_sensor_update(Sensor* sensor) {
     if(sensor->status != UT_OK) {
         sensor->type->initializer(sensor);
     }

+ 3 - 3
interfaces/I2CSensor.h

@@ -26,14 +26,14 @@ typedef struct I2CSensor {
  * @param st Тип датчика
  * @return Истина если всё ок
  */
-bool unitemp_I2C_sensor_alloc(void* s, uint8_t* anotherValues);
+bool unitemp_I2C_sensor_alloc(Sensor* sensor, uint8_t* anotherValues);
 
 /**
  * @brief Высвобождение памяти инстанса датчика
  * 
  * @param sensor Указатель на датчик
  */
-bool unitemp_I2C_sensor_free(void* sensor);
+bool unitemp_I2C_sensor_free(Sensor* sensor);
 
 /**
  * @brief Обновить значение с датчка
@@ -41,7 +41,7 @@ bool unitemp_I2C_sensor_free(void* sensor);
  * @param sensor Указатель на датчик (тип Sensor)
  * @return Статус обновления
  */
-UnitempStatus unitemp_I2C_sensor_update(void* sensor);
+UnitempStatus unitemp_I2C_sensor_update(Sensor* sensor);
 /**
  * @brief Прочитать значение регистра reg
  *

+ 9 - 12
interfaces/OneWireSensor.c

@@ -269,8 +269,7 @@ void unitemp_OneWire_sensor_select(OneWireSensor* instance) {
     oneWire_writeBytes(instance, instance->deviceID, 8);
 }
 
-bool unitemp_OneWire_sensor_alloc(void* s, uint8_t* anotherValues) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_OneWire_sensor_alloc(Sensor* sensor, uint8_t* anotherValues) {
     OneWireSensor* instance = malloc(sizeof(OneWireSensor));
     if(instance == NULL) {
         FURI_LOG_E(APP_NAME, "Sensor %s instance allocation error", sensor->name);
@@ -289,8 +288,7 @@ bool unitemp_OneWire_sensor_alloc(void* s, uint8_t* anotherValues) {
     return false;
 }
 
-bool unitemp_OneWire_sensor_free(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_OneWire_sensor_free(Sensor* sensor) {
     if(((OneWireSensor*)sensor->instance)->bus->device_count == 0) {
         free(((OneWireSensor*)sensor->instance)->bus);
     }
@@ -299,8 +297,8 @@ bool unitemp_OneWire_sensor_free(void* s) {
     return true;
 }
 
-bool unitemp_OneWire_sensor_init(void* s) {
-    OneWireSensor* instance = ((Sensor*)s)->instance;
+bool unitemp_OneWire_sensor_init(Sensor* sensor) {
+    OneWireSensor* instance = sensor->instance;
     if(instance == NULL || instance->bus->gpio == NULL) {
         FURI_LOG_E(APP_NAME, "Sensor pointer is null!");
         return false;
@@ -332,7 +330,7 @@ bool unitemp_OneWire_sensor_init(void* s) {
         FURI_LOG_D(
             APP_NAME,
             "%s sensor ID: %02X%02X%02X%02X%02X%02X%02X%02X",
-            ((Sensor*)s)->name,
+            sensor->name,
             instance->deviceID[0],
             instance->deviceID[1],
             instance->deviceID[2],
@@ -363,8 +361,8 @@ bool unitemp_OneWire_sensor_init(void* s) {
     return true;
 }
 
-bool unitemp_OneWire_sensor_deinit(void* s) {
-    OneWireSensor* instance = ((Sensor*)s)->instance;
+bool unitemp_OneWire_sensor_deinit(Sensor* sensor) {
+    OneWireSensor* instance = sensor->instance;
     if(instance == NULL || instance->bus->gpio == NULL) return false;
     instance->bus->device_count--;
     if(instance->bus->device_count == 0) {
@@ -381,9 +379,8 @@ bool unitemp_OneWire_sensor_deinit(void* s) {
     return true;
 }
 
-UnitempStatus unitemp_OneWire_sensor_update(void* s) {
-    Sensor* sensor = (Sensor*)s;
-    OneWireSensor* instance = ((Sensor*)s)->instance;
+UnitempStatus unitemp_OneWire_sensor_update(Sensor* sensor) {
+    OneWireSensor* instance = sensor->instance;
     if(sensor->status != UT_POLLING) {
         if(!unitemp_oneWire_sensor_start(instance)) return UT_TIMEOUT;
         unitemp_OneWire_sensor_select(instance);

+ 5 - 5
interfaces/OneWireSensor.h

@@ -43,14 +43,14 @@ typedef struct OneWireSensor {
  * @param st Тип датчика
  * @return Истина если всё ок
  */
-bool unitemp_OneWire_sensor_alloc(void* s, uint8_t* anotherValues);
+bool unitemp_OneWire_sensor_alloc(Sensor* sensor, uint8_t* anotherValues);
 
 /**
  * @brief Высвобождение памяти инстанса датчика
  * 
  * @param sensor Указатель на датчик
  */
-bool unitemp_OneWire_sensor_free(void* sensor);
+bool unitemp_OneWire_sensor_free(Sensor* sensor);
 
 /**
  * @brief Инициализации датчика на шине One Wire
@@ -58,14 +58,14 @@ bool unitemp_OneWire_sensor_free(void* sensor);
  * @param sensor Указатель на датчик (тип Sensor)
  * @return Истина если инициализация упспешная
  */
-bool unitemp_OneWire_sensor_init(void* sensor);
+bool unitemp_OneWire_sensor_init(Sensor* sensor);
 
 /**
  * @brief Деинициализация датчика
  *
  * @param sensor Указатель на датчик (тип Sensor)
  */
-bool unitemp_OneWire_sensor_deinit(void* s);
+bool unitemp_OneWire_sensor_deinit(Sensor* sensor);
 
 /**
  * @brief Обновить значение с датчка
@@ -73,7 +73,7 @@ bool unitemp_OneWire_sensor_deinit(void* s);
  * @param sensor Указатель на датчик (тип Sensor)
  * @return Статус обновления
  */
-UnitempStatus unitemp_OneWire_sensor_update(void* sensor);
+UnitempStatus unitemp_OneWire_sensor_update(Sensor* sensor);
 
 /**
  * @brief Запуск общения с датчиком 

+ 5 - 8
interfaces/SingleWireSensor.c

@@ -54,8 +54,7 @@ const SensorType AM2320_SW = {
     .deinitializer = unitemp_singleWire_deinit,
     .updater = unitemp_singleWire_update};
 
-bool unitemp_singleWire_alloc(void* s, uint8_t* anotherValues) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_singleWire_alloc(Sensor* sensor, uint8_t* anotherValues) {
     SingleWireSensor* instance = malloc(sizeof(SingleWireSensor));
     if(instance == NULL) {
         FURI_LOG_E(APP_NAME, "Sensor %s instance allocation error", sensor->name);
@@ -70,14 +69,13 @@ bool unitemp_singleWire_alloc(void* s, uint8_t* anotherValues) {
     free(instance);
     return false;
 }
-bool unitemp_singleWire_free(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_singleWire_free(Sensor* sensor) {
     free(sensor->instance);
 
     return true;
 }
 
-bool unitemp_singleWire_init(void* sensor) {
+bool unitemp_singleWire_init(Sensor* sensor) {
     SingleWireSensor* instance = ((Sensor*)sensor)->instance;
     if(instance == NULL || instance->gpio == NULL) {
         FURI_LOG_E(APP_NAME, "Sensor pointer is null!");
@@ -94,7 +92,7 @@ bool unitemp_singleWire_init(void* sensor) {
     return true;
 }
 
-bool unitemp_singleWire_deinit(void* sensor) {
+bool unitemp_singleWire_deinit(Sensor* sensor) {
     SingleWireSensor* instance = ((Sensor*)sensor)->instance;
     if(instance == NULL || instance->gpio == NULL) return false;
     //Низкий уровень по умолчанию
@@ -120,8 +118,7 @@ const GPIO* unitemp_singleWire_sensorGetGPIO(Sensor* sensor) {
     return instance->gpio;
 }
 
-UnitempStatus unitemp_singleWire_update(void* s) {
-    Sensor* sensor = (Sensor*)s;
+UnitempStatus unitemp_singleWire_update(Sensor* sensor) {
     SingleWireSensor* instance = sensor->instance;
 
     //Массив для приёма данных

+ 5 - 5
interfaces/SingleWireSensor.h

@@ -22,7 +22,7 @@ extern const SensorType AM2320_SW;
  * @param sensor Указатель на инициализируемый датчик
  * @return Истина если всё прошло успешно
  */
-bool unitemp_singleWire_init(void* sensor);
+bool unitemp_singleWire_init(Sensor* sensor);
 
 /**
  * @brief Деинициализация датчика
@@ -30,7 +30,7 @@ bool unitemp_singleWire_init(void* sensor);
  * @param sensor Указатель на инициализируемый датчик
  * @return Истина если всё прошло успешно
  */
-bool unitemp_singleWire_deinit(void* sensor);
+bool unitemp_singleWire_deinit(Sensor* sensor);
 
 /**
  * @brief Получение данных с датчика по однопроводному интерфейсу DHTxx и AM2xxx
@@ -38,7 +38,7 @@ bool unitemp_singleWire_deinit(void* sensor);
  * @param sensor Указатель на датчик
  * @return Статус опроса
  */
-UnitempStatus unitemp_singleWire_update(void* sensor);
+UnitempStatus unitemp_singleWire_update(Sensor* sensor);
 
 /**
  * @brief Установить порт датчика
@@ -63,12 +63,12 @@ const GPIO* unitemp_singleWire_sensorGetGPIO(Sensor* sensor);
  * @param sensor Указатель на датчик
  * @param st Тип датчика
  */
-bool unitemp_singleWire_alloc(void* sensor, uint8_t* anotherValues);
+bool unitemp_singleWire_alloc(Sensor* sensor, uint8_t* anotherValues);
 
 /**
  * @brief Высвобождение памяти инстанса датчика
  * 
  * @param sensor Указатель на датчик
  */
-bool unitemp_singleWire_free(void* sensor);
+bool unitemp_singleWire_free(Sensor* sensor);
 #endif

+ 6 - 52
sensors/BMP280.c

@@ -99,9 +99,8 @@ static bool bmp280_isMeasuring(Sensor* sensor) {
     return (bool)((readReg(i2c_sensor, BMP280_REG_STATUS) & 0x08) >> 3);
 }
 
-bool unitemp_BMP280_alloc(void* s, uint8_t* anotherValues) {
+bool unitemp_BMP280_alloc(Sensor* sensor, uint8_t* anotherValues) {
     UNUSED(anotherValues);
-    Sensor* sensor = (Sensor*)s;
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
     BMP280_instance* bmp280_instance = malloc(sizeof(BMP280_instance));
     if(bmp280_instance == NULL) {
@@ -115,8 +114,7 @@ bool unitemp_BMP280_alloc(void* s, uint8_t* anotherValues) {
     return true;
 }
 
-bool unitemp_BMP280_init(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_BMP280_init(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
     //Перезагрузка
     writeReg(i2c_sensor, 0xE0, 0xB6);
@@ -148,16 +146,14 @@ bool unitemp_BMP280_init(void* s) {
     return true;
 }
 
-bool unitemp_BMP280_deinit(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_BMP280_deinit(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
     //Перевод в сон
     writeReg(i2c_sensor, BMP280_REG_CTRL_MEAS, BMP280_MODE_SLEEP);
     return true;
 }
 
-UnitempStatus unitemp_BMP280_update(void* s) {
-    Sensor* sensor = (Sensor*)s;
+UnitempStatus unitemp_BMP280_update(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
 
     uint32_t t = furi_get_tick();
@@ -173,50 +169,8 @@ UnitempStatus unitemp_BMP280_update(void* s) {
     return UT_OK;
 }
 
-bool unitemp_BMP280_free(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_BMP280_free(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
     free(i2c_sensor->sensorInstance);
     return true;
-}
-
-// bool BMP280_init(I2CSensor* i2c_sensor) {
-//     //Перезагрузка
-//     writeReg(i2c_sensor, 0xE0, 0xB6);
-//     //Чтение ID датчика
-//     if(readReg(i2c_sensor, 0xD0) != 0x58) {
-//         return false;
-//     }
-//     i2c_sensor->sensorInstance = malloc(sizeof(BMP280_instance));
-//     //Чтение калибровочных значений
-//     if(!readCalValues(i2c_sensor)) {
-//         return false;
-//     }
-
-//     writeReg(i2c_sensor, 0xF4, 0b01010111);
-//     writeReg(i2c_sensor, 0xF5, 0b10110100);
-
-//     return true;
-// }
-
-// bool BMP280_updateData(Sensor* sensor) {
-//     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
-//     // if(furi_get_tick() - i2c_sensor->lastPollingTime < 500) {
-//     //     sensor->status = UT_EARLYPOOL;
-//     //     return false;
-//     // }
-//     // i2c_sensor->lastPollingTime = furi_get_tick();
-
-//     // while(readReg(i2c_sensor, 0xF3) & 0b00001001) {
-//     //     if(furi_get_tick() - i2c_sensor->lastPollingTime > 100) {
-//     //         sensor->status = UT_TIMEOUT;
-//     //         return false;
-//     //     }
-//     // }
-
-//     uint8_t buff[3];
-//     if(!readRegArray(i2c_sensor, 0xFA, 3, buff)) return false;
-//     int32_t adc_T = ((int32_t)buff[2] << 12) | ((int32_t)buff[1] << 4) | ((int32_t)buff[2] >> 4);
-//     sensor->temp = bmp280_compensate_T_double(i2c_sensor, adc_T);
-//     return true;
-// }
+}

+ 5 - 5
sensors/BMP280.h

@@ -35,7 +35,7 @@ extern const SensorType BMP280;
  * @param sensor Указатель на создаваемый датчик
  * @return Истина при успехе
  */
-bool unitemp_BMP280_alloc(void* s, uint8_t* anotherValues);
+bool unitemp_BMP280_alloc(Sensor* sensor, uint8_t* anotherValues);
 
 /**
  * @brief Инициализации датчика BMP280
@@ -43,14 +43,14 @@ bool unitemp_BMP280_alloc(void* s, uint8_t* anotherValues);
  * @param sensor Указатель на датчик (тип Sensor)
  * @return Истина если инициализация упспешная
  */
-bool unitemp_BMP280_init(void* sensor);
+bool unitemp_BMP280_init(Sensor* sensor);
 
 /**
  * @brief Деинициализация датчика
  *
  * @param sensor Указатель на датчик (тип Sensor)
  */
-bool unitemp_BMP280_deinit(void* s);
+bool unitemp_BMP280_deinit(Sensor* sensor);
 
 /**
  * @brief Обновление значений из датчика
@@ -58,13 +58,13 @@ bool unitemp_BMP280_deinit(void* s);
  * @param sensor Указатель на датчик (тип Sensor)
  * @return Истина если данныее были получены
  */
-UnitempStatus unitemp_BMP280_update(void* s);
+UnitempStatus unitemp_BMP280_update(Sensor* sensor);
 
 /**
  * @brief Высвободить память датчика
  *
  * @param sensor Указатель на датчик (тип Sensor)
  */
-bool unitemp_BMP280_free(void* sensor);
+bool unitemp_BMP280_free(Sensor* sensor);
 
 #endif

+ 6 - 10
sensors/LM75.c

@@ -23,9 +23,8 @@ const SensorType LM75 = {
     .deinitializer = unitemp_LM75_deinit,
     .updater = unitemp_LM75_update};
 
-bool unitemp_LM75_alloc(void* s, uint8_t* anotherValues) {
+bool unitemp_LM75_alloc(Sensor* sensor, uint8_t* anotherValues) {
     UNUSED(anotherValues);
-    Sensor* sensor = (Sensor*)s;
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
 
     //Адреса на шине I2C (7 бит)
@@ -33,14 +32,13 @@ bool unitemp_LM75_alloc(void* s, uint8_t* anotherValues) {
     i2c_sensor->maxI2CAdr = 0b1001111;
     return true;
 }
-bool unitemp_LM75_free(void* s) {
+bool unitemp_LM75_free(Sensor* sensor) {
     //Нечего высвобождать, так как ничего не было выделено
-    UNUSED(s);
+    UNUSED(sensor);
     return true;
 }
 
-bool unitemp_LM75_init(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_LM75_init(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
 
     //Выход если не удалось записать значение в датчик
@@ -50,16 +48,14 @@ bool unitemp_LM75_init(void* s) {
     return true;
 }
 
-bool unitemp_LM75_deinit(void* s) {
-    Sensor* sensor = (Sensor*)s;
+bool unitemp_LM75_deinit(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
     if(!writeReg(i2c_sensor, LM75_REG_CONFIG, LM75_CONFIG_FAULTQUEUE_1 | LM75_CONFIG_SHUTDOWN))
         return false;
     return true;
 }
 
-UnitempStatus unitemp_LM75_update(void* s) {
-    Sensor* sensor = (Sensor*)s;
+UnitempStatus unitemp_LM75_update(Sensor* sensor) {
     I2CSensor* i2c_sensor = (I2CSensor*)sensor->instance;
 
     uint8_t buff[2];

+ 5 - 5
sensors/LM75.h

@@ -11,7 +11,7 @@ extern const SensorType LM75;
  * @param sensor Указатель на создаваемый датчик
  * @return Истина при успехе
  */
-bool unitemp_LM75_alloc(void* s, uint8_t* anotherValues);
+bool unitemp_LM75_alloc(Sensor* sensor, uint8_t* anotherValues);
 
 /**
  * @brief Инициализации датчика LM75
@@ -19,14 +19,14 @@ bool unitemp_LM75_alloc(void* s, uint8_t* anotherValues);
  * @param sensor Указатель на датчик (тип Sensor)
  * @return Истина если инициализация упспешная
  */
-bool unitemp_LM75_init(void* sensor);
+bool unitemp_LM75_init(Sensor* sensor);
 
 /**
  * @brief Деинициализация датчика
  *
  * @param sensor Указатель на датчик (тип Sensor)
  */
-bool unitemp_LM75_deinit(void* s);
+bool unitemp_LM75_deinit(Sensor* sensor);
 
 /**
  * @brief Обновление значений из датчика
@@ -34,13 +34,13 @@ bool unitemp_LM75_deinit(void* s);
  * @param sensor Указатель на датчик (тип Sensor)
  * @return Истина если данныее были получены
  */
-UnitempStatus unitemp_LM75_update(void* s);
+UnitempStatus unitemp_LM75_update(Sensor* sensor);
 
 /**
  * @brief Высвободить память датчика
  *
  * @param sensor Указатель на датчик (тип Sensor)
  */
-bool unitemp_LM75_free(void* sensor);
+bool unitemp_LM75_free(Sensor* sensor);
 
 #endif