luat_spi_win32.c 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. #include "luat_base.h"
  2. #include "luat_gpio.h"
  3. #include "luat_msgbus.h"
  4. #include "luat_spi.h"
  5. // 模拟SPI在win32下的实现
  6. // TODO 当需要返回数据时, 调用lua方法获取需要返回的数据
  7. #define LUAT_WIN32_SPI_COUNT (3)
  8. typedef struct win32spi {
  9. luat_spi_t spi;
  10. uint8_t open;
  11. }win32spi_t;
  12. win32spi_t win32spis[LUAT_WIN32_SPI_COUNT] = {0};
  13. int luat_spi_device_config(luat_spi_device_t* spi_dev){
  14. return 0;
  15. }
  16. int luat_spi_bus_setup(luat_spi_device_t* spi_dev){
  17. int bus_id = spi_dev->bus_id;
  18. if (bus_id < 0 || bus_id >= LUAT_WIN32_SPI_COUNT) {
  19. return -1;
  20. }
  21. memcpy(&win32spis[bus_id].spi, &(spi_dev->spi_config), sizeof(luat_spi_t));
  22. win32spis[bus_id].open = 1;
  23. return 0;
  24. }
  25. int luat_spi_setup(luat_spi_t* spi) {
  26. if (spi->id < 0 || spi->id >= LUAT_WIN32_SPI_COUNT) {
  27. return -1;
  28. }
  29. memcpy(&win32spis[spi->id].spi, spi, sizeof(luat_spi_t));
  30. win32spis[spi->id].open = 1;
  31. return 0;
  32. }
  33. //关闭SPI,成功返回0
  34. int luat_spi_close(int spi_id) {
  35. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  36. return -1;
  37. }
  38. win32spis[spi_id].open = 0;
  39. return 0;
  40. }
  41. //收发SPI数据,返回接收字节数
  42. int luat_spi_transfer(int spi_id, const char* send_buf, size_t send_length, char* recv_buf, size_t recv_length) {
  43. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  44. return -1;
  45. }
  46. if (win32spis[spi_id].open == 0)
  47. return -1;
  48. memset(recv_buf, 0, recv_length);
  49. return recv_length;
  50. }
  51. //收SPI数据,返回接收字节数
  52. int luat_spi_recv(int spi_id, char* recv_buf, size_t length) {
  53. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  54. return -1;
  55. }
  56. if (win32spis[spi_id].open == 0)
  57. return -1;
  58. memset(recv_buf, 0, length);
  59. return length;
  60. }
  61. //发SPI数据,返回发送字节数
  62. int luat_spi_send(int spi_id, const char* send_buf, size_t length) {
  63. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  64. return -1;
  65. }
  66. if (win32spis[spi_id].open == 0)
  67. return -1;
  68. return length;
  69. }
  70. int luat_spi_change_speed(int spi_id, uint32_t speed){
  71. return 0;
  72. }