diff --git a/src/app/syncbox16ch/syncbox16ch.cpp b/src/app/syncbox16ch/syncbox16ch.cpp index 1f93b9a..4eaa29f 100644 --- a/src/app/syncbox16ch/syncbox16ch.cpp +++ b/src/app/syncbox16ch/syncbox16ch.cpp @@ -6,42 +6,21 @@ #include "zqui/zqui/zqui.hpp" // #include "app_version.hpp" +#include "protocol/zfpga_commander/zafprotocol_formater.hpp" using namespace iflytop; using namespace syncbox16chsdk; #define TAG "SyncBox16CH" #define SDK SyncBox16ChSDK::ins() - -SyncBox16CH::SyncBox16CH(QWidget *parent) : QWidget(parent), ui(new Ui::SyncBox16CH) { - ui->setupUi(this); - ZLOGI(TAG, "Hello"); - { - // - ui->OutputModeVal->addItems(QStringListValueOf(WorkModeStrList())); - ui->OutputPluseWidthVal->setText("1"); - ui->OutputPluseNumVal->setText("1"); - ui->OutputPluseFreqVal->setText("1000"); - } - SDK->getCmder()->regStateCbFn([this](bool connect) { onSubDeviceConnected(connect); }); - SDK->initialize(); - m_wq.startSchedule(); - - ZQUI::ins()->doinui([]() { - Version appv(APP_VERSION_MAIN, APP_VERSION_SUB, APP_VERSION_FIX); - ZQUI::ins()->mainW()->setVersionInfo(1, " APP_VER:", appv.toString().c_str()); - }); - - // ZQUI::ins()->mainW()->setVersionInfo(1, "APP_VERSION", "1.0.0"); -} void SyncBox16CH::onSubDeviceConnected(bool connected) { if (connected) { ZQUI::ins()->setDeviceConnectedStatus(true); m_wq.push([]() { Version stm32v; Version fpgav; - SDK->getCmder()->readStm32Version(stm32v); - SDK->getCmder()->readFPGAVersion(fpgav); + SDK->cmder()->readStm32Version(stm32v); + SDK->cmder()->readFPGAVersion(fpgav); ZQUI::ins()->doinui([stm32v, fpgav]() { ZQUI::ins()->mainW()->setVersionInfo(2, "STM32_VER:", stm32v.toString().c_str()); @@ -52,9 +31,43 @@ void SyncBox16CH::onSubDeviceConnected(bool connected) { ZQUI::ins()->setDeviceConnectedStatus(false); } } - SyncBox16CH::~SyncBox16CH() { delete ui; } +SyncBox16CH::SyncBox16CH(QWidget *parent) : QWidget(parent), ui(new Ui::SyncBox16CH) { + ui->setupUi(this); + m_wq.startSchedule(); + + ZLOGI(TAG, "Hello"); + { + // + ui->OutputModeVal->addItems(QStringListValueOf(WorkModeStrList())); + ui->OutputPluseWidthVal->setText("1"); + ui->OutputPluseNumVal->setText("1"); + ui->OutputPluseFreqVal->setText("1000"); + } + /*********************************************************************************************************************** + * SDK init * + ***********************************************************************************************************************/ + SDK->cmder()->regStateCbFn([this](bool connect) { onSubDeviceConnected(connect); }); + SDK->cmder()->regRawDataListener([this](uart_message_type_t type, uint8_t *data, size_t len) { + zaf_packet_header_t *packet = (zaf_packet_header_t *)data; + if (packet->cmd == kzaf_cmd_ping) { + return; + } + string packetstr = ZAfProtocolFormater().format(packet); + ZQUI::ins()->iShow(packetstr.c_str()); + }); + SDK->initialize(); + + /*********************************************************************************************************************** + * MAIN_WINDOWS * + ***********************************************************************************************************************/ + + Version appv(APP_VERSION_MAIN, APP_VERSION_SUB, APP_VERSION_FIX); + ZQUI::ins()->mainW()->setVersionInfo(1, " APP_VER:", appv.toString().c_str()); + ZQUI::ins()->mainW()->setSerialDefaultBaudrate("500000"); +} + void SyncBox16CH::on_OutputModeVal_currentIndexChanged(const QString &arg1) { onModeChange(); } void SyncBox16CH::on_OutputPluseTypeVal_currentIndexChanged(const QString &arg1) { onModeChange(); } void SyncBox16CH::onModeChange() { @@ -88,28 +101,41 @@ void SyncBox16CH::onModeChange() { // 脉冲频率 ui->OutputPluseFreqTag->show(); ui->OutputPluseFreqVal->show(); - } else if (outputMode == kWorkMode_extTriMode) { - // 脉冲数量 - ui->OutputPluseNumVal->show(); - ui->OutputPluseNumTag->show(); - // 脉冲宽度 - ui->OutputPluseWidthVal->show(); - ui->OutputPluseWidthTag->show(); - // 脉冲频率 - ui->OutputPluseFreqTag->hide(); - ui->OutputPluseFreqVal->hide(); } + // else if (outputMode == kWorkMode_extTriMode) { + // // 脉冲数量 + // ui->OutputPluseNumVal->show(); + // ui->OutputPluseNumTag->show(); + // // 脉冲宽度 + // ui->OutputPluseWidthVal->show(); + // ui->OutputPluseWidthTag->show(); + // // 脉冲频率 + // ui->OutputPluseFreqTag->hide(); + // ui->OutputPluseFreqVal->hide(); + // } } void SyncBox16CH::on_SendButton_clicked() { ICLEAR(); - WorkMode_t outputMode = syncbox16chsdk::WorkModeValueOf(ui->OutputModeVal->currentText()); - uint32_t outputPluseWidthUs = zstr2int(ui->OutputPluseWidthVal->text()); - uint32_t outputPluseNum = zstr2int(ui->OutputPluseNumVal->text()); + try { + WorkMode_t outputMode = syncbox16chsdk::WorkModeValueOf(ui->OutputModeVal->currentText()); + uint32_t outputPluseWidthUs = zstr2int(ui->OutputPluseWidthVal->text()); + uint32_t outputPluseNum = zstr2int(ui->OutputPluseNumVal->text()); + uint32_t outputPluseFreq = zstr2int(ui->OutputPluseFreqVal->text()); + + // void SyncBox16ChSDK::setPlusePeriod(uint32_t us) { cmder()->writeReg(kreg_app_trigger_mode_pluse_period, US2CNT(us)); } + // void SyncBox16ChSDK::manualTrigger() { - if (outputMode == kWorkMode_extTriMode && outputPluseNum == 0) { - ISHOW_ERROR("外部触发模式下,脉冲数量不能为0"); - return; + ISHOW("setPluseGeneratorMode:%d", outputMode); + SDK->setPluseGeneratorMode(outputMode); + if (outputMode == kWorkMode_manualTriMode) { + SDK->setPluseNum(outputPluseNum); + SDK->setPluseWidth(outputPluseWidthUs); + SDK->setPlusePeriod(1.0 / outputPluseFreq * 1000 * 1000); + SDK->manualTrigger(); + } + } catch (const std::exception &e) { + ISHOW_ERROR("Error:%s", e.what()); } } diff --git a/src/app/syncbox16ch/syncbox16ch_sdk.cpp b/src/app/syncbox16ch/syncbox16ch_sdk.cpp index 026b861..b5ba66f 100644 --- a/src/app/syncbox16ch/syncbox16ch_sdk.cpp +++ b/src/app/syncbox16ch/syncbox16ch_sdk.cpp @@ -11,8 +11,8 @@ namespace syncbox16chsdk { enummap_iterm_t output_mode_enummap[] = { {kWorkMode_extCpyMode, "信号拷贝模式"}, - {kWorkMode_extTriMode, "外部触发模式"}, {kWorkMode_manualTriMode, "手动触发模式"}, + // {kWorkMode_extTriMode, "外部触发模式"}, {-1, "null", true}, }; @@ -30,3 +30,15 @@ WorkMode_t WorkModeValueOf(QString str) { return WorkModeValueOf(str.toStdStri using namespace iflytop; using namespace syncbox16chsdk; void SyncBox16ChSDK::initialize() { ZFPGACommander::ins()->initialize(); } + +#define US2CNT(us) (us * 100) +#define CNT2US(cnt) (cnt * 10 / 1000.0) + +void SyncBox16ChSDK::setPluseWidth(uint32_t us) { cmder()->writeReg(kreg_app_trigger_mode_pluse_width, US2CNT(us)); } +void SyncBox16ChSDK::setPlusePeriod(uint32_t us) { cmder()->writeReg(kreg_app_trigger_mode_pluse_period, US2CNT(us)); } +void SyncBox16ChSDK::setPluseNum(uint32_t npluse) { cmder()->writeReg(kreg_app_trigger_mode_pluse_num, npluse); } +void SyncBox16ChSDK::setPluseGeneratorMode(WorkMode_t mode) { cmder()->writeReg(kreg_app_mode, (uint32_t)mode); } +void SyncBox16ChSDK::manualTrigger() { + cmder()->writeReg(kreg_app_manual_trigger_sig, (uint32_t)1); + cmder()->writeReg(kreg_app_manual_trigger_sig, (uint32_t)0); +} \ No newline at end of file diff --git a/src/app/syncbox16ch/syncbox16ch_sdk.hpp b/src/app/syncbox16ch/syncbox16ch_sdk.hpp index 9657393..f577a17 100644 --- a/src/app/syncbox16ch/syncbox16ch_sdk.hpp +++ b/src/app/syncbox16ch/syncbox16ch_sdk.hpp @@ -36,15 +36,25 @@ using namespace std; typedef enum { kWorkMode_extCpyMode, - kWorkMode_extTriMode, kWorkMode_manualTriMode, + // kWorkMode_extTriMode, } WorkMode_t; typedef enum { - kreg_app = REGADDOFF__FPGA_APP, - kreg_workmode = REGADDOFF__FPGA_APP + 1, - kreg_pluse_gen_num = REGADDOFF__FPGA_APP + 2, - kreg_pluse_pluse_width = REGADDOFF__FPGA_APP + 3, + kreg_app = REGADDOFF__FPGA_APP, + + // kreg_app_src_slect = REGADDOFF__FPGA_APP + 0x1, + // kreg_app_fileter_coefficient = REGADDOFF__FPGA_APP + 0x2, + // kreg_app_freq_detect_bias = REGADDOFF__FPGA_APP + 0x3, + kreg_app_mode = REGADDOFF__FPGA_APP + 0x4, + // kreg_app_trigger_mode_trigger_edge = REGADDOFF__FPGA_APP + 0x5, + kreg_app_trigger_mode_pluse_num = REGADDOFF__FPGA_APP + 0x6, + kreg_app_trigger_mode_pluse_width = REGADDOFF__FPGA_APP + 0x7, + kreg_app_trigger_mode_pluse_period = REGADDOFF__FPGA_APP + 0x8, + // kreg_app_in_signal_freq = REGADDOFF__FPGA_APP + 0xD, + // kreg_app_out_signal_freq = REGADDOFF__FPGA_APP + 0xE, + kreg_app_manual_trigger_sig = REGADDOFF__FPGA_APP + 0xF, + } reg_t; const char* WorkModeToStr(uint32_t mode); @@ -64,11 +74,14 @@ class SyncBox16ChSDK { public: void initialize(); - void setPluseWidth(uint32_t widthus); - void setPluseFreq(uint32_t freq); - void setPluseGeneratorMode(); + void setPluseWidth(uint32_t us); + void setPlusePeriod(uint32_t us); + void setPluseNum(uint32_t npluse); + void setPluseGeneratorMode(WorkMode_t mode); + void manualTrigger(); + - ZFPGACommander* getCmder() { return ZFPGACommander::ins(); } + ZFPGACommander* cmder() { return ZFPGACommander::ins(); } public: }; diff --git a/src/protocol/zfpga_commander/zafprotocol_formater.hpp b/src/protocol/zfpga_commander/zafprotocol_formater.hpp new file mode 100644 index 0000000..c8df74b --- /dev/null +++ b/src/protocol/zfpga_commander/zafprotocol_formater.hpp @@ -0,0 +1,83 @@ +#pragma once +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "zfpga_basic_protocol/zaf_protocol.h" +namespace iflytop { +using namespace std; +class ZAfProtocolFormater { + const char* cmd2str(int val) { + switch (val) { + case kzaf_cmd_none: + return "cmd_none"; + case kzaf_cmd_reg_read: + return "readReg"; + case kzaf_cmd_reg_write: + return "writeReg"; + case kzaf_cmd_reg_read_regs: + return "readRegs"; + case kzaf_cmd_generator_new_mac: + return "genMac"; + case kzaf_cmd_factory_reset: + return "factoryReset"; + case kzaf_cmd_reboot: + return "reboot"; + case kzaf_cmd_storage_cfg: + return "storageCfg"; + case kzaf_cmd_ping: + return "ping"; + default: + return "unknown"; + } + } + + const char* ptype2str(int val) { + switch (val) { + case kzaf_packet_type_cmd: + return "CMD "; + case kzaf_packet_type_receipt: + return "RECEIPT"; + case kzaf_packet_type_report: + return "REPORT "; + case kzaf_packet_type_heart: + return "HEART "; + default: + return "UNKNOWN"; + } + } + + public: + string format(zaf_packet_header_t* packet) { + string cmdstr = cmd2str(packet->cmd); + char buf[512] = {0}; + sprintf(buf, "[%s]:[%d], %s ", ptype2str(packet->packet_type), packet->index, cmdstr.c_str()); + string ret = buf; + if (packet->cmd == kzaf_cmd_reg_read) { + if (packet->packet_type == kzaf_packet_type_cmd) { + sprintf(buf, "reg:0x%04X", packet->data[0]); + ret += buf; + } else { + sprintf(buf, "ecode:%d val:0x%08X", packet->data[0], packet->data[1]); + ret += buf; + } + } else if (packet->cmd == kzaf_cmd_reg_write) { + if (packet->packet_type == kzaf_packet_type_cmd) { + sprintf(buf, "reg:0x%04X val:0x%08X", packet->data[0], packet->data[1]); + ret += buf; + } else { + sprintf(buf, "ecode:%d readbak:0x%08X", packet->data[0], packet->data[1]); + ret += buf; + } + } + return ret; + } +}; +} // namespace iflytop diff --git a/src/protocol/zfpga_commander/zfpga_commander.cpp b/src/protocol/zfpga_commander/zfpga_commander.cpp index 5101506..68a86d4 100644 --- a/src/protocol/zfpga_commander/zfpga_commander.cpp +++ b/src/protocol/zfpga_commander/zfpga_commander.cpp @@ -93,6 +93,7 @@ void ZFPGACommander::initialize() { ZLOGI(TAG, "device connected."); } else { ZLOGI(TAG, "device disconnected."); + RegInfo_Reset(); } isconnected = tostate; if (m_stateCbFn) m_stateCbFn(isconnected); @@ -215,6 +216,11 @@ shared_ptr ZFPGACommander::sendPacket(zaf_packet_header_t *packet, uint throw zexception(ke_overtime, "overtime"); } +void ZFPGACommander::writeReg(uint32_t regadd, uint32_t regvalue) { + uint32_t regbackvalue; + writeReg(regadd, regvalue, regbackvalue, 50); +} + void ZFPGACommander::writeReg(uint32_t regadd, uint32_t regvalue, uint32_t ®backvalue, int32_t overtime_ms) { lock_guard lock(m_tx_lock); @@ -224,6 +230,8 @@ void ZFPGACommander::writeReg(uint32_t regadd, uint32_t regvalue, uint32_t ®b _writeReg(regadd, regvalue, regbackvalue, overtime_ms); } else if (reg->dirty) { _writeReg(regadd, regvalue, regbackvalue, overtime_ms); + } else if (reg->regshadow != regvalue) { + _writeReg(regadd, regvalue, regbackvalue, overtime_ms); } else { regbackvalue = reg->regshadow; } diff --git a/src/protocol/zfpga_commander/zfpga_commander.hpp b/src/protocol/zfpga_commander/zfpga_commander.hpp index e631aa7..048da90 100644 --- a/src/protocol/zfpga_commander/zfpga_commander.hpp +++ b/src/protocol/zfpga_commander/zfpga_commander.hpp @@ -78,15 +78,12 @@ class Version { public: Version() {} Version(uint32_t main, uint32_t sub, uint32_t fix) : main(main), sub(sub), fix(fix) {} - string toString() const { stringstream ss; ss << main << "." << sub << "." << fix; return ss.str(); } - - }; class ZFPGACommander { @@ -123,8 +120,10 @@ class ZFPGACommander { bool chIsOn(); public: - void writeReg(uint32_t regadd, uint32_t regvalue, uint32_t ®backvalue, int32_t overtime_ms); - void readReg(uint32_t regadd, uint32_t ®value, int32_t overtime_ms); + void writeReg(uint32_t regadd, uint32_t regvalue); + void writeReg(uint32_t regadd, uint32_t regvalue, uint32_t ®backvalue, int32_t overtime_ms); + void readReg(uint32_t regadd, uint32_t ®value, int32_t overtime_ms); + shared_ptr sendPacket(zaf_packet_header_t *packet, uint32_t len, uint32_t overtime); public: diff --git a/src/zqui/zqui/mainwindow.cpp b/src/zqui/zqui/mainwindow.cpp index 7fa5415..82eef8a 100644 --- a/src/zqui/zqui/mainwindow.cpp +++ b/src/zqui/zqui/mainwindow.cpp @@ -26,6 +26,8 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi ui->version_pos3->hide(); } +void MainWindow::setSerialDefaultBaudrate(QString rate) { ui->serialBaudrateCB->setCurrentText(rate); } + void MainWindow::buildUI() { QTSerialChannel *serialch = &ChannelMgr::ins()->serialCh; serialch->init(); @@ -35,10 +37,15 @@ void MainWindow::buildUI() { */ { fillinSerialPort(); } + ui->serialBaudrateCB->addItem("9600"); ui->serialBaudrateCB->addItem("115200"); + ui->serialBaudrateCB->addItem("256000"); + ui->serialBaudrateCB->addItem("460800"); ui->serialBaudrateCB->addItem("500000"); + ui->serialBaudrateCB->addItem("1000000"); ui->serialBaudrateCB->addItem("2000000"); ui->serialBaudrateCB->setCurrentIndex(0); + ui->serialRefreshKey->hide(); connect(ui->serialRefreshKey, &QPushButton::clicked, this, [=](bool check) { fillinSerialPort(); }); diff --git a/src/zqui/zqui/mainwindow.h b/src/zqui/zqui/mainwindow.h index 2a76915..8b563ea 100644 --- a/src/zqui/zqui/mainwindow.h +++ b/src/zqui/zqui/mainwindow.h @@ -36,6 +36,10 @@ class MainWindow; } QT_END_NAMESPACE +enum { + +} MainWindowsSerialBaundrateIndex_t; + class MainWindow : public QMainWindow { Q_OBJECT @@ -44,7 +48,6 @@ class MainWindow : public QMainWindow { QString icontent; - MainWindow(QWidget *parent = nullptr); ~MainWindow() {}; @@ -59,7 +62,8 @@ class MainWindow : public QMainWindow { void binaryClear(); void setConnectedStatus(bool connect); - void setVersionInfo(int pos,QString versionName, QString version); + void setVersionInfo(int pos, QString versionName, QString version); + void setSerialDefaultBaudrate(QString rate); private slots: void on_serialPortCB_customContextMenuRequested(const QPoint &pos); diff --git a/src/zqui/zqui/zqui.cpp b/src/zqui/zqui/zqui.cpp index 1475e96..9119817 100644 --- a/src/zqui/zqui/zqui.cpp +++ b/src/zqui/zqui/zqui.cpp @@ -35,10 +35,11 @@ void ZQUI::iRawShow(const char *fmt, ...) { vsnprintf(buf, sizeof(buf), fmt, args); va_end(args); QString text(buf); - pmainW->iShow(text); doinui([this, text]() { pmainW->iShow(text); }); } -void ZQUI::iClear() { pmainW->iClear(); } +void ZQUI::iClear() { + doinui([this]() { pmainW->iClear(); }); +} void ZQUI::reportShow(const char *fmt, ...) { va_list args; @@ -49,7 +50,9 @@ void ZQUI::reportShow(const char *fmt, ...) { QString text(buf); doinui([this, text]() { pmainW->reportShow(text); }); } -void ZQUI::reportClear() { pmainW->reportClear(); } +void ZQUI::reportClear() { + doinui([this]() { pmainW->reportClear(); }); +} void ZQUI::binaryShow(const char *fmt, ...) { va_list args; @@ -60,7 +63,9 @@ void ZQUI::binaryShow(const char *fmt, ...) { QString text(buf); doinui([this, text]() { pmainW->binaryShow(text); }); } -void ZQUI::binaryClear() { pmainW->binaryClear(); } +void ZQUI::binaryClear() { + doinui([this]() { pmainW->binaryClear(); }); +} void ZQUI::initialize() { qRegisterMetaType("int32_t");