luat_spi_win32.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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_setup(luat_spi_t* spi) {
  14. if (spi->id < 0 || spi->id >= LUAT_WIN32_SPI_COUNT) {
  15. return -1;
  16. }
  17. memcpy(&win32spis[spi->id].spi, spi, sizeof(luat_spi_t));
  18. win32spis[spi->id].open = 1;
  19. return 0;
  20. }
  21. //关闭SPI,成功返回0
  22. int luat_spi_close(int spi_id) {
  23. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  24. return -1;
  25. }
  26. win32spis[spi_id].open = 0;
  27. return 0;
  28. }
  29. //收发SPI数据,返回接收字节数
  30. int luat_spi_transfer(int spi_id, const char* send_buf, size_t send_length, char* recv_buf, size_t recv_length) {
  31. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  32. return -1;
  33. }
  34. if (win32spis[spi_id].open == 0)
  35. return -1;
  36. memset(recv_buf, 0, recv_length);
  37. return recv_length;
  38. }
  39. //收SPI数据,返回接收字节数
  40. int luat_spi_recv(int spi_id, char* recv_buf, size_t length) {
  41. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  42. return -1;
  43. }
  44. if (win32spis[spi_id].open == 0)
  45. return -1;
  46. memset(recv_buf, 0, length);
  47. return length;
  48. }
  49. //发SPI数据,返回发送字节数
  50. int luat_spi_send(int spi_id, const char* send_buf, size_t length) {
  51. if (spi_id < 0 || spi_id >= LUAT_WIN32_SPI_COUNT) {
  52. return -1;
  53. }
  54. if (win32spis[spi_id].open == 0)
  55. return -1;
  56. return length;
  57. }