furi-hal-spi.h 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #pragma once
  2. #include "main.h"
  3. #include "furi-hal-spi-config.h"
  4. #include <furi-hal-gpio.h>
  5. #include <stdbool.h>
  6. #include <stddef.h>
  7. #ifdef __cplusplus
  8. extern "C" {
  9. #endif
  10. /**
  11. * Init SPI API
  12. */
  13. void furi_hal_spi_init();
  14. /* Bus Level API */
  15. /** Lock SPI bus
  16. * Takes bus mutex, if used
  17. */
  18. void furi_hal_spi_bus_lock(const FuriHalSpiBus* bus);
  19. /** Unlock SPI bus
  20. * Releases BUS mutex, if used
  21. */
  22. void furi_hal_spi_bus_unlock(const FuriHalSpiBus* bus);
  23. /**
  24. * Configure SPI bus
  25. * @param bus - spi bus handler
  26. * @param config - spi configuration structure
  27. */
  28. void furi_hal_spi_bus_configure(const FuriHalSpiBus* bus, const LL_SPI_InitTypeDef* config);
  29. /** SPI Receive
  30. * @param bus - spi bus handler
  31. * @param buffer - receive buffer
  32. * @param size - transaction size
  33. * @param timeout - bus operation timeout in ms
  34. */
  35. bool furi_hal_spi_bus_rx(const FuriHalSpiBus* bus, uint8_t* buffer, size_t size, uint32_t timeout);
  36. /** SPI Transmit
  37. * @param bus - spi bus handler
  38. * @param buffer - transmit buffer
  39. * @param size - transaction size
  40. * @param timeout - bus operation timeout in ms
  41. */
  42. bool furi_hal_spi_bus_tx(const FuriHalSpiBus* bus, uint8_t* buffer, size_t size, uint32_t timeout);
  43. /** SPI Transmit and Receive
  44. * @param bus - spi bus handlere
  45. * @param tx_buffer - device handle
  46. * @param rx_buffer - device handle
  47. * @param size - transaction size
  48. * @param timeout - bus operation timeout in ms
  49. */
  50. bool furi_hal_spi_bus_trx(
  51. const FuriHalSpiBus* bus,
  52. uint8_t* tx_buffer,
  53. uint8_t* rx_buffer,
  54. size_t size,
  55. uint32_t timeout);
  56. /* Device Level API */
  57. /** Reconfigure SPI bus for device
  58. * @param device - device description
  59. */
  60. void furi_hal_spi_device_configure(const FuriHalSpiDevice* device);
  61. /** Get Device handle
  62. * And lock access to the corresponding SPI BUS
  63. * @param device_id - device identifier
  64. * @return device handle
  65. */
  66. const FuriHalSpiDevice* furi_hal_spi_device_get(FuriHalSpiDeviceId device_id);
  67. /** Return Device handle
  68. * And unlock access to the corresponding SPI BUS
  69. * @param device - device handle
  70. */
  71. void furi_hal_spi_device_return(const FuriHalSpiDevice* device);
  72. /** SPI Recieve
  73. * @param device - device handle
  74. * @param buffer - receive buffer
  75. * @param size - transaction size
  76. * @param timeout - bus operation timeout in ms
  77. */
  78. bool furi_hal_spi_device_rx(
  79. const FuriHalSpiDevice* device,
  80. uint8_t* buffer,
  81. size_t size,
  82. uint32_t timeout);
  83. /** SPI Transmit
  84. * @param device - device handle
  85. * @param buffer - transmit buffer
  86. * @param size - transaction size
  87. * @param timeout - bus operation timeout in ms
  88. */
  89. bool furi_hal_spi_device_tx(
  90. const FuriHalSpiDevice* device,
  91. uint8_t* buffer,
  92. size_t size,
  93. uint32_t timeout);
  94. /** SPI Transmit and Receive
  95. * @param device - device handle
  96. * @param tx_buffer - device handle
  97. * @param rx_buffer - device handle
  98. * @param size - transaction size
  99. * @param timeout - bus operation timeout in ms
  100. */
  101. bool furi_hal_spi_device_trx(
  102. const FuriHalSpiDevice* device,
  103. uint8_t* tx_buffer,
  104. uint8_t* rx_buffer,
  105. size_t size,
  106. uint32_t timeout);
  107. #ifdef __cplusplus
  108. }
  109. #endif