#include "drv_spi.h" #include // 用于调试输出 DRV_Spi::DRV_Spi(QObject *parent) : QObject(parent) // 假设有8个通道 { } DRV_Spi::~DRV_Spi() { } //枚举当前的所有SPI设备:返回搜索到的设备数目 ULONG DRV_Spi::spi_enumDevice() { ULONG i; mDeviceInforS DevInfor = {0}; UCHAR iDriverVer = 0; UCHAR iDLLVer = 0; UCHAR ibcdDevice = 0; UCHAR iChipType = 0; // 当前设备数目清零 this->m_DRV_Spi_Infors.ulDevCnt = 0; // 依次搜索设备 for(i=0;i<16;i++) { // 打开设备 if(CH347OpenDevice(i) != INVALID_HANDLE_VALUE) { // 获取设备信息 CH347GetDeviceInfor(i,&DevInfor); // 输出设备信息 DbgPrint("Manufacturer:%s Product:%s.", DevInfor.ManufacturerString, DevInfor.ProductString); if(DevInfor.ChipMode == 3) //模式3此接口为JTAG/I2C continue; // 格式化设备名称 sprintf(this->m_DRV_Spi_Infors.bDeviceName, "%d# %s",i,DevInfor.FuncDescStr); // 输出设备名称 DbgPrint("Dev Name:%s.", this->m_DRV_Spi_Infors.bDeviceName); // copy设备信息至SpiI2cDevInfor结构体 memcpy(&this->m_DRV_Spi_Infors.SpiI2cDevInfor[this->m_DRV_Spi_Infors.ulDevCnt], &DevInfor,sizeof(DevInfor)); // 设备数量自增 this->m_DRV_Spi_Infors.ulDevCnt++; // 获取版本号 CH347GetVersion(i, &iDriverVer, &iDLLVer, &ibcdDevice, &iChipType); // 输出版本号 DbgPrint("Version: DV:%02x DLLV:%02x BCD:%02x CT:%02x.", iDriverVer, iDLLVer, ibcdDevice, iChipType); } // 关闭设备 CH347CloseDevice(i); } return this->m_DRV_Spi_Infors.ulDevCnt; } //打开设备 bool DRV_Spi::spi_openDevice(ULONG SpiI2cGpioDevIndex) { // 获取所选的设备序号 if((SpiI2cGpioDevIndex < 0) || (SpiI2cGpioDevIndex > this->m_DRV_Spi_Infors.ulDevCnt)) { DbgPrint("device index error!"); return false; } // 打开设备 this->m_DRV_Spi_Infors.devIsOpened = (CH347OpenDevice(SpiI2cGpioDevIndex) != INVALID_HANDLE_VALUE); // 设置USB数据读写超时时间 CH347SetTimeout(SpiI2cGpioDevIndex,500,500); // 输出调试信息 DbgPrint("Open the device...%s",this->m_DRV_Spi_Infors.devIsOpened?"Success":"Failed"); if(!this->m_DRV_Spi_Infors.devIsOpened) return false; // 设置当前打开设备的索引号 this->m_DRV_Spi_Infors.opendDevIndex = SpiI2cGpioDevIndex; return true; // CH347InitSpi(); } //关闭设备 bool DRV_Spi::spi_closeDevice() { // 判断当前设备是否开启 if(!this->m_DRV_Spi_Infors.devIsOpened) { DbgPrint("The Device not open!"); return false; } // 关闭当前正在开启的设备 CH347CloseDevice(this->m_DRV_Spi_Infors.opendDevIndex); // 设置设备打开标志位为FALSE this->m_DRV_Spi_Infors.devIsOpened = FALSE; // 输出信息 DbgPrint("Close the Device!"); return TRUE; }