I2CSensor.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. #ifndef UNITEMP_I2C
  2. #define UNITEMP_I2C
  3. #include "../unitemp.h"
  4. #include <furi_hal_i2c.h>
  5. typedef struct I2CSensor {
  6. //Тип интерфейса подключения датчика
  7. Interface interface;
  8. //Время последнего опроса
  9. uint32_t lastPollingTime;
  10. //Последнее успешное значение температуры
  11. float lastTemp;
  12. //Последнее успешное значение влажности
  13. float lastHum;
  14. //Указатель на интерфейс I2C
  15. FuriHalI2cBusHandle* i2c;
  16. //Минимальный адрес устройства на шине I2C
  17. uint8_t minI2CAdr;
  18. //Максимальный адрес устройства на шине I2C
  19. uint8_t maxI2CAdr;
  20. //Текущий адрес устройства на шине I2C
  21. uint8_t currentI2CAdr;
  22. //Указатель на собственный экземпляр датчика
  23. void* sensorInstance;
  24. } I2CSensor;
  25. /**
  26. * @brief Функция инициализации датчика на шине I2C
  27. *
  28. * @param sensor Указатель на датчик
  29. * @return Истина если датчик на шине
  30. */
  31. bool unitemp_I2C_sensorInit(void* sensor);
  32. /**
  33. * @brief Выделение памяти для датчика на шине I2C
  34. *
  35. * @param sensor Указатель на датчик
  36. * @param st Тип датчика
  37. * @return Истина если всё ок
  38. */
  39. bool unitemp_I2C_sensorAlloc(Sensor* sensor, SensorType st, uint16_t* anotherValues);
  40. /**
  41. * @brief Прочитать значение регистра reg
  42. *
  43. * @param i2c_sensor Указатель на датчик
  44. * @param reg Номер регистра
  45. * @return Значение регистра
  46. */
  47. uint8_t readReg(I2CSensor* i2c_sensor, uint8_t reg);
  48. /**
  49. * @brief Прочитать масссив значений из памяти
  50. *
  51. * @param i2c_sensor
  52. * @param startReg
  53. * @param len
  54. * @param data
  55. * @return Истина если устройство вернуло данные
  56. */
  57. bool readRegArray(I2CSensor* i2c_sensor, uint8_t startReg, uint8_t len, uint8_t* data);
  58. /**
  59. * @brief Записать значение в регистр
  60. *
  61. * @param i2c_sensor Указатель на датчик
  62. * @param reg Номер регистра
  63. * @param value Значение для записи
  64. */
  65. void writeReg(I2CSensor* i2c_sensor, uint8_t reg, uint8_t value);
  66. #endif