board_utils.h 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. #pragma once
  2. #include "driver/i2c_master.h"
  3. #include "esp_err.h"
  4. /* ========== Common GPIO ISR service ========== */
  5. /**
  6. * @brief Install the shared GPIO ISR service
  7. *
  8. * Safe to call multiple times — returns ESP_OK if already installed.
  9. * Board-specific init and the button driver both rely on this.
  10. *
  11. * @return ESP_OK on success
  12. */
  13. esp_err_t board_gpio_isr_init(void);
  14. /* ========== Common I2C bus helpers ========== */
  15. /** Default I2C timeout in ms used by the helpers below. */
  16. #define BOARD_I2C_TIMEOUT_MS 100
  17. /**
  18. * @brief Add an I2C device to a master bus
  19. *
  20. * @param bus Master bus handle
  21. * @param addr 7-bit device address
  22. * @param speed_hz SCL clock speed in Hz
  23. * @param[out] dev Resulting device handle
  24. * @return ESP_OK on success
  25. */
  26. esp_err_t board_i2c_add_device(i2c_master_bus_handle_t bus, uint8_t addr,
  27. uint32_t speed_hz, i2c_master_dev_handle_t *dev);
  28. /**
  29. * @brief Remove an I2C device from the bus
  30. */
  31. esp_err_t board_i2c_remove_device(i2c_master_dev_handle_t dev);
  32. /**
  33. * @brief Write data to an I2C device register
  34. *
  35. * Prepends the register byte to @p data and transmits in a single
  36. * I2C transaction.
  37. *
  38. * @param dev Device handle
  39. * @param reg Register address
  40. * @param data Payload bytes
  41. * @param len Number of payload bytes
  42. * @return ESP_OK on success
  43. */
  44. esp_err_t board_i2c_write(i2c_master_dev_handle_t dev, uint8_t reg,
  45. const uint8_t *data, size_t len);
  46. /**
  47. * @brief Write raw bytes to an I2C device (no register prefix)
  48. *
  49. * @param dev Device handle
  50. * @param data Payload bytes
  51. * @param len Number of bytes
  52. * @return ESP_OK on success
  53. */
  54. esp_err_t board_i2c_write_raw(i2c_master_dev_handle_t dev, const uint8_t *data,
  55. size_t len);
  56. /**
  57. * @brief Read data from an I2C device register
  58. *
  59. * Sends the single-byte register address, then reads @p len bytes.
  60. *
  61. * @param dev Device handle
  62. * @param reg Register address
  63. * @param data Buffer to receive data
  64. * @param len Number of bytes to read
  65. * @return ESP_OK on success
  66. */
  67. esp_err_t board_i2c_read(i2c_master_dev_handle_t dev, uint8_t reg,
  68. uint8_t *data, size_t len);