furi_hal_spi.h 2.5 KB

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