#include "expertwin.h" #include "gutil/qgui.h" #include "expertboxlayoutwin.h" #include "expertsmartpointsetwin.h" #include "expertsendpanel.h" #include "expertscreenconnwin.h" #include "globalfunc.h" #include #include #include #include #include #include #include #include #include #include #include #include #include "efffrefr.h" #include "globalfunc.h" auto zrf_param_msg = QByteArray::fromHex( "20 00 06 20 10 10 00 E4 06 FF FF FF FF 00 00 80 80 80 00 00 00 1F 00 00 00 3C 01 33 00 00 00 80 00 00 12 05 00 00 00 01 " "02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 01 00 00 00 00 10 00 00 20 00 " "00 30 00 00 40 00 00 50 00 00 60 00 00 70 00 00 80 00 00 90 00 00 A0 00 00 B0 00 00 C0 00 00 D0 00 00 F0 00 00 00 01 00 " "10 01 00 20 01 00 30 01 00 40 01 00 50 01 00 60 01 00 70 01 00 80 01 00 90 01 00 A0 01 00 B0 01 00 C0 01 00 D0 01 00 F0 " "01 00 00 02 00 10 02 05 00 1F F8 7F 01 40 07 1F F8 73 01 40 07 1F F8 5F 01 40 07 40 10 40 10 40 10 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 " "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00");//256个 //modified by alahover -o 20230823 ExpertWin::ExpertWin(QWidget *parent, int rcvCardType) : BaseWin{parent}, m_iRcvCardType{rcvCardType} { setAttribute(Qt::WA_DeleteOnClose); setWindowTitle("专家调屏"); resize(900, 720); qDebug()<<"rcvCardType"<setContentsMargins(0,0,0,0); vBox->setSpacing(3); vBox->addLayout(addBtns(new QHBoxLayout())); auto tab = new QTabWidget; tab->setStyleSheet(R"rrr( QTabWidget::pane {border: 1px solid #888; margin-top:-1px;} QTabBar::tab {margin-top: 4px; padding: 6px 20px; border: 1px solid #888; border-radius: 0 0 3px 3px;} QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; background-color: #000;} )rrr"); vBox->addWidget(tab); auto sendPanel = new ExpertSendPanel; tab->addTab(sendPanel, "发送设备"); { auto file = QApplication::applicationDirPath()+"/temp.screen"; QFile qFile(file); if(qFile.open(QFile::ReadOnly)) { auto data = qFile.readAll(); qFile.close(); auto json = JFrom(data).toObj(); if(! json.empty()) { cfg = json; mBox = json["ModuleConnectionInfo"].toObj(); mModule = mBox["ModuleInfo"].toObj(); } } else { auto file = QApplication::applicationDirPath()+"/temp.module"; QFile qFile(file); if(qFile.open(QFile::ReadOnly)) { auto data = qFile.readAll(); qFile.close(); auto json = JFrom(data).toObj(); if(! json.empty()) mModule = json; } } } auto receivePanel = new QWidget; tab->addTab(receivePanel, "接收卡"); { auto vBox = new VBox(receivePanel); vBox->setContentsMargins(4, 4, 4, 4); auto gBox = new QGroupBox("模组信息"); vBox->addWidget(gBox); { auto hh = new HBox(gBox); hh->addSpacing(20); auto vvv = new VBox(hh); auto lb = new QLabel("驱动芯片: "); vvv->addWidget(lb); lb = new QLabel("译码方式: "); vvv->addWidget(lb); vvv = new VBox(hh); fdChipType = new QLabel(mModule["ChipType"].toStr()); vvv->addWidget(fdChipType); fdDecodeMode = new QLabel(mModule["DecodeMode"].toStr());//译码方式 vvv->addWidget(fdDecodeMode); hh->addSpacing(20); vvv = new VBox(hh); lb = new QLabel("模组宽度: "); vvv->addWidget(lb); lb = new QLabel("模组高度: "); vvv->addWidget(lb); vvv = new VBox(hh); fdModuleWidth = new QLabel(QString::number(mModule["ModuleWidth"].toInt())); vvv->addWidget(fdModuleWidth); fdModuleHeight = new QLabel(QString::number(mModule["ModuleHeight"].toInt())); vvv->addWidget(fdModuleHeight); hh->addSpacing(20); vvv = new VBox(hh); lb = new QLabel("扫描数: "); vvv->addWidget(lb); lb = new QLabel("数据数组: "); vvv->addWidget(lb); vvv = new VBox(hh); fdScanNum = new QLabel(QString::number(mModule["ScanNum"].toInt())); vvv->addWidget(fdScanNum); fdGroupNum = new QLabel(QString::number(mModule["GroupNum"].toInt())); vvv->addWidget(fdGroupNum); hh->addSpacing(20); vvv = new VBox(hh); auto btn = new QPushButton(tr("数据线颜色")); btn->setStyleSheet("QPushButton {border: none; }"); vvv->addWidget(btn); btn = new QPushButton(tr("模组抽行设置")); btn->setStyleSheet("QPushButton {border: none; }"); vvv->addWidget(btn); vvv = new VBox(hh); fdDataGroupColor = new QLabel("红,绿,蓝"); vvv->addWidget(fdDataGroupColor); fdChouDian = new QLabel(""); vvv->addWidget(fdChouDian); hh->addStretch(); vvv = new VBox(hh); btn = new QPushButton("模组选择"); btn->setProperty("ss","blue"); vvv->addWidget(btn); btn = new QPushButton("智能设置"); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [this] { (new ExpertSmartPointSetWin(this))->show(); }); vvv->addWidget(btn); } gBox = new QGroupBox("单卡带载"); vBox->addWidget(gBox); { auto hh = new HBox(gBox); hh->addSpacing(20); auto vvv = new VBox(hh); auto fdNormal = new QRadioButton("常规设计"); fdNormal->setChecked(true); vvv->addWidget(fdNormal); fdAdvacned = new QRadioButton("高级设计"); vvv->addWidget(fdAdvacned); hh->addSpacing(20); auto line = new QFrame; line->setFrameShadow(QFrame::Sunken); line->setFrameShape(QFrame::VLine); hh->addWidget(line); auto stack = new QStackedWidget; auto poli = stack->sizePolicy(); poli.setVerticalPolicy(QSizePolicy::Maximum); stack->setSizePolicy(poli); hh->addWidget(stack); auto normalPanel = new QWidget; stack->addWidget(normalPanel); { auto hh = new HBox(normalPanel); hh->setContentsMargins(0,0,0,0); auto vvv = new VBox(hh); auto lb = new QLabel(tr("宽度")); vvv->addWidget(lb); lb = new QLabel(tr("高度")); vvv->addWidget(lb); vvv = new VBox(hh); fdCardWidth = new QSpinBox; fdCardWidth->setRange(0, 99999); fdCardWidth->setValue(mBox["ModuleRow"].toInt() * mModule["ModuleWidth"].toInt()); vvv->addWidget(fdCardWidth); fdCardHeight = new QSpinBox; fdCardHeight->setRange(0, 99999); fdCardHeight->setValue(mBox["ModuleCol"].toInt() * mModule["ModuleHeight"].toInt()); vvv->addWidget(fdCardHeight); hh->addSpacing(20); vvv = new VBox(hh); lb = new QLabel(tr("多开设置")); vvv->addWidget(lb); lb = new QLabel(tr("级联方向")); vvv->addWidget(lb); vvv = new VBox(hh); fdSectorCount = new QComboBox; fdSectorCount->addItem(tr("无"), 1); fdSectorCount->addItem(tr("2开"), 2); fdSectorCount->addItem(tr("3开"), 3); fdSectorCount->addItem(tr("4开"), 4); fdSectorCount->addItem(tr("5开"), 5); fdSectorCount->addItem(tr("6开"), 6); fdSectorCount->addItem(tr("8开"), 7); fdSectorCount->addItem(tr("12开"), 7); SetCurData(fdSectorCount, mBox["SectorCount"].toInt()); vvv->addWidget(fdSectorCount); fdDirection = new QComboBox; fdDirection->addItem(tr("从右到左")); fdDirection->addItem(tr("从上到下")); fdDirection->addItem(tr("从左到右")); fdDirection->addItem(tr("从下到上")); fdDirection->setCurrentIndex(mBox["ModuleDirection"].toInt()); vvv->addWidget(fdDirection); hh->addStretch(); vvv = new VBox(hh); auto cb = new QCheckBox(tr("旋转180°")); vvv->addWidget(cb); auto btn = new QPushButton(tr("数据交换")); btn->setProperty("ss","blue"); vvv->addWidget(btn); } auto advacnedPanel = new QWidget; stack->addWidget(advacnedPanel); { auto hh = new HBox(advacnedPanel); hh->setContentsMargins(0,0,0,0); vvv = new VBox(hh); auto btn = new QPushButton(tr("平面造型")); btn->setProperty("ss","blue"); btn->setMaximumWidth(100); connect(btn, &QPushButton::clicked, this, [=] { auto win = new ExpertBoxLayoutWin(this); win->show(); win->raise(); win->activateWindow(); }); vvv->addWidget(btn); } connect(fdNormal, &QRadioButton::toggled, this, [=](bool checked) { stack->setCurrentWidget(checked ? normalPanel : advacnedPanel); }); if(cfg["is_irr"].toBool()) fdAdvacned->setChecked(true); } gBox = new QGroupBox(tr("效果测试")); //modified by alahover -s 20230830 vBox->addWidget(gBox); { if(m_iRcvCardType == enum_zrf) { auto vBox1=new VBox(gBox); auto hh = new HBox(vBox1); hh->addSpacing(20); //第一列区域 auto vvv = new VBox(hh); //1.1.移位时钟频率 auto hhh = new HBox(vvv); auto lb = new QLabel(tr("DCLK频率:")); hhh->addWidget(lb); cbDCLKf = new QComboBox(); cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("12.5M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("8.9M"); cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M");;cbDCLKf->addItem("5.2M");;cbDCLKf->addItem("4.5M");;cbDCLKf->addItem("3.9M");;cbDCLKf->addItem("3.125M"); ;cbDCLKf->addItem("1.9M"); ;cbDCLKf->addItem("1M"); hhh->addWidget(cbDCLKf); //1.2.灰度级别 hhh = new HBox(vvv); lb = new QLabel(tr("灰度级数:")); hhh->addWidget(lb); cbGryLevel = new QComboBox(); cbGryLevel->addItem("无灰度"); cbGryLevel->addItem("无OE8级");cbGryLevel->addItem("无OE16级");cbGryLevel->addItem("无OE32级");cbGryLevel->addItem("无OE64级");cbGryLevel->addItem("正常16级"); cbGryLevel->addItem("高亮16级");cbGryLevel->addItem("正常32级"); cbGryLevel->addItem("高亮32级");cbGryLevel->addItem("正常64级");cbGryLevel->addItem("高亮64级");cbGryLevel->addItem("正常128级");cbGryLevel->addItem("高亮128级");cbGryLevel->addItem("正常256级");cbGryLevel->addItem("高亮256级");cbGryLevel->addItem("正常512级"); cbGryLevel->addItem("高亮512级");cbGryLevel->addItem("正常1024级");cbGryLevel->addItem("高亮1024级");cbGryLevel->addItem("低亮2048级");cbGryLevel->addItem("正常2048级");cbGryLevel->addItem("高亮2048级");cbGryLevel->addItem("低亮4096级");cbGryLevel->addItem("正常4096级"); cbGryLevel->addItem("高亮4096级");cbGryLevel->addItem("低亮8192级");cbGryLevel->addItem("正常8192级");cbGryLevel->addItem("高亮8192级");cbGryLevel->addItem("低亮16384级");cbGryLevel->addItem("正常16384");cbGryLevel->addItem("正常32768级");cbGryLevel->addItem("正常65535级"); hhh->addWidget(cbGryLevel); //1.3.刷新倍率 hhh = new HBox(vvv); lb = new QLabel(tr("刷新倍率:")); hhh->addWidget(lb); freshBeiLv = new QComboBox(); freshBeiLv->addItem("20");freshBeiLv->addItem("24");freshBeiLv->addItem("28");freshBeiLv->addItem("32");freshBeiLv->addItem("36");freshBeiLv->addItem("40");freshBeiLv->addItem("44");freshBeiLv->addItem("48");freshBeiLv->addItem("64M"); hhh->addWidget(freshBeiLv); //1.4.换行时间 hhh = new HBox(vvv); lb = new QLabel(tr("换行时间(ns):")); hhh->addWidget(lb); spinLineNs = new QSpinBox; spinLineNs->setRange(2, 9999); hhh->addWidget(spinLineNs); //1.5.换行位置 hhh = new HBox(vvv); lb = new QLabel(tr("换行位置(ns):")); hhh->addWidget(lb); spinLineWz = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineWz); //1.6.行消隐时间 hhh = new HBox(vvv); lb = new QLabel(tr("行消隐时间(ns):")); hhh->addWidget(lb); spinLineXy = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineXy); //第二列区域 hh->addSpacing(20); vvv = new VBox(hh); //2.1.无信号数据 hhh = new HBox(vvv); lb = new QLabel(tr("无信号数据:")); hhh->addWidget(lb); cbNoSign = new QComboBox(); cbNoSign->addItem("最后一帧画面"); cbNoSign->addItem("黑屏"); hhh->addWidget(cbNoSign); //2.2.显卡同步 hhh = new HBox(vvv); lb = new QLabel(tr("显卡同步")); hhh->addWidget(lb); checkSyncXianKa = new QCheckBox; checkSyncXianKa->setChecked(true); hhh->addWidget(checkSyncXianKa); //2.3.开屏渐亮 hhh = new HBox(vvv); lb = new QLabel(tr("双卡备份")); hhh->addWidget(lb); checkDoubleCopy = new QCheckBox; checkDoubleCopy->setChecked(false); hhh->addWidget(checkDoubleCopy); //2.4.开屏渐亮 hhh = new HBox(vvv); lb = new QLabel(tr("开屏渐亮")); hhh->addWidget(lb); checkJianLiang = new QCheckBox; checkSyncXianKa->setChecked(false); hhh->addWidget(checkJianLiang); //2.5.D信号为第二组时钟 hhh = new HBox(vvv); lb = new QLabel(tr("信号为第二组时钟")); hhh->addWidget(lb); checkDsignalAsCLk = new QCheckBox; checkDsignalAsCLk->setChecked(false); hhh->addWidget(checkDsignalAsCLk); //更多设置 hh->addStretch(); vvv = new VBox(hh); vvv->addStretch(); hhh = new HBox(vvv); auto btn = new QPushButton(tr("更多设置")); btn->setProperty("ss","blue"); hhh->addWidget(btn); btn = new QPushButton(tr("亮度设置")); btn->setProperty("ss","blue"); vvv->addWidget(btn); btn = new QPushButton(tr("Gamma设置")); btn->setProperty("ss","blue"); vvv->addWidget(btn); btn = new QPushButton(tr("电流增益设置")); btn->setProperty("ss","blue"); vvv->addWidget(btn); vvv->addStretch(); hh->addStretch(); vvv = new VBox(hh); //分割线 auto hh3 = new HBox(vvv); QFrame * line2 = new QFrame(); line2->setFrameShape(QFrame::VLine); line2->setFrameShadow(QFrame::Sunken); line2->setStyleSheet("background-color:#222;"); hh3->addWidget(line2); //第三列区域 vvv = new VBox(hh); //3.1.DCLK相位 hhh = new HBox(vvv); lb = new QLabel(tr("DCLK相位:")); hhh->addWidget(lb); cbDclkXw = new QComboBox(); cbDclkXw->addItem("0度");cbDclkXw->addItem("+90度");cbDclkXw->addItem("-90度"); hhh->addWidget(cbDclkXw); //3.2.DCLK占空比 hhh = new HBox(vvv); lb = new QLabel(tr("DCLK占空比:")); hhh->addWidget(lb); cbDclkZkb = new QComboBox(); cbDclkZkb->addItem("50%");cbDclkZkb->addItem("25%");cbDclkZkb->addItem("75%"); hhh->addWidget(cbDclkZkb); //3.3.锁存STB相位微调 hhh = new HBox(vvv); lb = new QLabel(tr("锁存STB相位微调:")); hhh->addWidget(lb); cbStb = new QComboBox(); cbStb->addItem("不调整");cbStb->addItem("前移1个时钟");cbStb->addItem("前移2个时钟");cbStb->addItem("前移3个时钟");cbStb->addItem("后移1个时钟");cbStb->addItem("后移2个时钟");cbStb->addItem("后移3个时钟"); hhh->addWidget(cbStb); //3.4.行信号DE相位微调 hhh = new HBox(vvv); lb = new QLabel(tr("行信号DE相位微调:")); hhh->addWidget(lb); cbDE = new QComboBox(); cbDE->addItem("不调整");cbDE->addItem("前移1个时钟");cbDE->addItem("前移2个时钟");cbDE->addItem("前移3个时钟");cbDE->addItem("后移1个时钟");cbDE->addItem("后移2个时钟");cbDE->addItem("后移3个时钟"); hhh->addWidget(cbDE); //3.5.行信号ABC相位微调 hhh = new HBox(vvv); lb = new QLabel(tr("行信号ABC相位微调:")); hhh->addWidget(lb); cbABC = new QComboBox(); cbABC->addItem("不调整");cbABC->addItem("前移1个时钟");cbABC->addItem("前移2个时钟");cbABC->addItem("前移3个时钟");cbABC->addItem("后移1个时钟");cbABC->addItem("后移2个时钟");cbABC->addItem("后移3个时钟"); hhh->addWidget(cbABC); //3.6.单口带载点数 hhh = new HBox(vvv); lb = new QLabel(tr("单口带载点数:")); hhh->addWidget(lb); spinPointsOnePort = new QSpinBox; spinPointsOnePort->setRange(1, 999); hhh->addWidget(spinPointsOnePort); hh->addSpacing(20); //第四列区域 vvv = new VBox(hh); //4.1.消隐电平 hhh = new HBox(vvv); lb = new QLabel(tr("消隐电平:")); hhh->addWidget(lb); cbXiaoYinDianPing= new QComboBox(); cbXiaoYinDianPing->addItem("高有效");cbXiaoYinDianPing->addItem("低有效"); hhh->addWidget(cbXiaoYinDianPing); //4.2.锁存信号 hhh = new HBox(vvv); lb = new QLabel(tr("锁存信号:")); hhh->addWidget(lb); cbSTB = new QComboBox(); cbSTB->addItem("正向");cbSTB->addItem("反向"); hhh->addWidget(cbSTB); //4.3.行输出 hhh = new HBox(vvv); lb = new QLabel(tr("行输出:")); hhh->addWidget(lb); cbSRowOut = new QComboBox(); cbSRowOut->addItem("低有效");cbSRowOut->addItem("高有效"); hhh->addWidget(cbSRowOut); //4.4.GCLK频率 hhh = new HBox(vvv); lb = new QLabel(tr("GCLK频率:")); hhh->addWidget(lb); cbGCLKf = new QComboBox(); cbGCLKf->addItem("25M");cbGCLKf->addItem("20.83M");cbGCLKf->addItem("17.86M");cbGCLKf->addItem("15.63M");cbGCLKf->addItem("13.89M");cbGCLKf->addItem("12.5M");cbGCLKf->addItem("11.36M");cbGCLKf->addItem("10.42M");cbGCLKf->addItem("9.62M"); hhh->addWidget(cbGCLKf); //4.5.GCLK相位 hhh = new HBox(vvv); lb = new QLabel(tr("GCLK相位:")); hhh->addWidget(lb); spinGclkXw = new QSpinBox; spinGclkXw->setRange(20, 80); hhh->addWidget(spinGclkXw); //4.6.GCLK占空比 hhh = new HBox(vvv); lb = new QLabel(tr("GCLK占空比:")); hhh->addWidget(lb); spinGclkZkb = new QSpinBox; spinGclkZkb->setRange(20, 80); hhh->addWidget(spinGclkZkb); //分割线 auto hh1 = new HBox(vBox1); QFrame * line = new QFrame(); line->setFrameShape(QFrame::HLine); line->setFrameShadow(QFrame::Sunken); line->setStyleSheet("background-color:#222;"); hh1->addWidget(line); auto hh2=new HBox(vBox1); //计算结果竖直信息区 auto resultInfo = new HBox(hh2); lb = new QLabel(tr("视觉刷新率:")); resultInfo->addWidget(lb); float freshLv1=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ ); m_ctrlFreshRate = new QLabel(QString::number(freshLv1)); resultInfo->addWidget(m_ctrlFreshRate); resultInfo->addStretch(); lb = new QLabel(tr("亮度有效率:")); resultInfo->addWidget(lb); float BrightYouXiaoLv1=Get_Eff(8,16); m_ctrlBrightEff = new QLabel(QString::number(BrightYouXiaoLv1)); resultInfo->addWidget(m_ctrlBrightEff); resultInfo->addStretch(); lb = new QLabel(tr("最小OE:")); resultInfo->addWidget(lb); float minOe=Get_Eff(8,16); m_ctrlMinOE = new QLabel(QString::number(minOe)); resultInfo->addWidget(m_ctrlMinOE); resultInfo->addStretch(); } else if(m_iRcvCardType == enum_xixun_sync) { auto hh = new HBox(gBox); hh->addSpacing(20); auto vvv = new VBox(hh); auto hhh = new HBox(vvv); auto lb = new QLabel(tr("DCLK频率:")); hhh->addWidget(lb); auto cbDCLKf = new QComboBox(); cbDCLKf->addItem("31.2M");cbDCLKf->addItem("25M");cbDCLKf->addItem("20.83M");cbDCLKf->addItem("17.86M");cbDCLKf->addItem("15.63M");cbDCLKf->addItem("13.89M");cbDCLKf->addItem("12.5M"); cbDCLKf->addItem("11.36M");cbDCLKf->addItem("10.42M");cbDCLKf->addItem("9.62M");cbDCLKf->addItem("8.9M");cbDCLKf->addItem("7.8M");cbDCLKf->addItem("6.25M"); hhh->addWidget(cbDCLKf); hhh = new HBox(vvv); lb = new QLabel(tr("DCLK相位:")); hhh->addWidget(lb); auto spinDclkXw = new QSpinBox; spinDclkXw->setRange(0, 99999); hhh->addWidget(spinDclkXw); hhh = new HBox(vvv); lb = new QLabel(tr("DCLK占空比:")); hhh->addWidget(lb); auto spinDclkZkb = new QSpinBox; spinDclkZkb->setRange(20, 80); hhh->addWidget(spinDclkZkb); hhh = new HBox(vvv); lb = new QLabel(tr("换行时间(ns):")); hhh->addWidget(lb); auto spinLineNs = new QSpinBox; spinLineNs->setRange(2, 9999); hhh->addWidget(spinLineNs); hhh = new HBox(vvv); lb = new QLabel(tr("视觉刷新率:")); hhh->addWidget(lb); float freshLv=Get_Frefr(7/*小数权值*/ , 12/*灰度位宽*/ , 12500000/*移位时钟频率*/ , 240/*扫描长度*/ , 16/*扫描类型*/ , 4/*倍频*/ ); qDebug()<<"get_eff="<addWidget(lb); hh->addSpacing(20); vvv = new VBox(hh); hhh = new HBox(vvv); lb = new QLabel(tr("亮度有效率:")); hhh->addWidget(lb); float BrightYouXiaoLv=Get_Eff(8,16); qDebug()<<"get_eff="<addWidget(lb); hhh = new HBox(vvv); lb = new QLabel(tr("GCLK频率:")); hhh->addWidget(lb); auto cbGCLKf = new QComboBox(); cbGCLKf->addItem("25M"); cbGCLKf->addItem("20.83M"); cbGCLKf->addItem("17.86M"); cbGCLKf->addItem("15.63M"); cbGCLKf->addItem("13.89M"); cbGCLKf->addItem("12.5M"); cbGCLKf->addItem("11.36M"); cbGCLKf->addItem("10.42M"); cbGCLKf->addItem("9.62M"); hhh->addWidget(cbGCLKf); hhh = new HBox(vvv); lb = new QLabel(tr("灰度级数:")); hhh->addWidget(lb); auto cbGryLevel = new QComboBox(); cbGryLevel->addItem("256"); cbGryLevel->addItem("1024"); cbGryLevel->addItem("4096"); cbGryLevel->addItem("8192"); cbGryLevel->addItem("16384"); cbGryLevel->addItem("32768"); cbGryLevel->addItem("65536"); hhh->addWidget(cbGryLevel); hhh = new HBox(vvv); lb = new QLabel(tr("GCLK占空比:")); hhh->addWidget(lb); auto spinGclkZkb = new QSpinBox; spinGclkZkb->setRange(20, 80); hhh->addWidget(spinGclkZkb); hhh = new HBox(vvv); lb = new QLabel(tr("换行位置(ns):")); hhh->addWidget(lb); auto spinLineWz = new QSpinBox; spinLineWz->setRange(2, 9999); hhh->addWidget(spinLineWz); hh->addStretch(); vvv = new VBox(hh); hhh = new HBox(vvv); auto btn = new QPushButton(tr("更多设置")); btn->setProperty("ss","blue"); hhh->addWidget(btn); } } vBox->addStretch(); auto hBox = new HBox(vBox); auto btn = new QPushButton(tr("保存接收卡配置")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { auto dir = QApplication::applicationDirPath()+"/BoxFiles"; QDir(dir).mkdir("."); auto file = QFileDialog::getSaveFileName(this, tr("保存文件"), dir, tr("Box file (*.box)")); if(file.isEmpty()) return; QFile qFile(file); if(! qFile.open(QFile::WriteOnly)) { QMessageBox::critical(this, tr("失败"), QString(tr("准备写入 %1 文件失败")).arg(file)); return; } auto res = qFile.write(savedData()); qFile.close(); if(res < 0) { QMessageBox::critical(this, tr("失败"), QString(tr("写入 %1 文件失败")).arg(file)); return; } QMessageBox::information(this, tr("保存成功"), tr("保存成功")); }); hBox->addWidget(btn); btn = new QPushButton(tr("保存Map")); if(m_iRcvCardType != enum_xixun_sync) btn->hide(); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { auto file = QFileDialog::getSaveFileName(this, tr("保存文件"), gFileHome); if(file.isEmpty()) return; gFileHome = QFileInfo(file).absolutePath(); QFile qFile(file); if(! qFile.open(QFile::WriteOnly)) { QMessageBox::critical(this, tr("失败"), QString(tr("准备写入 %1 文件失败")).arg(file)); return; } QByteArray data; addMapData(data); auto res = qFile.write(data); qFile.close(); if(res < 0) QMessageBox::critical(this, tr("失败"), QString(tr("写入 %1 文件失败")).arg(file)); else QMessageBox::information(this, tr("成功"), tr("保存成功")); }); hBox->addWidget(btn); hBox->addStretch(); btn = new QPushButton(tr("发送接收参数")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_zrf) { //发送基本参数 auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); int res1=0; //发送基本参数 MACRO_FUNC_SEND_PARAM("读取基本参数",classToBaseMsg(),1,0x00) //发送gamma参数 MACRO_FUNC_SEND_PARAM("读取gamma参数",classToGammaMsg(0,flashPage),2,0x10) //发送描点参数 MACRO_FUNC_SEND_PARAM("读取描点参数",classToMiaoDianMsg(flashPage),16,0x30) QMessageBox::information(this, tr("提示"), tr("发送接收卡参数成功")); } else QMessageBox::information(this, tr("提示"), tr("未能识别的控制卡类型")); }); hBox->addWidget(btn); btn = new QPushButton(tr("固化接收参数")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_zrf) { int iReSendCount=3; int iTimeout=2000; //发送基本参数 auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f0 f0 f0 f0 00 00 00 00 00 00 00 00 00 00 00 00"); auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); int res1=0; //发送基本参数 MACRO_FUNC_GUHUA_PARAM("发送基本参数",classToBaseMsg(),1,0x00) //发送gamma参数 MACRO_FUNC_GUHUA_PARAM("发送gamma参数",classToGammaMsg(0,flashPage),2,0x10) //发送描点参数 MACRO_FUNC_GUHUA_PARAM("发送描点参数",classToMiaoDianMsg(flashPage),16,0x30) QMessageBox::information(this, tr("提示"), tr("固化接收卡参数成功")); } else QMessageBox::information(this, tr("提示"), tr("未能识别的控制卡类型")); }); hBox->addWidget(btn); btnReceiveReadBack = new QPushButton(tr("回读接收卡参数")); btnReceiveReadBack->setProperty("ss","blue"); connect(btnReceiveReadBack, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_rcvCardType::enum_zrf) { int iReSendCount=3; int iTimeout=10000; quint8 flashAddr=0x00; auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); auto waitingDlg = new WaitingDlg(this, tr("读取基本参数")+" ..."); for(int i=0;i=2) {QMessageBox::critical(this, "Error", tr("读取基本参数请求超时")); return;} } else if(res.code) {if(i>=2) {QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); return;} } else { int ioffset=headMap_zrf.paramStart+st_zrf_rb_param.param; QByteArray return_msg=res.msg.mid(ioffset,256); waitingDlg->close(); baseMsgToClass((quint8 *)return_msg.data()); qDebug()<=2) {QMessageBox::critical(this, "Error", tr("读取GAMMA参数请求超时")); return;} } else if(res.code) {if(i>=2) {QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); return;} } else { int ioffset=headMap_zrf.paramStart+st_zrf_rb_param.param; QByteArray return_msg=res.msg.mid(ioffset,256); waitingDlg->close(); gammaMsgToClass((quint8 *)return_msg.data(),flashPage); qDebug()<=2) {QMessageBox::critical(this, "Error", tr("读取描点参数请求超时")); return;} } else if(res.code) {if(i>=2) {QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); return;} } else { int ioffset=headMap_zrf.paramStart+st_zrf_rb_param.param; QByteArray return_msg=res.msg.mid(ioffset,256); waitingDlg->close(); miaoDianMsgToClass((quint8 *)return_msg.data(),flashPage); qDebug()<addWidget(btnReceiveReadBack); } auto connPanel = new QWidget; tab->addTab(connPanel, tr("显示屏连接(正面看屏)")); { auto vBox = new VBox(connPanel); vBox->setContentsMargins(4, 4, 4, 4); auto hBox = new HBox(vBox); auto bnScreen = new QPushButton("屏1"); hBox->addWidget(bnScreen); hBox->addStretch(); auto lb = new QLabel("显示屏数目:"); hBox->addWidget(lb); auto fdScreenCnt = new QSpinBox; fdScreenCnt->setRange(1, 99); fdScreenCnt->setValue(1); hBox->addWidget(fdScreenCnt); vBox->addLayout(connStack = new QStackedLayout); connStack->addWidget(new ExpertScreenConnWin); hBox = new HBox(vBox); auto btn = new QPushButton(tr("保存到文件")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { auto file = QFileDialog::getSaveFileName(this, tr("保存级联文件"), gFileHome, "Kcon文件 (*.kcon)"); if(file.isEmpty()) return; gFileHome = QFileInfo(file).absolutePath(); QFile qFile(file); if(! qFile.open(QFile::WriteOnly)) { QMessageBox::critical(this, tr("失败"), QString(tr("准备写入 %1 文件失败")).arg(file)); return; } auto res = qFile.write(JToBytes(connSavedData(), " ")); qFile.close(); if(res < 0) QMessageBox::critical(this, tr("失败"), QString(tr("写入 %1 文件失败")).arg(file)); else QMessageBox::information(this, tr("成功"), tr("保存成功")); }); hBox->addWidget(btn); hBox->addStretch(); btn = new QPushButton(tr("发送级联参数")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_zrf) { //发送基本参数 auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); int res1=0; //发送排序参数 MACRO_FUNC_SEND_PARAM("读取排序参数",classToPaiXuSMsg(flashPage),8,0x20) QMessageBox::information(this, tr("提示"), tr("发送级联参数成功")); } else QMessageBox::information(this, tr("提示"), tr("未能识别的控制卡类型")); }); hBox->addWidget(btn); btn = new QPushButton(tr("固化级联参数")); btn->setProperty("ss","blue"); connect(btn, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_zrf) { int iReSendCount=3; int iTimeout=2000; //发送基本参数 auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f0 f0 f0 f0 00 00 00 00 00 00 00 00 00 00 00 00"); auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); int res1=0; //发送排序参数 MACRO_FUNC_GUHUA_PARAM("发送排序参数",classToPaiXuSMsg(flashPage),8,0x20) QMessageBox::information(this, tr("提示"), tr("固化级联参数成功")); } else QMessageBox::information(this, tr("提示"), tr("未能识别的控制卡类型")); }); hBox->addWidget(btn); btnConnReadBack = new QPushButton(tr("回读级联参数")); btnConnReadBack->setProperty("ss","blue"); connect(btnConnReadBack, &QPushButton::clicked, this, [=] { if(m_iRcvCardType == enum_rcvCardType::enum_zrf) { int iReSendCount=3; int iTimeout=10000; quint8 flashAddr=0x00; auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); auto waitingDlg = new WaitingDlg(this, tr("读取基本参数")+" ..."); //回读排序参数 flashAddr=0x20; for(int m=0;m<8;m++){ int flashPage=flashAddr+m; for(int n=0;n<4;n++) *(quint8 *)(zrf_cmd_msg.data()+headMap_zrf.paramStart+st_zrf_cmd_param.flashPage+n)=flashPage; waitingDlg = new WaitingDlg(this, tr("读取排序参数")+" ..."); for(int i=0;i=2) {QMessageBox::critical(this, "Error", tr("读取排序参数请求超时")); return;} } else if(res.code) {if(i>=2) {QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+QString::fromLocal8Bit(pcap_geterr(pcapSend))); return;} } else { int ioffset=headMap_zrf.paramStart+st_zrf_rb_param.param; QByteArray return_msg=res.msg.mid(ioffset,256); waitingDlg->close(); paiXuMsgToClass((quint8 *)return_msg.data(),flashPage); qDebug()<addWidget(btnConnReadBack); } connect(tab, &QTabWidget::currentChanged, [=](int value) { if(value==1) { if(needInit1) { needInit1 = false; emit btnReceiveReadBack->clicked(); } } else if(value==2) { if(needInit2) { needInit2 = false; emit btnConnReadBack->clicked(); } } }); changeValueByEffectControler(); //状态栏 auto statusWgt = new QWidget; statusWgt->setStyleSheet("QWidget{background-color:#222;}"); vBox->addWidget(statusWgt); { auto hh = new HBox(statusWgt); auto lb = new QLabel(tr("状态:")); hh->addWidget(lb); } } void ExpertWin::closeEvent(QCloseEvent *event) { BaseWin::closeEvent(event); QFile qFile("temp.screen"); if(! qFile.open(QFile::WriteOnly)) return; qFile.write(savedData()); qFile.close(); } QByteArray ExpertWin::savedData() { mBox.insert("ModuleInfo", mModule); auto ModuleWidth = mModule["ModuleWidth"].toInt(); auto ModuleHeight = mModule["ModuleHeight"].toInt(); mBox.insert("ModuleRow", ModuleWidth==0 ? 0 : (fdCardWidth->value() + ModuleWidth - 1) / ModuleWidth); mBox.insert("ModuleCol", ModuleHeight==0 ? 0 : (fdCardHeight->value() + ModuleHeight - 1) / ModuleHeight); mBox.insert("ModuleDirection", fdDirection->currentIndex()); mBox.insert("SectorCount", fdSectorCount->currentData().toInt()); JObj obj{ {"ModuleConnectionInfo", mBox}, {"is_irr", fdAdvacned->isChecked()}, }; return JToBytes(obj, " "); } JObj ExpertWin::connSavedData() { JArray values; qDebug()<<"connStack->count()"<count(); for(int ss=0; sscount(); ss++) { auto connWin = (ExpertScreenConnWin*) connStack->widget(ss); JArray boxList; for(int nn=0; nnnetss)/sizeof(connWin->netss[0]); nn++) for(int bb=0; bb<(int)connWin->netss[nn].size(); bb++) { auto pos = connWin->netss[nn][bb]; boxList.append(JObj{ {"X", pos.x()*connWin->fdCardWidth->value()}, {"Y", pos.y()*connWin->fdCardHeight->value()}, {"ModuleWidth", connWin->fdCardWidth->value()}, {"ModuleHeight", connWin->fdCardHeight->value()}, {"PortId", nn}, {"SubId", bb+1}, {"ScreenPosRow", pos.x()}, {"ScreenPosCol", pos.y()}, {"ScreenRow", connWin->table->rowCount()}, {"ScreenCol", connWin->table->columnCount()}, {"SettingWidth", connWin->fdCardWidth->value()}, {"SettingHeight", connWin->fdCardHeight->value()}, {"ScreenIndex", ss} }); } values.append(JObj{ {"isCompScreen", false}, {"boxList", boxList}, }); } return {{"values", values}}; } void ExpertWin::addMapData(QByteArray &data) { auto ModuleWidth = mModule["ModuleWidth"].toInt(); auto ModuleHeight = mModule["ModuleHeight"].toInt(); auto ModuleRow = (fdCardWidth->value() + ModuleWidth - 1) / ModuleWidth; auto ModuleCol = (fdCardHeight->value() + ModuleHeight - 1) / ModuleHeight; auto CardWidth = ModuleRow * ModuleWidth; auto CardHeight = ModuleCol * ModuleHeight; auto ModuleDirection = fdDirection->currentIndex(); //auto SectorCount = fdSectorCount->currentData().toInt(); QMap map; int memY = 0, memX = 0; for(int boxY=0; boxY 255) { memX = 0; memY++; } map.insert(boxY<<16|boxX, memY<<16|memX); memX++; } memX = 0; memY++; } auto points = mModule["ColumnMap"].toArray(); auto scans = mModule["RowMap"].toArray(); auto GroupNum = mModule["GroupNum"].toInt(); auto jCnt = ModuleCol * GroupNum; for(auto scan : scans) { QList> chunkses; for(int j=0; j chunks; QByteArray chunk; QString chstr; for(int mm=0; mm> 16; memX = mem & 0xffff; } if(memY==lastMemY && ttl < 64 && qAbs(memX-lastMemX)==1) { if(cnt==1) { isAnti = memX < lastMemX; cnt++; ttl++; lastMemX = memX; continue; } else if(memX < lastMemX == isAnti) { cnt++; ttl++; lastMemX = memX; continue; } } if(lastMemY > INT_MIN) { uint y = lastMemY==-1 ? 0 : lastMemY; uint x = isAnti ? lastMemX : lastMemX-cnt+1; chunk.append((j << 2) + (y >> 8)).append(y).append(x).append((isAnti << 7)+cnt); chstr += QString("j%1 行%2 列%3 序%4 长%5").arg(j).arg(y).arg(x).arg(isAnti).arg(cnt); } if(ttl>=64) { chunks.append(chunk); chunk = QByteArray(); qDebug() << chstr; chstr.clear(); ttl = 1; } cnt = 1; lastMemY = memY; lastMemX = lastMemY==-1 ? 0 : memX; } } uint y = lastMemY==-1 ? 0 : lastMemY; uint x = isAnti ? lastMemX : lastMemX-cnt+1; chunk.append((j << 2) + (y >> 8)).append(y).append(x).append((isAnti << 7)+cnt); chstr += QString("j%1 行%2 列%3 序%4 长%5").arg(j).arg(y).arg(x).arg(isAnti).arg(cnt); chunks.append(chunk); chunkses.append(chunks); qDebug() << chstr; } data.append(0xAA).append(scan.toInt()).append(2, 0); auto chend = chunkses[0].size()-1; auto start = data.size(); for(int ch=0; ch<=chend; ch++) { data.append(0x55).append(ch==chend ? (char)(1<<7) : 0).append(2, 0); auto start = data.size(); foreach(auto chunks, chunkses) data.append(chunks[ch]); auto num = (data.size() - start) / 4; data[start-2] = num; data[start-3] = num>>8; } auto len = data.size() - start; data[start-1] = len; data[start-2] = len>>8; } } //added by alahover -s 02030829 void ExpertWin::classToBaseMsg() { byte * unitptr = (byte *)zrf_param_msg.data(); byte * bytePrt = (byte *)zrf_param_msg.data(); *bytePrt= (zrf_rcv_obj.b0_7 << 7 & 0b10000000)| (zrf_rcv_obj.b0_6 << 6 & 0b01000000)| (zrf_rcv_obj.b0_5 << 5 & 0b00100000)| (zrf_rcv_obj.b0_4 << 4 & 0b00010000)| (zrf_rcv_obj.b0_3_1 << 1 & 0b00001110) | (zrf_rcv_obj.b0_0 & 0b00000001);; bytePrt =unitptr + st_zrf_base_param.b1_xiaoyingTime; *bytePrt = ( zrf_rcv_obj.b1_7_6<< 6 & 0b11000000) | ( zrf_rcv_obj.b1_5<<5 & 0b00100000) | ( zrf_rcv_obj.b1_4<<4 & 0b00010000) | ( zrf_rcv_obj.b1_3_2<<2 & 0b00001100) | ( zrf_rcv_obj.b1_1<<1 & 0b00000010) |( zrf_rcv_obj.b1_0&0b00000001); bytePrt =unitptr + st_zrf_base_param.b2_line_xytime; *bytePrt= zrf_rcv_obj.b2; bytePrt =unitptr + st_zrf_base_param.b3_rows1Group; *bytePrt= zrf_rcv_obj.b3; bytePrt =unitptr + st_zrf_base_param.b4_cols1Group; *bytePrt= zrf_rcv_obj.b4; bytePrt =unitptr + st_zrf_base_param.b5_scanNum; *bytePrt= zrf_rcv_obj.b5; bytePrt =unitptr + st_zrf_base_param.b6_emptyPointNum; *bytePrt= zrf_rcv_obj.b6; bytePrt =unitptr + st_zrf_base_param.b7_colorIndex; *bytePrt= ( zrf_rcv_obj.b7_7_6 << 6 & 0b11000000) | ( zrf_rcv_obj.b7_5_4<<4 & 0b00110000) | ( zrf_rcv_obj.b7_3_2 << 2 & 0b00001100) | ( zrf_rcv_obj.b7_1_0 & 0b00000011) ; bytePrt =unitptr + st_zrf_base_param.b8_dataOutModle; *bytePrt= ( zrf_rcv_obj.b8_7<<7 &0b10000000) | ( zrf_rcv_obj.b8_6<<6 & 0b01000000) | ( zrf_rcv_obj.b8_5_4<<4 & 0b00110000) | ( zrf_rcv_obj.b8_3_0 & 0b00001111) ; bytePrt =unitptr + st_zrf_base_param.b9_brightStatic; *bytePrt= zrf_rcv_obj.b9 ; bytePrt =unitptr + st_zrf_base_param.b10_brightRed; *bytePrt= zrf_rcv_obj.b10; bytePrt =unitptr + st_zrf_base_param.b11_brightGreen; *bytePrt= zrf_rcv_obj.b11; bytePrt =unitptr + st_zrf_base_param.b12_brightBlue; *bytePrt= zrf_rcv_obj.b12; bytePrt =unitptr + st_zrf_base_param.b13_icType; *bytePrt= zrf_rcv_obj.b13; bytePrt =unitptr + st_zrf_base_param.b14_icParma; *bytePrt= zrf_rcv_obj.b14; bytePrt =unitptr + st_zrf_base_param.b15_redIgain; *bytePrt= zrf_rcv_obj.b15; bytePrt =unitptr + st_zrf_base_param.b16_greenIgain; *bytePrt= zrf_rcv_obj.b16; bytePrt =unitptr + st_zrf_base_param.b17_blueIgain; *bytePrt= zrf_rcv_obj.b17; bytePrt =unitptr + st_zrf_base_param.b18_clkFreq; *bytePrt= ( zrf_rcv_obj.b18_7_4<<4 & 0b11110000) | ( zrf_rcv_obj.b18_3_0 & 0b00001111); bytePrt =unitptr + st_zrf_base_param.b19_clkDutyCycle; *bytePrt=( zrf_rcv_obj.b19_7_4<<4 & 0b11110000) | ( zrf_rcv_obj.b19_3_0 & 0b00001111); bytePrt =unitptr + st_zrf_base_param.b20_pwmIcGrayClk; *bytePrt= zrf_rcv_obj.b20; bytePrt =unitptr + st_zrf_base_param.b21_grayLevelMultFreq; *bytePrt= ( zrf_rcv_obj.b21_7_5 << 5 & 0b11100000) | ( zrf_rcv_obj.b21_4_0 & 0b00011111); bytePrt =unitptr + st_zrf_base_param.b22_MultFreqMode; *bytePrt= ( zrf_rcv_obj.b22_7_6 << 6 & 0b11000000) | ( zrf_rcv_obj.b22_5_2<<2 & 0b00111100) | ( zrf_rcv_obj.b22_1_0 & 0b00000011); bytePrt =unitptr + st_zrf_base_param.b23_reserve; *bytePrt= zrf_rcv_obj.b23; bytePrt =unitptr + st_zrf_base_param.b24_freshRate; *bytePrt= ( zrf_rcv_obj.b24_7_5<<5 & 0b11100000) | ( zrf_rcv_obj.b24_4_0 & 0b00011111); bytePrt =unitptr + st_zrf_base_param.b24_freshRate +1; *bytePrt= zrf_rcv_obj.b25; bytePrt =unitptr + st_zrf_base_param.b26_syncGraphicsCard; *bytePrt= ( zrf_rcv_obj.b26_7<<7 & 0b10000000) | ( zrf_rcv_obj.b26_6<<6 & 0b01000000) | ( zrf_rcv_obj.b26_5_0 & 0b00111111); bytePrt =unitptr + st_zrf_base_param.b27_Ldq; *bytePrt= zrf_rcv_obj.b27_28[0]; bytePrt =unitptr + st_zrf_base_param.b27_Ldq +1; *bytePrt= zrf_rcv_obj.b27_28[1]; bytePrt =unitptr + st_zrf_base_param.b29_reserve; *bytePrt= ( zrf_rcv_obj.b29_7_4<<4 & 0b11110000) | ( zrf_rcv_obj.b29_3_2<<2 &0b00001100) | ( zrf_rcv_obj.b29_1_0 & 0b00000011); bytePrt =unitptr + st_zrf_base_param.b30_pwmMultFreq; *bytePrt= zrf_rcv_obj.b30; bytePrt =unitptr + st_zrf_base_param.b31_rcvCardCols; *bytePrt= zrf_rcv_obj.b31; bytePrt =unitptr + st_zrf_base_param.b31_rcvCardCols + 1; *bytePrt= zrf_rcv_obj.b32; bytePrt =unitptr + st_zrf_base_param.b33_emptyRowMode; *bytePrt= ( zrf_rcv_obj.b33_7_4<<4 & 0b11110000) | ( zrf_rcv_obj.b33_3_0 & 0b00001111); bytePrt =unitptr + st_zrf_base_param.b34_emptyRowPos; *bytePrt= ( zrf_rcv_obj.b34_7_4<<5 & 0b11110000) | ( zrf_rcv_obj.b34_3_0 & 0b00001111); bytePrt =unitptr + st_zrf_base_param.b35_xiaoYingEndTime; *bytePrt= zrf_rcv_obj.b35; bytePrt =unitptr + st_zrf_base_param.b36_RowIcParam; *bytePrt= ( zrf_rcv_obj.b36_7_6<<6 & 0b11000000) | ( zrf_rcv_obj.b36_5_0 & 0b00111111); bytePrt =unitptr + st_zrf_base_param.b37_reserve; *bytePrt= ( zrf_rcv_obj.b37_7_5<<5 & 0b11100000) | ( zrf_rcv_obj.b37_4_3<<3 & 0b00011000) | ( zrf_rcv_obj.b37_2<<2 & 0b00000100) | ( zrf_rcv_obj.b37_1 <<1 & 0b00000010) | ( zrf_rcv_obj.b37_0 & 0b00000001); bytePrt =unitptr + st_zrf_base_param.b38_hub1to32Area; memcpy(bytePrt,& zrf_rcv_obj.b38_69[32],32); bytePrt =unitptr + st_zrf_base_param.b70_reserve; *bytePrt= ( zrf_rcv_obj.b70_7<<7 & 0b10000000) | ( zrf_rcv_obj.b70_6<<6 & 0b01000000) | ( zrf_rcv_obj.b70_5_2<<2 & 0b00111100) | ( zrf_rcv_obj.b70_1<<1 & 0b00000010) | ( zrf_rcv_obj.b70_0 & 0b00000001); bytePrt =unitptr + st_zrf_base_param.b71_imgArea1to32Param; for(int i=0;i<32;i++) { memcpy(bytePrt,& zrf_rcv_obj.b71_166[i][0],3); bytePrt +=3; } bytePrt =unitptr + st_zrf_base_param.b167_syncPreTime; *bytePrt= zrf_rcv_obj.b167; bytePrt =unitptr + st_zrf_base_param.b168_reserve; *bytePrt= ( zrf_rcv_obj.b168_7_5<<5 & 0b11100000) | ( zrf_rcv_obj.b168_4_0 & 0b00011111); bytePrt =unitptr + st_zrf_base_param.b169_redIcParam1; memcpy(bytePrt,(unsigned char *)& zrf_rcv_obj.b169_192[0],24); } void ExpertWin::classToGammaMsg(int iColorType,quint8 flashPage) { auto unitptr = (unsigned char *)zrf_param_msg.data(); unsigned char * bytePrt = (unsigned char*)(unitptr); int iCount=flashPage&0x0F; if(iCount > 1) QMessageBox::critical(this, "提示", tr("gamma数据越界")); switch(iColorType) { case 0://all for (int i = 0; i < 128; i++) { bytePrt[i*2]=(zrf_rcv_obj.g_all[i+iCount*128]&0XFF00)>>8; bytePrt[i*2+1]=zrf_rcv_obj.g_all[i+iCount*128]&0X00FF; } break; case 1://red for (int i = 0; i < 128; i++) { bytePrt[i*2]=(zrf_rcv_obj.g_red[i+iCount*128]&0XFF00)>>8; bytePrt[i*2+1]=zrf_rcv_obj.g_red[i+iCount*128]&0X00FF; } break; case 2://green for (int i = 0; i < 128; i++) { bytePrt[i*2]=(zrf_rcv_obj.g_green[i+iCount*128]&0XFF00)>>8; bytePrt[i*2+1]=zrf_rcv_obj.g_green[i+iCount*128]&0X00FF; } break; case 3://blue for (int i = 0; i < 128; i++) { bytePrt[i*2]=(zrf_rcv_obj.g_blue[i+iCount*128]&0XFF00)>>8; bytePrt[i*2+1]=zrf_rcv_obj.g_blue[i+iCount*128]&0X00FF; } break; default: for (int i = 0; i < 128; i++) { bytePrt[i*2]=(zrf_rcv_obj.g_all[i+iCount*128]&0XFF00)>>8; bytePrt[i*2+1]=zrf_rcv_obj.g_all[i+iCount*128]&0X00FF; } break; } } void ExpertWin::classToPaiXuSMsg(quint8 flashPage) { auto unitptr = (unsigned char *)zrf_param_msg.data(); unsigned char * bytePrt = (unsigned char*)(unitptr); if(flashPage == 0x20) { for(int i=0;i<256;i++) { zrf_rcv_obj.p8_st_rcv_pos[i].imgXL8 = zrf_rcv_obj.p_x[i] & 0x00FF; zrf_rcv_obj.p8_st_rcv_pos[i].imgXH4_YH4 = ((zrf_rcv_obj.p_x[i] & 0x0F00) >>4 )| ((zrf_rcv_obj.p_y[i] & 0x0F00) >>8); zrf_rcv_obj.p8_st_rcv_pos[i].imgYL8 = zrf_rcv_obj.p_y[i] & 0x00FF; zrf_rcv_obj.p8_st_rcv_pos[i].imgWidthL8 = zrf_rcv_obj.p_w[i] & 0x00FF; zrf_rcv_obj.p8_st_rcv_pos[i].imgWidthH4_HeightH4 = ((zrf_rcv_obj.p_w[i] & 0x0F00) >>4 )| ((zrf_rcv_obj.p_h[i] & 0x0F00) >>8); zrf_rcv_obj.p8_st_rcv_pos[i].imgHeightL8 = zrf_rcv_obj.p_h[i] & 0x00FF; zrf_rcv_obj.p8_st_rcv_pos[i].imgPosNumInScreenH8 = (zrf_rcv_obj.p_posNum[i] & 0xFF00) >>8; zrf_rcv_obj.p8_st_rcv_pos[i].imgPosNumInScreenL8 = zrf_rcv_obj.p_posNum[i] & 0x00FF; } *bytePrt = zrf_rcv_obj.p0_cardIndexInNet ;//当前卡在网线内的序号 bytePrt++; *bytePrt = zrf_rcv_obj.p1_SendCardCode ;//当前网线所在的发送卡编号 bytePrt++; *bytePrt = zrf_rcv_obj.p2_netIndexInSendCard ;//当前网线所在发送卡输出口编号 bytePrt++; *bytePrt = zrf_rcv_obj.p3_fenXianNum ;//当前分线号 bytePrt++; *bytePrt = zrf_rcv_obj.p4_rcvCardsNumInNet ;//当前网线内接收卡总数 bytePrt++; *bytePrt = zrf_rcv_obj.p5_netScreenIndex ; //当前网线所在屏号 bytePrt++; *bytePrt = zrf_rcv_obj.p6_reserve ;//保留 bytePrt++; *bytePrt = zrf_rcv_obj.p7_reserve1 ;//保留 bytePrt++; memcpy(bytePrt,&zrf_rcv_obj.p8_st_rcv_pos[0],256-8); } else { int itemp=(flashPage&0x0F) -1;//flashpage 0x21~0x27, memcpy(bytePrt,&zrf_rcv_obj.p8_st_rcv_pos[itemp * 32 + (256-8)/8],256); } //qDebug()<<"zrf_param_msg = "<>7;//DAT信号 方式 0:高有效(共阴) 1:低有效(共阳); zrf_rcv_obj.b0_6 = (data[st_zrf_base_param.b0_RP] & 0b01000000) >>6;//STB信号有效方式 0:正向 1:反向; zrf_rcv_obj.b0_5 = (data[st_zrf_base_param.b0_RP] & 0b00100000) >>5;//OE信号有效0 :低有 效1 :高有效; zrf_rcv_obj.b0_4 = (data[st_zrf_base_param.b0_RP] & 0b00010000) >>4;//行有效方式:0 :低有效1 :高有效; zrf_rcv_obj.b0_3_1 = (data[st_zrf_base_param.b0_RP] & 0b00001110) >>1;//行译码方式bit2~bit0与地址0x01 bit7~bit6 表示 bit4~bit3。0:普通,常规138译码;00001:SM5266;00010:SM5366;01000::ICN2013;00100:无译码;00101:595译码;0110::5958译码;01110:ICND2018;其他:保留; zrf_rcv_obj.b0_0 = (data[st_zrf_base_param.b0_RP] & 0b00000001) >>0;//0 :全色;1 :单双色; zrf_rcv_obj.b1_7_6 = (data[st_zrf_base_param.b1_xiaoyingTime] & 0b11000000)>>6; //行译码方式 bit4~bit3 zrf_rcv_obj.b1_5 = (data[st_zrf_base_param.b1_xiaoyingTime] & 0b00100000)>>5; //消影控制电平0:高有效;1:低有效 zrf_rcv_obj.b1_4 = (data[st_zrf_base_param.b1_xiaoyingTime] & 0b00010000)>>4; //双卡备份0:关闭;1:启用 zrf_rcv_obj.b1_3_2 = (data[st_zrf_base_param.b1_xiaoyingTime] & 0b00001100)>>2; //颜色深度00:8bit;01:10bit;10:12bit zrf_rcv_obj.b1_1 = (data[st_zrf_base_param.b1_xiaoyingTime] & 0b00000010)>>1; //D信号扩展为第二时钟0:关闭;1:启用 zrf_rcv_obj.b1_0 = (data[st_zrf_base_param.b1_xiaoyingTime] & 0b00000001)>>0; //上电渐亮0:启用;1:关闭 zrf_rcv_obj.b2 = data[st_zrf_base_param.b2_line_xytime]; //实际消影时间为:(输入值 * 2 + 1) * 48ns zrf_rcv_obj.b3 = data[st_zrf_base_param.b3_rows1Group]; //一组数据控制模组的行数:1~64;其他无效; zrf_rcv_obj.b4 = data[st_zrf_base_param.b4_cols1Group]; //一组数据控制的模组列数:1~128,其他无效; zrf_rcv_obj.b5 = data[st_zrf_base_param.b5_scanNum]; //模组扫描方式:1~64,其他无效; zrf_rcv_obj.b6 = data[st_zrf_base_param.b6_emptyPointNum]; //模组每行空点数,详见说明2; zrf_rcv_obj.b7_7_6 = (data[st_zrf_base_param.b7_colorIndex] & 0b11000000) >> 6; //输出数据线4,00:红;01:绿;10:蓝;11:黑; zrf_rcv_obj.b7_5_4 = (data[st_zrf_base_param.b7_colorIndex] & 0b00110000) >> 4; //输出数据线3,00:红;01:绿;10:蓝;11:黑; zrf_rcv_obj.b7_3_2 = (data[st_zrf_base_param.b7_colorIndex] & 0b00001100) >> 2; //输出数据线2,00:红;01:绿;10:蓝;11:黑; zrf_rcv_obj.b7_1_0 = (data[st_zrf_base_param.b7_colorIndex] & 0b00000011) >> 0; //输出数据线1,00:红;01:绿;10:蓝;11:黑; qDebug()<<"***zrf_rcv_obj.b7_7_6="<> 3; if(mModule["DataPolarity"].toBool()) zrf_rcv_obj.b0_7 = 0; else zrf_rcv_obj.b0_7 = 1; if(mModule["OePolarity"].toBool()) zrf_rcv_obj.b0_5 = 0; else zrf_rcv_obj.b0_5 = 1; //颜色 quint8 ColorMap=mModule["ColorMap"].toInt(); int iLine_1=(ColorMap & 0b11000000) >> 6; int iLine_2=(ColorMap & 0b00110000) >> 4; int iLine_3=(ColorMap & 0b00001100) >> 2; int iLine_4=(ColorMap & 0b00000011) >> 0; switch(iLine_1) { case 0b00://黑色 zrf_rcv_obj.b7_1_0=0b11; break; case 0b01: zrf_rcv_obj.b7_1_0=0b00; break; case 0b10: zrf_rcv_obj.b7_1_0=0b01; break; case 0b11: zrf_rcv_obj.b7_1_0=0b10; break; } switch(iLine_2) { case 0b00://黑色 zrf_rcv_obj.b7_3_2=0b11; break; case 0b01: zrf_rcv_obj.b7_3_2=0b00; break; case 0b10: zrf_rcv_obj.b7_3_2=0b01; break; case 0b11: zrf_rcv_obj.b7_3_2=0b10; break; } switch(iLine_3) { case 0b00://黑色 zrf_rcv_obj.b7_5_4=0b11; break; case 0b01: zrf_rcv_obj.b7_5_4=0b00; break; case 0b10: zrf_rcv_obj.b7_5_4=0b01; break; case 0b11: zrf_rcv_obj.b7_5_4=0b10; break; } switch(iLine_4) { case 0b00://黑色 zrf_rcv_obj.b7_7_6=0b11; break; case 0b01: zrf_rcv_obj.b7_7_6=0b00; break; case 0b10: zrf_rcv_obj.b7_7_6=0b01; break; case 0b11: zrf_rcv_obj.b7_7_6=0b10; break; } //alahover ? if(mModule["GroupMode"].toStr()==tr("三线并行")) zrf_rcv_obj.b8_3_0=0b0110; else zrf_rcv_obj.b8_3_0=0b0111; zrf_rcv_obj.b8_3_0=0b0111; zrf_rcv_obj.ucZheHuiCiShu=mModule["RowPerScan"].toInt(); //描点参数 int iScanIndex=0; auto scans = mModule["RowMap"].toArray(); for(auto scan : scans) { zrf_rcv_obj.m_scanIndex[iScanIndex]=scan.toInt(); iScanIndex++; } auto points = mModule["ColumnMap"].toArray(); int iPointIndex=0; for(auto point : points) { zrf_rcv_obj.m_pixelPos[iPointIndex][0]=point.toInt() & 0x000000ff;//列 zrf_rcv_obj.m_pixelPos[iPointIndex][1]=(point.toInt() & 0x0000ff00) >>8;//行 iPointIndex++; } } int ExpertWin::GetIcTypeIndexFromName(QString strName) { auto file = QApplication::applicationDirPath()+"/driver.ic"; QFile qFile(file); if(qFile.open(QFile::ReadOnly)) { auto data = qFile.readAll(); qFile.close(); auto json = JFrom(data).toObj(); if(! json.empty()) { if(!json[strName].isNull()){ return json[strName].toInt(); } else{ QMessageBox::information(this, tr("提示"), tr("未能识别的驱动IC类型")); return -1; } } else{ QMessageBox::information(this, tr("提示"), tr("未能识别的驱动IC类型")); return -1; } } QMessageBox::information(this, tr("提示"), tr("缺失driver.ic配置文件")); return -1; } int ExpertWin::GetRowYiMaIndexFromName(QString strName) { auto file = QApplication::applicationDirPath()+"/decoder.ic"; QFile qFile(file); if(qFile.open(QFile::ReadOnly)) { auto data = qFile.readAll(); qFile.close(); auto json = JFrom(data).toObj(); if(! json.empty()) { if(!json[strName].isNull()){ return json[strName].toInt(); } else{ QMessageBox::information(this, tr("提示"), tr("未能识别的行译码IC类型")); return -1; } } else{ QMessageBox::information(this, tr("提示"), tr("未能识别的行译码IC类型")); return -1; } } QMessageBox::information(this, tr("提示"), tr("缺失driver.ic配置文件")); return -1; } void ExpertWin::changeValueByEffectControler() { //spinbox if(m_iRcvCardType!=enum_zrf) return; QObject::connect(fdCardWidth, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "箱体宽度当前值:" << value; zrf_rcv_obj.b31=value&0x00ff; zrf_rcv_obj.b32=(value&0xff00) >> 8; });// QObject::connect(spinGclkXw, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "GCLK相位当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(spinGclkZkb, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "GCLK占空比当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(spinLineNs, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "换行时间当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(spinLineWz, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "行位置当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(spinLineXy, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "消隐时间当前值:" << value; zrf_rcv_obj.b2=value; });// QObject::connect(spinPointsOnePort, static_cast(&QSpinBox::valueChanged), [=](int value){ qDebug() << "单口带载点数当前值:" << value; zrf_rcv_obj.b193=value; }); //combox QObject::connect(cbDCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DLC频率当前值:" << value; zrf_rcv_obj.b18_3_0=value; });// QObject::connect(cbDclkXw, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK相位当前值:" << value; zrf_rcv_obj.b19_7_4=value; });// QObject::connect(cbDclkZkb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "DCLK占空比当前值:" << value; zrf_rcv_obj.b19_3_0=value; });// QObject::connect(fdDirection, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "模组级联方向出当前值:" << value; zrf_rcv_obj.b8_5_4=value; });// QObject::connect(fdSectorCount, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "多开设置出当前值:" << value; zrf_rcv_obj.b70_5_2=value; if(zrf_rcv_obj.b70_5_2!=0) zrf_rcv_obj.b70_6=1; else zrf_rcv_obj.b70_6=0; });// QObject::connect(freshBeiLv, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "刷新倍率出当前值:" << value; zrf_rcv_obj.b21_7_5=value; });// QObject::connect(cbGCLKf, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "GCLK周期出当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(cbGryLevel, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "灰度等级出当前值:" << value; if(zrf_rcv_obj.m_pwmFlag==1){ switch(value){ case 0: zrf_rcv_obj.b21_4_0=23; break;//正常4096 case 1: zrf_rcv_obj.b21_4_0=26; break;//正常8192 case 2: zrf_rcv_obj.b21_4_0=29; break;//正常16384 case 3: zrf_rcv_obj.b21_4_0=30; break;//正常32768 case 4: zrf_rcv_obj.b21_4_0=31; break;//正常65535 default: zrf_rcv_obj.b21_4_0=31; break;//正常65535 } } else zrf_rcv_obj.b21_4_0=value; });// QObject::connect(cbNoSign, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "无信号输出出当前值:" << value; zrf_rcv_obj.b29_1_0=value; });// QObject::connect(cbStb, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号STB微调出当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(cbDE, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号DE微调出当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(cbABC, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行信号ABC微调出当前值:" << value; zrf_rcv_obj.b193=value; }); QObject::connect(cbXiaoYinDianPing, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "消隐电平出当前值:" << value; zrf_rcv_obj.b1_5=value; });// QObject::connect(cbSTB, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "锁存STB电平方向出当前值:" << value; zrf_rcv_obj.b0_6=value; });// QObject::connect(cbSRowOut, static_cast(&QComboBox::currentIndexChanged), [=](int value){ qDebug() << "行输出电平出当前值:" << value; zrf_rcv_obj.b0_4=value; });// //checkbox QObject::connect(checkSyncXianKa, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "同步显卡出当前值:" << value; if(value==0) zrf_rcv_obj.b26_7=value ; else zrf_rcv_obj.b26_7=0b1; });// QObject::connect(checkJianLiang, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "开屏渐亮出当前值:" << value; if(value==0) zrf_rcv_obj.b1_0=value ; else zrf_rcv_obj.b1_0=0b1; });// QObject::connect(checkDoubleCopy, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "双备份出当前值:" << value; if(value==0) zrf_rcv_obj.b1_4=value ; else zrf_rcv_obj.b1_4=0b1; });// QObject::connect(checkDsignalAsCLk, static_cast(&QCheckBox::stateChanged), [=](int value){ qDebug() << "D信号作为第二组CLK出当前值:" << value; if(value==0) zrf_rcv_obj.b1_1=value ; else zrf_rcv_obj.b1_1=0b1; });// } void ExpertWin::SetEffectControlerValueByClass() { //spinbox fdCardWidth->setValue(( zrf_rcv_obj.b32<<8)|zrf_rcv_obj.b31); qDebug() << "箱体宽度当前值:" << fdCardWidth->value();// spinGclkXw->setValue(zrf_rcv_obj.b193); qDebug() << "GCLK相位当前值:" << spinGclkXw->value(); spinGclkZkb->setValue(zrf_rcv_obj.b193); qDebug() << "GCLK占空比当前值:" << spinGclkZkb->value(); spinLineNs->setValue(zrf_rcv_obj.b193); qDebug() << "换行时间当前值:" << spinLineNs->value(); spinLineWz->setValue(zrf_rcv_obj.b193); qDebug() << "行位置当前值:" << spinLineWz->value(); spinLineXy->setValue(zrf_rcv_obj.b2); qDebug() << "消隐时间当前值:" << spinLineXy->value();// spinPointsOnePort->setValue(zrf_rcv_obj.b193); qDebug() << "单口带载点数当前值:" << spinPointsOnePort->value(); //combox cbDCLKf->setCurrentIndex(zrf_rcv_obj.b18_3_0); qDebug() << "DLC频率当前值:" << cbDCLKf->currentIndex(); cbDclkXw->setCurrentIndex(zrf_rcv_obj.b19_7_4); qDebug() << "DCLK相位当前值:" << cbDclkXw->currentIndex(); cbDclkZkb->setCurrentIndex(zrf_rcv_obj.b19_3_0); qDebug() << "DCLK占空比当前值:" << cbDclkZkb->currentIndex(); fdDirection->setCurrentIndex(zrf_rcv_obj.b8_5_4); qDebug() << "模组级联方向出当前值:" << fdDirection->currentIndex(); fdSectorCount->setCurrentIndex(zrf_rcv_obj.b70_5_2); qDebug() << "多开设置出当前值:" << fdSectorCount->currentIndex(); freshBeiLv->setCurrentIndex(zrf_rcv_obj.b21_7_5); qDebug() << "刷新倍率出当前值:" << freshBeiLv->currentIndex(); cbGCLKf->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "GCLK周期出当前值:" << cbGCLKf->currentIndex(); int index=31; if(zrf_rcv_obj.m_pwmFlag==1) switch(zrf_rcv_obj.b21_4_0){ case 23: index=0; break;//正常4096 case 26: index=1; break;//正常8192 case 29: index=2; break;//正常16384 case 30: index=3; break;//正常32768 case 31: index=4; break;//正常65535 default: index=4; break;//正常65535 } else index=zrf_rcv_obj.b21_4_0; cbGryLevel->setCurrentIndex(index); qDebug() << "灰度等级出当前值:" << cbGryLevel->currentIndex(); cbNoSign->setCurrentIndex(zrf_rcv_obj.b29_1_0); qDebug() << "无信号输出出当前值:" << cbNoSign->currentIndex(); cbStb->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "行信号STB微调出当前值:" << cbStb->currentIndex(); cbDE->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "行信号DE微调出当前值:" << cbDE->currentIndex(); cbABC->setCurrentIndex(zrf_rcv_obj.b193); qDebug() << "行信号ABC微调出当前值:" << cbABC->currentIndex(); cbXiaoYinDianPing->setCurrentIndex(zrf_rcv_obj.b1_5); qDebug() << "消隐电平出当前值:" << cbXiaoYinDianPing->currentIndex(); cbSTB->setCurrentIndex(zrf_rcv_obj.b0_6); qDebug() << "锁存STB电平方向出当前值:" << cbSTB->currentIndex(); cbSRowOut->setCurrentIndex(zrf_rcv_obj.b0_4); qDebug() << "行输出电平出当前值:" << cbSRowOut->currentIndex(); //checkbox checkSyncXianKa->setChecked(zrf_rcv_obj.b26_7); qDebug() << "同步显卡出当前值:" << checkSyncXianKa->isChecked(); checkJianLiang->setChecked(zrf_rcv_obj.b1_0); qDebug() << "开屏渐亮出当前值:" << checkJianLiang->isChecked(); checkDoubleCopy->setChecked(zrf_rcv_obj.b1_4); qDebug() << "双备份出当前值:" << checkDoubleCopy->isChecked(); checkDsignalAsCLk->setChecked(zrf_rcv_obj.b1_1); qDebug() << "D信号作为第二组CLK出当前值:" << checkDsignalAsCLk->isChecked(); if(m_iRcvCardType == enum_zrf) { //发送基本参数 auto zrf_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 ff ff 00 f1 f1 f1 f1 00 00 00 00 00 00 00 00 00 00 00 00"); auto zrf_cmd_msg = QByteArray::fromHex("55 55 00 11 22 33 44 55 00 11 22 33 44 55 10 5a 13 00 00 00 00 e0 00 00 00 f2 f2 f2 f2 00 00 00 00 00 00 00 00 00 00 00 00"); int res1=0; //发送基本参数 MACRO_FUNC_SEND_PARAM("读取基本参数",classToBaseMsg(),1,0x00) } } //added by alahover -o 20230830