furi_hal_i2c.h 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. /**
  2. * @file furi_hal_i2c.h
  3. * I2C HAL API
  4. */
  5. #pragma once
  6. #include <stdbool.h>
  7. #include <stdint.h>
  8. #include <furi_hal_i2c_config.h>
  9. #ifdef __cplusplus
  10. extern "C" {
  11. #endif
  12. /** Early Init I2C */
  13. void furi_hal_i2c_init_early();
  14. /** Early DeInit I2C */
  15. void furi_hal_i2c_deinit_early();
  16. /** Init I2C */
  17. void furi_hal_i2c_init();
  18. /** Acquire i2c bus handle
  19. *
  20. * @return Instance of FuriHalI2cBus
  21. */
  22. void furi_hal_i2c_acquire(FuriHalI2cBusHandle* handle);
  23. /** Release i2c bus handle
  24. *
  25. * @param bus instance of FuriHalI2cBus aquired in `furi_hal_i2c_acquire`
  26. */
  27. void furi_hal_i2c_release(FuriHalI2cBusHandle* handle);
  28. /** Perform I2C tx transfer
  29. *
  30. * @param handle pointer to FuriHalI2cBusHandle instance
  31. * @param address I2C slave address
  32. * @param data pointer to data buffer
  33. * @param size size of data buffer
  34. * @param timeout timeout in ticks
  35. *
  36. * @return true on successful transfer, false otherwise
  37. */
  38. bool furi_hal_i2c_tx(
  39. FuriHalI2cBusHandle* handle,
  40. const uint8_t address,
  41. const uint8_t* data,
  42. const uint8_t size,
  43. uint32_t timeout);
  44. /** Perform I2C rx transfer
  45. *
  46. * @param handle pointer to FuriHalI2cBusHandle instance
  47. * @param address I2C slave address
  48. * @param data pointer to data buffer
  49. * @param size size of data buffer
  50. * @param timeout timeout in ticks
  51. *
  52. * @return true on successful transfer, false otherwise
  53. */
  54. bool furi_hal_i2c_rx(
  55. FuriHalI2cBusHandle* handle,
  56. const uint8_t address,
  57. uint8_t* data,
  58. const uint8_t size,
  59. uint32_t timeout);
  60. /** Perform I2C tx and rx transfers
  61. *
  62. * @param handle pointer to FuriHalI2cBusHandle instance
  63. * @param address I2C slave address
  64. * @param tx_data pointer to tx data buffer
  65. * @param tx_size size of tx data buffer
  66. * @param rx_data pointer to rx data buffer
  67. * @param rx_size size of rx data buffer
  68. * @param timeout timeout in ticks
  69. *
  70. * @return true on successful transfer, false otherwise
  71. */
  72. bool furi_hal_i2c_trx(
  73. FuriHalI2cBusHandle* handle,
  74. const uint8_t address,
  75. const uint8_t* tx_data,
  76. const uint8_t tx_size,
  77. uint8_t* rx_data,
  78. const uint8_t rx_size,
  79. uint32_t timeout);
  80. /** Check if I2C device presents on bus
  81. *
  82. * @param handle pointer to FuriHalI2cBusHandle instance
  83. * @param i2c_addr I2C slave address
  84. * @param timeout timeout in ticks
  85. *
  86. * @return true if device present and is ready, false otherwise
  87. */
  88. bool furi_hal_i2c_is_device_ready(FuriHalI2cBusHandle* handle, uint8_t i2c_addr, uint32_t timeout);
  89. /** Perform I2C device register read (8-bit)
  90. *
  91. * @param handle pointer to FuriHalI2cBusHandle instance
  92. * @param i2c_addr I2C slave address
  93. * @param reg_addr register address
  94. * @param data pointer to register value
  95. * @param timeout timeout in ticks
  96. *
  97. * @return true on successful transfer, false otherwise
  98. */
  99. bool furi_hal_i2c_read_reg_8(
  100. FuriHalI2cBusHandle* handle,
  101. uint8_t i2c_addr,
  102. uint8_t reg_addr,
  103. uint8_t* data,
  104. uint32_t timeout);
  105. /** Perform I2C device register read (16-bit)
  106. *
  107. * @param handle pointer to FuriHalI2cBusHandle instance
  108. * @param i2c_addr I2C slave address
  109. * @param reg_addr register address
  110. * @param data pointer to register value
  111. * @param timeout timeout in ticks
  112. *
  113. * @return true on successful transfer, false otherwise
  114. */
  115. bool furi_hal_i2c_read_reg_16(
  116. FuriHalI2cBusHandle* handle,
  117. uint8_t i2c_addr,
  118. uint8_t reg_addr,
  119. uint16_t* data,
  120. uint32_t timeout);
  121. /** Perform I2C device memory read
  122. *
  123. * @param handle pointer to FuriHalI2cBusHandle instance
  124. * @param i2c_addr I2C slave address
  125. * @param mem_addr memory start address
  126. * @param data pointer to data buffer
  127. * @param len size of data buffer
  128. * @param timeout timeout in ticks
  129. *
  130. * @return true on successful transfer, false otherwise
  131. */
  132. bool furi_hal_i2c_read_mem(
  133. FuriHalI2cBusHandle* handle,
  134. uint8_t i2c_addr,
  135. uint8_t mem_addr,
  136. uint8_t* data,
  137. uint8_t len,
  138. uint32_t timeout);
  139. /** Perform I2C device register write (8-bit)
  140. *
  141. * @param handle pointer to FuriHalI2cBusHandle instance
  142. * @param i2c_addr I2C slave address
  143. * @param reg_addr register address
  144. * @param data register value
  145. * @param timeout timeout in ticks
  146. *
  147. * @return true on successful transfer, false otherwise
  148. */
  149. bool furi_hal_i2c_write_reg_8(
  150. FuriHalI2cBusHandle* handle,
  151. uint8_t i2c_addr,
  152. uint8_t reg_addr,
  153. uint8_t data,
  154. uint32_t timeout);
  155. /** Perform I2C device register write (16-bit)
  156. *
  157. * @param handle pointer to FuriHalI2cBusHandle instance
  158. * @param i2c_addr I2C slave address
  159. * @param reg_addr register address
  160. * @param data register value
  161. * @param timeout timeout in ticks
  162. *
  163. * @return true on successful transfer, false otherwise
  164. */
  165. bool furi_hal_i2c_write_reg_16(
  166. FuriHalI2cBusHandle* handle,
  167. uint8_t i2c_addr,
  168. uint8_t reg_addr,
  169. uint16_t data,
  170. uint32_t timeout);
  171. /** Perform I2C device memory
  172. *
  173. * @param handle pointer to FuriHalI2cBusHandle instance
  174. * @param i2c_addr I2C slave address
  175. * @param mem_addr memory start address
  176. * @param data pointer to data buffer
  177. * @param len size of data buffer
  178. * @param timeout timeout in ticks
  179. *
  180. * @return true on successful transfer, false otherwise
  181. */
  182. bool furi_hal_i2c_write_mem(
  183. FuriHalI2cBusHandle* handle,
  184. uint8_t i2c_addr,
  185. uint8_t mem_addr,
  186. uint8_t* data,
  187. uint8_t len,
  188. uint32_t timeout);
  189. #ifdef __cplusplus
  190. }
  191. #endif