103 lines
3.1 KiB
C++
Executable File
103 lines
3.1 KiB
C++
Executable File
#include "drv_spi.h"
|
||
#include <QDebug> // 用于调试输出
|
||
|
||
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;
|
||
}
|