Sensors.h 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #ifndef UNITEMP_SENSORS
  2. #define UNITEMP_SENSORS
  3. #include <furi.h>
  4. #include <input/input.h>
  5. //Статусы опроса датчика
  6. typedef enum {
  7. UT_OK, //Всё хорошо, опрос успешен
  8. UT_TIMEOUT, //Датчик не отозвался
  9. UT_EARLYPOOL, //Опрос раньше положенной задержки
  10. UT_BADCRC, //Неверная контрольная сумма
  11. UT_ERROR, //Прочие ошибки
  12. } UnitempStatus;
  13. //Типы датчиков
  14. typedef enum {
  15. DHT11,
  16. DHT12_1W,
  17. DHT12_I2C,
  18. DHT20, //AM2108
  19. DHT21, //AM2301
  20. DHT22, //AM2302
  21. AM2320_1W,
  22. AM2320_I2C,
  23. LM75,
  24. DS18B20,
  25. BMP180,
  26. BMP280,
  27. BME280,
  28. //Порядок сенсоров сверху не менять!
  29. SENSOR_TYPES_COUNT //Общее количество типов датчиков
  30. } SensorType;
  31. //Типы подключения датчиков
  32. typedef enum Interface {
  33. ONE_WIRE, //Собственный однопроводной протокол датчиков DHTXX и AM23XX
  34. DALLAS, //Однопроводной протокол Dallas
  35. I2C,
  36. SPI,
  37. CONNECTION_TYPES_COUNT //Общее количество типов подключений
  38. } Interface;
  39. //Порт ввода/вывода Flipper Zero
  40. typedef struct GPIO {
  41. const uint8_t num;
  42. const char* name;
  43. const GpioPin* pin;
  44. } GPIO;
  45. //Датчик
  46. typedef struct Sensor {
  47. //Имя датчика
  48. char* name;
  49. //Температура
  50. float temp;
  51. //Относительная влажность
  52. float hum;
  53. //Тип датчика
  54. SensorType type;
  55. //Интерфейсы подключения
  56. Interface interface;
  57. //Экземпляр датчика
  58. void* instance;
  59. } Sensor;
  60. /**
  61. * @brief Получить имя типа датчика
  62. *
  63. * @param st Тип датчика
  64. * @return Указатель на строку с именем типа датчика
  65. */
  66. const char* unitemp_getSensorTypeName(SensorType st);
  67. /**
  68. * @brief Конвертация номера порта на корпусе FZ в GPIO
  69. *
  70. * @param name Номер порта на корпусе FZ
  71. * @return Указатель на GPIO при успехе, NULL при ошибке
  72. */
  73. const GPIO* unitemp_getGPIOFormInt(uint8_t name);
  74. /**
  75. * @brief Выделение памяти под датчик
  76. *
  77. * @param name Имя датчика
  78. * @param st Тип датчика
  79. * @return Указатель на датчик
  80. */
  81. Sensor* unitemp_sensor_alloc(char* name, SensorType st);
  82. /**
  83. * @brief Инициализация загруженных датчиков
  84. *
  85. * @return Истина если всё прошло успешно
  86. */
  87. bool unitemp_sensors_init(void);
  88. /**
  89. * @brief Деинициализация загруженных датчиков
  90. *
  91. * @return Истина если всё прошло успешно
  92. */
  93. bool unitemp_sensors_deInit(void);
  94. /**
  95. * @brief Получение данных указанного датчика
  96. *
  97. * @param sensor Указатель на датчик
  98. * @return Статус опроса датчика
  99. */
  100. UnitempStatus unitemp_sensor_getValues(Sensor* sensor);
  101. #endif