diff --git a/SP713.pro b/SP713.pro index f6c4476..64c3196 100644 --- a/SP713.pro +++ b/SP713.pro @@ -1,3 +1,4 @@ +<<<<<<< HEAD QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets @@ -41,3 +42,53 @@ win32:LIBS += $$PWD/libs/CH347DLLA64.LIB qnx: target.path = /tmp/$${TARGET}/bin else: unix:!android: target.path = /opt/$${TARGET}/bin !isEmpty(target.path): INSTALLS += target +======= +QT += core gui + +greaterThan(QT_MAJOR_VERSION, 4): QT += widgets + +CONFIG += c++17 + +# You can make your code fail to compile if it uses deprecated APIs. +# In order to do so, uncomment the following line. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +RC_ICONS = sp713.ico + +SOURCES += \ + apps/crc16/crc.cpp \ + apps/icd/app_icd.cpp \ + drivers/log/logHandler.cpp \ + drivers/spi/drv_spi.cpp \ + drivers/uart/drv_uart.cpp \ + main.cpp \ + mainwindow.cpp + +HEADERS += \ + apps/crc16/crc.h \ + apps/icd/app_icd.h \ + drivers/log/logHandler.h \ + drivers/spi/drv_spi.h \ + drivers/uart/drv_uart.h \ + libs/CH347DLL.H \ + libs/Common.h \ + libs/SpiApi.h \ + mainwindow.h + +FORMS += \ + mainwindow.ui + +#add libs +LIBS += -L$$PWD/libs -lCH347DLLA64 +INCLUDEPATH += $$PWD/libs +win32:LIBS += $$PWD/libs/CH347DLLA64.LIB + +LIBS += -L$$PWD/libs -lCH347Handler +INCLUDEPATH += $$PWD/libs +win32:LIBS += $$PWD/libs/CH347Handler.lib + +# Default rules for deployment. +qnx: target.path = /tmp/$${TARGET}/bin +else: unix:!android: target.path = /opt/$${TARGET}/bin +!isEmpty(target.path): INSTALLS += target +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/apps/icd/app_icd.cpp b/apps/icd/app_icd.cpp index a2e7d90..76904e1 100644 --- a/apps/icd/app_icd.cpp +++ b/apps/icd/app_icd.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD #include "app_icd.h" #include // 用于调试输出 #include "apps/crc16/crc.h" @@ -470,3 +471,320 @@ ParsedData APP_Icd::ICD_parseRegisterData(const QByteArray &revData) { return result; } +======= +#include "app_icd.h" +#include // 用于调试输出 +#include "apps/crc16/crc.h" +#include +#include + +APP_Icd::APP_Icd(QObject *parent) : QObject(parent) +{ + // 创建驱动实例 + this->m_spiDriver = new DRV_Spi(this); + this->m_uartDriver = new DRV_Uart(this); + // 初始化协议帧相关参数的大小 + this->ICD_ctrlPara.resize(11); + this->ICD_volValuePara.resize(320); + this->ICD_allData.resize(340); + // 初始化协议帧相关参数的初值 + this->ICD_allData.fill(0x00); + this->ICD_ctrlPara.fill(0x00); + this->ICD_volValuePara.fill(0x00); + // 设置包头 + this->ICD_allData[0] = 0x9F; + this->ICD_allData[1] = 0xE4; +} + +APP_Icd::~APP_Icd() +{ + +} + +bool APP_Icd::ICD_init() +{ + if(!ICD_initSpi()) { + qWarning() << "SPI initialization failed"; + return false; + } + + if(!ICD_initUart()) { + qWarning() << "UART initialization failed"; + return false; + } + + return true; +} + +bool APP_Icd::ICD_initSpi() +{ + // 这里添加SPI初始化逻辑 + return true; +} + +bool APP_Icd::ICD_initUart() +{ + // //枚举当前的uart设备号 + // this->m_uartDriver->Uart_enumDevice(); + return true; +} + +/** + * @brief 计算QByteArray的累加和校验 + * @param data 输入数据 + * @param endPos 截止位置(-1表示计算到末尾) + * @return 累加和(溢出自动截断为8位) + */ +quint8 APP_Icd::ICD_calcChecksum(const QByteArray &data, int endPos) +{ + quint8 sum = 0; + if (data.isEmpty()) return sum; + + // 计算有效长度 + int length = (endPos < 0 || endPos >= data.size()) ? + data.size() : endPos + 1; + + // 累加计算 + for (int i = 0; i < length; ++i) { + sum += static_cast(data.at(i)); // 自动处理溢出 + } + + return sum; +} + +// 电压命令编码 +bool APP_Icd::ICD_volCMDProtoEncode(uint8_t CMD, uint8_t group, uint8_t subGroup) +{ + //判断值是否超出范围 + if((CMD > 0x03) || (group > 0xAA) || (subGroup > 0xAA)) + return false; + + // 设置控制字参数 + this->ICD_ctrlPara[0] = group; + this->ICD_ctrlPara[1] = subGroup; + + // 调用主协议编码函数 + return this->ICD_sumProtoEncode(CMD, this->ICD_ctrlPara); +} + +// 写寄存器命令编码 +bool APP_Icd::ICD_regWCMDProtoEncode(uint8_t dacID, uint8_t dacCH, uint8_t funcEN, uint8_t adcCurrConfig) +{ + //判断值是否超出范围 + // if((funcEN > 0x0F)) + // return false; + + // 填充默认值0 + this->ICD_ctrlPara.fill(0x00); + + // 设置控制字参数 + this->ICD_ctrlPara[0] = dacID; + this->ICD_ctrlPara[1] = dacCH; + this->ICD_ctrlPara[2] = funcEN; + this->ICD_ctrlPara[3] = adcCurrConfig; + + // 调用主协议编码函数 + return this->ICD_sumProtoEncode(SP_CMD_REG_WR, this->ICD_ctrlPara); +} + +// 写寄存器命令编码 +bool APP_Icd::ICD_regRCMDProtoEncode(uint8_t dacID) +{ + //判断值是否超出范围 + if((dacID > 0x14)) + return false; + + // 填充默认值0 + this->ICD_ctrlPara.fill(0x00); + + // 设置控制字参数 + this->ICD_ctrlPara[0] = dacID; + + // 调用主协议编码函数 + return this->ICD_sumProtoEncode(SP_CMD_REG_RD, this->ICD_ctrlPara); +} + +bool APP_Icd::ICD_sumProtoEncode(uint8_t CMD, const QByteArray &ctrl_data) +{ +// this->ICD_allData.resize(338); + // 设置控制字指令 + this->ICD_allData[2] = CMD; + // 将控制字参数添加到主协议帧上 + this->ICD_allData.replace(3, ctrl_data.size(), ctrl_data); + // 设置帧计数 + this->ICD_allData[14] = this->ICD_allData[14] + 1; + // 设置校验和 + this->ICD_allData[15] = this->ICD_calcChecksum(this->ICD_allData, 14); + // 设置电压类型:同值为0x01,异值为0x02 + if((CMD == SP_CMD_SAME_VALUE) || (CMD == SP_CMD_DIF_VALUE)){ + this->ICD_allData[16] = CMD - 1; + }else{ + this->ICD_allData[16] = 0; + } + // 将256个10bit数据转化为320个字节的数据 + this->ICD_pack10BitData(this->DAC256_10bit_data); + // 将电压参数赋值到allData中 + this->ICD_allData.replace(17, ICD_volValuePara.size(), ICD_volValuePara); + // 计算320个字节的CRC16校验和 + QByteArray crc16Result = crc16Reverse(this->ICD_volValuePara); + // 将CRC16校验和添加到ICD_allData中 + this->ICD_allData.replace(337, crc16Result.size(), crc16Result); + // 设置校验和 + this->ICD_allData[339] = this->ICD_calcChecksum(this->ICD_allData, 338); + // 调用串口/SPI发送函数 + if(this->m_uartDriver->m_DRV_Uart_Infors.devIsOpened){ + // 串口发送数据 + this->m_uartDriver->Uart_Write(this->ICD_allData); + // 记录数据 + this->ICD_addContextToDataRecordingFile(true, this->ICD_allData); + } + + return true; +} + +// 设置DAC256 10Bit参数 +bool APP_Icd::ICD_setDAC256Data10bit(int row, int col, int value) +{ + if((row > 15) || (col > 15) || (value > 1023)) + return false; + this->DAC256_10bit_data[row][col] = value; + return true; +} + +// 将256个10bit的数据转化为320个8bit数据 +QByteArray APP_Icd::ICD_pack10BitData(int data[16][16]) { + + quint32 bitBuffer = 0; // 32位缓冲区 + int bitsInBuffer = 0; // 缓冲区中当前位数 + + this->ICD_volValuePara.clear(); + + for (int row = 0; row < 16; ++row) { + for (int col = 0; col < 16; ++col) { + // 确保数据是10位 (0-1023) + quint32 value = static_cast(data[row][col]) & 0x3FF; + + // 将10位值添加到缓冲区 + bitBuffer = (bitBuffer << 10) | value; + bitsInBuffer += 10; + + // 每当缓冲区有至少8位时,提取一个字节 + while (bitsInBuffer >= 8) { + bitsInBuffer -= 8; + quint8 byte = static_cast((bitBuffer >> bitsInBuffer) & 0xFF); + this->ICD_volValuePara.append(byte); + } + } + } + + // 处理缓冲区中剩余的位(如果有) + if (bitsInBuffer > 0) { + quint8 lastByte = static_cast((bitBuffer << (8 - bitsInBuffer)) & 0xFF); + this->ICD_volValuePara.append(lastByte); + } + + // 确保输出正好是320字节(不足补零) + while (this->ICD_volValuePara.size() < 320) { + this->ICD_volValuePara.append('\0'); + } + + return this->ICD_volValuePara; +} + +// 创建数据记录文件 +bool APP_Icd::ICD_newDataRecordingFile(void) +{ + // 生成带时间戳的文件名 + QString timestamp = QDateTime::currentDateTime().toString("yyyyMMdd_hhmmss"); + QString fileName = QString("%1_%2.txt").arg("SP713_UART_SPI_Data_Recording").arg(timestamp); + + // 创建文件并检查是否成功 + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + { + return false; + } + // 关闭文件 + file.close(); + // 设置数据记录文件名 + this->dataRecordingFile = fileName; + return true; +} + +// 添加记录至txt文件 +bool APP_Icd::ICD_addContextToDataRecordingFile(bool isWrite, QByteArray &Data) +{ + if (this->dataRecordingFile.isEmpty()) + { + return false; + } + + // 打开文件(追加模式) + QFile file(this->dataRecordingFile); + if (!file.open(QIODevice::Append | QIODevice::Text)) + { + return false; + } + + QTextStream out(&file); + + // 写入时间戳和特定字符串 + QString timestamp = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"); + if(isWrite){ + out << timestamp << " tx data: "; // 时间戳和特定字符串 + }else{ + out << timestamp << " rx data: "; // 时间戳和特定字符串 + } + + // 将QByteArray转换为16进制字符串,用空格分隔 + QString hexData = Data.toHex(' ').toUpper(); + out << hexData << "\n"; // 写入16进制数据并换行 + + file.close(); + return true; +} + +// 解析函数 +ParsedData APP_Icd::ICD_parseRegisterData(const QByteArray &revData) { + ParsedData result = {}; + + // 检查数据长度 (至少需要7个字节: REG7-REG1) + if(revData.size() < 7) { + qWarning() << "Invalid data length, expected at least 7 bytes"; + return result; + } + + // 从REG7到REG1解析 (数据顺序是REG7在前) + const uchar *data = reinterpret_cast(revData.constData()); + + // REG2 (索引5,因为数据顺序是REG7(0),REG6(1),...,REG1(6)) + result.EN_TADC = (data[5] >> 7) & 0x01; + result.N_CLKDIV18 = ((data[5] >> 5) & 0x03); // 取B6和B5 + result.VCON = ((data[5] >> 2) & 0x03); // 取B4和B3 + result.CH_TEST = ((data[5] >> 1) & 0x01) << 8; // CH_TEST[8] + result.FBK_EN = (data[5]) & 0x01; + + // REG3 (索引4) + result.TEMPTEST_EN = (data[4] >> 7) & 0x01; + result.TRIG_TADC = (data[4] >> 6) & 0x01; + result.TEST_TADC = (data[4] >> 5) & 0x01; + result.ICON18 = (data[4]) & 0x0F; // 取B4-B1 + + // REG4 (索引3) + result.CH_TEST |= data[3]; // CH_TEST[7:0] + + // REG5 (索引2) + result.ADC_OUT = data[2]; // ADC_OUT[7:0] + + // REG6 (索引1) + result.EOC = (data[1] >> 7) & 0x01; + result.ADC_OUT |= ((data[1] & 0x03) << 8); // ADC_OUT[9:8] + + result.D_FB = ((data[1] >> 2) & 0x03); // D_FB[9:8] + + // REG7 (索引0) + result.D_FB = (result.D_FB << 8) | data[0]; // D_FB[7:0] + + return result; +} +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/apps/icd/app_icd.h b/apps/icd/app_icd.h index 45396d9..c8ad1e8 100644 --- a/apps/icd/app_icd.h +++ b/apps/icd/app_icd.h @@ -1,3 +1,4 @@ +<<<<<<< HEAD #ifndef _APP_ICD_H__ #define _APP_ICD_H__ @@ -149,3 +150,147 @@ private: }; #endif +======= +#ifndef _APP_ICD_H__ +#define _APP_ICD_H__ + +#include +#include +#include +#include + +#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]); + 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); + + /*************变量定义*************/ + // mDRV_Spi_Infors m_DRV_Spi_Infors; //Spi驱动相关信息 + DRV_Spi *m_spiDriver; // SPI驱动实例 + DRV_Uart *m_uartDriver; // UART驱动实例 + + // 定义子分组的所有名称数据集 + QMap 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}}; + // 控制字参数 + QByteArray ICD_ctrlPara; + // 电压值参数 + QByteArray ICD_volValuePara; + // 整体帧 + QByteArray ICD_allData; + QString dataRecordingFile; + +signals: + // 可以添加DAC特定的信号 + // void outputChanged(int channel, double value); + +private: + // 私有成员变量 + // double m_currentValues[]; // 当前各通道输出值(假设有多个通道) + + // 私有方法 + bool ICD_initSpi(); + bool ICD_initUart(); + + // 私有方法 + +}; + +#endif +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/drivers/log/logHandler.cpp b/drivers/log/logHandler.cpp index 5c39774..a170378 100644 --- a/drivers/log/logHandler.cpp +++ b/drivers/log/logHandler.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD #include "LogHandler.h" #include #include @@ -54,3 +55,61 @@ void LogHandler::log_handleMessage(QtMsgType type, const QMessageLogContext &, c std::cerr << formattedMsg.toStdString() << std::endl; } } +======= +#include "LogHandler.h" +#include +#include +#include + +// 初始化静态成员 +LogHandler* LogHandler::s_instance = nullptr; +QMutex LogHandler::s_mutex; + +LogHandler::LogHandler(QObject *parent) : QObject(parent), m_logWidget(nullptr) { + +} + +// 获取单例实例(线程安全) +LogHandler* LogHandler::log_instance() { + if (!s_instance) { + QMutexLocker locker(&s_mutex); + if (!s_instance) { + s_instance = new LogHandler(); + } + } + return s_instance; +} + +// 初始化日志输出目标 +void LogHandler::log_init(QPlainTextEdit *logWidget) { + LogHandler *handler = log_instance(); + handler->m_logWidget = logWidget; + qInstallMessageHandler(log_handleMessage); // 注册消息处理器 +} + +// 静态消息处理函数 +void LogHandler::log_handleMessage(QtMsgType type, const QMessageLogContext &, const QString &msg) { + LogHandler *handler = log_instance(); + if (!handler) return; + + // 格式化日志消息(添加时间和日志级别) + QString timestamp = QDateTime::currentDateTime().toString("[hh:mm:ss.zzz] "); + QString level; + switch (type) { + case QtDebugMsg: level = "DEBUG"; break; + case QtInfoMsg: level = "INFO"; break; + case QtWarningMsg: level = "WARN"; break; + case QtCriticalMsg: level = "ERROR"; break; + case QtFatalMsg: level = "FATAL"; break; + } + QString formattedMsg = QString("%1[%2] %3").arg(timestamp, level, msg); + + // 如果有UI组件,通过信号槽更新(线程安全) + if (handler->m_logWidget) { + emit handler->log_messageLogged(formattedMsg); + } else { + // 无UI时输出到控制台 + std::cerr << formattedMsg.toStdString() << std::endl; + } +} +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/drivers/log/logHandler.h b/drivers/log/logHandler.h index e92dba4..a0a2a9e 100644 --- a/drivers/log/logHandler.h +++ b/drivers/log/logHandler.h @@ -1,3 +1,4 @@ +<<<<<<< HEAD #ifndef __LOG_HANDLER_H__ #define __LOG_HANDLER_H__ @@ -29,3 +30,36 @@ private: }; #endif +======= +#ifndef __LOG_HANDLER_H__ +#define __LOG_HANDLER_H__ + +#include +#include +#include + +class LogHandler : public QObject { + Q_OBJECT +public: + // 获取单例实例 + static LogHandler* log_instance(); + + // 初始化日志输出目标(UI控件) + static void log_init(QPlainTextEdit *logWidget = nullptr); + + // Qt 消息处理函数(静态) + static void log_handleMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg); + +signals: + // 日志信号(用于跨线程传递) + void log_messageLogged(const QString &formattedMsg); + +private: + explicit LogHandler(QObject *parent = nullptr); + static LogHandler *s_instance; // 单例实例 + static QMutex s_mutex; // 线程安全锁 + QPlainTextEdit *m_logWidget; // 日志输出UI组件 +}; + +#endif +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/drivers/spi/drv_spi.cpp b/drivers/spi/drv_spi.cpp index afc05bf..31cab67 100644 --- a/drivers/spi/drv_spi.cpp +++ b/drivers/spi/drv_spi.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD #include "drv_spi.h" #include // 用于调试输出 @@ -100,3 +101,107 @@ bool DRV_Spi::spi_closeDevice() return TRUE; } +======= +#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; +} +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/drivers/spi/drv_spi.h b/drivers/spi/drv_spi.h index c1db722..6ac5513 100644 --- a/drivers/spi/drv_spi.h +++ b/drivers/spi/drv_spi.h @@ -1,3 +1,4 @@ +<<<<<<< HEAD #ifndef _DRV_SPI_H__ #define _DRV_SPI_H__ @@ -70,3 +71,77 @@ private: }; #endif +======= +#ifndef _DRV_SPI_H__ +#define _DRV_SPI_H__ + +#include + +#include "libs/CH347DLL.H" + +#define DbgPrint(format, ...) qDebug().nospace() << QString::asprintf(format, ##__VA_ARGS__) + +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; + +class DRV_Spi : public QObject +{ + Q_OBJECT // 如果需要使用QT的信号槽机制 + +public: + /** + * @brief 构造函数 + * @param parent 父对象指针 + */ + explicit DRV_Spi(QObject *parent = nullptr); + + /** + * @brief 析构函数 + */ + virtual ~DRV_Spi(); + + /*************函数定义*************/ + ULONG spi_enumDevice(); // 枚举SPI设备 + bool spi_openDevice(ULONG SpiI2cGpioDevIndex); // 打开设备 + bool spi_closeDevice(); // 关闭设备 + + /*************变量定义*************/ + mDRV_Spi_Infors m_DRV_Spi_Infors; //Spi驱动相关信息 + +signals: + // 可以添加DAC特定的信号 + // void outputChanged(int channel, double value); + +private: + // 私有成员变量 + // double m_currentValues[]; // 当前各通道输出值(假设有多个通道) + + // 私有方法 + +}; + +#endif +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/drivers/uart/drv_uart.cpp b/drivers/uart/drv_uart.cpp index 04d6acf..4301273 100644 --- a/drivers/uart/drv_uart.cpp +++ b/drivers/uart/drv_uart.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD #include "drv_uart.h" #include #include // 用于调试输出 @@ -153,3 +154,160 @@ BOOL DRV_Uart::Uart_Read(QByteArray &revData) } return RetVal; } +======= +#include "drv_uart.h" +#include +#include // 用于调试输出 +#include + +DRV_Uart::DRV_Uart(QObject *parent) + : QObject(parent) // 假设有8个通道 +{ + +} + +DRV_Uart::~DRV_Uart() +{ + +} + +// 枚举当前的所有UART设备:返回搜索到的设备数目 +ULONG DRV_Uart::Uart_enumDevice() +{ + ULONG i; + + mDeviceInforS DevInfor = {0}; + + // 当前设备数目清零 + this->m_DRV_Uart_Infors.ulDevCnt = 0; + + // 依次搜索设备 + for(i=0;i<16;i++) + { + // 打开设备 + if(CH347Uart_Open(i) != INVALID_HANDLE_VALUE) + { + // 获取设备信息 + CH347Uart_GetDeviceInfor(i,&DevInfor); + // 格式化设备名称 + sprintf(this->m_DRV_Uart_Infors.bDeviceName[this->m_DRV_Uart_Infors.ulDevCnt], "%d# %s", i,DevInfor.FuncDescStr); + // 输出设备名称 + DbgPrint("UART:%s.", this->m_DRV_Uart_Infors.bDeviceName[this->m_DRV_Uart_Infors.ulDevCnt]); + + // copy设备信息至SpiI2cDevInfor结构体 + memcpy(&this->m_DRV_Uart_Infors.UartDevInfor[this->m_DRV_Uart_Infors.ulDevCnt], &DevInfor,sizeof(DevInfor)); + // 设备数量自增 + this->m_DRV_Uart_Infors.ulDevCnt++; + } + // 关闭设备 + CH347CloseDevice(i); + } + return this->m_DRV_Uart_Infors.ulDevCnt; +} + +//打开设备 +BOOL DRV_Uart::Uart_openDevice(ULONG UartIndex) +{ + // 判断设备的索引是否在正确的范围内,否则直接跳出 + if((this->m_DRV_Uart_Infors.ulDevCnt == 0) || (UartIndex >= this->m_DRV_Uart_Infors.ulDevCnt)) + { + DbgPrint("Failed to open the device. Please refresh device first!"); + return FALSE; + } + // 打开串口设备 + this->m_DRV_Uart_Infors.devIsOpened = (CH347Uart_Open(UartIndex) != INVALID_HANDLE_VALUE); + // 判断是否打开成功 + if(this->m_DRV_Uart_Infors.devIsOpened){ + // 设置当前的设备索引号 + this->m_DRV_Uart_Infors.opendDevIndex = UartIndex; + // 设置默认的延迟时间 + CH347Uart_SetTimeout(UartIndex,500,500); + // 设置接收和发送线程 + // StopTxThread = FALSE; + // StopRxThread = FALSE; + } + // 显示日志信息 + DbgPrint(">>%d#Open Device...%s",UartIndex,this->m_DRV_Uart_Infors.devIsOpened?"Success":"Failed"); + return this->m_DRV_Uart_Infors.devIsOpened; +} + +//关闭设备 +BOOL DRV_Uart::Uart_closeDevice() +{ + // 设置接收和发送线程 + // StopTxThread = TRUE; + // StopRxThread = TRUE; + // 判断是否打开成功 + if(this->m_DRV_Uart_Infors.devIsOpened){ + Sleep(300); + CH347Uart_Close(this->m_DRV_Uart_Infors.opendDevIndex); + this->m_DRV_Uart_Infors.devIsOpened = FALSE; + DbgPrint(">>%d#Close device",this->m_DRV_Uart_Infors.opendDevIndex); + } + return TRUE; +} + +//设置串口参数 +BOOL DRV_Uart::Uart_setPara(ULONG Baudrate, UCHAR StopBits, UCHAR Parity, UCHAR DataSize, UCHAR Timeout) +{ + BOOL RetVal = FALSE; + + if(this->m_DRV_Uart_Infors.devIsOpened){ + RetVal = CH347Uart_Init(this->m_DRV_Uart_Infors.opendDevIndex,Baudrate,DataSize,Parity,StopBits,Timeout); + DbgPrint("Uart_Set %s,Baudrate:%d,DataSize:%d,Parity:%d,StopBits:%d,Timeout:%d",RetVal?"succ":"failure", + Baudrate,DataSize,Parity,StopBits,Timeout); + } + return RetVal; +} + +//串口发送数据 +BOOL DRV_Uart::Uart_Write(QByteArray &sendData) +{ + // 获取数据包的长度 + ULONG OutLen = sendData.length(); + // 将QByteArray转化为UCHAR + const UCHAR *OutBuf = reinterpret_cast(sendData.constData()); + + BOOL RetVal = FALSE; + // 调用底层串口发送函数发送数据 + RetVal = CH347Uart_Write(this->m_DRV_Uart_Infors.opendDevIndex, (UCHAR *)OutBuf, &OutLen); + // 日志窗口输出调试信息 + DbgPrint("frame:%d,Uart_Write %dBytes %s.",sendData.at(14), OutLen,RetVal?"succ":"failure"); + + return RetVal; +} + +//读取串口缓冲区数据大小 +LONGLONG DRV_Uart::Uart_readRxBufcnt(void) +{ + LONGLONG rxBufSize = 0; + + BOOL RetVal = FALSE; + // 调用底层串口接收数据缓冲区的大小 + RetVal = CH347Uart_QueryBufUpload(this->m_DRV_Uart_Infors.opendDevIndex, &rxBufSize); + // 日志窗口输出调试信息 + DbgPrint("read uart rx buf count:%d.", rxBufSize, RetVal?"succ":"failure"); + + return rxBufSize; +} + +BOOL DRV_Uart::Uart_Read(QByteArray &revData) +{ + ULONG InLen = 4096; // 设置读取的长度,读取完后会将该值赋值为真实的长度 + UCHAR InBuf[4096] = {0x00}; + + BOOL RetVal = FALSE; + + // 读取串口数据 + RetVal = CH347Uart_Read(this->m_DRV_Uart_Infors.opendDevIndex,InBuf,&InLen); + + DbgPrint("CH347Uart_Read %dB %s.",InLen,RetVal?"succ":"failure"); + + if(RetVal) + { + //将数据存入revData变量中,返回给调用的函数 + revData = QByteArray::fromRawData(reinterpret_cast(InBuf), InLen); + } + return RetVal; +} +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/drivers/uart/drv_uart.h b/drivers/uart/drv_uart.h index 75aaaa9..d3f3879 100644 --- a/drivers/uart/drv_uart.h +++ b/drivers/uart/drv_uart.h @@ -1,3 +1,4 @@ +<<<<<<< HEAD #ifndef _DRV_UART_H__ #define _DRV_UART_H__ @@ -73,3 +74,80 @@ private: }; #endif +======= +#ifndef _DRV_UART_H__ +#define _DRV_UART_H__ + +#include + +#include "libs/CH347DLL.H" + +#define DbgPrint(format, ...) qDebug().nospace() << QString::asprintf(format, ##__VA_ARGS__) + +// 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_UART_INFO +{ + CHAR bDeviceName[2][256]; //设备名称 + mDeviceInforS UartDevInfor[16]; //spiI2c设备信息 + ULONG ulDevCnt; //设备数量 + BOOL devIsOpened; //设备开启标志位 + ULONG opendDevIndex; //当前设备索引号 +}mDRV_Uart_Infors; + +class DRV_Uart : public QObject +{ + Q_OBJECT // 如果需要使用QT的信号槽机制 + +public: + /** + * @brief 构造函数 + * @param parent 父对象指针 + */ + explicit DRV_Uart(QObject *parent = nullptr); + + /** + * @brief 析构函数 + */ + virtual ~DRV_Uart(); + + /*************函数定义*************/ + ULONG Uart_enumDevice(); // 枚举UART设备 + BOOL Uart_openDevice(ULONG UartIndex); // 打开设备 + BOOL Uart_closeDevice(); // 关闭设备 + BOOL Uart_setPara(ULONG Baudrate, UCHAR StopBits, UCHAR Parity, UCHAR DataSize, UCHAR Timeout);// 设置参数 + BOOL Uart_Write(QByteArray &sendData); + LONGLONG Uart_readRxBufcnt(void); + BOOL Uart_Read(QByteArray &revData); + /*************变量定义*************/ + mDRV_Uart_Infors m_DRV_Uart_Infors; //Spi驱动相关信息 + +signals: + // 可以添加DAC特定的信号 + // void outputChanged(int channel, double value); + +private: + // 私有成员变量 + // double m_currentValues[]; // 当前各通道输出值(假设有多个通道) + + // 私有方法 + +}; + +#endif +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/libs/CH347DLL.H b/libs/CH347DLL.H index cdf16f0..cbd37c0 100644 --- a/libs/CH347DLL.H +++ b/libs/CH347DLL.H @@ -1,3 +1,4 @@ +<<<<<<< HEAD /***************************************************************************** ** Copyright (C) WCH 2001-2025 ** ** Web: http://wch.cn ** @@ -643,3 +644,650 @@ UCHAR WINAPI CH339GetChipFuncState( ULONG iIndex ); // ָ #endif #endif // _CH347_DLL_H +======= +/***************************************************************************** +** Copyright (C) WCH 2001-2025 ** +** Web: http://wch.cn ** +******************************************************************************/ +// USB߽ӿоƬCH341/7Ӧòӿڿ,CH347/9480MbpsUSBչUART/SPI/I2C/JTAG/SWD +// CH346480MbpsUSBչUART/SPI SLAVE,UART/PARALLEL SLAVE +// CH347-DLL V1.4 +// л: Windows 98/ME, Windows 2000/XP, WIN7/8/10/11,and later. +// support USB chip: CH341, CH341A,CH347,CH339W +// USB => Parallel, I2C, SPI, JTAG, SWD, PARALLEL,UART ... +//Notes: +//Copyright (C) 2025 Nanjing Qinheng Microelectronics Co., Ltd. + + + +#ifndef _CH347_DLL_H +#define _CH347_DLL_H + +#include // ȷ LONG Ͷ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef _WIN64 +#define mOFFSET( s, m ) ( (ULONG_PTR) & ( ( ( s * ) 0 ) -> m ) ) // ȡṹԱƫƵַĺ +#else +#define mOFFSET( s, m ) ( (ULONG) & ( ( ( s * ) 0 ) -> m ) ) // ȡṹԱƫƵַĺ +#endif + +#ifndef max +#define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) // ϴֵ +#endif + +#ifndef min +#define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) // Сֵ +#endif + +#ifdef ExAllocatePool +#undef ExAllocatePool // ɾTAGڴ +#endif + +#ifndef NTSTATUS +typedef LONG NTSTATUS; // ״̬ +#endif + +//CH31DLLCH341WDM +#ifndef _CH341_DLL_H +typedef struct _USB_SETUP_PKT { // USBƴĽ׶εṹ + UCHAR mUspReqType; // 00H + UCHAR mUspRequest; // 01H + union { + struct { + UCHAR mUspValueLow; // 02H ֵֽ + UCHAR mUspValueHigh; // 03H ֵֽ + }; + USHORT mUspValue; // 02H-03H ֵ + }; + union { + struct { + UCHAR mUspIndexLow; // 04H ֽ + UCHAR mUspIndexHigh; // 05H ֽ + }; + USHORT mUspIndex; // 04H-05H + }; + USHORT mLength; // 06H-07H ݽ׶εݳ +} mUSB_SETUP_PKT, *mPUSB_SETUP_PKT; + + +typedef struct _WIN32_COMMAND { // WIN32ӿڽṹ + union { + ULONG mFunction; // ʱָܴ߹ܵ + NTSTATUS mStatus; // ʱز״̬ + }; + ULONG mLength; // ȡ,غݵij + union { + mUSB_SETUP_PKT mSetupPkt; // USBƴĽ׶ε + UCHAR mBuffer[ 512]; // ݻ,Ϊ0255B + }; +} mWIN32_COMMAND, *mPWIN32_COMMAND; +// WIN32Ӧòӿ +#define IOCTL_CH341_COMMAND ( FILE_DEVICE_UNKNOWN << 16 | FILE_ANY_ACCESS << 14 | 0x0f34 << 2 | METHOD_BUFFERED ) // רýӿ + +#define mWIN32_COMMAND_HEAD mOFFSET( mWIN32_COMMAND, mBuffer ) // WIN32ӿڵͷ + +#define mCH341_MAX_NUMBER 32 // ͬʱӵCH341/7豸 + +#define mMAX_BUFFER_LENGTH 0x1000 // ݻ󳤶4096 + +#define mMAX_COMMAND_LENGTH ( mWIN32_COMMAND_HEAD + mMAX_BUFFER_LENGTH ) // ݳȼṹͷij + +#define mDEFAULT_BUFFER_LEN 0x0400 // ݻĬϳ1024 + +#define mDEFAULT_COMMAND_LEN ( mWIN32_COMMAND_HEAD + mDEFAULT_BUFFER_LEN ) // Ĭݳȼṹͷij + +// CH341˵ַ +#define mCH347_ENDP_DATA_UP 0x86 // CH347ݿϴ˵ĵַ +#define mCH347_ENDP_DATA_DOWN 0x06 // CH347ݿ´˵ĵַ + +// 豸ӿṩĹܵ +#define mPipeDeviceCtrl 0x00000004 // CH347ۺϿƹܵ +#define mPipeDataUp 0x00000006 // CH347ݿϴܵ +#define mPipeDataDown 0x00000007 // CH347ݿ´ܵ + +// ӦòӿڵĹܴ +#define mFuncNoOperation 0x00000000 // ޲ +#define mFuncGetVersion 0x00000001 // ȡ汾 +#define mFuncGetConfig 0x00000002 // ȡUSB豸 +#define mFuncSetTimeout 0x00000009 // USBͨѶʱ +#define mFuncSetExclusive 0x0000000b // öռʹ +#define mFuncResetDevice 0x0000000c // λUSB豸 +#define mFuncResetPipe 0x0000000d // λUSBܵ +#define mFuncAbortPipe 0x0000000e // ȡUSBܵ +#define mFuncBufferMode 0x00000020 // 趨ϴģʽѯеݳ +#define mFuncBufferModeDn 0x00000021 // 趨´ģʽѯеݳ +#define mFuncGetVersionEx 0x00000022 // ȡ汾żоƬͺ +// USB豸׼ +#define mUSB_CLR_FEATURE 0x01 +#define mUSB_SET_FEATURE 0x03 +#define mUSB_GET_STATUS 0x00 +#define mUSB_SET_ADDRESS 0x05 +#define mUSB_GET_DESCR 0x06 +#define mUSB_SET_DESCR 0x07 +#define mUSB_GET_CONFIG 0x08 +#define mUSB_SET_CONFIG 0x09 +#define mUSB_GET_INTERF 0x0a +#define mUSB_SET_INTERF 0x0b +#define mUSB_SYNC_FRAME 0x0c + +// CH341ƴijר +#define mCH341_VENDOR_READ 0xC0 // ͨƴʵֵCH341רö +#define mCH341_VENDOR_WRITE 0x40 // ͨƴʵֵCH341רд + +#define mCH341A_CMD_I2C_STREAM 0xAA // I2Cӿڵ,ӴֽڿʼΪI2C +#define mCH341A_CMD_UIO_STREAM 0xAB // UIOӿڵ,ӴֽڿʼΪ +#define mCH341A_CMD_PIO_STREAM 0xAE // PIOӿڵ,ӴֽڿʼΪ +// CH341Aƴijר +#define mCH341A_BUF_CLEAR 0xB2 // δɵ +#define mCH341A_I2C_CMD_X 0x54 // I2Cӿڵ,ִ +#define mCH341A_DELAY_MS 0x5E // Ϊλʱָʱ +#define mCH341A_GET_VER 0x5F // ȡоƬ汾 + +#define mCH341A_CMD_I2C_STM_STA 0x74 // I2Cӿڵ:ʼλ +#define mCH341A_CMD_I2C_STM_STO 0x75 // I2Cӿڵ:ֹͣλ +#define mCH341A_CMD_I2C_STM_OUT 0x80 // I2Cӿڵ:,λ5-λ0Ϊ,ֽΪ,0ֻһֽڲӦ +#define mCH341A_CMD_I2C_STM_IN 0xC0 // I2Cӿڵ:,λ5-λ0Ϊ,0ֻһֽڲӦ +#define mCH341A_CMD_I2C_STM_MAX ( min( 0x3F, mCH341_PACKET_LENGTH ) ) // I2Cӿڵݵ󳤶 +#define mCH341A_CMD_I2C_STM_SET 0x60 // I2Cӿڵ:ò,λ2=SPII/O(0=뵥,1=˫˫),λ1λ0=I2Cٶ(00=,01=׼,10=,11=) +#define mCH341A_CMD_I2C_STM_US 0x40 // I2Cӿڵ:΢Ϊλʱ,λ3-λ0Ϊʱֵ +#define mCH341A_CMD_I2C_STM_MS 0x50 // I2Cӿڵ:Ϊλʱ,λ3-λ0Ϊʱֵ +#define mCH341A_CMD_I2C_STM_DLY 0x0F // I2Cӿڵʱֵ +#define mCH341A_CMD_I2C_STM_END 0x00 // I2Cӿڵ:ǰ + +#define mCH341A_CMD_UIO_STM_IN 0x00 // UIOӿڵ:D7-D0 +#define mCH341A_CMD_UIO_STM_DIR 0x40 // UIOӿڵ:趨I/OD5-D0,λ5-λ0Ϊ +#define mCH341A_CMD_UIO_STM_OUT 0x80 // UIOӿڵ:D5-D0,λ5-λ0Ϊ +#define mCH341A_CMD_UIO_STM_US 0xC0 // UIOӿڵ:΢Ϊλʱ,λ5-λ0Ϊʱֵ +#define mCH341A_CMD_UIO_STM_END 0x20 // UIOӿڵ:ǰ + +#define MAX_DEVICE_PATH_SIZE 128 // 豸Ƶַ +#define MAX_DEVICE_ID_SIZE 64 // 豸IDַ +#endif _CH341_DLL_H + +// ӿ +#define CH347_USB_VENDOR 0 +#define CH347_USB_HID 2 +#define CH347_USB_VCP 3 + +// CH347_USB_VENDOR֧CH341/CH347T/CH347F/CH339W +#define CHIP_TYPE_CH341 0 +#define CHIP_TYPE_CH347 1 +#define CHIP_TYPE_CH347F 2 +#define CHIP_TYPE_CH339W 3 +#define CHIP_TYPE_CH347T CHIP_TYPE_CH347 + +// оƬܽӿ +#define CH347_FUNC_UART 0 +#define CH347_FUNC_SPI_IIC 1 +#define CH347_FUNC_JTAG_IIC 2 +#define CH347_FUNC_JTAG_IIC_SPI 3 // CH347Fͬʱ֧SPI\I2C\JTAGӿ + +#define DEFAULT_READ_TIMEOUT 500 // Ĭ϶ʱ +#define DEFAULT_WRITE_TIMEOUT 500 // Ĭдʱ + +#define mCH347_PACKET_LENGTH 512 // CH347ֵ֧ݰij + +#pragma pack(1) + +//SPI +typedef struct _SPI_CONFIG{ + UCHAR iMode; // 0-3:SPI Mode0/1/2/3 + UCHAR iClock; // 0=60MHz, 1=30MHz, 2=15MHz, 3=7.5MHz, 4=3.75MHz, 5=1.875MHz, 6=937.5KHz7=468.75KHz + UCHAR iByteOrder; // 0=λǰ(LSB), 1=λǰ(MSB) + USHORT iSpiWriteReadInterval; // SPIӿڳȡдλΪuS + UCHAR iSpiOutDefaultData; // SPIʱĬ + ULONG iChipSelect; // Ƭѡ, λ7Ϊ0Ƭѡ, λ7Ϊ1Ч: λ1λ0Ϊ00/01ֱѡCS1/CS2Ϊ͵ƽЧƬѡ + UCHAR CS1Polarity; // λ0ƬѡCS1Կƣ0͵ƽЧ1ߵƽЧ + UCHAR CS2Polarity; // λ0ƬѡCS2Կƣ0͵ƽЧ1ߵƽЧ + USHORT iIsAutoDeativeCS; // ɺǷԶƬѡ + USHORT iActiveDelay; // Ƭѡִждʱʱ,λus + ULONG iDelayDeactive; // Ƭѡִждʱʱ,λus +}mSpiCfgS,*mPSpiCfgS; + +//豸Ϣ +typedef struct _DEV_INFOR{ + UCHAR iIndex; // ǰ + UCHAR DevicePath[MAX_PATH]; // 豸,CreateFile + UCHAR UsbClass; // 0:CH347_USB_CH341, 2:CH347_USB_HID, 3:CH347_USB_VCP + UCHAR FuncType; // 0:CH347_FUNC_UART, 1:CH347_FUNC_SPI_I2C, 2:CH347_FUNC_JTAG_I2C, 3:CH347_FUNC_JTAG_IIC_SPI + CHAR DeviceID[64]; // USB\VID_xxxx&PID_xxxx + UCHAR ChipMode; // оƬģʽ,0:Mode0(UART0/1); 1:Mode1(Uart1+SPI+I2C); 2:Mode2(HID Uart1+SPI+I2C) 3:Mode3(Uart1+Jtag) 4:CH347F(Uart*2+Jtag/SPI/IIC) + HANDLE DevHandle; // 豸 + USHORT BulkOutEndpMaxSize; // ϴ˵С + USHORT BulkInEndpMaxSize; // ´˵С + UCHAR UsbSpeedType; // USBٶͣ0:FS,1:HS,2:SS + UCHAR CH347IfNum; // USBӿں: CH347T: IF0:UART; IF1:SPI/IIC/JTAG/GPIO + // CH347F: IF0:UART0; IF1:UART1; IF 2:SPI/IIC/JTAG/GPIO + UCHAR DataUpEndp; // ϴ˵ַ + UCHAR DataDnEndp; // ´˵ַ + CHAR ProductString[64]; // USBƷַ + CHAR ManufacturerString[64]; // USBַ + ULONG WriteTimeout; // USBдʱ + ULONG ReadTimeout; // USBʱ + CHAR FuncDescStr[64]; // ӿڹ + UCHAR FirewareVer; // ̼汾,ʮֵ +}mDeviceInforS,*mPDeviceInforS; + +#pragma pack() + +// CH347ģʽú,֧CH347ģʽµĴ򿪡رաUSBUSBдHID +//USB豸 +HANDLE WINAPI CH347OpenDevice(ULONG DevI); // ָ豸 + +//رUSB豸 +BOOL WINAPI CH347CloseDevice(ULONG iIndex); // ָ豸 + +// ȡ豸USBк +BOOL WINAPI CH347GetSerialNumber(ULONG iIndex, // ָ豸 + PUCHAR iSerialNumberStr); // ָȡ豸к + +// ȡ豸Ϣ +BOOL WINAPI CH347GetDeviceInfor(ULONG iIndex, // ָ豸 + mDeviceInforS *DevInformation); // ָȡ豸Ϣ + +// ȡCH347оƬ:0:CHIP_TYPE_CH3411:CHIP_TYPE_CH347/CHIP_TYPE_CH347T,2:CHIP_TYPE_CH347F3:CHIP_TYPE_CH339W +UCHAR WINAPI CH347GetChipType(ULONG iIndex ); // ָ豸 + +// ȡ汾汾豸汾оƬ(CH341(FS)/CH347HS) +BOOL WINAPI CH347GetVersion(ULONG iIndex, + PUCHAR iDriverVer, + PUCHAR iDLLVer, + PUCHAR ibcdDevice, + PUCHAR iChipType); //CHIP_TYPE_CH341/7 + +typedef VOID ( CALLBACK * mPCH347_NOTIFY_ROUTINE ) ( // 豸֪ͨ¼ص + ULONG iEventStatus ); // 豸¼͵ǰ״̬(ж): 0=豸γ¼, 3=豸¼ + +#define CH347_DEVICE_ARRIVAL 3 // 豸¼,Ѿ +#define CH347_DEVICE_REMOVE_PEND 1 // 豸Ҫγ +#define CH347_DEVICE_REMOVE 0 // 豸γ¼,Ѿγ + +// 趨豸¼֪ͨ +BOOL WINAPI CH347SetDeviceNotify(ULONG iIndex, // ָ豸,0Ӧһ豸 + PCHAR iDeviceID, // ѡ,ַָ,ָص豸ID,ַ\0ֹ + mPCH347_NOTIFY_ROUTINE iNotifyRoutine ); // ָ豸¼ص,ΪNULLȡ¼֪ͨ,ڼ⵽¼ʱøó + +// ȡUSBݿ +BOOL WINAPI CH347ReadData( ULONG iIndex, // ָ豸 + PVOID oBuffer, // ָһ㹻Ļ,ڱȡ + PULONG ioLength ); // ָ򳤶ȵԪ,ʱΪ׼ȡij,غΪʵʶȡij + +// дȡUSBݿ +BOOL WINAPI CH347WriteData(ULONG iIndex, // ָ豸 + PVOID iBuffer, // ָһ,׼д + PULONG ioLength ); // ָ򳤶ȵԪ,ʱΪ׼дij,غΪʵдij + +// USBݶдijʱ +BOOL WINAPI CH347SetTimeout(ULONG iIndex, // ָ豸 + ULONG iWriteTimeout, // ָUSBдݿijʱʱ,ԺmSΪλ,0xFFFFFFFFָʱ(Ĭֵ) + ULONG iReadTimeout ); // ָUSBȡݿijʱʱ,ԺmSΪλ,0xFFFFFFFFָʱ(Ĭֵ) + +/***************SPI********************/ +// SPIʼ +BOOL WINAPI CH347SPI_Init(ULONG iIndex, // ָ豸 + mSpiCfgS *SpiCfg); // ָSPIýṹ + +// SPIʱƵʣøýӿںµCH347SPI_Initгʼ +BOOL WINAPI CH347SPI_SetFrequency(ULONG iIndex, // ָ豸 + ULONG iSpiSpeedHz);// SPIʱӣλΪHZ + +// SPIλ +BOOL WINAPI CH347SPI_SetDataBits(ULONG iIndex, // ָ豸 + UCHAR iDataBits); // 0=8bit1=16bit + +// ȡSPIϢ +BOOL WINAPI CH347SPI_GetCfg(ULONG iIndex,mSpiCfgS *SpiCfg); + +// Ƭѡ״̬,ʹǰȵCH347SPI_InitCS +BOOL WINAPI CH347SPI_ChangeCS(ULONG iIndex, // ָ豸 + UCHAR iStatus); // 0=Ƭѡ,1=Ƭѡ + +// SPIƬѡ +BOOL WINAPI CH347SPI_SetChipSelect(ULONG iIndex, // ָ豸 + USHORT iEnableSelect, // ͰλΪCS1߰λΪCS2; ֵֽΪ1=CS,Ϊ0=ԴCS + USHORT iChipSelect, // ͰλΪCS1߰λΪCS2;Ƭѡ,0=Ƭѡ,1=Ƭѡ + ULONG iIsAutoDeativeCS, // 16λΪCS116λΪCS2;ɺǷԶƬѡ + ULONG iActiveDelay, // 16λΪCS116λΪCS2;Ƭѡִждʱʱ,λus + ULONG iDelayDeactive); // 16λΪCS116λΪCS2;Ƭѡִждʱʱ,λus + +// SPI4д +BOOL WINAPI CH347SPI_Write(ULONG iIndex, // ָ豸 + ULONG iChipSelect, // Ƭѡ, λ7Ϊ0Ƭѡ, λ7Ϊ1Ƭѡ + ULONG iLength, // ׼ֽ + ULONG iWriteStep, // ׼ȡĵij + PVOID ioBuffer); // ָһ,׼MOSIд + +// SPI4.дݣЧʽCH347SPI_WriteReadߺܶ +BOOL WINAPI CH347SPI_Read(ULONG iIndex, // ָ豸 + ULONG iChipSelect, // Ƭѡ, λ7Ϊ0Ƭѡ, λ7Ϊ1Ƭѡ + ULONG oLength, // ׼ֽ + PULONG iLength, // ׼ֽ + PVOID ioBuffer); // ָһ,׼DOUTд,غǴDIN + +// SPI,4߽ӿ +BOOL WINAPI CH347SPI_WriteRead(ULONG iIndex, // ָ豸 + ULONG iChipSelect, // Ƭѡ, λ7Ϊ0Ƭѡ, λ7Ϊ1Ƭѡ + ULONG iLength, // ׼ֽ + PVOID ioBuffer ); // ָһ,׼DOUTд,غǴDIN + +// SPI,4߽ӿ +BOOL WINAPI CH347StreamSPI4(ULONG iIndex, // ָ豸 + ULONG iChipSelect, // Ƭѡ, λ7Ϊ0Ƭѡ, λ7Ϊ1Ч + ULONG iLength, // ׼ֽ + PVOID ioBuffer ); // ָһ,׼DOUTд,غǴDIN + +/***************JTAG********************/ +// JTAGӿڳʼJTAGͨٶ +BOOL WINAPI CH347Jtag_INIT(ULONG iIndex, // ָ豸 + UCHAR iClockRate); // ͨٶȣ0=468.75KHz,1=937.5KHz,2=1.875MHz,3=3.75MHz,4=7.5MHz,5=15MHz,6=30MHz,7=60MHz + +// ȡJtagٶ +BOOL WINAPI CH347Jtag_GetCfg(ULONG iIndex, // ָ豸 + UCHAR *ClockRate); // ͨٶȣЧֵΪ0-7ֵԽͨٶԽ + + +// ıTMSֵ״̬л +BOOL WINAPI CH347Jtag_TmsChange(ULONG iIndex, // 豸 + PUCHAR tmsValue, // лTMSλֵ,ֽΪλ + ULONG Step, // tmsValueڴ洢TMSЧλ + ULONG Skip); // Чʼλ + +// Shift-DR/IR״̬ждִExit DR/IR +// ״̬:Shift-DR/IR.RW.->Exit DR/IR +BOOL WINAPI CH347Jtag_IoScan(ULONG iIndex, + PUCHAR DataBits, //Ҫдλ + ULONG DataBitsNb, //Ҫݵλ + BOOL IsRead); //ǷҪȡ + +// Shift-DR/IR״̬жд,ִɺ,һл״̬Exit DR/IR;,ͣShift-DR/IR״̬ +// ״̬:Shift-DR/IR.RW..->[Exit DR/IR] +BOOL WINAPI CH347Jtag_IoScanT(ULONG iIndex, // ָ豸 + PUCHAR DataBits, // Ҫдλ + ULONG DataBitsNb, // Ҫݵλ + BOOL IsRead, // ǷҪȡ + BOOL IsLastPkt); // ǷΪһ + +// JTAGλTap״̬.TCKTMSΪ߽ɽ״̬ΪTest-Logic Reset״̬ +ULONG WINAPI CH347Jtag_Reset(ULONG iIndex); // ָ豸 + +// TRSTӲλ +BOOL WINAPI CH347Jtag_ResetTrst(ULONG iIndex, // ָ豸 + BOOL iLevel); // 0=Ϊͣ1=Ϊ + +// λʽJTAG IR/DRݶд.ݵĶдָ״̬лȿഫ䡣ݴ䣬ʹCH347Jtag_WriteRead_Fast +// 4096ֽΪλд +// ״̬:Run-Test->Shift-IR/DR..->Exit IR/DR -> Run-Test +BOOL WINAPI CH347Jtag_WriteRead(ULONG iIndex, // ָ豸 + BOOL IsDR, // =TRUE: DRݶд,=FALSE:IRݶд + ULONG iWriteBitLength, // д,׼дij + PVOID iWriteBitBuffer, // ָһ,׼д + PULONG oReadBitLength, // ָ򳤶ȵԪ,غΪʵʶȡij + PVOID oReadBitBuffer ); // ָһ㹻Ļ,ڱȡ + +// JTAG IR/DRд,ڶֽдJTAG̼زӲ4KдȲ4096ֽڡСе +// ״̬:Run-Test->Shift-IR/DR..->Exit IR/DR -> Run-Test +BOOL WINAPI CH347Jtag_WriteRead_Fast(ULONG iIndex, // ָ豸 + BOOL IsDR, // =TRUE: DRݶд,=FALSE:IRݶд + ULONG iWriteBitLength, // д,׼дij + PVOID iWriteBitBuffer, // ָһ,׼д + PULONG oReadBitLength, // ָ򳤶ȵԪ,غΪʵʶȡij + PVOID oReadBitBuffer ); // ָһ㹻Ļ,ڱȡ + +// λʽJTAG IR/DRݶд.ݵĶдָ״̬лȿഫ䡣ݴ䣬ʹCH347Jtag_WriteRead_Fast +// 4096ֽΪλд +// ״̬:Run-Test-> Shift-IR/DR..->Exit IR/DR -> Run-Test +BOOL WINAPI CH347Jtag_WriteReadEx(ULONG iIndex, // ָ豸 + BOOL IsInDrOrIr, // =TRUE: SHIFT-DR/IR״̬ݽ ==FALSE: Run-Test->Shift-IR/DR.ݽ.->Exit IR/DR -> Run-Test + BOOL IsDR, // =TRUE: DRݶд,=FALSE:IRݶд + ULONG iWriteBitLength, // д,׼дij + PVOID iWriteBitBuffer, // ָһ,׼д + PULONG oReadBitLength, // ָ򳤶ȵԪ,غΪʵʶȡij + PVOID oReadBitBuffer ); // ָһ㹻Ļ,ڱȡ + +// JTAG IR/DRд,ڶֽдJTAG̼زӲ4KдȲ4096ֽڡСе +// ״̬:Run-Test->Shift-IR/DR..->Exit IR/DR -> Run-Test +BOOL WINAPI CH347Jtag_WriteRead_FastEx(ULONG iIndex, // ָ豸 + BOOL IsInDrOrIr, // =TRUE: SHIFT-DR/IR״̬ݽ ==FALSE: Run-Test->Shift-IR/DR.ݽ.->Exit IR/DR -> Run-Test + BOOL IsDR, // =TRUE: DRݶд,=FALSE:IRݶд + ULONG iWriteBitLength, // д,׼дij + PVOID iWriteBitBuffer, // ָһ,׼д + PULONG oReadBitLength, // ָ򳤶ȵԪ,غΪʵʶȡij + PVOID oReadBitBuffer ); // ָһ㹻Ļ,ڱȡ + +// лJTAG״̬谴˳ִ +BOOL WINAPI CH347Jtag_SwitchTapState(UCHAR TapState); // ָл״̬ +// 0:Test-Logic Reset,1:Run-Test/Idle2:Run-Test/Idle -> Shift-DR,3:Shift-DR -> Run-Test/Idle +// 4:Run-Test/Idle -> Shift-IR, 5:Shift-IR -> Run-Test/Idle, 6:Exit1-DR/IR -> Update-DR/IR -> Run-Test/Idle + +// лJTAG״̬,ָ豸iIndex +BOOL WINAPI CH347Jtag_SwitchTapStateEx(ULONG iIndex, // ָ豸 + UCHAR TapState); // ָл״̬ + +// JTAG DRд,ֽΪλ,ڶֽдJTAG̼ز +// ״̬:Run-Test->Shift-DR..->Exit DR -> Run-Test +BOOL WINAPI CH347Jtag_ByteWriteDR(ULONG iIndex, // ָ豸 + ULONG iWriteLength, // д,׼дֽڳ + PVOID iWriteBuffer); // ָһ,׼д + +// JTAG DR,ֽΪλ,ֽ +// ״̬:Run-Test->Shift-DR..->Exit DR -> Run-Test +BOOL WINAPI CH347Jtag_ByteReadDR(ULONG iIndex, // ָ豸 + PULONG oReadLength, // ָ򳤶ȵԪ,غΪʵʶȡֽڳ + PVOID oReadBuffer ); // ָһ㹻Ļ,ڱȡ + +// JTAG IRд,ֽΪλ,ֽд +// ״̬:Run-Test->Shift-IR..->Exit IR -> Run-Test +BOOL WINAPI CH347Jtag_ByteWriteIR(ULONG iIndex, // ָ豸 + ULONG iWriteLength, // д,׼дֽڳ + PVOID iWriteBuffer); // ָһ,׼д + +// JTAG IR,ֽΪλ,ֽд +// ״̬:Run-Test->Shift-IR..->Exit IR -> Run-Test +BOOL WINAPI CH347Jtag_ByteReadIR(ULONG iIndex, // ָ豸 + PULONG oReadLength, // ָ򳤶ȵԪ,غΪʵʶȡֽڳ + PVOID oReadBuffer ); // ָһ㹻Ļ,ڱȡ + +// λʽJTAG DRд.ݵĶдָ״̬лȿഫ䡣ݴ䣬ʹUSB20Jtag_ByeWriteDR +// ״̬:Run-Test->Shift-DR..->Exit DR -> Run-Test +BOOL WINAPI CH347Jtag_BitWriteDR(ULONG iIndex, // ָ豸 + ULONG iWriteBitLength, // ָ򳤶ȵԪ,غΪʵʶȡֽڳ + PVOID iWriteBitBuffer ); // ָһ㹻Ļ,ڱȡ + +// λʽJTAG IRд.ݵĶдָ״̬лȿഫ䡣ݴ䣬ʹUSB20Jtag_ByteWriteIR +// ״̬:Run-Test->Shift-IR..->Exit IR -> Run-Test +BOOL WINAPI CH347Jtag_BitWriteIR(ULONG iIndex, // ָ豸 + ULONG iWriteBitLength, // ָ򳤶ȵԪ,غΪʵʶȡֽڳ + PVOID iWriteBitBuffer ); // ָһ㹻Ļ,ڱȡ + +// λʽJTAG IRݶ.ݵĶдָ״̬лȡݴ䣬ʹUSB20Jtag_ByteReadIR +// ״̬:Run-Test->Shift-IR..->Exit IR -> Run-Test +BOOL WINAPI CH347Jtag_BitReadIR(ULONG iIndex, // ָ豸 + PULONG oReadBitLength, // ָ򳤶ȵԪ,غΪʵʶȡֽڳ + PVOID oReadBitBuffer ); // ָһ㹻Ļ,ڱȡ + +// λʽJTAG DRݶ.ݵĶд͸ݴ䣬ʹUSB20Jtag_ByteReadDR +// ״̬:Run-Test->Shift-DR..->Exit DR -> Run-Test +BOOL WINAPI CH347Jtag_BitReadDR(ULONG iIndex, // ָ豸 + PULONG oReadBitLength, // ָ򳤶ȵԪ,غΪʵʶȡֽڳ + PVOID oReadBitBuffer ); // ָһ㹻Ļ,ڱȡ + +/***************GPIO********************/ +// ȡCH347GPIOŵƽֵ +BOOL WINAPI CH347GPIO_Get(ULONG iIndex, // ָ豸 + UCHAR *iDir, // ŷ:GPIO0-7Ӧλ0-7, 0=룻1= + UCHAR *iData); // GPIO0ƽ:GPIO0-7Ӧλ0-7,0=͵ƽ1=ߵƽ) + +// CH347GPIOŵƽֵ +BOOL WINAPI CH347GPIO_Set(ULONG iIndex, // ָ豸 + UCHAR iEnable, // Ч־:Ӧλ0-7,ӦGPIO0-7. + UCHAR iSetDirOut, // I/O,ijλ0ӦΪ,ijλ1ӦΪ.GPIO0-7Ӧλ0-7. + UCHAR iSetDataOut); // ,I/OΪ,ôijλ0ʱӦ͵ƽ,ijλ1ʱӦߵƽ + + +typedef VOID ( CALLBACK * mPCH347_INT_ROUTINE ) ( // жϷ + PUCHAR iStatus ); // ж״̬,ολ˵ +// 8ֽGPIO0-7״̬.ÿֽλ: +// λ7ǰGPIO00룻1 +// λ6ǰGPIO0ƽ0͵ƽ1ߵƽ +// λ5ǰGPIO0ǷΪжϣ0ѯģʽ1жģʽ +// λ4-3GPIO0жģʽ00½ش01ش;10˫ش11: ; +// λ2-0 + +// 趨GPIOжϷ +BOOL WINAPI CH347SetIntRoutine(ULONG iIndex, // ָ豸 + UCHAR Int0PinN, // ж0 GPIOź,7:ôжԴ; Ϊ0-7Ӧgpio0-7 + UCHAR Int0TripMode, // ж0: 00:½ش; 01:ش; 02:˫ش; 03:; + UCHAR Int1PinN, // ж1 GPIOź,7ôжԴ,Ϊ0-7Ӧgpio0-7 + UCHAR Int1TripMode, // ж1: 00:½ش; 01:ش; 02:˫ش; 03:; + mPCH347_INT_ROUTINE iIntRoutine );// ָжϷ,ΪNULLȡжϷ,жʱøó + +// ȡж +BOOL WINAPI CH347ReadInter(ULONG iIndex, // ָ豸 + PUCHAR iStatus ); // ָ8ֽڵԪ,ֱΪGPIO0-7״̬,ÿֽλ˵οжϷiStatusλ˵ + +// жݶ +BOOL WINAPI CH347AbortInter(ULONG iIndex ); // ָ豸 + +// IAP̼ģʽ +BOOL WINAPI CH347StartIapFwUpate(ULONG iIndex, + ULONG FwSize); // ̼ + +/**************HID/VCP**********************/ +// 򿪴 +HANDLE WINAPI CH347Uart_Open(ULONG iIndex); // ָ豸 + +// رմ +BOOL WINAPI CH347Uart_Close(ULONG iIndex); // ָ豸 + +BOOL WINAPI CH347Uart_SetDeviceNotify( // 趨豸¼֪ͨ + ULONG iIndex, // ָ豸,0Ӧһ豸 + PCHAR iDeviceID, // ѡ,ַָ,ָص豸ID,ַ\0ֹ + mPCH347_NOTIFY_ROUTINE iNotifyRoutine ); // ָ豸¼ص,ΪNULLȡ¼֪ͨ,ڼ⵽¼ʱøó + +// ȡUARTӲ +BOOL WINAPI CH347Uart_GetCfg(ULONG iIndex, // ָ豸 + PULONG BaudRate, // + PUCHAR ByteSize, // λ(5,6,7,8,16) + PUCHAR Parity, // Уλ(0None; 1Odd; 2Even; 3Mark; 4Space) + PUCHAR StopBits, // ֹͣλ(01ֹͣλ; 11.5ֹͣλ; 22ֹͣλ) + PUCHAR ByteTimeout); // ֽڳʱ + +// UART +BOOL WINAPI CH347Uart_Init(ULONG iIndex, // ָ豸 + DWORD BaudRate, // + UCHAR ByteSize, // λ(5,6,7,8,16) + UCHAR Parity, // Уλ(0None; 1Odd; 2Even; 3Mark; 4Space) + UCHAR StopBits, // ֹͣλ(01ֹͣλ; 11.5ֹͣλ; 22ֹͣλ) + UCHAR ByteTimeout);// ֽڳʱʱ,λ100uS + +// USBݶдijʱ +BOOL WINAPI CH347Uart_SetTimeout(ULONG iIndex, // ָ豸 + ULONG iWriteTimeout, // ָUSBдݿijʱʱ,ԺmSΪλ,0xFFFFFFFFָʱ(Ĭֵ) + ULONG iReadTimeout ); // ָUSBȡݿijʱʱ,ԺmSΪλ,0xFFFFFFFFָʱ(Ĭֵ) + +// ڶ +BOOL WINAPI CH347Uart_Read(ULONG iIndex, // ָ豸 + PVOID oBuffer, // ָһ㹻Ļ,ڱȡ + PULONG ioLength );// ָ򳤶ȵԪ,ʱΪ׼ȡij,غΪʵʶȡij +// д +BOOL WINAPI CH347Uart_Write(ULONG iIndex, // ָ豸 + PVOID iBuffer, // ָһ,׼д + PULONG ioLength );// ָ򳤶ȵԪ,ʱΪ׼дij,غΪʵдij + +// ѯжֽδȡHIDģʽڣ +BOOL WINAPI CH347Uart_QueryBufUpload(ULONG iIndex, // ָ豸 + LONGLONG *RemainBytes); // δȡֽ + +// ȡ豸Ϣ +BOOL WINAPI CH347Uart_GetDeviceInfor(ULONG iIndex,mDeviceInforS *DevInformation); + +/********I2C***********/ +// I2C +BOOL WINAPI CH347I2C_Set(ULONG iIndex, // ָ豸 + ULONG iMode ); // ָģʽ, +// λ0-λ2: I2Cӿٶ/SCLƵ, 000=/20KHz,001=׼/100KHz(Ĭֵ),010=/400KHz,011=/750KHz,100=/50KHz,101=׼/200KHz110=/1MHz +// ,Ϊ0 + +// I2Cʱչ +BOOL WINAPI CH347I2C_SetStretch(ULONG iIndex, // ָ豸 + BOOL iEnable); // 0=رʱչܣĬϹرգ1=ʱչ + +// Ӳ첽ʱ,úܿ췵,һ֮ǰʱָ +BOOL WINAPI CH347I2C_SetDelaymS(ULONG iIndex, // ָ豸 + ULONG iDelay ) ; // ָʱĺ + +// I2Cģʽ +BOOL WINAPI CH347I2C_SetDriverMode(ULONG iIndex, // ָ豸 + UCHAR iMode); // 0=©ģʽ1=ģʽ + +// I2C,2߽ӿ,ʱΪSCL,ΪSDA +BOOL WINAPI CH347StreamI2C( ULONG iIndex, // ָ豸 + ULONG iWriteLength, // ׼дֽ + PVOID iWriteBuffer, // ָһ,׼д,ֽͨI2C豸ַдλ + ULONG iReadLength, // ׼ȡֽ + PVOID oReadBuffer ); // ָһ,غǶ + +// I2C,2߽ӿ,ʱΪSCL,ΪSDA +BOOL WINAPI CH347StreamI2C_RetACK( // I2C,2߽ӿ,ʱΪSCL,ΪSDA(׼˫I/O),ٶԼ56Kֽ,˻ȡACK + ULONG iIndex, // ָ豸 + ULONG iWriteLength, // ׼дֽ + PVOID iWriteBuffer, // ָһ,׼д,ֽͨI2C豸ַдλ + ULONG iReadLength, // ׼ȡֽ + PVOID oReadBuffer, // ָһ,غǶ + PULONG rAckCount); // ָдصACKֵ + +#ifndef _CH341_DLL_H +typedef enum _EEPROM_TYPE {// EEPROMͺ + ID_24C01, + ID_24C02, + ID_24C04, + ID_24C08, + ID_24C16, + ID_24C32, + ID_24C64, + ID_24C128, + ID_24C256, + ID_24C512, + ID_24C1024, + ID_24C2048, + ID_24C4096 +} EEPROM_TYPE; +#endif + +// EEPROMжȡݿ +BOOL WINAPI CH347ReadEEPROM(ULONG iIndex, // ָ豸 + EEPROM_TYPE iEepromID, // ָEEPROMͺ + ULONG iAddr, // ָݵԪĵַ + ULONG iLength, // ׼ȡֽ + PUCHAR oBuffer ); // ָһ,غǶ +// EEPROMдݿ +BOOL WINAPI CH347WriteEEPROM(ULONG iIndex, // ָ豸 + EEPROM_TYPE iEepromID, // ָEEPROMͺ + ULONG iAddr, // ָݵԪĵַ + ULONG iLength, // ׼дֽ + PUCHAR iBuffer ); // ָһ,׼д + +//õ8λʱӵʱʱ䣬CH347T +BOOL WINAPI CH347I2C_SetAckClk_DelayuS(ULONG iIndex, // ָ豸 + ULONG iDelay); // ָʱ΢ + +// úڲѯָCH339WоƬǰӿڹܵ״̬ +// ֵλ壺 +// λ7 (0x80): USBתJTAGʹ״̬1=ʹܣ0=ã +// λ6 (0x40): USBתSPIʹ״̬1=ʹܣ0=ã +// λ5 (0x20): USBתUARTʹܣأ1=ʹܣ0=ã +// λ4 (0x10): USBתUARTʹܣ1=ʹܣ0=ã +// λ3 (0x08): USBתI2Cʹ״̬1=ʹܣ0=ã +// λ2-λ0: λ +UCHAR WINAPI CH339GetChipFuncState( ULONG iIndex ); // ָ豸 + +#ifdef __cplusplus +} +#endif + +#endif // _CH347_DLL_H +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/libs/CH347Handler.dll b/libs/CH347Handler.dll new file mode 100755 index 0000000..6d3270c Binary files /dev/null and b/libs/CH347Handler.dll differ diff --git a/libs/CH347Handler.lib b/libs/CH347Handler.lib new file mode 100755 index 0000000..7964586 Binary files /dev/null and b/libs/CH347Handler.lib differ diff --git a/libs/Common.h b/libs/Common.h index 7cf5779..46c9c3e 100644 --- a/libs/Common.h +++ b/libs/Common.h @@ -1,3 +1,4 @@ +<<<<<<< HEAD #pragma once #include @@ -35,3 +36,42 @@ struct SetCommandArg { struct SetVotegeArg { std::vector votes_; // ֵͬ趨ֻҪһԪأֵ趨Ҫ256Ԫ }; +======= +#pragma once + +#include +#include + +struct DevSimple { + unsigned char iIndex; + unsigned char DevicePath[MAX_PATH]; + char DeviceID[64]; + unsigned char CH347IfNum; + char ProductString[64]; + char ManufacturerString[64]; +}; + +struct SetCommandArg { + enum Command { + SP_CMD_NA = 0, // Ч + SP_CMD_ZERO = 1, // + SP_CMD_SAME_VALUE = 2, // ֵͬ + SP_CMD_DIF_VALUE = 3 // ֵ + }; + + enum Group { + ALL = 0xAA, // + AB = 0x00, // A/B + OPA = 0x01, // OPA + DAC = 0x02 // DAC + }; + + Command cmd_; // cmd + Group group_; // group + int childGroup_; // groupDet ӷ groupΪ0ʱ0/1A/BgroupΪ2ʱΪ0~20DAC +}; + +struct SetVotegeArg { + std::vector votes_; // ֵͬ趨ֻҪһԪأֵ趨Ҫ256Ԫ +}; +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/libs/SpiApi.h b/libs/SpiApi.h new file mode 100755 index 0000000..b6e8bd5 --- /dev/null +++ b/libs/SpiApi.h @@ -0,0 +1,46 @@ +#pragma once +#include +#include +#include +#include "Common.h" + +#ifdef SPI_API_LIB +#define SPI_API __declspec(dllexport) +#else +#define SPI_API __declspec(dllimport) +#endif + +class SpiHandler; + +class SPI_API SpiApi { +public: + SpiApi(); + ~SpiApi(); + + /** + * @breaf ʼCH347б + * + * @return ֪CH347豸б + */ + std::vector initUsbDevice(); + + /** + * @breaf 豸· + * + * @param devs ָղ豸 + * @param cmdarg ֲ嶨Common.h + * @param varg ѹ嶨Common.h + * + * @return ɹtrue + */ + bool applyArg(DevSimple devs, SetCommandArg cmdarg, SetVotegeArg varg); + + /** + * @breaf ΪtrueexeĹĿ¼debug.logҪ·ʮƲ + */ + void debug(bool on = true); + +private: + std::shared_ptr sh_; + std::string lastError_; +}; diff --git a/main.cpp b/main.cpp index fd3e533..a98c3eb 100644 --- a/main.cpp +++ b/main.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD #include "mainwindow.h" #include @@ -9,3 +10,16 @@ int main(int argc, char *argv[]) w.show(); return a.exec(); } +======= +#include "mainwindow.h" + +#include + +int main(int argc, char *argv[]) +{ + QApplication a(argc, argv); + MainWindow w; + w.show(); + return a.exec(); +} +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/mainwindow.cpp b/mainwindow.cpp index 5a70330..9e7d460 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,3 +1,4 @@ +<<<<<<< HEAD #include "mainwindow.h" #include "ui_mainwindow.h" #include @@ -464,3 +465,427 @@ void MainWindow::on_pushButton_icdReadCurrVol_clicked() QMessageBox::question(this,"成功","成功读取该DAC下的所有的电压值!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); } +======= +#include "mainwindow.h" +#include "ui_mainwindow.h" +#include +#include +#include +#include +#include +#include + +#if _MSC_VER >= 1600 +#pragma execution_character_set("utf-8") +#endif + +void MainWindow::mw_tableInit(void) +{ + // 初始化组和子组的下拉框 + this->ui->comboBox_icdSubGroup->addItems(this->m_APP_Icd->comboBox_subGroupInfo.value(this->ui->comboBox_icdGroup->currentIndex())); + // 填充数据 + for (int row = 0; row < 16; ++row) { + for (int col = 0; col < 16; ++col) { +// int index = row * 16 + col; // 计算一维数组索引 + QTableWidgetItem *item = new QTableWidgetItem(QString::number(this->m_APP_Icd->DAC256_10bit_data[row][col])); + this->ui->tableWidget_volInput->setItem(row, col, item); + } + } + // 在窗口构造函数中连接信号:当输入数据发生变化时,自动链接 + connect(this->ui->tableWidget_volInput, &QTableWidget::cellChanged, this, &MainWindow::mw_onCellChanged); +} + +// 表格中的数据有变化时,触发该函数 +void MainWindow::mw_onCellChanged(int row, int column) { + uint8_t i = 0; + uint8_t j = 0; + + QTableWidgetItem *item = this->ui->tableWidget_volInput->item(row, column); + if (item) { + bool ok; + // 转换数据 + int newValue = item->text().toInt(&ok); + if(!ok || (newValue > 1023)){ + /* 错误输入,设置为原来的值 */ + // 设置为原来的值 + QTableWidgetItem *item = new QTableWidgetItem(QString::number(this->m_APP_Icd->DAC256_10bit_data[row][column])); + this->ui->tableWidget_volInput->setItem(row, column, item); + // 提示警告 + QMessageBox::question(this,"ERROR","plase input 0-1023 digit!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + return; + } + qDebug() << "Cell at (" << row << "," << column << ") changed to:" << newValue; + // 设置DAC256 10bit数组的值 + if(!this->m_APP_Icd->ICD_setDAC256Data10bit(row, column, newValue)){ + qDebug() << "set newvalue:" << newValue << "failed!"; + return; + } + /* 如果是同值配置,则让页面和DAC256Data10bit数组的值赋值为同一个值*/ + if(this->ui->comboBox_icdCmd->currentIndex() == 1){ + for(i = 0; i < 16; i++){ + for(j = 0; j < 16; j++){ + // 防止多次进入该程序 + if(this->ui->tableWidget_volInput->item(i, j)->text().toInt() != newValue){ + // 表格中显示输入的值 + this->ui->tableWidget_volInput->item(i, j)->setText(QString::number(newValue)); + // 设置DAC256_10bit_data数组中的值为输入的值 + this->m_APP_Icd->ICD_setDAC256Data10bit(i, j, newValue); + } + } + } + } + } +} + +void MainWindow::mw_showVersionInfo() { + QMessageBox::information( + this, + tr("版本信息"), + tr("上位机版本:%1\n").arg(VERSION) + + tr("修改时间:%1\n").arg(MOD_TIME) + + tr("ICD协议版本:%1\n").arg(ICD_VERSION)+ + tr("作者:罗林赖生\n") + ); +} + +void MainWindow::mw_showUserManual() { + QMessageBox::information( + this, + tr("使用说明"), + tr("1. 打开设备:点击刷新设备列表,搜索串口/SPI设备,选择设备后,点击打开设备\n") + + tr("2. 配置通信:配置串口/SPI通信协议相关的参数,点击初始化SPI/串口参数配置\n") + + tr("3. 寄存器配置和电压配置(以下操作并非都需操作,视情况配置):\n") + + tr("3.1 寄存器配置:\n") + + tr("在寄存器配置以及回读区配置相关的属性后,点击寄存器配置按钮进行配置,如需查看是否配置成功,配置完后等待一秒,点击寄存器回读按钮,寄存器值将显示至文本框\n") + + tr("3.2 电压配置:\n") + + tr("3.2.1 命令选择:选择需要配置的方式 \n") + + tr("3.2.2 分组和子分组选择:选择需要配置的分组和子分组,注:当命令选择异值配置时,分组只能选择单个DAC! \n") + + tr("3.2.3 输入电压:在16X16的表格内输入所需要配置的电压对应的数字量,范围为0-1023,通道数按照从左到右,从上到下依次排布,注:当命令选择同值配置时,只需输入一个电压值,按回车后自动填充所有的数据 \n")+ + tr("3.2.4 设置电压:点击发送电压命令按钮,将把电压相关数据发送至下位机,此时日志输出窗口将输出相关日志信息 \n") + ); +} + +// 菜单栏初始化 +void MainWindow::mw_menuBarInit(void) { + + // 获取主窗口的菜单栏 + QMenuBar *menuBar = this->menuBar(); + + // 1. 添加"主菜单"菜单 + QMenu *mainMenu = menuBar->addMenu(tr("菜单(&M)")); // &H 表示快捷键 Alt+H + + // 2. 添加"帮助"菜单(包含"版本信息"和"使用说明") + QMenu *helpMenu = menuBar->addMenu(tr("帮助(&H)")); // &H 表示快捷键 Alt+H + + // 1.1 添加"版本信息"动作 + QAction *versionAction = new QAction(tr("版本信息(&V)"), this); + helpMenu->addAction(versionAction); + connect(versionAction, &QAction::triggered, this, &MainWindow::mw_showVersionInfo); + + // 1.2 添加"使用说明"动作 + QAction *manualAction = new QAction(tr("使用说明(&M)"), this); + helpMenu->addAction(manualAction); + connect(manualAction, &QAction::triggered, this, &MainWindow::mw_showUserManual); +} + +MainWindow::MainWindow(QWidget *parent) + : QMainWindow(parent) + , ui(new Ui::MainWindow) +{ + ui->setupUi(this); + // 设置程序标题 + this->setWindowTitle(QString(tr("SP713控制软件 使用说明打开帮助->使用说明")).arg(VERSION).arg(MOD_TIME)); + // // 初始化日志处理器并绑定UI + LogHandler::log_init(ui->plainTextEdit_logOutput); + + // 连接日志信号到UI更新 + connect(LogHandler::log_instance(), &LogHandler::log_messageLogged, + ui->plainTextEdit_logOutput, &QPlainTextEdit::appendPlainText, + Qt::QueuedConnection); // 确保跨线程安全 + // // // 例化DRV_Spi对象 + // this->m_DRV_Spi = new DRV_Spi(this); + // // // 查找Spi设备 + // this->mw_findSpiDev(); + + // 例化APP_ICD类 + this->m_APP_Icd = new APP_Icd(this); + // 初始化 + this->m_APP_Icd->ICD_init(); + // 表格初始化:一定要在APP_ICD类初始化后!!!! + this->mw_tableInit(); + // 初始化寄存器配置中DAC通道值 + for(int i = 1; i <= 256; i++) + { + this->ui->comboBox_icdDacCh->addItem(QString::number(i)); + } + // 菜单栏初始化 + this->mw_menuBarInit(); +} + +MainWindow::~MainWindow() +{ + delete ui; +} + +void MainWindow::mw_findSpiDev(void) +{ + // 清空设备列表 + this->ui->comboBox_spiDevList->clear(); + // 枚举Spi设备 + if(this->m_DRV_Spi->spi_enumDevice()){ + this->ui->comboBox_spiDevList->addItem(this->m_DRV_Spi->m_DRV_Spi_Infors.bDeviceName); + }else{ + //QMessageBox::question(NULL,"警告","未发现设备",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + } +} + +// void MainWindow::mw_findSpiDev(void) +// { +// // 清除相关的变量 +// this->devices.clear(); +// this->ui->comboBox_spiDevList->clear(); +// // 获取 CH347 设备列表 +// try { +// auto devList = this->spiApi.initUsbDevice(); +// this->devices = QVector::fromStdVector(devList); +// } catch (const std::exception &e) { +// DbgPrint("init USB device failed!"); +// } + +// if (devices.isEmpty()) { +// DbgPrint("not find CH347 device!"); +// } + +// /***********************输出设备信息****************************/ + +// if(devices.length() != 0) { +// DbgPrint("Find %d CH347 devices!", devices.length()); + +// for(int i = 0; i < devices.length(); i++){ +// DbgPrint("Manufacturer:%s Product:%s.", devices[i].ManufacturerString, devices[i].ProductString); +// this->ui->comboBox_spiDevList->addItem(devices[i].ProductString); +// } +// } +// } + +// void MainWindow::mw_sendTestData(void) +// { +// /***********************配置参数(示例:设置 DAC 组的异值电压)****************************/ +// SetCommandArg cmdArg; +// cmdArg.cmd_ = SetCommandArg::SP_CMD_DIF_VALUE; +// cmdArg.group_ = SetCommandArg::DAC; +// cmdArg.childGroup_ = 1; // 操作编号为 1 的 DAC + +// SetVotegeArg voltageArg; +// for (int i = 0; i < 256; ++i) { +// // voltageArg.votes_.push_back(i); // 填充 256 个电压值(0-255) +// voltageArg.votes_.push_back(1); // 填充 256 个电压值(0-255) +// } + +// this->spiApi.debug(); + +// // 下发参数到第一个设备 +// bool success = spiApi.applyArg(devices[0], cmdArg, voltageArg); +// if (success) { +// DbgPrint("Parameters applied successfully!"); +// } else { +// DbgPrint("Failed to apply parameters!"); +// } +// } + +// 刷新设备回调函数 +void MainWindow::on_pushButton_refreshDev_clicked() +{ + // 查找Spi设备 + this->mw_findSpiDev(); +} + +// 关闭设备回调函数 +void MainWindow::on_pushButton_closeDev_clicked() +{ + // // 关闭设备 + // if(!this->m_DRV_Spi->spi_closeDevice()){ + // // QMessageBox::question(NULL,"错误","关闭设备失败!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + // } + // this->mw_sendTestData(); +} + +// 打开设备回调函数 +void MainWindow::on_pushButton_openDev_clicked() +{ + // // 打开设备 + // if(!this->m_DRV_Spi->spi_openDevice(this->ui->comboBox_spiDevList->currentIndex())){ + // // QMessageBox::question(NULL,"错误","打开设备失败!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + // } +} + +// 查找串口设备 +void MainWindow::on_pushButton_uartRefreshDev_clicked() +{ + // 清空comboBox_uartDevList + if(this->ui->comboBox_uartDevList->count()) + this->ui->comboBox_uartDevList->clear(); + // 刷新UART设备 + if(this->m_APP_Icd->m_uartDriver->Uart_enumDevice()){ + // 将串口设备的名称添加至列表中 + for(int i = 0; i < this->m_APP_Icd->m_uartDriver->m_DRV_Uart_Infors.ulDevCnt; i++) + this->ui->comboBox_uartDevList->addItem(this->m_APP_Icd->m_uartDriver->m_DRV_Uart_Infors.bDeviceName[i]); + }else{ + QMessageBox::question(this,"ERROR","not find uart device!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + } +} + +// 打开串口设备 +void MainWindow::on_pushButton_uartOpenDev_clicked() +{ + // 读取当前的设备索引号 + ULONG index = this->ui->comboBox_uartDevList->currentIndex(); + // 调用串口打开函数 + BOOL status = this->m_APP_Icd->m_uartDriver->Uart_openDevice(index); + + // 判断打开串口设备是否成功 + if(status == TRUE){ + // 打开成功. 则关闭或开启一些组件 + this->ui->comboBox_uartDevList->setDisabled(true); + this->ui->pushButton_uartCloseDev->setEnabled(true); + this->ui->pushButton_uartOpenDev->setDisabled(true); + this->ui->pushButton_uartSetPara->setEnabled(true); + // 新建数据记录日志txt文件 + if(!this->m_APP_Icd->ICD_newDataRecordingFile()){ + QMessageBox::question(this,"ERROR","new Data Recording File failed!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + } + } +} +// 关闭串口函数 +void MainWindow::on_pushButton_uartCloseDev_clicked() +{ + // 调用串口关闭函数 + BOOL status = this->m_APP_Icd->m_uartDriver->Uart_closeDevice(); + + // 判断打开串口设备是否成功 + if(status == TRUE){ + // 打开成功. 则关闭或开启一些组件 + this->ui->comboBox_uartDevList->setEnabled(true); + this->ui->pushButton_uartCloseDev->setDisabled(true); + this->ui->pushButton_uartOpenDev->setEnabled(true); + this->ui->pushButton_uartSetPara->setDisabled(true); + } +} + +// 串口设置参数函数 +void MainWindow::on_pushButton_uartSetPara_clicked() +{ + // 读取组件中配置参数的值 + ULONG Baudrate = this->ui->comboBox_uartBps->currentText().toUInt(); + UCHAR StopBits = this->ui->comboBox_uartStop->currentIndex(); + UCHAR Parity = this->ui->comboBox_uartVerify->currentIndex(); + UCHAR DataSize = this->ui->comboBox_uartData->currentText().toUInt(); + UCHAR Timeout = this->ui->lineEdit_uartTimeOut->text().toUInt(); + // 调用配置参数函数进行配置 + if(this->m_APP_Icd->m_uartDriver->Uart_setPara(Baudrate, StopBits, Parity, DataSize, Timeout) == FALSE){ + QMessageBox::question(this,"ERROR","set uart para failed!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + } +} + +// 当分组的序号发生变化时 +void MainWindow::on_comboBox_icdGroup_currentIndexChanged(int index) +{ + // 清除子分组的列表 + this->ui->comboBox_icdSubGroup->clear(); + // 设置子分组对应的列表 + this->ui->comboBox_icdSubGroup->addItems(this->m_APP_Icd->comboBox_subGroupInfo.value(index)); +} + +// 发送设置电压相关命令 +void MainWindow::on_pushButton_icdSendVolCMD_clicked() +{ + // 获取页面的命令、分组、子分组 + uint8_t CMD = this->ui->comboBox_icdCmd->currentIndex() + 1; + uint8_t group = this->ui->comboBox_icdGroup->currentIndex(); + if(group == 0) + group = 0xAA; + uint8_t subGroup = this->ui->comboBox_icdSubGroup->currentIndex(); + if((subGroup == 0) && (group == 0xAA)) + subGroup = 0xAA; + else + subGroup += 1; + // 调用设置电压命令编码函数 + this->m_APP_Icd->ICD_volCMDProtoEncode(CMD, group, subGroup); +} + +// 写寄存器配置指令 +void MainWindow::on_pushButton_icdRegConfig_clicked() +{ + // 读取dac的编号值 + uint8_t dacID = this->ui->comboBox_icdDacId->currentIndex()+1; + // 读取dac通道值 + uint16_t dacCH = this->ui->comboBox_icdDacCh->currentIndex()+1; + // 判断是否为第256通道 + if(dacCH == 256){ + dacCH = 0; + dacID += 128; + } + // 读取funcEN值,将各个选项的使能值按照协议的报文格式叠加到funcEN数据中 + uint8_t funcEN = 0x00; + if(this->ui->checkBox_icdEN_TADC->isChecked()){ + funcEN += 1; + } + if(this->ui->checkBox_icdFBK_EN->isChecked()){ + funcEN += 2; + } + if(this->ui->checkBox_icdTEMPTEST->isChecked()){ + funcEN += 4; + } + if(this->ui->checkBox_icdTEST_EN->isChecked()){ + funcEN += 8; + } + if(this->ui->checkBox_icdTRIG_TADC->isChecked()){ + funcEN += 16; + } + // 读取adcCurrConfig值 + uint8_t adcCurrConfig = this->ui->comboBox_icdRefCurr->currentIndex(); + adcCurrConfig = adcCurrConfig*16 + this->ui->comboBox_icdADCClkPrs->currentIndex(); + + // 调用写寄存器编码函数 + if(!this->m_APP_Icd->ICD_regWCMDProtoEncode(dacID, dacCH, funcEN, adcCurrConfig)){ + QMessageBox::question(this,"ERROR","set reg para failed!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + } +} + +// 寄存器回读命令 +void MainWindow::on_pushButton_icdRegRead_clicked() +{ + // 清楚 + this->revData.clear(); + // 读取dac的编号值 + uint8_t dacID = this->ui->comboBox_icdDacId->currentIndex()+1; + // 读取寄存器的值 + if(!this->m_APP_Icd->ICD_regRCMDProtoEncode(dacID)){ + QMessageBox::question(this,"ERROR","write read reg para failed!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + } + // 读取串口接收区的数据 + QThread::msleep(10); // 延时10毫秒 + if(!this->m_APP_Icd->m_uartDriver->Uart_Read(this->revData)){ + QMessageBox::question(this,"ERROR","read reg para failed!",QMessageBox::Yes | QMessageBox::No,QMessageBox::Yes); + } + // 将返回的寄存器值显示到label界面 + this->ui->label_icdRegRead->setText(this->revData.toHex(' ')); // 用空格分隔每个字节 + // 记录读的数据 + // this->m_APP_Icd->ICD_addContextToDataRecordingFile(false, this->revData); + // 解析数据 + this->regParsedData = this->m_APP_Icd->ICD_parseRegisterData(this->revData); + qDebug() << "CH_TEST:" << this->regParsedData.CH_TEST \ + << ",EN_TADC:" << this->regParsedData.EN_TADC \ + << ",FBK_EN:" << this->regParsedData.FBK_EN \ + << ",TEMPTEST_EN:" << this->regParsedData.TEMPTEST_EN \ + << ",TEST_TADC:" << this->regParsedData.TEST_TADC \ + << ",TRIG_TADC:" << this->regParsedData.TRIG_TADC \ + << ",N_CLKDIV18:" << QString::number(this->regParsedData.N_CLKDIV18, 2).rightJustified(2, '0') \ + << ",ICON18:" << QString::number(this->regParsedData.ICON18, 2).rightJustified(4, '0') \ + << ",VCON:" << QString::number(this->regParsedData.VCON, 2).rightJustified(2, '0') \ + << ",EOC:" << this->regParsedData.EOC \ + << ",ADC_OUT:" << this->regParsedData.ADC_OUT \ + << ",D_FB:" << this->regParsedData.D_FB; +} + +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/mainwindow.h b/mainwindow.h index 9a2e634..5579635 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -1,3 +1,4 @@ +<<<<<<< HEAD #ifndef MAINWINDOW_H #define MAINWINDOW_H @@ -78,3 +79,83 @@ private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H +======= +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include +#include +#include +#include "SpiApi.h" +#include "apps/icd/app_icd.h" + +QT_BEGIN_NAMESPACE +namespace Ui { +class MainWindow; +} +QT_END_NAMESPACE + +#define VERSION "V1.1" +#define MOD_TIME "25/07/17" +#define ICD_VERSION "V2.0.1" + + +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(QWidget *parent = nullptr); + ~MainWindow(); + + /******************函数声明*****************/ + static void mw_logOutPut(QtMsgType type, const QMessageLogContext &context, const QString &msg); + void mw_findSpiDev(void); + void mw_sendTestData(void); + void mw_tableInit(void); + + void mw_onCellChanged(int row, int column); + void mw_menuBarInit(void); + + // 定义对象 + DRV_Spi *m_DRV_Spi; // spi驱动对象 + APP_Icd *m_APP_Icd; // ICD应用层类 + QByteArray revData; + // // SpiApi底层驱动类 + SpiApi spiApi; + QVector devices; + ParsedData regParsedData; + +signals: + +private slots: + void on_pushButton_refreshDev_clicked(); + + void on_pushButton_closeDev_clicked(); + + void on_pushButton_openDev_clicked(); + + void on_pushButton_uartRefreshDev_clicked(); + + void on_pushButton_uartOpenDev_clicked(); + + void on_pushButton_uartCloseDev_clicked(); + + void on_pushButton_uartSetPara_clicked(); + + void on_comboBox_icdGroup_currentIndexChanged(int index); + + void on_pushButton_icdSendVolCMD_clicked(); + + void on_pushButton_icdRegConfig_clicked(); + + void mw_showVersionInfo(); + void mw_showUserManual(); + + void on_pushButton_icdRegRead_clicked(); + +private: + Ui::MainWindow *ui; +}; +#endif // MAINWINDOW_H +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/mainwindow.ui b/mainwindow.ui index 9b46907..6b80e4b 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -1,3 +1,4 @@ +<<<<<<< HEAD MainWindow @@ -1220,3 +1221,1209 @@ +======= + + + MainWindow + + + + 0 + 0 + 703 + 997 + + + + MainWindow + + + + + + 10 + 130 + 681 + 91 + + + + 串口配置区 + + + + + 10 + 60 + 651 + 25 + + + + + + + 波特率: + + + + + + + + 115200 + + + + + 9600 + + + + + + + + 校验位: + + + + + + + + None + + + + + Odd + + + + + Even + + + + + Mark + + + + + Space + + + + + + + + 停止位: + + + + + + + + 1位 + + + + + 1.5位 + + + + + 2位 + + + + + + + + 数据位: + + + + + + + + 8 + + + + + + + + 字节超时(ms): + + + + + + + 0 + + + 255 + + + + + + + false + + + + 0 + 0 + + + + 串口参数设置 + + + + + + + + + 370 + 30 + 291 + 25 + + + + + + + 刷新设备列表 + + + + + + + false + + + 关闭设备 + + + + + + + 打开设备 + + + + + + + + + 101 + 31 + 261 + 21 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + + + 10 + 30 + 81 + 20 + + + + UART设备列表: + + + + + + + 10 + 0 + 681 + 121 + + + + SPI配置区 + + + + + 320 + 60 + 351 + 54 + + + + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + 0 + 0 + + + + + CS1_POLA_LOW + + + + + CS1_POLA_HIGH + + + + + + + + + 0 + 0 + + + + 初始化SPI(C0) + + + + + + + + 0 + 0 + + + + + CS2_POLA_LOW + + + + + CS2_POLA_HIGH + + + + + + + + + + 15 + 30 + 71 + 20 + + + + SPI设备列表: + + + + + + 96 + 31 + 261 + 21 + + + + + 0 + 0 + + + + + 16777215 + 16777215 + + + + + + + 380 + 30 + 291 + 25 + + + + + + + 刷新设备列表 + + + + + + + false + + + 关闭设备 + + + + + + + 打开设备 + + + + + + + + + 10 + 60 + 301 + 54 + + + + + + + 模式: + + + + + + + + 模式0 + + + + + 模式1 + + + + + 模式2 + + + + + 模式3 + + + + + + + + + LSB + + + + + MSB + + + + + + + + 时钟频率: + + + + + + + + 8bit + + + + + 16bit + + + + + + + + 数据: + + + + + + + 数据宽度: + + + + + + + + 60MHz + + + + + 30MHz + + + + + 15MHz + + + + + 7.5MHz + + + + + 3.75MHz + + + + + 1.875MHz + + + + + 937.5KHz + + + + + 468.75KHz + + + + + + + + + + + 10 + 840 + 681 + 111 + + + + 日志输出 + + + + + 10 + 30 + 661 + 70 + + + + + + + + 10 + 340 + 681 + 501 + + + + 配置电压区 + + + + + 561 + 30 + 111 + 21 + + + + 发送电压命令 + + + + + + 250 + 30 + 39 + 23 + + + + 子分组: + + + + + + 44 + 30 + 81 + 23 + + + + + 参数归零 + + + + + 同值配置 + + + + + 异值配置 + + + + + + + 164 + 30 + 81 + 23 + + + + + 所有DAC + + + + + A/B分组 + + + + + OPA分组 + + + + + 单个DAC + + + + + + + 130 + 30 + 39 + 23 + + + + 分组: + + + + + + 10 + 30 + 39 + 23 + + + + 命令: + + + + + + 300 + 30 + 101 + 23 + + + + + + + 0 + 60 + 671 + 431 + + + + 16 + + + 16 + + + 16 + + + 20 + + + 40 + + + 25 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 10 + 230 + 681 + 111 + + + + 寄存器配置及回读区 + + + + + 480 + 20 + 71 + 21 + + + + FBK_EN + + + + + + 300 + 20 + 61 + 23 + + + + + + + 10 + 20 + 61 + 23 + + + + DAC编号: + + + + + + 570 + 20 + 111 + 21 + + + + TEMPTEST_EN + + + + + + 560 + 80 + 111 + 23 + + + + 寄存器回读 + + + + + + 390 + 20 + 82 + 21 + + + + EN_TADC + + + true + + + + + + 140 + 80 + 241 + 16 + + + + none + + + + + + 110 + 50 + 91 + 21 + + + + TRIG_TADC + + + + + + 240 + 20 + 61 + 23 + + + + DAC通道: + + + + + + 10 + 50 + 91 + 21 + + + + TEST_TADC + + + true + + + + + + 490 + 50 + 61 + 23 + + + + 8 + + + + 0000 + + + + + 0001 + + + + + 0010 + + + + + 0011 + + + + + 0100 + + + + + 0101 + + + + + 0110 + + + + + 0111 + + + + + 1000 + + + + + 1001 + + + + + 1010 + + + + + 1011 + + + + + 1100 + + + + + 1101 + + + + + 1110 + + + + + 1111 + + + + + + + 300 + 50 + 61 + 23 + + + + 0 + + + + 00 + + + + + 01 + + + + + 10 + + + + + 11 + + + + + + + 560 + 50 + 111 + 23 + + + + 寄存器配置 + + + + + + 70 + 20 + 61 + 23 + + + + + 编号1 + + + + + 编号2 + + + + + 编号3 + + + + + 编号4 + + + + + 编号5 + + + + + 编号6 + + + + + 编号7 + + + + + 编号8 + + + + + 编号9 + + + + + 编号10 + + + + + 编号11 + + + + + 编号12 + + + + + 编号13 + + + + + 编号14 + + + + + 编号15 + + + + + 编号16 + + + + + 编号17 + + + + + 编号18 + + + + + 编号19 + + + + + 编号20 + + + + + + + 10 + 80 + 131 + 23 + + + + REG7至REG1读取的值: + + + + + + 410 + 50 + 51 + 23 + + + + ICON18: + + + + + + 210 + 50 + 81 + 23 + + + + N_CLKDIV18: + + + + + + + + 0 + 0 + 703 + 20 + + + + + + + + +>>>>>>> 799590bc1dd9b9faee90d554f54d6ad46e8b8ddd diff --git a/voltage_file/Vse_psi_-13.00_theta_13.53_opa_1.txt b/voltage_file/Vse_psi_-13.00_theta_13.53_opa_1.txt new file mode 100755 index 0000000..51330f2 --- /dev/null +++ b/voltage_file/Vse_psi_-13.00_theta_13.53_opa_1.txt @@ -0,0 +1,1024 @@ +255 +511 +0 +511 +511 +511 +511 +255 +767 +767 +255 +255 +767 +511 +767 +511 +767 +255 +767 +767 +511 +0 +255 +0 +767 +0 +511 +511 +255 +511 +511 +255 +511 +255 +511 +0 +0 +255 +0 +511 +255 +767 +255 +767 +511 +511 +255 +511 +511 +255 +0 +511 +767 +255 +511 +255 +767 +0 +511 +255 +511 +511 +767 +255 +511 +0 +255 +767 +0 +0 +767 +0 +255 +255 +255 +255 +511 +511 +255 +255 +511 +255 +255 +511 +511 +767 +511 +511 +0 +0 +0 +0 +511 +0 +767 +0 +767 +255 +511 +767 +767 +767 +511 +255 +0 +511 +255 +0 +511 +767 +0 +0 +0 +767 +0 +767 +0 +255 +0 +0 +0 +511 +767 +511 +511 +255 +767 +511 +255 +767 +767 +767 +255 +255 +767 +0 +511 +767 +767 +255 +255 +511 +0 +767 +0 +511 +767 +0 +511 +0 +255 +767 +255 +255 +767 +0 +0 +511 +767 +255 +255 +767 +511 +255 +0 +255 +767 +511 +511 +255 +255 +0 +0 +255 +767 +767 +511 +0 +255 +255 +767 +511 +511 +511 +255 +767 +767 +255 +255 +767 +511 +511 +511 +0 +255 +255 +767 +511 +767 +511 +0 +767 +511 +767 +255 +0 +511 +511 +0 +511 +0 +767 +255 +255 +255 +0 +255 +511 +511 +511 +511 +767 +511 +0 +255 +255 +0 +255 +767 +0 +767 +0 +255 +767 +0 +511 +255 +255 +511 +511 +255 +511 +511 +767 +255 +767 +255 +767 +767 +767 +767 +511 +767 +0 +0 +0 +511 +767 +767 +511 +0 +767 +511 +511 +511 +0 +767 +511 +767 +255 +255 +511 +255 +767 +255 +0 +767 +767 +255 +0 +767 +767 +511 +0 +0 +0 +255 +767 +511 +767 +0 +255 +511 +511 +767 +255 +255 +255 +511 +767 +0 +255 +255 +511 +767 +255 +767 +0 +767 +0 +255 +0 +255 +767 +0 +511 +511 +255 +0 +0 +767 +255 +511 +767 +511 +511 +511 +0 +0 +767 +255 +767 +511 +767 +255 +0 +767 +0 +255 +511 +511 +0 +511 +0 +255 +767 +255 +511 +767 +767 +0 +0 +767 +511 +0 +767 +255 +767 +767 +511 +0 +511 +767 +0 +767 +255 +255 +0 +767 +255 +255 +511 +511 +0 +0 +255 +255 +0 +0 +255 +511 +255 +767 +511 +0 +0 +511 +767 +0 +0 +0 +255 +511 +0 +255 +767 +0 +767 +255 +511 +255 +511 +255 +511 +767 +767 +767 +511 +255 +767 +0 +767 +255 +767 +767 +0 +255 +767 +767 +0 +767 +0 +255 +767 +767 +511 +0 +0 +255 +0 +511 +511 +0 +511 +255 +255 +0 +511 +767 +0 +255 +255 +767 +255 +255 +0 +255 +0 +255 +0 +511 +767 +0 +767 +767 +511 +767 +511 +767 +767 +767 +767 +255 +255 +0 +0 +255 +511 +255 +255 +0 +511 +255 +511 +511 +767 +767 +255 +511 +255 +0 +767 +511 +0 +0 +511 +767 +511 +767 +767 +0 +0 +767 +0 +767 +0 +511 +767 +767 +0 +255 +0 +511 +0 +767 +767 +0 +767 +511 +511 +255 +0 +767 +255 +255 +511 +0 +767 +255 +767 +767 +767 +0 +767 +0 +511 +767 +511 +511 +767 +0 +255 +0 +767 +255 +767 +511 +511 +511 +255 +0 +255 +255 +255 +511 +0 +511 +0 +767 +255 +0 +0 +767 +767 +511 +255 +0 +767 +511 +255 +511 +511 +255 +767 +0 +255 +767 +511 +511 +255 +0 +0 +0 +0 +0 +0 +0 +255 +0 +0 +0 +767 +511 +767 +511 +767 +767 +255 +0 +255 +255 +0 +511 +767 +511 +511 +0 +255 +0 +511 +511 +0 +511 +767 +511 +511 +767 +255 +767 +767 +255 +511 +767 +767 +767 +0 +0 +511 +0 +511 +0 +0 +511 +767 +767 +511 +767 +255 +767 +511 +0 +511 +0 +511 +511 +255 +511 +767 +255 +0 +511 +511 +255 +255 +511 +767 +767 +0 +255 +511 +0 +0 +767 +511 +0 +767 +255 +511 +767 +0 +767 +511 +767 +255 +511 +767 +767 +0 +0 +0 +767 +255 +767 +255 +511 +255 +255 +255 +0 +0 +255 +0 +767 +511 +255 +511 +0 +255 +0 +0 +0 +255 +767 +255 +255 +511 +767 +0 +255 +0 +511 +255 +0 +767 +767 +255 +0 +511 +0 +255 +255 +767 +0 +511 +511 +767 +0 +767 +0 +255 +767 +767 +767 +511 +511 +767 +0 +767 +255 +255 +0 +767 +511 +255 +0 +767 +255 +767 +511 +0 +0 +511 +255 +255 +767 +255 +767 +767 +511 +511 +767 +0 +511 +0 +0 +511 +767 +0 +767 +511 +0 +255 +511 +511 +0 +0 +511 +767 +511 +511 +767 +0 +0 +767 +0 +255 +255 +0 +0 +255 +511 +511 +0 +0 +511 +767 +511 +767 +0 +255 +255 +511 +767 +255 +767 +0 +255 +511 +767 +255 +0 +255 +511 +0 +767 +511 +0 +511 +767 +255 +767 +767 +0 +0 +255 +511 +511 +255 +511 +255 +0 +767 +255 +767 +511 +511 +0 +767 +255 +767 +255 +0 +511 +0 +767 +255 +767 +0 +255 +255 +255 +767 +0 +255 +0 +255 +767 +767 +511 +0 +767 +255 +255 +511 +511 +767 +255 +255 +511 +511 +255 +0 +0 +255 +0 +511 +767 +255 +511 +767 +255 +0 +511 +0 +767 +767 +0 +511 +0 +511 +255 +767 +767 +511 +255 +0 +767 +511 +0 +511 +255 +255 +255 +0 +767 +255 +767 +511 +511 +0 +0 +511 +0 +0 +0 +511 +767 +0 +767 +511 +767 +511 +511 +255 +255 +511 +767 +511 +767 +767 +0 +255 +767 +0 +767 +255 +767 +511 +767 +767 +255 +511 +255 +767 +255 +0 +511 +767 +767 +255 +0 +255 +0 +0 +255 +767 +511 +0 +767 +255 +0 +255 +511 +767 +255 +511 +767 +0 +255 +255 +255 +767 +511 +511 +255 +767 +255 +255 +767 +767 +511 +511 +767 +511 +0 +255 +511 +255 +0 +511 +767 +511 +255 +767 +255 +0 +511 +255 +255 +767 +767 +767 +767 +0 +511 +511 +511 +767 +0 +0 +511 +767 +255 +767 +255 +0 +255 +255 +767 +511 +767 +511 +255 +767 +511 +767 +511 +255 +255 +255 +255 +0 +767 +0 \ No newline at end of file diff --git a/voltage_file/Vse_psi_-14.00_theta_13.53_opa_1.txt b/voltage_file/Vse_psi_-14.00_theta_13.53_opa_1.txt new file mode 100755 index 0000000..50b7923 --- /dev/null +++ b/voltage_file/Vse_psi_-14.00_theta_13.53_opa_1.txt @@ -0,0 +1,1024 @@ +767 +0 +511 +0 +0 +0 +0 +767 +255 +511 +767 +0 +511 +255 +511 +255 +511 +255 +511 +767 +511 +0 +255 +0 +767 +0 +511 +511 +511 +511 +511 +511 +511 +511 +767 +255 +255 +511 +255 +767 +511 +0 +767 +255 +767 +0 +511 +767 +0 +767 +511 +0 +255 +767 +0 +0 +511 +767 +255 +0 +255 +255 +767 +0 +255 +767 +0 +511 +0 +767 +767 +767 +255 +255 +255 +255 +511 +511 +255 +255 +767 +511 +255 +767 +767 +0 +767 +767 +511 +255 +255 +255 +767 +511 +255 +511 +255 +767 +0 +255 +255 +511 +0 +0 +511 +0 +767 +767 +255 +511 +767 +767 +767 +767 +767 +767 +0 +255 +0 +0 +0 +511 +767 +511 +511 +255 +767 +511 +255 +0 +767 +0 +511 +511 +0 +255 +767 +255 +255 +511 +511 +0 +511 +255 +511 +0 +255 +511 +0 +511 +0 +511 +0 +0 +511 +767 +767 +511 +511 +0 +0 +767 +255 +255 +0 +255 +767 +511 +511 +255 +255 +0 +767 +511 +0 +0 +767 +0 +511 +511 +0 +0 +0 +0 +511 +255 +0 +511 +767 +255 +0 +0 +255 +511 +767 +0 +255 +0 +511 +255 +767 +511 +255 +511 +0 +767 +511 +255 +767 +255 +0 +767 +255 +255 +255 +0 +255 +511 +511 +767 +511 +0 +767 +0 +511 +511 +255 +511 +0 +255 +0 +511 +511 +255 +511 +0 +511 +767 +767 +0 +767 +0 +0 +255 +767 +511 +0 +255 +511 +255 +511 +255 +511 +511 +767 +767 +0 +0 +0 +511 +255 +255 +255 +0 +767 +767 +255 +767 +511 +511 +767 +0 +255 +255 +767 +767 +255 +511 +767 +767 +511 +511 +255 +767 +0 +0 +255 +767 +255 +767 +767 +255 +511 +511 +767 +255 +511 +511 +767 +0 +0 +255 +511 +767 +0 +511 +0 +511 +255 +255 +767 +511 +767 +255 +511 +0 +255 +511 +511 +767 +511 +767 +0 +511 +255 +255 +255 +511 +767 +511 +767 +511 +255 +767 +255 +255 +0 +255 +255 +511 +511 +0 +511 +255 +511 +767 +511 +511 +767 +0 +255 +0 +767 +767 +0 +255 +0 +255 +255 +0 +511 +0 +511 +511 +255 +767 +0 +767 +255 +0 +0 +255 +255 +767 +767 +767 +255 +767 +0 +255 +255 +0 +767 +511 +0 +0 +511 +767 +0 +255 +0 +511 +511 +255 +255 +0 +255 +255 +767 +767 +767 +767 +511 +0 +0 +0 +511 +0 +0 +255 +511 +511 +0 +255 +767 +0 +767 +255 +255 +767 +511 +767 +0 +511 +767 +0 +0 +0 +511 +0 +767 +511 +767 +511 +255 +511 +0 +767 +0 +255 +511 +511 +767 +511 +767 +0 +511 +511 +767 +767 +0 +0 +511 +0 +255 +767 +0 +0 +255 +255 +255 +255 +767 +511 +511 +767 +767 +255 +0 +767 +0 +511 +0 +511 +255 +511 +0 +255 +767 +255 +255 +767 +511 +255 +0 +511 +767 +511 +767 +767 +255 +767 +767 +255 +0 +511 +767 +0 +0 +511 +767 +511 +0 +511 +255 +255 +255 +255 +255 +511 +767 +767 +0 +511 +0 +767 +767 +767 +511 +255 +0 +511 +255 +0 +255 +767 +767 +511 +0 +0 +767 +767 +511 +767 +0 +0 +511 +0 +511 +767 +0 +0 +0 +511 +255 +0 +255 +255 +511 +0 +767 +511 +255 +0 +255 +767 +511 +767 +511 +255 +255 +511 +511 +767 +255 +767 +0 +511 +767 +255 +255 +255 +511 +255 +255 +767 +255 +511 +0 +255 +767 +0 +255 +255 +767 +255 +255 +767 +767 +767 +255 +767 +255 +511 +0 +255 +767 +0 +767 +255 +255 +255 +511 +767 +255 +767 +767 +255 +255 +767 +255 +767 +0 +0 +0 +255 +767 +0 +0 +767 +255 +255 +767 +767 +255 +0 +511 +767 +255 +255 +511 +255 +511 +0 +255 +0 +255 +255 +767 +511 +255 +255 +0 +0 +255 +511 +511 +0 +255 +511 +767 +0 +767 +767 +255 +767 +767 +511 +767 +255 +0 +767 +0 +767 +767 +0 +0 +255 +255 +767 +0 +767 +255 +511 +767 +767 +767 +767 +511 +511 +767 +511 +767 +255 +767 +255 +767 +767 +767 +767 +0 +0 +767 +0 +255 +0 +767 +0 +0 +255 +511 +0 +0 +0 +767 +255 +255 +767 +0 +511 +511 +255 +255 +767 +767 +255 +511 +255 +767 +767 +767 +255 +255 +767 +0 +255 +255 +255 +767 +767 +511 +511 +0 +255 +511 +255 +255 +511 +511 +0 +767 +255 +767 +0 +0 +255 +0 +767 +511 +511 +767 +0 +0 +255 +255 +511 +0 +511 +0 +767 +255 +511 +0 +0 +511 +511 +0 +255 +511 +511 +767 +0 +0 +767 +0 +255 +511 +0 +0 +255 +511 +767 +255 +255 +511 +0 +0 +0 +255 +767 +767 +0 +255 +511 +0 +511 +767 +0 +511 +0 +767 +767 +0 +511 +511 +255 +767 +0 +511 +767 +767 +255 +767 +0 +255 +255 +511 +255 +255 +255 +255 +767 +0 +767 +767 +767 +255 +0 +255 +255 +255 +255 +0 +255 +255 +511 +511 +255 +255 +511 +767 +0 +511 +511 +511 +767 +511 +255 +255 +511 +255 +767 +767 +255 +0 +511 +767 +0 +511 +511 +767 +767 +0 +0 +0 +767 +511 +255 +511 +767 +255 +0 +767 +255 +767 +767 +255 +511 +0 +511 +511 +767 +0 +767 +511 +255 +255 +511 +511 +767 +511 +767 +511 +255 +255 +0 +255 +255 +0 +0 +767 +255 +0 +767 +767 +255 +511 +767 +511 +255 +511 +511 +255 +0 +255 +511 +767 +511 +767 +767 +255 +767 +0 +0 +767 +511 +0 +767 +767 +0 +255 +767 +511 +511 +511 +0 +767 +0 +511 +511 +511 +767 +511 +511 +767 +255 +255 +767 +255 +767 +767 +767 +255 +767 +767 +511 +0 +0 +255 +0 +767 +767 +511 +255 +255 +767 +255 +255 +0 +0 +0 +511 +0 +255 +255 +511 +767 +511 +255 +0 +767 +0 +767 +255 +767 +255 +255 +511 +511 +255 +255 +255 +767 +255 +767 +255 +511 +511 +767 +767 +255 +0 +255 +767 +0 +255 +0 +255 +767 +511 +511 +767 +255 +767 +511 +767 +511 +255 +767 +0 +767 +767 +0 +0 \ No newline at end of file diff --git a/voltage_file/Vse_psi_-15.00_theta_13.53_opa_1.txt b/voltage_file/Vse_psi_-15.00_theta_13.53_opa_1.txt new file mode 100755 index 0000000..f3ee554 --- /dev/null +++ b/voltage_file/Vse_psi_-15.00_theta_13.53_opa_1.txt @@ -0,0 +1,1024 @@ +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +511 +255 +511 +255 +767 +767 +767 +255 +511 +255 +0 +255 +767 +767 +767 +0 +0 +767 +0 +0 +255 +767 +767 +0 +767 +255 +0 +511 +255 +0 +511 +767 +255 +511 +767 +511 +255 +767 +0 +767 +0 +767 +255 +767 +0 +767 +255 +255 +767 +0 +255 +0 +255 +767 +255 +0 +0 +255 +511 +767 +511 +511 +0 +0 +511 +767 +255 +0 +767 +255 +255 +511 +255 +511 +0 +0 +0 +0 +511 +0 +0 +255 +0 +511 +767 +0 +255 +255 +767 +767 +511 +0 +767 +767 +255 +511 +767 +0 +767 +767 +0 +767 +255 +511 +255 +255 +255 +767 +0 +767 +767 +767 +255 +0 +767 +511 +255 +511 +767 +0 +511 +767 +255 +767 +767 +255 +255 +767 +255 +767 +255 +767 +0 +255 +767 +255 +767 +255 +0 +0 +511 +767 +767 +511 +511 +0 +255 +767 +511 +255 +255 +511 +0 +767 +767 +511 +511 +255 +255 +767 +511 +255 +0 +511 +0 +0 +511 +511 +511 +511 +0 +767 +767 +255 +511 +0 +767 +767 +767 +255 +511 +767 +255 +0 +255 +255 +767 +511 +255 +511 +255 +767 +511 +255 +767 +511 +255 +767 +511 +255 +511 +511 +511 +767 +0 +255 +0 +255 +255 +511 +767 +0 +767 +0 +511 +767 +767 +0 +255 +0 +0 +511 +255 +511 +511 +767 +511 +767 +767 +255 +767 +255 +767 +255 +511 +255 +511 +255 +511 +767 +767 +767 +0 +767 +767 +255 +0 +0 +767 +511 +767 +255 +0 +511 +255 +511 +767 +767 +767 +255 +767 +511 +255 +511 +767 +767 +511 +511 +511 +767 +0 +0 +255 +767 +511 +0 +0 +511 +767 +0 +0 +767 +767 +0 +0 +255 +511 +767 +0 +255 +511 +0 +767 +255 +767 +0 +511 +255 +255 +767 +255 +767 +0 +511 +255 +511 +255 +767 +255 +511 +0 +255 +0 +767 +767 +511 +767 +511 +511 +0 +511 +255 +0 +255 +511 +511 +767 +255 +767 +767 +767 +511 +0 +255 +255 +0 +767 +0 +511 +255 +767 +767 +255 +767 +767 +767 +255 +767 +0 +511 +0 +767 +767 +511 +255 +0 +767 +0 +0 +511 +767 +767 +255 +767 +0 +0 +767 +255 +0 +767 +0 +255 +767 +255 +255 +511 +511 +767 +767 +511 +767 +511 +767 +767 +255 +255 +0 +511 +255 +255 +767 +767 +0 +511 +511 +0 +255 +255 +511 +511 +255 +0 +767 +255 +255 +767 +511 +767 +0 +511 +767 +255 +767 +255 +0 +255 +767 +767 +0 +767 +511 +767 +511 +767 +255 +511 +255 +0 +511 +767 +255 +255 +767 +0 +255 +255 +511 +767 +255 +767 +0 +511 +767 +511 +0 +255 +255 +255 +767 +511 +511 +767 +767 +0 +0 +0 +767 +511 +767 +511 +255 +511 +0 +0 +255 +511 +511 +0 +767 +511 +511 +0 +255 +767 +0 +0 +767 +767 +255 +767 +511 +0 +255 +511 +767 +255 +511 +511 +511 +255 +0 +0 +0 +511 +0 +0 +511 +511 +511 +767 +511 +767 +767 +255 +255 +0 +767 +255 +767 +511 +767 +255 +0 +255 +511 +511 +511 +0 +511 +255 +0 +767 +511 +0 +255 +767 +0 +0 +767 +767 +255 +767 +255 +255 +767 +0 +0 +0 +767 +255 +511 +255 +511 +511 +767 +511 +767 +767 +0 +255 +511 +255 +511 +0 +255 +767 +767 +0 +0 +511 +0 +511 +767 +511 +767 +0 +255 +0 +0 +0 +511 +0 +255 +767 +767 +767 +0 +767 +511 +511 +255 +511 +255 +0 +767 +511 +511 +511 +767 +767 +767 +0 +0 +511 +255 +0 +511 +0 +511 +511 +511 +0 +0 +511 +511 +511 +0 +0 +511 +511 +0 +767 +0 +511 +511 +767 +255 +767 +255 +0 +255 +767 +255 +511 +767 +511 +255 +255 +255 +255 +255 +511 +767 +255 +0 +767 +0 +255 +511 +0 +255 +0 +767 +511 +511 +511 +511 +0 +511 +0 +255 +511 +767 +767 +0 +255 +767 +255 +0 +255 +511 +255 +511 +511 +511 +255 +767 +767 +511 +0 +767 +255 +767 +0 +511 +767 +0 +0 +255 +255 +255 +511 +255 +255 +255 +255 +767 +511 +255 +255 +255 +767 +767 +255 +511 +0 +0 +767 +255 +255 +511 +511 +0 +255 +511 +255 +511 +767 +0 +767 +767 +0 +255 +0 +767 +511 +511 +511 +255 +255 +511 +511 +255 +511 +511 +255 +255 +511 +0 +255 +0 +511 +0 +767 +767 +255 +255 +511 +0 +767 +767 +0 +255 +767 +767 +255 +767 +255 +511 +511 +0 +0 +511 +0 +767 +511 +767 +255 +255 +0 +0 +511 +511 +255 +511 +511 +0 +0 +511 +511 +255 +767 +511 +511 +767 +255 +255 +511 +767 +255 +767 +0 +511 +0 +255 +0 +511 +511 +767 +511 +255 +0 +767 +0 +511 +767 +767 +511 +0 +255 +511 +255 +767 +767 +511 +511 +255 +0 +255 +0 +0 +0 +0 +511 +767 +255 +511 +511 +511 +767 +767 +767 +0 +767 +767 +0 +255 +511 +0 +255 +255 +511 +255 +255 +0 +511 +255 +767 +511 +0 +0 +511 +767 +0 +255 +511 +767 +0 +0 +255 +255 +511 +767 +511 +767 +255 +511 +255 +767 +511 +0 +255 +511 +255 +511 +767 +255 +0 +255 +0 +0 +0 +511 +255 +255 +511 +511 +511 +0 +255 +0 +767 +255 +0 +767 +511 +511 +0 +767 +767 +511 +255 +511 +767 +255 +255 +767 +255 +255 +255 +255 +0 +511 +767 +0 +0 +511 +0 +255 +511 +0 +0 +511 +0 +767 +255 +767 +511 +511 +0 +511 +255 +255 +767 +255 +255 +0 +511 +255 +511 +511 +255 +0 +511 +255 +767 +767 +767 +0 +511 +255 +511 +767 +0 +0 +255 +0 +767 +511 +511 +767 +0 +767 +511 +0 +511 +0 +767 +255 +511 +767 +255 +255 +255 +0 +511 +0 +511 +255 +0 +511 +0 +767 +767 +767 +0 +0 +0 +255 +255 +767 +0 +255 +511 +0 +0 +0 +767 +255 +0 +255 +0 +0 +255 +0 +511 +767 +255 +255 +0 +767 +255 +511 +767 +511 +511 +255 +255 +255 +511 \ No newline at end of file diff --git a/voltage_file/Vse_psi_-16.00_theta_13.52_opa_1.txt b/voltage_file/Vse_psi_-16.00_theta_13.52_opa_1.txt new file mode 100755 index 0000000..238e0d3 --- /dev/null +++ b/voltage_file/Vse_psi_-16.00_theta_13.52_opa_1.txt @@ -0,0 +1,1024 @@ +767 +0 +767 +255 +255 +511 +511 +255 +767 +0 +511 +511 +0 +767 +255 +767 +255 +767 +255 +511 +255 +0 +0 +0 +767 +255 +511 +767 +767 +767 +0 +767 +0 +0 +255 +767 +767 +255 +0 +511 +255 +767 +511 +255 +767 +767 +511 +0 +255 +767 +767 +255 +511 +255 +255 +255 +767 +255 +511 +511 +0 +0 +255 +767 +0 +511 +767 +511 +0 +767 +767 +0 +255 +511 +511 +511 +767 +0 +511 +511 +0 +0 +767 +255 +255 +767 +511 +511 +255 +0 +255 +0 +767 +255 +255 +511 +255 +767 +0 +511 +511 +767 +255 +255 +0 +511 +255 +255 +767 +255 +511 +511 +511 +511 +767 +511 +0 +255 +0 +0 +0 +767 +0 +767 +767 +511 +255 +0 +767 +511 +255 +767 +0 +255 +511 +0 +511 +0 +0 +511 +511 +0 +511 +255 +511 +255 +511 +767 +255 +767 +255 +767 +511 +511 +767 +255 +255 +0 +255 +767 +767 +511 +0 +0 +0 +255 +767 +511 +511 +255 +511 +255 +255 +767 +255 +255 +0 +511 +0 +0 +511 +511 +511 +767 +255 +0 +0 +511 +511 +255 +255 +0 +255 +511 +0 +255 +511 +511 +767 +767 +255 +0 +767 +255 +767 +255 +0 +0 +511 +0 +767 +511 +255 +255 +255 +255 +255 +767 +767 +0 +767 +255 +255 +511 +767 +0 +767 +255 +767 +0 +767 +0 +255 +0 +255 +767 +511 +767 +0 +255 +767 +255 +0 +511 +0 +767 +255 +767 +0 +767 +0 +767 +255 +255 +511 +511 +0 +511 +511 +255 +0 +0 +767 +255 +767 +255 +255 +767 +511 +767 +0 +511 +511 +511 +767 +0 +767 +0 +255 +255 +255 +0 +767 +255 +511 +511 +0 +511 +0 +767 +767 +255 +511 +511 +767 +511 +511 +767 +0 +255 +511 +511 +767 +255 +511 +255 +767 +255 +0 +255 +511 +511 +511 +0 +511 +0 +0 +767 +767 +767 +767 +0 +511 +767 +511 +511 +767 +0 +255 +255 +255 +255 +0 +511 +0 +767 +767 +0 +255 +255 +511 +0 +511 +511 +511 +255 +767 +767 +255 +0 +767 +767 +255 +255 +767 +767 +511 +0 +0 +511 +511 +255 +255 +511 +255 +0 +255 +767 +255 +255 +0 +255 +511 +0 +255 +255 +511 +255 +511 +767 +0 +0 +511 +511 +0 +0 +511 +767 +0 +255 +255 +767 +511 +511 +767 +511 +511 +511 +0 +511 +255 +511 +255 +511 +767 +767 +255 +767 +767 +255 +511 +255 +767 +767 +511 +255 +0 +767 +255 +0 +767 +255 +511 +0 +511 +767 +511 +767 +767 +767 +255 +511 +767 +511 +255 +511 +0 +767 +0 +0 +511 +767 +255 +767 +0 +255 +0 +767 +0 +255 +767 +511 +255 +0 +255 +511 +0 +767 +255 +0 +255 +511 +0 +767 +0 +255 +255 +511 +511 +511 +255 +255 +767 +255 +0 +255 +255 +0 +511 +0 +255 +767 +511 +255 +0 +767 +0 +511 +255 +255 +511 +0 +255 +767 +511 +0 +255 +767 +767 +255 +255 +255 +511 +511 +0 +255 +255 +255 +511 +255 +767 +0 +255 +0 +0 +767 +511 +255 +0 +511 +767 +255 +255 +511 +767 +0 +511 +511 +0 +0 +0 +767 +767 +767 +511 +255 +0 +767 +511 +511 +767 +255 +255 +0 +511 +767 +767 +255 +255 +511 +767 +767 +511 +0 +511 +0 +255 +0 +767 +511 +767 +767 +0 +511 +511 +255 +511 +255 +511 +0 +0 +255 +255 +767 +0 +767 +255 +767 +0 +255 +767 +0 +511 +255 +0 +511 +767 +511 +0 +511 +511 +511 +767 +255 +0 +0 +767 +0 +767 +0 +255 +767 +0 +0 +511 +0 +0 +511 +255 +255 +511 +255 +767 +511 +511 +0 +0 +767 +767 +511 +255 +255 +255 +767 +0 +0 +511 +0 +255 +255 +0 +511 +767 +511 +767 +511 +767 +0 +511 +0 +0 +255 +767 +0 +255 +255 +511 +767 +0 +511 +767 +767 +255 +767 +255 +0 +511 +767 +511 +767 +511 +511 +511 +255 +255 +511 +767 +0 +0 +511 +0 +767 +255 +255 +0 +767 +767 +0 +767 +767 +0 +0 +767 +767 +255 +767 +255 +511 +255 +511 +767 +767 +511 +767 +255 +255 +767 +0 +255 +511 +767 +255 +255 +255 +255 +767 +511 +511 +511 +255 +0 +511 +0 +511 +511 +0 +255 +255 +511 +767 +0 +255 +511 +767 +255 +511 +767 +255 +255 +0 +767 +767 +767 +767 +255 +255 +767 +255 +0 +767 +767 +255 +0 +255 +0 +0 +0 +511 +767 +0 +0 +255 +0 +511 +0 +0 +255 +767 +767 +255 +767 +255 +767 +767 +255 +255 +0 +255 +255 +255 +511 +0 +0 +767 +0 +511 +511 +0 +255 +511 +0 +0 +511 +767 +255 +767 +511 +767 +0 +255 +255 +767 +0 +511 +0 +255 +767 +0 +511 +0 +0 +255 +255 +767 +767 +511 +255 +511 +0 +255 +255 +0 +511 +767 +0 +767 +511 +0 +255 +0 +0 +767 +511 +0 +0 +0 +255 +255 +767 +0 +0 +511 +511 +0 +767 +255 +255 +0 +767 +255 +511 +767 +255 +511 +511 +767 +511 +511 +255 +511 +511 +255 +767 +511 +255 +0 +255 +511 +767 +0 +511 +511 +767 +0 +767 +255 +511 +255 +255 +767 +255 +0 +767 +511 +767 +0 +511 +255 +511 +0 +255 +255 +511 +511 +255 +0 +0 +511 +511 +767 +767 +767 +767 +767 +511 +0 +255 +511 +0 +0 +0 +255 +255 +511 +255 +767 +255 +255 +255 +0 +511 +0 +0 +0 +0 +767 +767 +255 +767 +0 +255 +767 +255 +511 +0 +767 +255 +255 +255 +767 +767 +767 +511 +0 +255 +255 +511 +0 +511 +511 +767 +767 +511 +0 +0 +767 +255 +0 +511 +255 +511 +255 +0 +511 +511 +255 +255 +511 +767 +767 +767 +511 +511 +0 +255 +767 +255 +255 +0 +255 +0 +767 +255 +511 +767 +767 +0 +0 +255 +511 +767 +767 +255 +0 +767 +255 +255 +767 +767 +0 +767 +0 +511 +767 +255 +255 +255 +0 +0 +511 +767 +255 +511 +255 +0 +511 +511 +767 +767 +255 +0 +767 +255 +511 +767 +0 +767 +511 +255 +767 +767 +511 +255 +255 \ No newline at end of file diff --git a/voltage_file/Vse_psi_0.00_theta_13.52_opa_1.txt b/voltage_file/Vse_psi_0.00_theta_13.52_opa_1.txt new file mode 100755 index 0000000..e69de29 diff --git a/voltage_file/Vse_psi_11.00_theta_13.52_opa_1.txt b/voltage_file/Vse_psi_11.00_theta_13.52_opa_1.txt new file mode 100755 index 0000000..0ffd535 --- /dev/null +++ b/voltage_file/Vse_psi_11.00_theta_13.52_opa_1.txt @@ -0,0 +1,1024 @@ +255 +767 +0 +0 +511 +0 +255 +511 +511 +255 +0 +511 +511 +767 +511 +511 +255 +511 +255 +0 +255 +0 +767 +0 +255 +0 +0 +255 +767 +511 +0 +255 +767 +255 +767 +767 +255 +0 +255 +255 +255 +255 +511 +511 +511 +255 +255 +0 +511 +511 +0 +0 +511 +511 +255 +767 +511 +255 +255 +511 +255 +767 +511 +255 +0 +255 +767 +767 +767 +0 +255 +0 +767 +255 +767 +255 +0 +511 +511 +0 +767 +255 +511 +511 +767 +511 +511 +255 +255 +767 +0 +511 +511 +511 +767 +511 +767 +767 +255 +255 +767 +255 +255 +511 +767 +767 +767 +255 +255 +0 +767 +255 +511 +0 +511 +767 +767 +255 +767 +0 +511 +511 +255 +255 +767 +0 +0 +255 +511 +511 +767 +511 +255 +0 +767 +511 +511 +511 +0 +767 +255 +255 +0 +0 +767 +0 +511 +255 +255 +255 +255 +0 +0 +767 +511 +255 +767 +767 +511 +255 +767 +0 +0 +255 +511 +255 +255 +511 +767 +255 +767 +767 +255 +255 +255 +511 +767 +511 +511 +0 +0 +255 +767 +255 +255 +511 +767 +767 +255 +255 +511 +0 +511 +255 +0 +767 +511 +767 +511 +0 +767 +0 +255 +0 +0 +255 +255 +511 +511 +511 +767 +767 +0 +0 +767 +0 +511 +511 +0 +511 +767 +767 +767 +767 +511 +0 +0 +0 +0 +767 +0 +767 +255 +255 +0 +0 +0 +767 +255 +0 +0 +767 +255 +255 +0 +255 +255 +0 +511 +767 +255 +767 +511 +255 +511 +0 +255 +255 +767 +767 +0 +255 +767 +767 +0 +0 +767 +511 +767 +511 +0 +767 +255 +0 +0 +511 +255 +767 +511 +255 +511 +767 +0 +0 +511 +767 +767 +767 +511 +767 +255 +0 +767 +511 +0 +0 +511 +255 +767 +511 +0 +767 +0 +0 +767 +767 +767 +767 +767 +255 +255 +511 +0 +767 +0 +511 +255 +511 +767 +255 +767 +511 +255 +0 +255 +511 +0 +0 +511 +767 +511 +511 +767 +0 +511 +0 +255 +767 +511 +255 +767 +767 +511 +0 +511 +511 +255 +255 +767 +0 +0 +511 +511 +511 +767 +255 +255 +255 +511 +0 +767 +0 +767 +255 +767 +511 +255 +255 +0 +511 +767 +511 +0 +0 +511 +0 +767 +767 +511 +255 +0 +0 +255 +511 +255 +767 +511 +511 +511 +511 +255 +767 +511 +767 +511 +511 +255 +511 +511 +0 +255 +0 +0 +0 +767 +0 +767 +767 +255 +255 +767 +0 +0 +255 +767 +767 +767 +0 +0 +255 +255 +0 +767 +767 +511 +255 +255 +255 +511 +0 +767 +511 +255 +255 +767 +0 +255 +0 +0 +767 +255 +767 +767 +0 +511 +0 +255 +511 +511 +767 +767 +255 +0 +0 +767 +767 +511 +767 +511 +0 +511 +255 +0 +255 +511 +255 +511 +511 +767 +255 +511 +767 +511 +511 +0 +255 +511 +0 +0 +0 +511 +767 +767 +767 +0 +255 +0 +0 +767 +255 +0 +0 +511 +511 +767 +511 +255 +255 +511 +767 +0 +511 +255 +511 +255 +0 +511 +255 +255 +767 +511 +255 +511 +255 +0 +0 +0 +511 +511 +767 +255 +255 +511 +767 +255 +255 +0 +0 +0 +511 +255 +255 +511 +767 +767 +511 +255 +767 +767 +0 +0 +0 +0 +767 +255 +511 +767 +0 +255 +511 +511 +767 +511 +0 +0 +255 +767 +767 +0 +255 +767 +255 +511 +511 +255 +255 +767 +255 +767 +767 +0 +0 +255 +511 +255 +0 +0 +767 +511 +511 +0 +767 +767 +0 +511 +255 +255 +767 +767 +511 +0 +255 +0 +0 +0 +767 +511 +511 +767 +511 +255 +255 +0 +767 +767 +767 +255 +0 +255 +511 +511 +511 +255 +511 +0 +767 +255 +511 +767 +255 +511 +511 +767 +255 +0 +255 +0 +511 +511 +0 +767 +0 +767 +767 +511 +511 +255 +255 +255 +255 +255 +0 +767 +511 +255 +767 +255 +255 +767 +511 +511 +511 +511 +767 +511 +511 +0 +767 +255 +767 +255 +511 +0 +0 +511 +767 +0 +511 +255 +767 +767 +767 +0 +767 +511 +767 +255 +255 +767 +255 +767 +511 +767 +255 +0 +0 +0 +0 +511 +255 +767 +511 +767 +511 +0 +511 +255 +0 +767 +255 +0 +255 +511 +767 +511 +0 +511 +511 +255 +255 +511 +767 +255 +255 +767 +0 +0 +511 +767 +767 +255 +511 +0 +0 +511 +255 +767 +255 +255 +511 +511 +0 +255 +767 +767 +0 +255 +0 +255 +0 +767 +511 +767 +0 +511 +255 +511 +511 +767 +511 +0 +767 +767 +767 +767 +255 +255 +767 +255 +0 +255 +255 +767 +255 +0 +511 +767 +511 +255 +767 +0 +0 +511 +767 +511 +255 +767 +767 +0 +255 +767 +511 +255 +767 +767 +511 +255 +511 +511 +0 +511 +255 +767 +767 +511 +767 +255 +0 +767 +767 +255 +511 +767 +255 +511 +0 +767 +767 +511 +255 +511 +767 +511 +255 +0 +511 +255 +255 +0 +255 +511 +767 +511 +511 +0 +511 +255 +767 +511 +767 +0 +767 +767 +767 +255 +0 +511 +511 +767 +767 +511 +0 +0 +767 +767 +767 +767 +255 +511 +255 +511 +511 +767 +767 +0 +255 +0 +511 +255 +0 +511 +255 +511 +255 +767 +511 +255 +255 +767 +767 +511 +767 +767 +0 +767 +511 +255 +255 +0 +0 +767 +0 +767 +255 +511 +511 +0 +0 +255 +0 +0 +767 +767 +255 +767 +767 +767 +767 +255 +511 +511 +0 +767 +511 +767 +767 +511 +0 +0 +511 +255 +511 +767 +0 +767 +511 +767 +255 +255 +511 +255 +255 +0 +767 +0 +0 +0 +0 +767 +511 +767 +255 +511 +255 +255 +511 +511 +255 +0 +511 +767 +511 +767 +255 +767 +0 +0 +255 +255 +255 +511 +255 +0 +0 +511 +511 +511 +255 +767 +0 +511 +767 +0 +255 +0 +767 +511 +767 +0 +511 +767 +255 +767 +511 +0 +767 +767 +0 +255 +255 +767 +0 +255 +255 +255 +511 +511 +511 +0 +767 +511 +0 +767 +767 +767 +511 +0 +0 +767 +255 +255 +0 +0 +767 +0 +255 +511 +255 +767 +511 +767 +511 +767 +511 +0 +255 +511 +0 +511 +255 +255 +255 +511 +255 \ No newline at end of file diff --git a/voltage_file/Vse_psi_16.00_theta_13.53_opa_1.txt b/voltage_file/Vse_psi_16.00_theta_13.53_opa_1.txt new file mode 100755 index 0000000..6a8244f --- /dev/null +++ b/voltage_file/Vse_psi_16.00_theta_13.53_opa_1.txt @@ -0,0 +1,1024 @@ +767 +255 +255 +255 +511 +0 +255 +255 +255 +767 +511 +0 +767 +767 +255 +511 +0 +0 +767 +511 +511 +255 +767 +0 +0 +767 +511 +0 +255 +767 +255 +255 +767 +0 +767 +511 +767 +511 +511 +511 +511 +255 +511 +255 +255 +767 +767 +255 +767 +767 +0 +0 +511 +255 +0 +255 +0 +767 +511 +511 +255 +767 +511 +0 +767 +511 +255 +0 +767 +0 +255 +767 +511 +0 +255 +511 +255 +511 +511 +0 +767 +0 +0 +767 +255 +767 +0 +511 +255 +511 +767 +255 +255 +0 +255 +767 +0 +767 +255 +0 +255 +767 +767 +0 +0 +767 +0 +255 +0 +767 +255 +767 +0 +255 +767 +0 +511 +255 +255 +511 +0 +0 +511 +511 +0 +0 +0 +0 +0 +255 +255 +0 +767 +255 +0 +511 +255 +255 +511 +255 +767 +511 +255 +255 +767 +767 +255 +0 +767 +767 +511 +255 +255 +511 +255 +0 +511 +255 +767 +767 +255 +255 +0 +255 +511 +0 +0 +0 +255 +511 +0 +0 +255 +0 +0 +255 +255 +255 +0 +255 +0 +255 +767 +0 +767 +0 +255 +0 +511 +511 +511 +0 +255 +0 +767 +255 +0 +0 +767 +0 +767 +767 +0 +767 +511 +511 +511 +767 +767 +511 +511 +511 +511 +767 +255 +511 +767 +511 +767 +511 +767 +511 +511 +255 +767 +255 +511 +0 +767 +511 +767 +255 +767 +767 +511 +255 +255 +767 +255 +767 +767 +511 +767 +511 +0 +255 +255 +767 +511 +511 +0 +255 +0 +511 +767 +0 +767 +767 +0 +255 +255 +511 +511 +511 +255 +767 +255 +0 +767 +767 +255 +767 +0 +511 +511 +767 +767 +255 +767 +255 +511 +767 +767 +511 +255 +511 +0 +0 +767 +767 +0 +767 +511 +0 +511 +511 +767 +255 +767 +255 +767 +511 +0 +511 +255 +255 +0 +0 +767 +255 +255 +255 +511 +255 +255 +0 +511 +255 +767 +0 +255 +767 +511 +255 +511 +767 +0 +767 +255 +511 +0 +0 +511 +255 +0 +0 +767 +0 +511 +767 +255 +255 +0 +255 +0 +511 +255 +0 +511 +767 +511 +0 +767 +0 +767 +255 +255 +0 +0 +511 +511 +255 +0 +511 +511 +511 +767 +767 +767 +0 +0 +767 +0 +0 +511 +767 +511 +255 +0 +511 +255 +767 +0 +511 +0 +511 +255 +255 +767 +767 +511 +255 +511 +511 +255 +255 +767 +0 +767 +255 +511 +0 +0 +767 +0 +511 +255 +255 +511 +255 +767 +255 +767 +255 +511 +255 +255 +0 +511 +0 +255 +0 +511 +255 +767 +767 +767 +255 +767 +0 +767 +255 +0 +767 +0 +511 +511 +255 +255 +511 +511 +767 +511 +255 +0 +511 +511 +767 +255 +767 +511 +767 +767 +767 +0 +0 +511 +767 +511 +767 +255 +511 +511 +767 +767 +511 +767 +511 +767 +0 +255 +255 +767 +0 +0 +0 +0 +0 +767 +767 +767 +255 +0 +0 +511 +0 +767 +767 +511 +0 +767 +0 +0 +767 +767 +511 +0 +767 +511 +0 +511 +767 +511 +511 +255 +255 +255 +767 +767 +255 +0 +511 +511 +255 +255 +0 +0 +767 +255 +511 +255 +767 +767 +255 +0 +767 +511 +511 +511 +511 +255 +0 +255 +0 +255 +511 +511 +0 +0 +0 +511 +255 +511 +511 +511 +255 +255 +0 +767 +255 +767 +511 +0 +767 +511 +0 +0 +767 +767 +0 +511 +767 +255 +0 +767 +767 +255 +255 +767 +511 +767 +0 +767 +767 +511 +0 +0 +767 +511 +0 +767 +0 +0 +511 +511 +511 +767 +767 +511 +255 +767 +767 +511 +255 +511 +767 +767 +255 +255 +0 +511 +511 +0 +767 +0 +511 +0 +767 +0 +0 +0 +767 +0 +767 +0 +511 +255 +255 +511 +767 +511 +767 +767 +255 +767 +511 +511 +0 +0 +511 +255 +255 +767 +767 +255 +511 +0 +255 +511 +255 +511 +767 +0 +255 +0 +255 +767 +511 +767 +767 +511 +767 +0 +511 +255 +255 +0 +511 +511 +0 +255 +255 +767 +767 +255 +767 +255 +767 +255 +767 +767 +767 +767 +255 +0 +0 +511 +767 +0 +255 +0 +511 +255 +511 +511 +255 +0 +511 +511 +255 +511 +0 +255 +767 +255 +767 +767 +255 +767 +511 +511 +767 +0 +0 +511 +255 +511 +255 +255 +767 +255 +255 +767 +0 +255 +511 +255 +255 +511 +0 +0 +767 +0 +0 +767 +255 +767 +0 +767 +0 +0 +255 +511 +767 +767 +0 +0 +511 +255 +767 +0 +0 +767 +511 +767 +255 +255 +255 +511 +767 +511 +0 +0 +0 +511 +255 +767 +511 +767 +511 +255 +255 +767 +255 +255 +255 +0 +0 +255 +511 +0 +511 +0 +255 +767 +511 +0 +0 +255 +767 +511 +0 +0 +0 +0 +0 +0 +511 +255 +511 +0 +511 +511 +0 +0 +511 +0 +0 +767 +511 +511 +0 +0 +511 +511 +0 +767 +511 +255 +0 +0 +255 +0 +511 +255 +255 +511 +0 +511 +511 +0 +255 +767 +511 +0 +255 +255 +511 +255 +0 +255 +767 +0 +767 +255 +767 +255 +255 +0 +255 +511 +255 +0 +767 +767 +511 +511 +767 +767 +767 +511 +767 +767 +767 +767 +767 +511 +767 +767 +0 +767 +255 +767 +255 +255 +255 +511 +511 +255 +0 +511 +511 +511 +767 +511 +0 +767 +767 +255 +255 +767 +0 +767 +0 +0 +255 +0 +255 +255 +767 +255 +511 +511 +767 +255 +0 +0 +0 +511 +511 +511 +511 +511 +767 +255 +767 +511 +0 +0 +255 +255 +255 +511 +255 +0 +511 +255 +0 +0 +255 +0 +767 +511 +255 +255 +255 +0 +0 +255 +0 +767 +511 +767 +255 +255 +511 +511 +255 +511 +255 +255 +0 +255 +511 +255 +255 +255 +255 +0 +0 +255 +767 +511 +255 +0 +0 +255 +767 +255 +767 +767 +767 +255 +511 +0 +0 +511 +511 +767 +767 +0 +255 +0 +511 +0 +0 +255 +511 +767 +511 +0 +255 +0 +255 +0 +767 +767 +0 +255 +255 +767 +255 +511 +0 +0 +255 +511 +511 +255 +255 +255 +0 +767 +511 +511 +767 +0 +767 +511 +255 +0 +767 +0 +255 +511 +255 +767 +255 +255 +0 +255 +511 +511 +0 \ No newline at end of file diff --git a/voltage_file/Vse_psi_5.00_theta_13.53_opa_1.txt b/voltage_file/Vse_psi_5.00_theta_13.53_opa_1.txt new file mode 100755 index 0000000..24d7f49 --- /dev/null +++ b/voltage_file/Vse_psi_5.00_theta_13.53_opa_1.txt @@ -0,0 +1,1024 @@ +255 +0 +511 +511 +0 +511 +255 +511 +511 +511 +511 +255 +255 +511 +255 +767 +511 +767 +767 +511 +0 +0 +767 +255 +511 +255 +511 +0 +511 +255 +0 +255 +0 +511 +511 +511 +0 +767 +255 +255 +767 +767 +0 +255 +255 +0 +255 +0 +0 +0 +511 +767 +511 +511 +511 +0 +0 +0 +767 +255 +255 +767 +767 +767 +511 +767 +511 +511 +767 +0 +511 +255 +255 +0 +511 +0 +0 +511 +767 +511 +511 +767 +255 +255 +767 +767 +0 +767 +767 +255 +767 +511 +767 +767 +255 +0 +511 +511 +0 +0 +767 +511 +511 +255 +255 +511 +767 +255 +511 +255 +0 +767 +255 +767 +511 +0 +0 +767 +0 +511 +255 +511 +255 +511 +255 +511 +511 +767 +255 +511 +0 +767 +767 +511 +255 +255 +255 +511 +0 +0 +511 +767 +767 +767 +767 +0 +767 +511 +767 +767 +767 +767 +0 +767 +511 +511 +0 +511 +255 +0 +767 +0 +255 +767 +0 +0 +0 +255 +767 +255 +0 +255 +767 +767 +0 +511 +767 +767 +767 +511 +511 +0 +511 +255 +255 +767 +255 +255 +0 +0 +511 +0 +511 +511 +511 +255 +255 +511 +511 +0 +0 +255 +767 +767 +767 +0 +255 +511 +767 +767 +255 +255 +767 +0 +767 +255 +767 +767 +511 +255 +767 +767 +767 +0 +767 +511 +767 +767 +767 +767 +0 +767 +511 +767 +767 +767 +0 +767 +511 +255 +511 +511 +767 +0 +0 +255 +255 +255 +0 +511 +0 +511 +511 +255 +767 +255 +255 +511 +0 +255 +511 +0 +511 +0 +511 +511 +0 +0 +511 +255 +0 +511 +0 +0 +511 +767 +0 +511 +511 +255 +511 +0 +511 +511 +255 +767 +767 +767 +767 +0 +511 +511 +511 +255 +0 +0 +767 +767 +255 +0 +0 +767 +0 +255 +0 +255 +255 +255 +511 +255 +511 +767 +255 +511 +511 +511 +255 +255 +767 +511 +0 +767 +767 +767 +0 +511 +255 +0 +767 +255 +0 +511 +767 +0 +767 +0 +767 +511 +255 +0 +767 +767 +0 +255 +0 +0 +255 +0 +767 +255 +255 +511 +255 +767 +511 +255 +255 +511 +255 +511 +511 +511 +511 +511 +767 +767 +511 +767 +0 +0 +511 +0 +0 +511 +767 +767 +511 +511 +511 +255 +255 +511 +511 +0 +0 +767 +767 +767 +511 +255 +767 +511 +511 +511 +255 +255 +511 +0 +0 +511 +767 +767 +255 +255 +0 +511 +511 +511 +0 +0 +767 +0 +511 +767 +0 +255 +767 +767 +255 +511 +767 +767 +255 +511 +255 +511 +767 +511 +0 +511 +511 +255 +255 +511 +767 +511 +767 +767 +0 +511 +511 +0 +255 +255 +255 +767 +255 +511 +0 +0 +0 +511 +511 +767 +511 +511 +255 +0 +0 +511 +0 +767 +0 +255 +767 +511 +255 +0 +511 +0 +767 +767 +511 +767 +511 +0 +0 +767 +0 +255 +511 +767 +255 +511 +0 +0 +0 +255 +0 +767 +767 +255 +767 +511 +511 +767 +767 +767 +255 +255 +0 +0 +767 +0 +767 +511 +0 +767 +0 +767 +767 +511 +767 +255 +0 +0 +255 +255 +255 +0 +0 +511 +767 +511 +767 +511 +255 +0 +511 +0 +255 +0 +255 +255 +767 +511 +511 +767 +767 +255 +767 +0 +511 +511 +767 +255 +255 +255 +0 +0 +255 +767 +255 +255 +511 +511 +0 +0 +767 +0 +767 +255 +0 +0 +767 +0 +0 +0 +767 +0 +255 +255 +767 +0 +0 +0 +0 +0 +511 +511 +767 +767 +511 +0 +0 +511 +0 +0 +255 +255 +767 +511 +511 +255 +255 +0 +511 +0 +511 +511 +255 +511 +255 +255 +511 +511 +0 +255 +511 +767 +767 +0 +0 +511 +0 +767 +511 +767 +255 +767 +767 +511 +511 +255 +511 +511 +255 +767 +511 +0 +0 +255 +0 +767 +0 +255 +255 +0 +255 +255 +767 +255 +767 +0 +0 +767 +0 +511 +0 +0 +0 +0 +0 +767 +767 +255 +767 +767 +255 +767 +255 +511 +255 +511 +0 +767 +767 +511 +0 +767 +0 +255 +767 +511 +255 +511 +255 +767 +255 +767 +767 +0 +511 +767 +0 +767 +255 +767 +255 +0 +511 +255 +767 +767 +255 +0 +0 +767 +767 +0 +255 +767 +767 +255 +0 +0 +511 +511 +511 +511 +0 +255 +255 +0 +767 +511 +511 +767 +0 +511 +255 +511 +767 +0 +0 +511 +511 +767 +255 +511 +767 +511 +767 +255 +255 +767 +0 +0 +511 +511 +0 +0 +511 +0 +767 +511 +767 +0 +255 +255 +0 +255 +767 +0 +767 +511 +511 +511 +0 +0 +0 +0 +0 +511 +511 +0 +511 +255 +767 +255 +255 +0 +511 +0 +767 +511 +255 +511 +0 +0 +0 +511 +511 +0 +255 +511 +0 +511 +255 +255 +0 +767 +511 +767 +511 +767 +255 +511 +0 +511 +767 +511 +255 +255 +0 +255 +255 +511 +255 +255 +767 +767 +0 +767 +767 +255 +255 +255 +0 +511 +767 +255 +0 +255 +767 +511 +255 +767 +767 +0 +511 +255 +767 +767 +255 +255 +767 +0 +511 +511 +255 +0 +255 +0 +511 +0 +767 +0 +511 +0 +511 +767 +255 +767 +0 +0 +0 +511 +511 +255 +0 +767 +511 +255 +767 +767 +511 +767 +767 +511 +511 +767 +767 +255 +255 +0 +0 +0 +0 +255 +0 +511 +255 +767 +0 +511 +255 +767 +0 +511 +511 +0 +511 +0 +767 +511 +767 +255 +0 +767 +511 +511 +0 +255 +0 +0 +0 +767 +0 +767 +255 +511 +255 +511 +255 +255 +0 +0 +0 +767 +767 +767 +767 +767 +255 +255 +255 +255 +767 +767 +767 +255 +255 +767 +511 +0 +767 +511 +767 +255 +767 +767 +255 +255 +511 +767 +0 +255 +511 +511 +0 +767 +511 +511 +511 +0 +511 +255 +0 +767 +255 +511 +767 +0 +767 +767 +0 +511 +767 +511 +255 +255 +0 +767 +511 +511 +255 +767 +0 +0 +0 +511 +511 +0 +0 +0 +511 +767 +255 +0 +255 +767 +0 +511 +255 +255 +511 +511 +511 +255 +255 +767 +0 +0 +0 +511 +767 +255 +767 +511 +511 +767 +767 +0 +511 +255 +511 +767 +767 +0 +767 +255 +0 +0 \ No newline at end of file diff --git a/voltage_file/命名规范:Vse_psi_水平角度_theta_垂直角度_opa_opa标号.txt b/voltage_file/命名规范:Vse_psi_水平角度_theta_垂直角度_opa_opa标号.txt new file mode 100755 index 0000000..e69de29