I2CSensor.h 2.6 KB

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