luat_ch347_pc.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. #ifndef __LUAT_CH347_PC_H__
  2. #define __LUAT_CH347_PC_H__
  3. #include <stdint.h>
  4. #include <stdbool.h>
  5. #include <stddef.h>
  6. #include "luat_base.h"
  7. #include "luat_gpio.h"
  8. #ifdef _WIN32
  9. #include <windows.h>
  10. #endif
  11. #include "CH347DLL.H"
  12. #ifdef _WIN32
  13. #define CH347_DLL_NAME "CH347DLL.DLL"
  14. #else
  15. #define CH347_DLL_NAME "CH347DLL.DLL" // 其他平台暂不支持
  16. #endif
  17. #ifdef _WIN32
  18. extern uint16_t g_ch3470_DevIsOpened; // 设备是否已打开标志
  19. extern uint16_t g_ch3470_SpiIsCfg; // SPI是否已配置标志
  20. extern uint16_t g_ch3470_I2CIsCfg; // I2C是否已配置标志
  21. extern uint32_t g_ch3470_SpiI2cGpioDevIndex; // 当前选中的SPI/I2C/GPIO设备索引号
  22. extern mDeviceInforS g_ch3470_SpiI2cDevInfor[16]; // SPI/I2C设备信息数组,最多支持16个设备
  23. extern uint16_t g_ch3470_EnablePnPAutoOpen; // 启用插拔后设备自动打开关闭功能
  24. typedef struct _USB_DEVICE_DESCRIPTOR {
  25. uint8_t bLength;
  26. uint8_t bDescriptorType;
  27. uint16_t bcdUSB;
  28. uint8_t bDeviceClass;
  29. uint8_t bDeviceSubClass;
  30. uint8_t bDeviceProtocol;
  31. uint8_t bMaxPacketSize0;
  32. uint16_t idVendor;
  33. uint16_t idProduct;
  34. uint16_t bcdDevice;
  35. uint8_t iManufacturer;
  36. uint8_t iProduct;
  37. uint8_t iSerialNumber;
  38. uint8_t bNumConfigurations;
  39. } USB_DEVICE_DESCRIPTOR, * PUSB_DEVICE_DESCRIPTOR;
  40. #pragma pack()
  41. // CH347函数指针类型定义
  42. typedef HANDLE (WINAPI *PFN_CH347OpenDevice)(ULONG DevI);
  43. typedef BOOL (WINAPI *PFN_CH347CloseDevice)(ULONG iIndex);
  44. typedef BOOL (WINAPI *PFN_CH347GetDeviceInfor)(ULONG iIndex, mDeviceInforS *mDeviceInfor);
  45. typedef BOOL (WINAPI *PFN_CH347GetVersion)(ULONG iIndex, PUCHAR iDriverVer, PUCHAR iDLLVer, PUCHAR ibcdDevice, PUCHAR iChipType);
  46. typedef BOOL (WINAPI *PFN_CH347SetTimeout)(ULONG iIndex, ULONG iWriteTimeout, ULONG iReadTimeout);
  47. typedef BOOL (WINAPI *PFN_CH347I2C_Set)(ULONG iIndex, ULONG iMode );
  48. typedef BOOL (WINAPI *PFN_CH347StreamI2C)(ULONG iIndex, ULONG iWriteLength, PVOID iWriteBuffer, ULONG iReadLength, PVOID oReadBuffer );
  49. typedef BOOL (WINAPI *PFN_CH347SPI_Init)(ULONG iIndex, mSpiCfgS *SpiCfg);
  50. typedef BOOL (WINAPI *PFN_CH347SPI_SetFrequency)(ULONG iIndex, ULONG iSpiSpeedHz);
  51. typedef BOOL (WINAPI *PFN_CH347SPI_SetDataBits)(ULONG iIndex, UCHAR iDataBits);
  52. typedef BOOL (WINAPI *PFN_CH347SPI_WriteRead)(ULONG iIndex, ULONG iChipSelect, ULONG iLength, PVOID ioBuffer);
  53. typedef BOOL (WINAPI *PFN_CH347SPI_Read)(ULONG iIndex, ULONG iChipSelect, ULONG oLength, PULONG iLength, PVOID ioBuffer);
  54. typedef BOOL (WINAPI *PFN_CH347SPI_Write)(ULONG iIndex, ULONG iChipSelect, ULONG iLength, ULONG oLength, PVOID iBuffer);
  55. typedef BOOL (WINAPI *PFN_CH347StreamSPI4)(ULONG iIndex, ULONG iChipSelect, ULONG iLength, PVOID ioBuffer);
  56. typedef BOOL (WINAPI *PFN_CH347GPIO_Get)(ULONG iIndex, UCHAR *iDir, UCHAR *iData);
  57. typedef BOOL (WINAPI *PFN_CH347GPIO_Set)(ULONG iIndex, UCHAR iEnable, UCHAR iSetDirOut, UCHAR iSetDataOut);
  58. #endif
  59. // 动态加载函数
  60. int luat_load_ch347(int flag);
  61. uint64_t luat_ch347Device();
  62. uint16_t Luat_OpenDevice();
  63. int luat_ch347_i2c_setup(int id, int speed);
  64. int luat_ch347_i2c_send(int id, int addr, void* buff, size_t len, uint8_t stop);
  65. int luat_ch347_i2c_recv(int id, int addr, void* buff, size_t len);
  66. int luat_ch347_i2c_transfer(int id, int addr, uint8_t *reg, size_t reg_len, uint8_t *buff, size_t len);
  67. int luat_ch347_i2c_no_block_transfer(int id, int addr, uint8_t is_read, uint8_t *reg, size_t reg_len, uint8_t *buff, size_t len, uint16_t Toms, void *CB, void *pParam);
  68. int luat_ch347_i2c_close(int id);
  69. int luat_ch347_spi_setup(int id, int CPHA, int CPOL, int dataw, int bit_dict, int banrate, int cs, int mode);
  70. int luat_ch347_spi_transfer(int spi_id, const char* send_buf, size_t send_length, char* recv_buf, size_t recv_length);
  71. int luat_ch347_spi_recv(int spi_id, char* recv_buf, size_t length);
  72. int luat_ch347_spi_send(int spi_id, const char* send_buf, size_t length);
  73. int luat_ch347_spi_change_speed(int spi_id, uint32_t speed);
  74. int luat_ch347_gpio_setup(int pin, int mode, int pull, int irq);
  75. int luat_ch347_gpio_set(int pin, int level);
  76. int luat_ch347_gpio_get(int pin);
  77. #endif // __LUAT_CH347_PC_H__