I2CSensor.h 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /*
  2. Unitemp - Universal temperature reader
  3. Copyright (C) 2022-2023 Victor Nikitchuk (https://github.com/quen0n)
  4. This program is free software: you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation, either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <https://www.gnu.org/licenses/>.
  14. */
  15. #ifndef UNITEMP_I2C
  16. #define UNITEMP_I2C
  17. #include "../unitemp.h"
  18. #include <furi_hal_i2c.h>
  19. //Структура I2C датчика
  20. typedef struct I2CSensor {
  21. //Указатель на интерфейс I2C
  22. const FuriHalI2cBusHandle* i2c;
  23. //Минимальный адрес устройства на шине I2C
  24. uint8_t minI2CAdr;
  25. //Максимальный адрес устройства на шине I2C
  26. uint8_t maxI2CAdr;
  27. //Текущий адрес устройства на шине I2C
  28. uint8_t currentI2CAdr;
  29. //Указатель на собственный экземпляр датчика
  30. void* sensorInstance;
  31. } I2CSensor;
  32. /**
  33. * @brief Заблокировать шину I2C
  34. *
  35. * @param handle Указатель на шину
  36. */
  37. void unitemp_i2c_acquire(const FuriHalI2cBusHandle* handle);
  38. /**
  39. * @brief Проверить наличие датчика на шине
  40. *
  41. * @param i2c_sensor Указатель на датчик
  42. * @return Истина если устройство отозвалось
  43. */
  44. bool unitemp_i2c_isDeviceReady(I2CSensor* i2c_sensor);
  45. /**
  46. * @brief Выделение памяти для датчика на шине I2C
  47. * @param sensor Указатель на датчик
  48. * @param st Тип датчика
  49. * @return Истина если всё ок
  50. */
  51. bool unitemp_I2C_sensor_alloc(Sensor* sensor, char* args);
  52. /**
  53. * @brief Высвобождение памяти инстанса датчика
  54. * @param sensor Указатель на датчик
  55. */
  56. bool unitemp_I2C_sensor_free(Sensor* sensor);
  57. /**
  58. * @brief Обновить значение с датчка
  59. * @param sensor Указатель на датчик
  60. * @return Статус обновления
  61. */
  62. UnitempStatus unitemp_I2C_sensor_update(Sensor* sensor);
  63. /**
  64. * @brief Прочитать значение регистра reg
  65. * @param i2c_sensor Указатель на инстанс датчика
  66. * @param reg Номер регистра
  67. * @return Значение регистра
  68. */
  69. uint8_t unitemp_i2c_readReg(I2CSensor* i2c_sensor, uint8_t reg);
  70. /**
  71. * @brief Прочитать масссив значений из памяти
  72. * @param i2c_sensor Указатель на инстанс датчика
  73. * @param startReg Адрес регистра с которого начнётся чтение
  74. * @param len Количество байт для считывания из регистра
  75. * @param data Указатель на массив куда будут считаны данные
  76. * @return Истина если устройство вернуло данные
  77. */
  78. bool unitemp_i2c_readRegArray(I2CSensor* i2c_sensor, uint8_t startReg, uint8_t len, uint8_t* data);
  79. /**
  80. * @brief Записать значение в регистр
  81. * @param i2c_sensor Указатель на инстанс датчика
  82. * @param reg Номер регистра
  83. * @param value Значение для записи
  84. * @return Истина если значение записано
  85. */
  86. bool unitemp_i2c_writeReg(I2CSensor* i2c_sensor, uint8_t reg, uint8_t value);
  87. /**
  88. * @brief Записать масссив значений в память
  89. * @param i2c_sensor Указатель на инстанс датчика
  90. * @param startReg Адрес регистра с которого начнётся запись
  91. * @param len Количество байт для считывания из регистра
  92. * @param data Указатель на массив откуда будут записаны данные
  93. * @return Истина если устройство вернуло данные
  94. */
  95. bool unitemp_i2c_writeRegArray(I2CSensor* i2c_sensor, uint8_t startReg, uint8_t len, uint8_t* data);
  96. /**
  97. * @brief Прочитать массив данных по шине I2C
  98. * @param i2c_sensor Указатель на инстанс датчика
  99. * @param startReg Адрес регистра с которого начнётся чтение
  100. * @param data Указатель на массив куда будут считаны данные
  101. * @return Истина если устройство вернуло данные
  102. */
  103. bool unitemp_i2c_readArray(I2CSensor* i2c_sensor, uint8_t len, uint8_t* data);
  104. /**
  105. * @brief Записать масссив данных по шине I2C
  106. * @param i2c_sensor Указатель на инстанс датчика
  107. * @param len Количество байт для считывания из регистра
  108. * @param data Указатель на массив откуда будут записаны данные
  109. * @return Истина если устройство вернуло данные
  110. */
  111. bool unitemp_i2c_writeArray(I2CSensor* i2c_sensor, uint8_t len, uint8_t* data);
  112. #endif