api-hal-i2c.h 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include <stdbool.h>
  3. #include <stdint.h>
  4. #include <api-hal-resources.h>
  5. #ifdef __cplusplus
  6. extern "C" {
  7. #endif
  8. void api_hal_i2c_init();
  9. bool api_hal_i2c_tx(
  10. I2C_TypeDef* instance,
  11. const uint8_t address,
  12. const uint8_t* data,
  13. const uint8_t size,
  14. uint32_t timeout);
  15. bool api_hal_i2c_rx(
  16. I2C_TypeDef* instance,
  17. const uint8_t address,
  18. uint8_t* data,
  19. const uint8_t size,
  20. uint32_t timeout);
  21. bool api_hal_i2c_trx(
  22. I2C_TypeDef* instance,
  23. const uint8_t address,
  24. const uint8_t* tx_data,
  25. const uint8_t tx_size,
  26. uint8_t* rx_data,
  27. const uint8_t rx_size,
  28. uint32_t timeout);
  29. void api_hal_i2c_lock();
  30. void api_hal_i2c_unlock();
  31. #define with_api_hal_i2c(type, pointer, function_body) \
  32. { \
  33. api_hal_i2c_lock(); \
  34. *pointer = ({ type __fn__ function_body __fn__; })(); \
  35. api_hal_i2c_unlock(); \
  36. }
  37. #ifdef __cplusplus
  38. }
  39. #endif