Browse Source

update

master
zhaohe 1 year ago
parent
commit
09cba8968c
  1. 108
      src/app/syncbox16ch/syncbox16ch.cpp
  2. 14
      src/app/syncbox16ch/syncbox16ch_sdk.cpp
  3. 31
      src/app/syncbox16ch/syncbox16ch_sdk.hpp
  4. 83
      src/protocol/zfpga_commander/zafprotocol_formater.hpp
  5. 8
      src/protocol/zfpga_commander/zfpga_commander.cpp
  6. 9
      src/protocol/zfpga_commander/zfpga_commander.hpp
  7. 7
      src/zqui/zqui/mainwindow.cpp
  8. 8
      src/zqui/zqui/mainwindow.h
  9. 13
      src/zqui/zqui/zqui.cpp

108
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());
}
}

14
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);
}

31
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:
};

83
src/protocol/zfpga_commander/zafprotocol_formater.hpp

@ -0,0 +1,83 @@
#pragma once
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#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

8
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<Receipt> 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 &regbackvalue, int32_t overtime_ms) {
lock_guard<recursive_mutex> lock(m_tx_lock);
@ -224,6 +230,8 @@ void ZFPGACommander::writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &regb
_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;
}

9
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 &regbackvalue, int32_t overtime_ms);
void readReg(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms);
void writeReg(uint32_t regadd, uint32_t regvalue);
void writeReg(uint32_t regadd, uint32_t regvalue, uint32_t &regbackvalue, int32_t overtime_ms);
void readReg(uint32_t regadd, uint32_t &regvalue, int32_t overtime_ms);
shared_ptr<Receipt> sendPacket(zaf_packet_header_t *packet, uint32_t len, uint32_t overtime);
public:

7
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(); });

8
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);

13
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>("int32_t");

Loading…
Cancel
Save