152 lines
5.2 KiB
C++
152 lines
5.2 KiB
C++
#ifndef _APP_ICD_H__
|
|
#define _APP_ICD_H__
|
|
|
|
#include <QMainWindow>
|
|
#include <QMap>
|
|
#include <QStringList>
|
|
#include <QObject>
|
|
|
|
#include "drivers/spi/drv_spi.h"
|
|
#include "drivers/uart/drv_uart.h"
|
|
|
|
// typedef struct _USB_DEVICE_DESCRIPTOR {
|
|
// UCHAR bLength;
|
|
// UCHAR bDescriptorType;
|
|
// USHORT bcdUSB;
|
|
// UCHAR bDeviceClass;
|
|
// UCHAR bDeviceSubClass;
|
|
// UCHAR bDeviceProtocol;
|
|
// UCHAR bMaxPacketSize0;
|
|
// USHORT idVendor;
|
|
// USHORT idProduct;
|
|
// USHORT bcdDevice;
|
|
// UCHAR iManufacturer;
|
|
// UCHAR iProduct;
|
|
// UCHAR iSerialNumber;
|
|
// UCHAR bNumConfigurations;
|
|
// } USB_DEVICE_DESCRIPTOR, *PUSB_DEVICE_DESCRIPTOR;
|
|
|
|
// typedef struct _DRV_SPI_INFO
|
|
// {
|
|
// CHAR bDeviceName[256]; //设备名称
|
|
// mDeviceInforS SpiI2cDevInfor[16]; //spiI2c设备信息
|
|
// ULONG ulDevCnt; //设备数量
|
|
// BOOL devIsOpened; //设备开启标志位
|
|
// ULONG opendDevIndex; //当前设备索引号
|
|
// }mDRV_Spi_Infors;
|
|
|
|
// 使用结构体存储更复杂的数据
|
|
// struct ComboBoxSubGroupItem {
|
|
// QString displayText;
|
|
// int value;
|
|
// };
|
|
|
|
// 解析结果结构体
|
|
struct ParsedData {
|
|
quint8 EN_TADC;
|
|
quint8 N_CLKDIV18; // 2位组合值
|
|
quint8 VCON; // 2位组合值
|
|
quint16 CH_TEST; // 9位组合值 (CH_TEST[8:0])
|
|
quint8 FBK_EN;
|
|
quint8 TEMPTEST_EN;
|
|
quint8 TRIG_TADC;
|
|
quint8 TEST_TADC;
|
|
quint8 ICON18; // 4位组合值
|
|
quint16 ADC_OUT; // 10位组合值 (ADC_OUT[9:0])
|
|
quint8 EOC;
|
|
quint16 D_FB; // 10位组合值 (D_FB[9:0])
|
|
};
|
|
|
|
// 命令枚举值
|
|
enum {
|
|
SP_CMD_NA = 0x00, // 无效命令
|
|
SP_CMD_ZERO = 0x01, // 参数归零命令
|
|
SP_CMD_SAME_VALUE = 0x02, // 同值配置命令
|
|
SP_CMD_DIF_VALUE = 0x03, // 异值配置命令
|
|
SP_CMD_REG_WR = 0x04, // 寄存器配置命令
|
|
SP_CMD_REG_RD = 0x05, // 寄存器读取命令
|
|
};
|
|
|
|
class APP_Icd : public QObject
|
|
{
|
|
Q_OBJECT // 如果需要使用QT的信号槽机制
|
|
|
|
public:
|
|
/**
|
|
* @brief 构造函数
|
|
* @param parent 父对象指针
|
|
*/
|
|
explicit APP_Icd(QObject *parent = nullptr);
|
|
|
|
/**
|
|
* @brief 析构函数
|
|
*/
|
|
virtual ~APP_Icd();
|
|
|
|
/*************函数定义*************/
|
|
bool ICD_init(); // ICD初始化
|
|
bool ICD_setDAC256Data10bit(int row, int col, int value); // 设置DAC256 10bit数组的值大小
|
|
bool ICD_volCMDProtoEncode(uint8_t CMD, uint8_t group, uint8_t subGroup);
|
|
quint8 ICD_calcChecksum(const QByteArray &data, int endPos);
|
|
bool ICD_sumProtoEncode(uint8_t CMD, const QByteArray &ctrl_data);
|
|
QByteArray ICD_pack10BitData(int data[16][16]);
|
|
QByteArray ICD_reverseSwapEvery5Bytes(const QByteArray &input);
|
|
bool ICD_regWCMDProtoEncode(uint8_t dacID, uint8_t dacCH, uint8_t funcEN, uint8_t adcCurrConfig);
|
|
bool ICD_regRCMDProtoEncode(uint8_t dacID);
|
|
bool ICD_newDataRecordingFile(void);
|
|
bool ICD_addContextToDataRecordingFile(bool isWrite, QByteArray &Data);
|
|
ParsedData ICD_parseRegisterData(const QByteArray &revData);
|
|
bool ICD_newVolRecordingFile(uint8_t DAC_number);
|
|
bool ICD_addContextToVolRecordingFile(uint8_t EOC, uint16_t ch_value, uint16_t vol);
|
|
void ICD_swapArrayElements(int inputArray[16][16], int outputArray[16][16]);
|
|
// void datatransfer(uint16_t *data_in, uint8_t *data_out);
|
|
void ICD_dataTransfer(const int DAC256_10bit_data[16][16], QByteArray &ICD_volValuePara);
|
|
|
|
/*************变量定义*************/
|
|
// mDRV_Spi_Infors m_DRV_Spi_Infors; //Spi驱动相关信息
|
|
DRV_Spi *m_spiDriver; // SPI驱动实例
|
|
DRV_Uart *m_uartDriver; // UART驱动实例
|
|
|
|
// 定义子分组的所有名称数据集
|
|
QMap<int, QStringList> comboBox_subGroupInfo = {
|
|
{0, {"所有DAC"}}, // 对应选项1
|
|
{1, {"A分组所有DAC", "B分组所有DAC"}}, // 对应选项2
|
|
{2, {"OPA分组0", "OPA分组1", "OPA分组2", "OPA分组3", "OPA分组4"}}, // 对应选项3
|
|
{3, {"编号1", "编号2", "编号3", "编号4", "编号5", // 对应选项3
|
|
"编号6", "编号7", "编号8", "编号9", "编号10",
|
|
"编号11", "编号12", "编号13", "编号14", "编号15",
|
|
"编号16", "编号17", "编号18", "编号19", "编号20"
|
|
}
|
|
}
|
|
};
|
|
// 256个10bit数据
|
|
int DAC256_10bit_data[16][16] = {{0}};
|
|
// 256个10bit数据_四通道为单位调换顺序
|
|
int DAC256_10bit_data_resv[16][16] = {{0}};
|
|
// 控制字参数
|
|
QByteArray ICD_ctrlPara;
|
|
// 电压值参数
|
|
QByteArray ICD_volValuePara;
|
|
// 整体帧
|
|
QByteArray ICD_allData;
|
|
QString dataRecordingFile;
|
|
QString volRecordingFile;
|
|
|
|
signals:
|
|
// 可以添加DAC特定的信号
|
|
// void outputChanged(int channel, double value);
|
|
|
|
private:
|
|
// 私有成员变量
|
|
// double m_currentValues[]; // 当前各通道输出值(假设有多个通道)
|
|
|
|
// 私有方法
|
|
bool ICD_initSpi();
|
|
bool ICD_initUart();
|
|
|
|
// 私有方法
|
|
|
|
};
|
|
|
|
#endif
|