I2CSensor.h 2.0 KB

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