furi_hal_spi.h 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. #pragma once
  2. #include <furi_hal_spi_config.h>
  3. #include <stdbool.h>
  4. #ifdef __cplusplus
  5. extern "C" {
  6. #endif
  7. /** Early initialize SPI HAL */
  8. void furi_hal_spi_init_early();
  9. /** Early deinitialize SPI HAL */
  10. void furi_hal_spi_deinit_early();
  11. /** Initialize SPI HAL */
  12. void furi_hal_spi_init();
  13. /** Initialize SPI Bus
  14. *
  15. * @param handle pointer to FuriHalSpiBus instance
  16. */
  17. void furi_hal_spi_bus_init(FuriHalSpiBus* bus);
  18. /** Deinitialize SPI Bus
  19. *
  20. * @param handle pointer to FuriHalSpiBus instance
  21. */
  22. void furi_hal_spi_bus_deinit(FuriHalSpiBus* bus);
  23. /** Initialize SPI Bus Handle
  24. *
  25. * @param handle pointer to FuriHalSpiBusHandle instance
  26. */
  27. void furi_hal_spi_bus_handle_init(FuriHalSpiBusHandle* handle);
  28. /** Deinitialize SPI Bus Handle
  29. *
  30. * @param handle pointer to FuriHalSpiBusHandle instance
  31. */
  32. void furi_hal_spi_bus_handle_deinit(FuriHalSpiBusHandle* handle);
  33. /** Acquire SPI bus
  34. *
  35. * @warning blocking, calls `furi_crash` on programming error, CS transition is up to handler event routine
  36. *
  37. * @param handle pointer to FuriHalSpiBusHandle instance
  38. */
  39. void furi_hal_spi_acquire(FuriHalSpiBusHandle* handle);
  40. /** Release SPI bus
  41. *
  42. * @warning calls `furi_crash` on programming error, CS transition is up to handler event routine
  43. *
  44. * @param handle pointer to FuriHalSpiBusHandle instance
  45. */
  46. void furi_hal_spi_release(FuriHalSpiBusHandle* handle);
  47. /** SPI Receive
  48. *
  49. * @param handle pointer to FuriHalSpiBusHandle instance
  50. * @param buffer receive buffer
  51. * @param size transaction size (buffer size)
  52. * @param timeout operation timeout in ms
  53. *
  54. * @return true on sucess
  55. */
  56. bool furi_hal_spi_bus_rx(
  57. FuriHalSpiBusHandle* handle,
  58. uint8_t* buffer,
  59. size_t size,
  60. uint32_t timeout);
  61. /** SPI Transmit
  62. *
  63. * @param handle pointer to FuriHalSpiBusHandle instance
  64. * @param buffer transmit buffer
  65. * @param size transaction size (buffer size)
  66. * @param timeout operation timeout in ms
  67. *
  68. * @return true on success
  69. */
  70. bool furi_hal_spi_bus_tx(
  71. FuriHalSpiBusHandle* handle,
  72. uint8_t* buffer,
  73. size_t size,
  74. uint32_t timeout);
  75. /** SPI Transmit and Receive
  76. *
  77. * @param handle pointer to FuriHalSpiBusHandle instance
  78. * @param tx_buffer pointer to tx buffer
  79. * @param rx_buffer pointer to rx buffer
  80. * @param size transaction size (buffer size)
  81. * @param timeout operation timeout in ms
  82. *
  83. * @return true on success
  84. */
  85. bool furi_hal_spi_bus_trx(
  86. FuriHalSpiBusHandle* handle,
  87. uint8_t* tx_buffer,
  88. uint8_t* rx_buffer,
  89. size_t size,
  90. uint32_t timeout);
  91. #ifdef __cplusplus
  92. }
  93. #endif