From e356f942759f5f7a2754e0a723aae9c4590e8b06 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Sat, 6 Jul 2024 19:30:23 +0800 Subject: [PATCH] update --- a8000_protocol | 2 +- src/mainwindow.cpp | 24 +++++++------- src/tab/a8k_opt_tab.cpp | 88 +++++++++++++++++++++++++++++++++++++++---------- 3 files changed, 84 insertions(+), 30 deletions(-) diff --git a/a8000_protocol b/a8000_protocol index e1bab29..6d52b54 160000 --- a/a8000_protocol +++ b/a8000_protocol @@ -1 +1 @@ -Subproject commit e1bab29823705e2518e61de9e2dc3d8535a5eaa6 +Subproject commit 6d52b54e3c528a0be076d120d033ecfeb1051ee0 diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1cedfe2..268dad0 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -191,17 +191,17 @@ void MainWindow::parse_ptv2_cmd(zcr_cmd_header_t *frame, int32_t packetlen) { int32_t paramNum = (packetlen - sizeof(zcr_cmd_header_t)) / 4; int32_t *para = (int32_t *)frame->data; if (paramNum == 0) { - ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) ", frame->packetindex, cmdid2str(cmdId), cmdId, mid); + ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) ", frame->packetindex, mid, cmdid2str(cmdId), cmdId); } else if (paramNum == 1) { - ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0]); + ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0]); } else if (paramNum == 2) { - ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d,%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0], para[1]); + ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d,%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0], para[1]); } else if (paramNum == 3) { - ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0], para[1], para[2]); + ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0], para[1], para[2]); } else if (paramNum == 4) { - ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d,%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0], para[1], para[2], para[3]); + ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d,%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0], para[1], para[2], para[3]); } else { - ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%s", frame->packetindex, cmdid2str(cmdId), cmdId, mid, zhex2str(frame->data, packetlen - sizeof(zcr_cmd_header_t)).c_str()); + ZQUI::ins()->rawshow("[CMD ] %d mid:%d cmdid:%s(0x%04x) param:%s", frame->packetindex, mid, cmdid2str(cmdId), cmdId, zhex2str(frame->data, packetlen - sizeof(zcr_cmd_header_t)).c_str()); } } } @@ -221,17 +221,17 @@ void MainWindow::parse_ptv2_ack(zcr_cmd_header_t *frame, int32_t packetlen) { int32_t paramNum = (packetlen - sizeof(zcr_cmd_header_t)) / 4; int32_t *para = (int32_t *)frame->data; if (paramNum == 0) { - ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) ", frame->packetindex, cmdid2str(cmdId), cmdId, mid); + ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) ", frame->packetindex, mid, cmdid2str(cmdId), cmdId); } else if (paramNum == 1) { - ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0]); + ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0]); } else if (paramNum == 2) { - ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d,%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0], para[1]); + ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d,%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0], para[1]); } else if (paramNum == 3) { - ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0], para[1], para[2]); + ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0], para[1], para[2]); } else if (paramNum == 4) { - ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d,%d", frame->packetindex, cmdid2str(cmdId), cmdId, mid, para[0], para[1], para[2], para[3]); + ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%d,%d,%d,%d", frame->packetindex, mid, cmdid2str(cmdId), cmdId, para[0], para[1], para[2], para[3]); } else { - ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%s", frame->packetindex, cmdid2str(cmdId), cmdId, mid, zhex2str(frame->data, packetlen - sizeof(zcr_cmd_header_t)).c_str()); + ZQUI::ins()->rawshow("[ RECEI] %d mid:%d cmdid:%s(0x%04x) param:%s", frame->packetindex, mid, cmdid2str(cmdId), cmdId, zhex2str(frame->data, packetlen - sizeof(zcr_cmd_header_t)).c_str()); } } } diff --git a/src/tab/a8k_opt_tab.cpp b/src/tab/a8k_opt_tab.cpp index 5784383..bbfd561 100644 --- a/src/tab/a8k_opt_tab.cpp +++ b/src/tab/a8k_opt_tab.cpp @@ -13,6 +13,7 @@ #include "../basic/format_memory.hpp" #include "../basic/stm32_pin.hpp" #include "./mainwindow.h" +#include "basic\widgetplot2d.h" #include "zui\zqui.hpp" // using namespace iflytop; @@ -25,6 +26,11 @@ extern int getDeviceId(); #define CAMERA_MOTOR (getDeviceId() - 2) #define PUSH_AND_PULL_MOTOR (getDeviceId() - 1) +typedef struct { + uint16_t data[1500]; + int dataNum; +} opt_result_t; + A8kOptTab *A8kOptTab::inst() { static A8kOptTab *ins = new A8kOptTab(); return ins; @@ -40,20 +46,6 @@ void A8kOptTab::construct(QTabWidget *fathertab) { ZQFunctionListBox *box = new ZQFunctionListBox(tab, "光学测试", 4); // box->newSubButton("停止", [this](int argn, const char **args) { ICM->step_motor_stop(getDeviceId(), 0); }); - box->newFunc("T光学-开始扫描", {"scanDirection", "lasterGain", "scanGain"}, [this](int argn, const char **args) { - int32_t scanDirection = atoi(args[0]); - int32_t lasterGain = atoi(args[1]); - int32_t scanGain = atoi(args[2]); - ICM->callcmd3(getDeviceId(), ka8k_opt_v2_t_start_scan, scanDirection, lasterGain, scanGain); - }); - - box->newFunc("F光学-开始扫描", {"scanDirection", "lasterGain", "scanGain"}, [this](int argn, const char **args) { - int32_t scanDirection = atoi(args[0]); - int32_t lasterGain = atoi(args[1]); - int32_t scanGain = atoi(args[2]); - ICM->callcmd3(getDeviceId(), ka8k_opt_v2_f_start_scan, scanDirection, lasterGain, scanGain); - }); - box->newSubButton("电机复位", [this](int argn, const char **args) { ICM->callcmd0(getDeviceId() - 1, kstep_motor_easy_move_to_zero); ICM->callcmd0(getDeviceId() - 2, kstep_motor_easy_move_to_zero); @@ -65,14 +57,76 @@ void A8kOptTab::construct(QTabWidget *fathertab) { ICM->callcmd1(PUSH_AND_PULL_MOTOR, kstep_motor_easy_move_to, 1100); }); box->newSubButton("入板", [this](int argn, const char **args) { // - ICM->callcmd1(CAMERA_MOTOR, kstep_motor_easy_move_to, 49); + ICM->callcmd1(PUSH_AND_PULL_MOTOR, kstep_motor_easy_move_to, 52); }); box->newSubButton("推杆移动到待机位", [this](int argn, const char **args) { // ICM->callcmd1(PUSH_AND_PULL_MOTOR, kstep_motor_easy_move_to, 1100); }); box->newSubButtonEnd(); - box->newSubButton("丢板", [this](int argn, const char **args) { - ICM->callcmd1(CAMERA_MOTOR, kstep_motor_easy_move_to, 0); + box->newSubButton("丢板", [this](int argn, const char **args) { ICM->callcmd1(CAMERA_MOTOR, kstep_motor_easy_move_to, 0); }); + + box->newSubButtonEnd(); + box->newFunc("T光学-开始扫描", {"scanDirection", "lasterGain", "scanGain"}, [this](int argn, const char **args) { + int32_t scanDirection = atoi(args[0]); + int32_t lasterGain = atoi(args[1]); + int32_t scanGain = atoi(args[2]); + ICM->callcmd3(getDeviceId(), ka8k_opt_v2_t_start_scan, scanDirection, lasterGain, scanGain); + }); + + box->newFunc("F光学-开始扫描", {"scanDirection", "lasterGain", "scanGain"}, [this](int argn, const char **args) { + int32_t scanDirection = atoi(args[0]); + int32_t lasterGain = atoi(args[1]); + int32_t scanGain = atoi(args[2]); + ICM->callcmd3(getDeviceId(), ka8k_opt_v2_f_start_scan, scanDirection, lasterGain, scanGain); + }); + + box->newSubButton("读取扫描结果", [this](int argn, const char **args) { + // ka8000_optical_read_raw + + uint8_t rdbuf[5000]; + int32_t readsize = 0; + int i = 0; + while (true) { + ICM->callcmd1(getDeviceId(), ka8000_optical_read_raw, i); + if (ICM->getAckBufLen() == 0) { + break; + } + memcpy(rdbuf + readsize, ICM->getAckBuf(), ICM->getAckBufLen()); + readsize += ICM->getAckBufLen(); + i++; + } + + int16_t *data = (int16_t *)rdbuf; + ZQUI::ins()->ishow("---------------------opt result(%d)---------------------", readsize / 2); + + for (size_t i = 0; i < readsize / 2; i++) { + ZQUI::ins()->ishow("%5d,%d", i, data[i]); + } + + opt_result_t optdata; + memcpy(optdata.data, data, readsize); + optdata.dataNum = readsize / 2; + + DoInUi([this, optdata]() { + WidgetPlot2D *plot2d = new WidgetPlot2D(); + QStringList lines; + lines.push_back("line1"); + plot2d->initGraphName(lines); + + for (int i = 0; i < optdata.dataNum; i++) { + plot2d->addData("line1", optdata.data[i]); + } + + //250 个点的情况下,峰的标准位置在 40 80 120 160 200 + //1200个点的情况下,峰的标准位置在 40*4.8 80*4.8 120*4.8 160*4.8 200*4.8 + for (int i = 1; i < 6; i++) { + plot2d->addRefLine(4.8 * 40 * i); + } + + plot2d->show(); + }); + + // 打印读取到的结果 }); }