Browse Source

update

master
zhaohe 1 year ago
parent
commit
ea5e2ba1e9
  1. 2
      CMakeLists.txt
  2. 148
      libzqt/zui/z_reg_table_list_box.cpp
  3. 46
      libzqt/zui/z_reg_table_list_box.hpp
  4. 72
      libzqt/zui/zqui.cpp
  5. 73
      libzqt/zui/zqui.hpp
  6. 3
      libzqt/zui/zui.hpp
  7. 77
      mainwindow.cpp
  8. 11
      mainwindow.h

2
CMakeLists.txt

@ -39,8 +39,8 @@ set(PROJECT_SOURCES
libzqt/zui/z_function_list_box.cpp
libzqt/zui/zq_vtab_page.cpp
libzqt/zui/z_reg_table_list_box.cpp
libzqt/zui/zqui.cpp
)

148
libzqt/zui/z_reg_table_list_box.cpp

@ -1,11 +1,29 @@
#include "z_reg_table_list_box.hpp"
#include "logger.hpp"
#include "zqui.hpp"
using namespace iflytop;
using namespace std;
#define TAG "ZRegTableListBox"
static const char *fmt(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
static char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
return buf;
}
/***********************************************************************************************************************
* ZRegItem *
***********************************************************************************************************************/
ZRegItem::ZRegItem(QWidget *parent, QString &title, int addr, ZRegItem::reg_flag_t flag) : QFrame(parent) {
ZRegItem::ZRegItem(QWidget *parent, QString &title, int addr, uint32_t flag) : QFrame(parent) {
m_flag = flag;
m_addr = addr;
m_layout = new QHBoxLayout(parent);
this->setLayout(m_layout);
m_layout->setMargin(0);
@ -14,6 +32,7 @@ ZRegItem::ZRegItem(QWidget *parent, QString &title, int addr, ZRegItem::reg_flag
m_horizontalSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
m_lable = new QLabel(title, this);
m_val = new QLineEdit(this);
m_InfoVal = new QLineEdit(this);
m_writeButton = new QPushButton("", this);
m_readButton = new QPushButton("", this);
@ -21,19 +40,27 @@ ZRegItem::ZRegItem(QWidget *parent, QString &title, int addr, ZRegItem::reg_flag
m_lable->setMinimumSize(50, 30);
m_val->setMinimumSize(100, 30);
m_InfoVal->setMinimumSize(30, 30);
m_InfoVal->setMaximumSize(30, 30);
m_writeButton->setMinimumSize(100, 30);
m_readButton->setMinimumSize(100, 30);
m_layout->addWidget(m_lable);
m_layout->addWidget(m_val);
m_layout->addWidget(m_InfoVal);
m_layout->addItem(m_horizontalSpacer);
m_layout->addWidget(m_readButton);
m_layout->addWidget(m_writeButton);
}
/***********************************************************************************************************************
* ZRegTableList *
***********************************************************************************************************************/
ZRegTableList::ZRegTableList(QWidget *parent, const QString &title) : QGroupBox(title) {
ZRegTableList::ZRegTableList(QWidget *parent, const QString &title) //
: QGroupBox(title) {
//
// fatherLayout
m_layout = new QVBoxLayout(this);
this->setLayout(m_layout);
@ -41,29 +68,128 @@ ZRegTableList::ZRegTableList(QWidget *parent, const QString &title) : QGroupBox(
// add FunctionList to
m_funcBox = new ZQFunctionListBox(this, "", 4);
m_funcBox->newFunc("读全部", {}, [this](int argn, const char **args) {
for (auto &item : m_regMap) {
}
});
// 预设方法
m_funcBox->newFunc("读全部", {}, [this](int argn, const char **args) { readAll(); });
m_layout->addWidget(m_funcBox);
// add box to parent
m_regBox = new QGroupBox("寄存器列表", this);
m_regBox = new QGroupBox("寄存器列表", this);
m_regBoxLayout = new QVBoxLayout(this);
m_regBox->setLayout(m_regBoxLayout);
m_layout->addWidget(m_regBox);
}
void ZRegTableList::regOnException(function<void(const zexception &e)> onException) {}
void ZRegTableList::addReg(QString title, int addr, ZRegItem::reg_flag_t flag) {
void ZRegTableList::addReg(QString title, int addr, uint32_t flag) {
ZRegItem *item = new ZRegItem(this, title, addr, flag);
m_regBoxLayout->addWidget(item);
// m_writeButton
connect(item->m_writeButton, &QPushButton::clicked, this, [item, this](bool check) {
int32_t writeval;
QString val = item->m_val->text();
writeval = reformatRegVal(val, item->m_flag);
try {
m_writereg_fn(item->m_addr, writeval);
ZQUI::ins()->doinui([item]() {
item->m_InfoVal->setText("OK");
item->m_InfoVal->setStyleSheet("color:green");
});
} catch (...) {
ZQUI::ins()->doinui([item]() {
item->m_InfoVal->setText("Fail");
item->m_InfoVal->setStyleSheet("color:red");
});
}
});
connect(item->m_readButton, &QPushButton::clicked, this, [item, this](bool check) {
int32_t readval;
try {
m_readreg_fn(item->m_addr, &readval);
QString displayval = formatRegVal(readval, item->m_flag);
QLineEdit *displayiterm = item->m_val;
ZQUI::ins()->doinui([item, displayval]() {
item->m_val->setText(displayval);
item->m_InfoVal->setText("OK");
item->m_InfoVal->setStyleSheet("color:green");
});
} catch (...) {
ZQUI::ins()->doinui([item]() {
item->m_InfoVal->setText("Fail");
item->m_InfoVal->setStyleSheet("color:red");
});
}
});
m_regMap[title] = item;
}
void ZRegTableList::addSpacer() {
m_layout->addItem(new QSpacerItem(20, 100, QSizePolicy::Minimum, QSizePolicy::Expanding));
m_regBoxLayout->addItem(new QSpacerItem(20, 100, QSizePolicy::Minimum, QSizePolicy::Expanding));
}
}
void ZRegTableList::readAll() {
ZQUI::ins()->instructionPreviewClear();
for (auto it = m_regMap.begin(); it != m_regMap.end(); it++) {
ZRegItem *item = it.value();
int32_t val;
try {
ZQUI::ins()->instructionPreviewShow("try read reg %s", it.key().toStdString().c_str());
m_readreg_fn(item->m_addr, &val);
QString displayval = formatRegVal(val, item->m_flag);
QLineEdit *displayiterm = item->m_val;
ZQUI::ins()->doinui([displayiterm, displayval]() { displayiterm->setText(displayval); });
} catch (std::zexception &e) {
ZQUI::ins()->doinui([item]() {item->hide();});
}
}
}
void ZRegTableList::initializeRegOperation(write_reg_func_t write_reg_fn, read_reg_func_t read_reg_fn) {
m_writereg_fn = write_reg_fn;
m_readreg_fn = read_reg_fn;
}
QString ZRegTableList::formatRegVal(int32_t val, uint32_t flag) {
QString str;
if (ZRegItem::khex & flag) {
str = QString(fmt("0x%08x", val));
} else if (ZRegItem::kdec & flag) {
str = QString::number(val, 10);
} else if (ZRegItem::kstr & flag) {
char text[5] = {0};
memcpy(text, &val, 4);
str = QString(text);
} else if (ZRegItem::kbinary & flag) {
str = QString::number(val, 2);
} else if (ZRegItem::kdotted_hex & flag) {
str = QString(fmt("%02x.%02x.%02x.%02x", (val >> 0) & 0xff, (val >> 8) & 0xff, (val >> 16) & 0xff, (val >> 24) & 0xff));
} else if (ZRegItem::kdotted_decimal & flag) {
str = QString(fmt("%d.%d.%d.%d", (val >> 0) & 0xff, (val >> 8) & 0xff, (val >> 16) & 0xff, (val >> 24) & 0xff));
}
return str;
}
int32_t ZRegTableList::reformatRegVal(QString valstr, uint32_t flag) {
int32_t val = 0;
if (ZRegItem::khex & flag) {
val = valstr.toInt(nullptr, 16);
} else if (ZRegItem::kdec & flag) {
val = valstr.toInt(nullptr, 10);
} else if (ZRegItem::kstr & flag) {
val = valstr.at(0).toLatin1() | (valstr.at(1).toLatin1() << 8) | (valstr.at(2).toLatin1() << 16) | (valstr.at(3).toLatin1() << 24);
} else if (ZRegItem::kbinary & flag) {
val = valstr.toInt(nullptr, 2);
} else if (ZRegItem::kdotted_hex & flag) {
QStringList list = valstr.split(".");
val = (list[0].toInt(nullptr, 16) << 0) | (list[1].toInt(nullptr, 16) << 8) | (list[2].toInt(nullptr, 16) << 16) | (list[3].toInt(nullptr, 16) << 24);
} else if (ZRegItem::kdotted_decimal & flag) {
QStringList list = valstr.split(".");
val = (list[0].toInt(nullptr, 10) << 0) | (list[1].toInt(nullptr, 10) << 8) | (list[2].toInt(nullptr, 10) << 16) | (list[3].toInt(nullptr, 10) << 24);
}
return val;
}

46
libzqt/zui/z_reg_table_list_box.hpp

@ -57,37 +57,45 @@ class ZRegItem : public QFrame {
Q_OBJECT
public:
typedef enum {
kr = 1 << 0,
kw = 1 << 1,
krw = kr | kw,
khex = 1 << 2,
kdec = 1 << 3,
kfloat = 1 << 4,
kstr = 1 << 5,
kbinary = 1 << 6,
kr = 1 << 0,
kw = 1 << 1,
krw = kr | kw,
khex = 1 << 2,
kdec = 1 << 3, // 10进制
kstr = 1 << 5, // 字符串
kbinary = 1 << 6, // 二进制
kdotted_hex = 1 << 7, // 点分十六进制
kdotted_decimal = 1 << 8, // 点分十进制
} reg_flag_t;
private:
public:
QHBoxLayout *m_layout = nullptr;
QLabel *m_lable;
QLineEdit *m_val;
QLineEdit *m_InfoVal;
QPushButton *m_writeButton;
QPushButton *m_readButton;
QSpacerItem *m_horizontalSpacer;
QString m_title;
int m_addr;
reg_flag_t m_flag;
QString m_title;
int m_addr;
uint32_t m_flag;
public:
ZRegItem(QWidget *parent, QString &title, int addr, ZRegItem::reg_flag_t flag);
ZRegItem(QWidget *parent, QString &title, int addr, uint32_t flag);
// void hide();
};
class ZRegTableList : public QGroupBox {
Q_OBJECT
public:
function<void(const zexception &e)> m_onException;
typedef function<void(int32_t add, int32_t val)> write_reg_func_t;
typedef function<void(int32_t add, int32_t *val)> read_reg_func_t;
write_reg_func_t m_writereg_fn;
read_reg_func_t m_readreg_fn;
private:
/**
@ -113,8 +121,14 @@ class ZRegTableList : public QGroupBox {
public:
ZRegTableList(QWidget *parent, const QString &title);
void regOnException(function<void(const zexception &e)> onException);
void addReg(QString title, int addr, ZRegItem::reg_flag_t flag);
void initializeRegOperation(write_reg_func_t write_reg_fn, read_reg_func_t read_reg_fn);
void addReg(QString title, int addr, uint32_t flag);
void addSpacer();
private:
void readAll();
QString formatRegVal(int32_t val, uint32_t flag);
int32_t reformatRegVal(QString valstr, uint32_t flag);
};
} // namespace iflytop

72
libzqt/zui/zqui.cpp

@ -0,0 +1,72 @@
#include "zqui.hpp"
using namespace std;
#define TAG "ZQUI"
/***********************************************************************************************************************
* PreviewShow *
***********************************************************************************************************************/
ZQUI *ZQUI::ins() {
static ZQUI instance;
return &instance;
}
void ZQUI::instructionPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
if (m_instructionPreviewShow) m_instructionPreviewShow(text);
}
void ZQUI::instructionPreviewClear() {
if (m_instructionPreviewClear) m_instructionPreviewClear();
}
void ZQUI::reportPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
if (m_reportPreviewShow) m_reportPreviewShow(text);
}
void ZQUI::blockDataUploadPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
if (m_blockDataUploadPreviewShow) m_blockDataUploadPreviewShow(text);
}
void ZQUI::rawDataPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
if (m_rawDataPreviewShow) m_rawDataPreviewShow(text);
}
void ZQUI::initialize() {
qRegisterMetaType<int32_t>("int32_t");
qRegisterMetaType<uint32_t>("uint32_t");
qRegisterMetaType<float>("float");
qRegisterMetaType<function<void()>>("function<void()>");
qRegisterMetaType<QFunction>("QFunction");
connect(this, SIGNAL(doinui_signal(QFunction)), this, SLOT(doinui_slot(QFunction)));
}
void ZQUI::doinui(function<void()> dowhat) {
emit doinui_signal(QFunction([dowhat]() {
if (dowhat) dowhat();
}));
}
void ZQUI::doinui_slot(QFunction func) {
if (func.get()) func.get()();
}

73
libzqt/zui/zqui.hpp

@ -0,0 +1,73 @@
#pragma once
#include <QMainWindow>
#include <QtCore/QVariant>
#include <QtWidgets/QAction>
#include <QtWidgets/QApplication>
#include <QtWidgets/QComboBox>
#include <QtWidgets/QFormLayout>
#include <QtWidgets/QGridLayout>
#include <QtWidgets/QGroupBox>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QLabel>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenu>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSpacerItem>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QTabWidget>
#include <QtWidgets/QTextBrowser>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QWidget>
//
#include <fstream>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <string>
#include <vector>
#include "../QFunction.hpp"
class ZQUI : public QObject {
Q_OBJECT
public:
typedef std::function<void(QString)> display_func_t;
std::function<void(QString)> m_instructionPreviewShow;
std::function<void(QString)> m_reportPreviewShow;
std::function<void(QString)> m_blockDataUploadPreviewShow;
std::function<void(QString)> m_rawDataPreviewShow;
std::function<void()> m_instructionPreviewClear;
public:
static ZQUI *ins();
void initialize();
void doinui(std::function<void()> dowhat);
void instructionPreviewShow(const char *fmt, ...);
void reportPreviewShow(const char *fmt, ...);
void blockDataUploadPreviewShow(const char *fmt, ...);
void rawDataPreviewShow(const char *fmt, ...);
void instructionPreviewClear();
void setInstructionPreviewShow(std::function<void(QString)> func) { m_instructionPreviewShow = func; }
void setReportPreviewShow(std::function<void(QString)> func) { m_reportPreviewShow = func; }
void setBlockDataUploadPreviewShow(std::function<void(QString)> func) { m_blockDataUploadPreviewShow = func; }
void setRawDataPreviewShow(std::function<void(QString)> func) { m_rawDataPreviewShow = func; }
void setInstructionPreviewClear(std::function<void()> func) { m_instructionPreviewClear = func; }
private slots:
void doinui_slot(QFunction);
signals:
void doinui_signal(QFunction);
};

3
libzqt/zui/zui.hpp

@ -2,4 +2,5 @@
#include "z_function_list_box.hpp"
#include "zq_vtab_page.hpp"
#include "z_reg_table_list_box.hpp"
#include "z_reg_table_list_box.hpp"
#include "zqui.hpp"

77
mainwindow.cpp

@ -52,30 +52,14 @@ void MainWindow::doinui_slot(QFunction func) {
* PreviewShow *
***********************************************************************************************************************/
void MainWindow::instructionPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
void MainWindow::instructionPreviewShow(QString text) {
QString info;
info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz "));
info.append(" |");
info.append(text);
emit doinui_signal(QFunction([this, info]() { ui->instructionPreview->append(info); }));
}
void MainWindow::instructionPreviewClear() { ui->instructionPreview->document()->clear(); }
void MainWindow::reportPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
void MainWindow::reportPreviewShow(QString text) {
QString info;
info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz "));
@ -87,14 +71,7 @@ void MainWindow::reportPreviewShow(const char *fmt, ...) {
ui->reportPreview->append(info);
}));
}
void MainWindow::blockDataUploadPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
void MainWindow::blockDataUploadPreviewShow(QString text) {
QString info;
info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz "));
@ -106,13 +83,7 @@ void MainWindow::blockDataUploadPreviewShow(const char *fmt, ...) {
ui->uploadDataPreview->append(info);
}));
}
void MainWindow::rawDataPreviewShow(const char *fmt, ...) {
va_list args;
va_start(args, fmt);
char buf[1024] = {0};
vsnprintf(buf, sizeof(buf), fmt, args);
va_end(args);
QString text(buf);
void MainWindow::rawDataPreviewShow(QString text) {
QString info;
info.append(QDateTime::currentDateTime().toString("hh:mm:ss.zzz"));
@ -124,7 +95,10 @@ void MainWindow::rawDataPreviewShow(const char *fmt, ...) {
ui->rawDataPreview->append(info);
}));
}
// uploadDataPreview
void MainWindow::instructionPreviewClear() {
doinui_signal(QFunction([this]() { ui->instructionPreview->clear(); }));
}
#pragma pack(push, 1)
typedef struct {
@ -301,6 +275,12 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
qRegisterMetaType<function<void()>>("function<void()>");
qRegisterMetaType<QFunction>("QFunction");
connect(this, SIGNAL(doinui_signal(QFunction)), this, SLOT(doinui_slot(QFunction)));
ZQUI::ins()->initialize();
ZQUI::ins()->setBlockDataUploadPreviewShow([this](QString text) { blockDataUploadPreviewShow(text); });
ZQUI::ins()->setInstructionPreviewShow([this](QString text) { instructionPreviewShow(text); });
ZQUI::ins()->setReportPreviewShow([this](QString text) { reportPreviewShow(text); });
ZQUI::ins()->setRawDataPreviewShow([this](QString text) { rawDataPreviewShow(text); });
ZQUI::ins()->setInstructionPreviewClear([this]() { instructionPreviewClear(); });
/**
* @brief
@ -317,18 +297,18 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi
IflytopCanbusMaster::ins()->regOnRawData([this](raw_data_type_t type, uint8_t *hex, uint32_t hexlen) {
if (type == kcmd_cmd) {
rawDataPreviewShow("[CMD ] %s", zhex2str(hex, hexlen).c_str());
ZQUI::ins()->rawDataPreviewShow("[CMD ] %s", zhex2str(hex, hexlen).c_str());
} else if (type == kcmd_receipt) {
rawDataPreviewShow("[RECEIPT] %s", zhex2str(hex, hexlen).c_str());
ZQUI::ins()->rawDataPreviewShow("[RECEIPT] %s", zhex2str(hex, hexlen).c_str());
} else if (type == kcmd_report) {
rawDataPreviewShow("[REPORT ] %s", zhex2str(hex, hexlen).c_str());
ZQUI::ins()->rawDataPreviewShow("[REPORT ] %s", zhex2str(hex, hexlen).c_str());
}
});
}
MainWindow::~MainWindow() { delete ui; }
void MainWindow::processException(const zexception &e) { //
instructionPreviewShow("%s", e.what());
ZQUI::ins()->instructionPreviewShow("%s", e.what());
}
void MainWindow::constructAppUI() {
@ -341,7 +321,7 @@ void MainWindow::constructAppUI() {
for (size_t i = 1; i < 255; i++) {
try {
IflytopCanbusMaster::ins()->ping(i);
instructionPreviewShow("module :%d isOnline", i);
ZQUI::ins()->instructionPreviewShow("module :%d isOnline", i);
} catch (const zexception &e) {
if (e.ecode() != ke_overtime) {
processException(e);
@ -349,7 +329,7 @@ void MainWindow::constructAppUI() {
}
}
}
instructionPreviewShow("ScanModuleEnd");
ZQUI::ins()->instructionPreviewShow("ScanModuleEnd");
});
tab->addSpacer();
}
@ -358,9 +338,20 @@ void MainWindow::constructAppUI() {
ZQVTabPage *tab = new ZQVTabPage(ui->buttonTabWidget, "寄存器操作");
ZRegTableList *tableBox = new ZRegTableList(tab, "寄存器操作");
tableBox->addReg("123", 1, ZRegItem::krw);
tableBox->addReg("234", 1, ZRegItem::krw);
tableBox->addReg("345", 1, ZRegItem::krw);
tableBox->initializeRegOperation(
[this](int32_t add, int32_t val) { //
return true;
},
[this](int32_t add, int32_t *val) { //
*val = add;
return true;
});
// tableBox->add
tableBox->addReg("123", 1, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("234", 2, ZRegItem::krw | ZRegItem::kdec);
tableBox->addReg("345", 3, ZRegItem::krw | ZRegItem::kdec);
tableBox->addSpacer();
tab->addSpacer();

11
mainwindow.h

@ -90,11 +90,12 @@ class MainWindow : public QMainWindow {
private:
static void log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg);
void instructionPreviewShow(const char *fmt, ...);
void instructionPreviewClear();
void reportPreviewShow(const char *fmt, ...);
void blockDataUploadPreviewShow(const char *fmt, ...);
void rawDataPreviewShow(const char *fmt, ...);
void instructionPreviewClear();
void instructionPreviewShow(QString info);
void reportPreviewShow(QString info);
void blockDataUploadPreviewShow(QString info);
void rawDataPreviewShow(QString info);
void displayWave(int16_t wave1, int16_t wave2, int16_t wave3);

Loading…
Cancel
Save