|
|
@ -16,6 +16,7 @@ using namespace std; |
|
|
|
|
|
|
|
static MainWindow *m_mainWindow; |
|
|
|
static CLSTControler *m_clstc; |
|
|
|
QTimer *timer; |
|
|
|
#define TAG "MainWindow"
|
|
|
|
|
|
|
|
static const char *fmt(const char *fmt, ...) { |
|
|
@ -58,13 +59,13 @@ static const QString zaferror_to_str(zaf_error_code_t value) { |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
#define DO(action) \
|
|
|
|
{ \ |
|
|
|
zaf_error_code_t ecode = action; \ |
|
|
|
if (ecode != kaf_ec_success) { \ |
|
|
|
ui->informationBrowser->setText(zaferror_to_str(ecode)); \ |
|
|
|
return; \ |
|
|
|
} \ |
|
|
|
#define DO(action) \
|
|
|
|
{ \ |
|
|
|
zaf_error_code_t ecode = action; \ |
|
|
|
if (ecode != kaf_ec_success) { \ |
|
|
|
dumpLog("do %s fail,%s", #action, zaferror_to_str(ecode).toStdString().c_str()); \ |
|
|
|
return; \ |
|
|
|
} \ |
|
|
|
} |
|
|
|
|
|
|
|
void MainWindow::log_output(QtMsgType type, const QMessageLogContext &context, const QString &msg) { |
|
|
@ -90,6 +91,67 @@ void MainWindow::updatePage() { |
|
|
|
DO(m_clstc->InterClk_setPluseCnt(PluseCnt)); |
|
|
|
DO(m_clstc->InterClk_setSeqCtrlPluseCntMax(SeqCtrlPluseCntMax)); |
|
|
|
} |
|
|
|
|
|
|
|
{ |
|
|
|
ExtTriggerSrcType src; |
|
|
|
SigProcessMode mode; |
|
|
|
TriggerEdge edge; |
|
|
|
uint32_t coefficient; |
|
|
|
uint32_t bias; |
|
|
|
uint32_t division; |
|
|
|
uint32_t multiplication; |
|
|
|
|
|
|
|
#define UPDATE(index) \
|
|
|
|
src = ExtTriggerSrcType(ui->TriInX_SrcSelect_Val_##index->currentText().toStdString()); \ |
|
|
|
coefficient = ui->TriInX_FileterCoefficient_Val_##index->text().toUInt(); \ |
|
|
|
bias = ui->TriInX_FreqDetectBias_Val_##index->text().toUInt(); \ |
|
|
|
mode = SigProcessMode(ui->TriInX_Mode_Val_##index->currentText().toStdString()); \ |
|
|
|
edge = TriggerEdge(ui->TriInX_TriggerModeTriggerEdge_Val_##index->currentText().toStdString()); \ |
|
|
|
division = ui->TriInX_TriggerModeFreqDivision_Val_##index->text().toUInt(); \ |
|
|
|
multiplication = ui->TriInX_TriggerModeFreqMultiplication_Val_##index->text().toUInt(); \ |
|
|
|
DO(m_clstc->TriInX_setSrcSelect(index, src)); \ |
|
|
|
DO(m_clstc->TriInX_setFileterCoefficient(index, coefficient)); \ |
|
|
|
DO(m_clstc->TriInX_setFreqDetectBias(index, bias)); \ |
|
|
|
DO(m_clstc->TriInX_setMode(index, mode)); \ |
|
|
|
DO(m_clstc->TriInX_setTriggerModeTriggerEdge(index, edge)); \ |
|
|
|
DO(m_clstc->TriInX_setTriggerModeFreqDivision(index, division)); \ |
|
|
|
DO(m_clstc->TriInX_setTriggerModeFreqMultiplication(index, multiplication)); |
|
|
|
|
|
|
|
UPDATE(1); |
|
|
|
UPDATE(2); |
|
|
|
UPDATE(3); |
|
|
|
UPDATE(4); |
|
|
|
#undef UPDATE
|
|
|
|
} |
|
|
|
} |
|
|
|
void MainWindow::refreshReadonlyPage() { |
|
|
|
zaf_error_code_t ecode; |
|
|
|
|
|
|
|
{ |
|
|
|
float TriOutSignalFreq; |
|
|
|
ecode = m_clstc->InterClk_readTriOutSignalFreq(TriOutSignalFreq); |
|
|
|
if (ecode != kaf_ec_success) return; |
|
|
|
|
|
|
|
ui->InterClk_TriOutSignalFreq_Text->setText(QString::number(TriOutSignalFreq, 'f', 2)); |
|
|
|
} |
|
|
|
|
|
|
|
{ |
|
|
|
float infreq; |
|
|
|
float outfreq; |
|
|
|
|
|
|
|
#define UPDATE(index) \
|
|
|
|
DO(m_clstc->TriInX_readInSignalFreq(index, infreq)); \ |
|
|
|
DO(m_clstc->TriInX_readOutSignalFreq(index, outfreq)); \ |
|
|
|
ui->TriInX_OutSignalFreq_Val_##index->setText(QString::number(outfreq, 'f', 2)); \ |
|
|
|
ui->TriInX_InSignalFreq_Val_##index->setText(QString::number(infreq, 'f', 2)); |
|
|
|
|
|
|
|
UPDATE(1); |
|
|
|
UPDATE(2); |
|
|
|
UPDATE(3); |
|
|
|
UPDATE(4); |
|
|
|
|
|
|
|
#undef UPDATE
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void MainWindow::refreshPage() { |
|
|
@ -109,6 +171,45 @@ void MainWindow::refreshPage() { |
|
|
|
ui->InterClk_SeqCtrlPluseCntMax_Text->setText(QString::number(SeqCtrlPluseCntMax)); |
|
|
|
ui->InterClk_TriOutSignalFreq_Text->setText(QString::number(TriOutSignalFreq, 'f', 2)); |
|
|
|
} |
|
|
|
|
|
|
|
{ |
|
|
|
ExtTriggerSrcType src; |
|
|
|
SigProcessMode mode; |
|
|
|
TriggerEdge edge; |
|
|
|
uint32_t coefficient; |
|
|
|
uint32_t bias; |
|
|
|
uint32_t division; |
|
|
|
uint32_t multiplication; |
|
|
|
float infreq; |
|
|
|
float outfreq; |
|
|
|
|
|
|
|
#define UPDATE(index) \
|
|
|
|
DO(m_clstc->TriInX_getSrcSelect(index, src)); \ |
|
|
|
DO(m_clstc->TriInX_getFileterCoefficient(index, coefficient)); \ |
|
|
|
DO(m_clstc->TriInX_getFreqDetectBias(index, bias)); \ |
|
|
|
DO(m_clstc->TriInX_getMode(index, mode)); \ |
|
|
|
DO(m_clstc->TriInX_getTriggerModeTriggerEdge(index, edge)); \ |
|
|
|
DO(m_clstc->TriInX_getTriggerModeFreqDivision(index, division)); \ |
|
|
|
DO(m_clstc->TriInX_getTriggerModeFreqMultiplication(index, multiplication)); \ |
|
|
|
DO(m_clstc->TriInX_readInSignalFreq(index, infreq)); \ |
|
|
|
DO(m_clstc->TriInX_readOutSignalFreq(index, outfreq)); \ |
|
|
|
ui->TriInX_SrcSelect_Val_##index->setCurrentText(QString::fromStdString(src.toString())); \ |
|
|
|
ui->TriInX_FileterCoefficient_Val_##index->setText(QString::number(coefficient)); \ |
|
|
|
ui->TriInX_FreqDetectBias_Val_##index->setText(QString::number(bias)); \ |
|
|
|
ui->TriInX_Mode_Val_##index->setCurrentText(QString::fromStdString(mode.toString())); \ |
|
|
|
ui->TriInX_OutSignalFreq_Val_##index->setText(QString::number(outfreq, 'f', 2)); \ |
|
|
|
ui->TriInX_InSignalFreq_Val_##index->setText(QString::number(infreq, 'f', 2)); \ |
|
|
|
ui->TriInX_TriggerModeFreqDivision_Val_##index->setText(QString::number(division)); \ |
|
|
|
ui->TriInX_TriggerModeFreqMultiplication_Val_##index->setText(QString::number(multiplication)); \ |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_##index->setCurrentText(QString::fromStdString(edge.toString())); |
|
|
|
|
|
|
|
UPDATE(1); |
|
|
|
UPDATE(2); |
|
|
|
UPDATE(3); |
|
|
|
UPDATE(4); |
|
|
|
|
|
|
|
#undef UPDATE
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void MainWindow::constructUI() { |
|
|
@ -178,11 +279,13 @@ void MainWindow::constructUI() { |
|
|
|
*******************************************************************************/ |
|
|
|
connect(ui->refreshPageKey, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
|
refreshPage(); |
|
|
|
dumpLog("刷新成功"); |
|
|
|
}); |
|
|
|
|
|
|
|
connect(ui->UpdateCfg_Key, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
|
updatePage(); |
|
|
|
refreshPage(); |
|
|
|
dumpLog("提交成功"); |
|
|
|
}); |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
@ -190,7 +293,7 @@ void MainWindow::constructUI() { |
|
|
|
*******************************************************************************/ |
|
|
|
connect(ui->storageConfigKey, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
|
DO(m_clstc->storageConfigs()); |
|
|
|
ui->informationBrowser->setText("保存配置成功"); |
|
|
|
dumpLog("保存配置成功"); |
|
|
|
}); |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
@ -198,7 +301,7 @@ void MainWindow::constructUI() { |
|
|
|
*******************************************************************************/ |
|
|
|
connect(ui->rebootDeviceKey, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
|
DO(m_clstc->reboot()); |
|
|
|
ui->informationBrowser->setText("重启设备成功"); |
|
|
|
dumpLog("重启设备成功"); |
|
|
|
}); |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
@ -206,7 +309,7 @@ void MainWindow::constructUI() { |
|
|
|
*******************************************************************************/ |
|
|
|
connect(ui->factoryResetKey, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
|
DO(m_clstc->factoryReset()); |
|
|
|
ui->informationBrowser->setText("恢复出厂设置成功"); |
|
|
|
dumpLog("恢复出厂设置成功"); |
|
|
|
}); |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
@ -219,7 +322,7 @@ void MainWindow::constructUI() { |
|
|
|
uint32_t value = 0; |
|
|
|
DO(m_clstc->reg_read(addr, value, 100)); |
|
|
|
ui->regReadbakVal->setText(fmt("0x%08X", value)); |
|
|
|
ui->informationBrowser->setText(fmt("读取0x%04x成功", addr)); |
|
|
|
dumpLog(fmt("读取0x%04x成功", addr)); |
|
|
|
}); |
|
|
|
|
|
|
|
connect(ui->regWriteKey, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
@ -228,18 +331,49 @@ void MainWindow::constructUI() { |
|
|
|
uint32_t readkbak = 0; |
|
|
|
DO(m_clstc->reg_write(addr, value, readkbak, 100)); |
|
|
|
ui->regReadbakVal->setText(fmt("0x%04x", readkbak)); |
|
|
|
ui->informationBrowser->setText(fmt("写入0x%08x成功", addr)); |
|
|
|
dumpLog(fmt("写入0x%08x成功", addr)); |
|
|
|
}); |
|
|
|
|
|
|
|
connect(ui->InterClk_trigger_Key, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
|
DO(m_clstc->InterClk_trigger()); |
|
|
|
ui->informationBrowser->setText(fmt("触发成功")); |
|
|
|
refreshPage(); |
|
|
|
dumpLog(fmt("触发成功")); |
|
|
|
}); |
|
|
|
connect(ui->InterClk_stop_Key, &QPushButton::clicked, this, [=](bool check) { //
|
|
|
|
DO(m_clstc->InterClk_stop()); |
|
|
|
ui->informationBrowser->setText(fmt("停止触发成功")); |
|
|
|
dumpLog(fmt("停止触发成功")); |
|
|
|
}); |
|
|
|
|
|
|
|
/*******************************************************************************
|
|
|
|
* 外部触发页面初始化 * |
|
|
|
*******************************************************************************/ |
|
|
|
|
|
|
|
ui->TriInX_SrcSelect_Val_1->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString())); |
|
|
|
ui->TriInX_SrcSelect_Val_1->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString())); |
|
|
|
ui->TriInX_Mode_Val_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString())); |
|
|
|
ui->TriInX_Mode_Val_1->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_1->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_1->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString())); |
|
|
|
|
|
|
|
ui->TriInX_SrcSelect_Val_2->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString())); |
|
|
|
ui->TriInX_SrcSelect_Val_2->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString())); |
|
|
|
ui->TriInX_Mode_Val_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString())); |
|
|
|
ui->TriInX_Mode_Val_2->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_2->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_2->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString())); |
|
|
|
|
|
|
|
ui->TriInX_SrcSelect_Val_3->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString())); |
|
|
|
ui->TriInX_SrcSelect_Val_3->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString())); |
|
|
|
ui->TriInX_Mode_Val_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString())); |
|
|
|
ui->TriInX_Mode_Val_3->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_3->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_3->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString())); |
|
|
|
|
|
|
|
ui->TriInX_SrcSelect_Val_4->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::DIFF_INPUT).toString())); |
|
|
|
ui->TriInX_SrcSelect_Val_4->addItem(QString::fromStdString(ExtTriggerSrcType(ExtTriggerSrcType::OPTOCOUPLER_INPUT).toString())); |
|
|
|
ui->TriInX_Mode_Val_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRIGGER_MODE).toString())); |
|
|
|
ui->TriInX_Mode_Val_4->addItem(QString::fromStdString(SigProcessMode(SigProcessMode::TRANSPARENT_MODE).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_4->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::RISING).toString())); |
|
|
|
ui->TriInX_TriggerModeTriggerEdge_Val_4->addItem(QString::fromStdString(TriggerEdge(TriggerEdge::FALLING).toString())); |
|
|
|
} |
|
|
|
|
|
|
|
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { |
|
|
@ -261,26 +395,56 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWi |
|
|
|
connect(this, SIGNAL(doinui_signal(QFunction)), this, SLOT(doinui_slot(QFunction))); |
|
|
|
constructUI(); |
|
|
|
|
|
|
|
m_clstc->regRawDataListener([this](uart_message_type_t type, uint8_t *data, size_t len) { |
|
|
|
QString text; |
|
|
|
if (type == kuart_raw_tx) { |
|
|
|
text.append("TX: "); |
|
|
|
for (size_t i = 0; i < len; i++) { |
|
|
|
text.append(fmt("%02X ", data[i])); |
|
|
|
} |
|
|
|
} else if (type == kuart_raw_rx) { |
|
|
|
text.append("RX: "); |
|
|
|
for (size_t i = 0; i < len; i++) { |
|
|
|
text.append(fmt("%02X ", data[i])); |
|
|
|
} |
|
|
|
// 创建定时器
|
|
|
|
timer = new QTimer(this); |
|
|
|
connect(timer, &QTimer::timeout, this, [this]() { refreshReadonlyPage(); }); |
|
|
|
timer->setInterval(1000); // 每隔一秒触发一次
|
|
|
|
timer->start(); |
|
|
|
|
|
|
|
// m_clstc->regRawDataListener([this](uart_message_type_t type, uint8_t *data, size_t len) {
|
|
|
|
// QString text;
|
|
|
|
// if (type == kuart_raw_tx) {
|
|
|
|
// text.append("TX: ");
|
|
|
|
// for (size_t i = 0; i < len; i++) {
|
|
|
|
// text.append(fmt("%02X ", data[i]));
|
|
|
|
// }
|
|
|
|
// } else if (type == kuart_raw_rx) {
|
|
|
|
// text.append("RX: ");
|
|
|
|
// for (size_t i = 0; i < len; i++) {
|
|
|
|
// text.append(fmt("%02X ", data[i]));
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// emit doinui_signal(QFunction([this, text]() {
|
|
|
|
// if (ui->instructionPreview->document()->lineCount() > 100) {
|
|
|
|
// ui->instructionPreview->document()->clear();
|
|
|
|
// }
|
|
|
|
// ui->instructionPreview->append(text);
|
|
|
|
// }));
|
|
|
|
// });
|
|
|
|
} |
|
|
|
|
|
|
|
void MainWindow::dumpLog(const char *fmt, ...) { |
|
|
|
va_list args; |
|
|
|
va_start(args, fmt); |
|
|
|
char buf[1024] = {0}; |
|
|
|
vsnprintf(buf, sizeof(buf), fmt, args); |
|
|
|
qDebug() << buf; |
|
|
|
va_end(args); |
|
|
|
QString text(buf); |
|
|
|
|
|
|
|
QString info; |
|
|
|
|
|
|
|
// zos_get_ticket
|
|
|
|
info.append(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss.zzz")); |
|
|
|
info.append(" [Info]:"); |
|
|
|
info.append(text); |
|
|
|
|
|
|
|
emit doinui_signal(QFunction([this, info]() { |
|
|
|
if (ui->instructionPreview->document()->lineCount() > 100) { |
|
|
|
ui->instructionPreview->document()->clear(); |
|
|
|
} |
|
|
|
emit doinui_signal(QFunction([this, text]() { |
|
|
|
if (ui->instructionPreview->document()->lineCount() > 20) { |
|
|
|
ui->instructionPreview->clear(); |
|
|
|
} |
|
|
|
ui->instructionPreview->append(text); |
|
|
|
})); |
|
|
|
}); |
|
|
|
ui->instructionPreview->append(info); |
|
|
|
})); |
|
|
|
} |
|
|
|
|
|
|
|
MainWindow::~MainWindow() { delete ui; } |