I2CSensor.h 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. float lastTemp;
  10. //Последнее успешное значение влажности
  11. float lastHum;
  12. //Указатель на интерфейс I2C
  13. FuriHalI2cBusHandle* i2c;
  14. //Минимальный адрес устройства на шине I2C
  15. uint8_t minI2CAdr;
  16. //Максимальный адрес устройства на шине I2C
  17. uint8_t maxI2CAdr;
  18. //Текущий адрес устройства на шине I2C
  19. uint8_t currentI2CAdr;
  20. //Указатель на собственный экземпляр датчика
  21. void* sensorInstance;
  22. } I2CSensor;
  23. /**
  24. * @brief Функция инициализации датчика на шине I2C
  25. *
  26. * @param sensor Указатель на датчик
  27. * @return Истина если датчик на шине
  28. */
  29. bool unitemp_I2C_sensorInit(void* sensor);
  30. /**
  31. * @brief Выделение памяти для датчика на шине I2C
  32. *
  33. * @param sensor Указатель на датчик
  34. * @param st Тип датчика
  35. * @return Истина если всё ок
  36. */
  37. bool unitemp_I2C_sensorAlloc(Sensor* sensor, SensorType st, uint16_t* anotherValues);
  38. /**
  39. * @brief Прочитать значение регистра reg
  40. *
  41. * @param i2c_sensor Указатель на датчик
  42. * @param reg Номер регистра
  43. * @return Значение регистра
  44. */
  45. uint8_t readReg(I2CSensor* i2c_sensor, uint8_t reg);
  46. /**
  47. * @brief Прочитать масссив значений из памяти
  48. *
  49. * @param i2c_sensor
  50. * @param startReg
  51. * @param len
  52. * @param data
  53. * @return Истина если устройство вернуло данные
  54. */
  55. bool readRegArray(I2CSensor* i2c_sensor, uint8_t startReg, uint8_t len, uint8_t* data);
  56. /**
  57. * @brief Записать значение в регистр
  58. *
  59. * @param i2c_sensor Указатель на датчик
  60. * @param reg Номер регистра
  61. * @param value Значение для записи
  62. * @return Истина если значение записано
  63. */
  64. bool writeReg(I2CSensor* i2c_sensor, uint8_t reg, uint8_t value);
  65. /**
  66. * @brief Высвобождение памяти инстанса датчика
  67. *
  68. * @param sensor Указатель на датчик
  69. */
  70. void unitemp_I2C_sensorFree(Sensor* sensor);
  71. #endif