| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- #ifndef UNITEMP_SENSORS
- #define UNITEMP_SENSORS
- #include <furi.h>
- #include <input/input.h>
- //Статусы опроса датчика
- typedef enum {
- UT_OK, //Всё хорошо, опрос успешен
- UT_TIMEOUT, //Датчик не отозвался
- UT_EARLYPOOL, //Опрос раньше положенной задержки
- UT_BADCRC, //Неверная контрольная сумма
- UT_ERROR, //Прочие ошибки
- } UnitempStatus;
- //Типы датчиков
- typedef enum {
- DHT11,
- DHT12_1W,
- DHT12_I2C,
- DHT20, //AM2108
- DHT21, //AM2301
- DHT22, //AM2302
- AM2320_1W,
- AM2320_I2C,
- LM75,
- DS18B20,
- BMP180,
- BMP280,
- BME280,
- //Порядок сенсоров сверху не менять!
- SENSOR_TYPES_COUNT //Общее количество типов датчиков
- } SensorType;
- //Типы подключения датчиков
- typedef enum Interface {
- ONE_WIRE, //Собственный однопроводной протокол датчиков DHTXX и AM23XX
- DALLAS, //Однопроводной протокол Dallas
- I2C,
- SPI,
- CONNECTION_TYPES_COUNT //Общее количество типов подключений
- } Interface;
- //Порт ввода/вывода Flipper Zero
- typedef struct GPIO {
- const uint8_t num;
- const char* name;
- const GpioPin* pin;
- } GPIO;
- struct Sensor;
- /**
- * @brief Указатель функции выделения памяти и подготовки экземпляра датчика
- */
- //typedef void (*SensorAllocator)(Sensor* sensor, SensorType st);
- /**
- * @brief Указатель функции инициализации датчика
- */
- typedef bool(SensorInitializer)(void* sensor);
- /**
- * @brief Указатель функции деинициализации датчика
- */
- typedef bool(SensorDeinitializer)(void* sensor);
- /**
- * @brief Указатель функции обновления значения датчика
- */
- typedef UnitempStatus(SensorUpdater)(void* sensor);
- //Датчик
- typedef struct Sensor {
- //Имя датчика
- char* name;
- //Температура
- float temp;
- //Относительная влажность
- float hum;
- //Тип датчика
- SensorType type;
- //Интерфейсы подключения
- Interface interface;
- //Статус последнего опроса датчика
- UnitempStatus status;
- //Экземпляр датчика
- void* instance;
- //SensorAllocator* allocator;
- SensorInitializer* initializer;
- SensorDeinitializer* deinitializer;
- SensorUpdater* updater;
- uint32_t lastPollingTime;
- uint16_t pollingInterval;
- } Sensor;
- /**
- * @brief Получить имя типа датчика
- *
- * @param st Тип датчика
- * @return Указатель на строку с именем типа датчика
- */
- const char* unitemp_getSensorTypeName(SensorType st);
- /**
- * @brief Конвертация номера порта на корпусе FZ в GPIO
- *
- * @param name Номер порта на корпусе FZ
- * @return Указатель на GPIO при успехе, NULL при ошибке
- */
- const GPIO* unitemp_GPIO_getFromInt(uint8_t name);
- /**
- * @brief Конвертация GPIO в номер на корпусе FZ
- *
- * @param gpio Указатель на порт
- * @return Номер порта на корпусе FZ
- */
- uint8_t unitemp_GPIO_toInt(const GpioPin* gpio);
- /**
- * @brief Выделение памяти под датчик
- *
- * @param name Имя датчика
- * @param st Тип датчика
- * @param anotherValues Массив других различных значений
- * @return Указатель на датчик
- */
- Sensor* unitemp_sensor_alloc(char* name, SensorType st, uint16_t* anotherValues);
- /**
- * @brief Инициализация загруженных датчиков
- *
- * @return Истина если всё прошло успешно
- */
- bool unitemp_sensors_init(void);
- /**
- * @brief Деинициализация загруженных датчиков
- *
- * @return Истина если всё прошло успешно
- */
- bool unitemp_sensors_deInit(void);
- /**
- * @brief Получение данных указанного датчика
- *
- * @param sensor Указатель на датчик
- * @return Статус опроса датчика
- */
- UnitempStatus unitemp_sensor_updateData(Sensor* sensor);
- /**
- * @brief Функция загрузки датчиков с SD-карты
- *
- * @return Истина если загрузка прошла успешно
- */
- bool unitemp_sensors_load();
- /**
- * @brief Сохранение настроек на SD-карту
- *
- * @return Истина если сохранение прошло успешно
- */
- bool unitemp_sensors_save(void);
- /**
- * @brief Обновить данные со всех датчиков
- */
- void unitemp_sensors_updateValues(void);
- #endif
|