OneWireSensor.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. #ifndef UNITEMP_OneWire
  2. #define UNITEMP_OneWire
  3. #include "../unitemp.h"
  4. //Коды семейства устройств
  5. typedef enum DallasFamilyCode {
  6. FC_DS18S20 = 0x10,
  7. FC_DS1822 = 0x22,
  8. FC_DS18B20 = 0x28,
  9. } DallasFamilyCode;
  10. //Режим питания датчка
  11. typedef enum PowerMode {
  12. PWR_PASSIVE, //Питание от линии данных
  13. PWR_ACTIVE //Питание от источника питания
  14. } PowerMode;
  15. typedef struct {
  16. //Порт подключения датчика
  17. const GPIO* gpio;
  18. //Количество устройств на шине
  19. //Обновляется при ручном добавлении датчика на эту шину
  20. int8_t device_count;
  21. //Режим питания датчиков на шине
  22. PowerMode powerMode;
  23. } OneWireBus;
  24. typedef struct OneWireSensor {
  25. //Указатель на шину OneWire
  26. OneWireBus* bus;
  27. //Текущий адрес устройства на шине OneWire
  28. uint8_t deviceID[8];
  29. //Код семейства устройств
  30. DallasFamilyCode familyCode;
  31. } OneWireSensor;
  32. /**
  33. * @brief Выделение памяти для датчика на шине OneWire
  34. *
  35. * @param sensor Указатель на датчик
  36. * @param st Тип датчика
  37. * @return Истина если всё ок
  38. */
  39. bool unitemp_OneWire_sensor_alloc(Sensor* sensor, uint8_t* anotherValues);
  40. /**
  41. * @brief Высвобождение памяти инстанса датчика
  42. *
  43. * @param sensor Указатель на датчик
  44. */
  45. bool unitemp_OneWire_sensor_free(Sensor* sensor);
  46. /**
  47. * @brief Инициализации датчика на шине One Wire
  48. *
  49. * @param sensor Указатель на датчик (тип Sensor)
  50. * @return Истина если инициализация упспешная
  51. */
  52. bool unitemp_OneWire_sensor_init(Sensor* sensor);
  53. /**
  54. * @brief Деинициализация датчика
  55. *
  56. * @param sensor Указатель на датчик (тип Sensor)
  57. */
  58. bool unitemp_OneWire_sensor_deinit(Sensor* sensor);
  59. /**
  60. * @brief Обновить значение с датчка
  61. *
  62. * @param sensor Указатель на датчик (тип Sensor)
  63. * @return Статус обновления
  64. */
  65. UnitempStatus unitemp_OneWire_sensor_update(Sensor* sensor);
  66. /**
  67. * @brief Запуск общения с датчиками на шине one wire
  68. *
  69. * @param bus Указатель на шину
  70. * @return Истина если хотя бы одно устройство отозвалось
  71. */
  72. bool unitemp_onewire_bus_start(OneWireBus* bus);
  73. /**
  74. * @brief Выделение памяти для шины one wire и её инициализация
  75. *
  76. * @param gpio Порт на котором необходимо создать шину
  77. * @return При успехе возвращает указатель на шину one wire
  78. */
  79. OneWireBus* uintemp_onewire_bus_alloc(const GPIO* gpio);
  80. /**
  81. * @brief Деинициализация шины one wire
  82. *
  83. * @param bus Указатель на шину
  84. * @return Истина если шина была деинициализирована, ложь если на шине остались устройства
  85. */
  86. bool unitemp_onewire_bus_deinit(OneWireBus* bus);
  87. /**
  88. * @brief Инициализация шины one wire
  89. *
  90. * @param bus Указатель на шину
  91. * @return Истина если инициализация успешна
  92. */
  93. bool unitemp_onewire_bus_init(OneWireBus* bus);
  94. /**
  95. * @brief Инициализация процесса поиска адресов на шине one wire
  96. */
  97. void unitemp_onewire_enum_init(void);
  98. /**
  99. * @brief Перечисляет устройства на шине one wire и получает очередной адрес
  100. *
  101. * @param instance
  102. * @return Возвращает указатель на буфер, содержащий восьмибайтовое значение адреса, либо NULL, если поиск завешён
  103. */
  104. uint8_t* unitemp_onewire_enum_next(OneWireBus* bus);
  105. extern const SensorType DS18x2x;
  106. #endif