ledset增加通信框架

This commit is contained in:
gangphon 2023-03-20 11:30:19 +08:00
parent bfb8e549e4
commit 36433b4d75
13 changed files with 360 additions and 280 deletions

View File

@ -537,6 +537,8 @@ QTabBar::tab:selected {margin-top: 0; border-bottom: none; color: #acf; backgrou
connect(btn, &QPushButton::clicked, this, [=] {
QByteArray data;
addMapData(data);
QMessageBox::information(this, tr("发送成功"), tr("发送成功"));
});
hBox->addWidget(btn);
@ -731,10 +733,11 @@ void run() {
// bytes.append("\0\x4", 2); //数据长度
// bytes.append(4, '\xff'); //目的地址
// bytes.append(4, 0); //源地址
// bytes.append("\x35\0\xc\xbb", 4); //内存指针
// bytes.append("\xB1\x04\0\0", 4); //内存指针
// bytes.append(2, 0); //应答填充项
// auto crc32 = crc32_calc((uint8_t*)bytes.data()+2, bytes.length()-2);
// bytes.append(crc32>>24).append(crc32>>16).append(crc32>>8).append(crc32);
// bytes.append(crc32>>24).append(crc32>>16).append(crc32>>8).append(crc32); //包头校验
// crc32 = crc32_calc((uint8_t*)bytes.data()+bytes.length()-4, 4);
// bytes.append(crc32>>24).append(crc32>>16).append(crc32>>8).append(crc32);
// //发送帧开始指令包

View File

@ -3,7 +3,6 @@
#include "basewin.h"
#define HAVE_REMOTE
#include <winsock2.h>
#include "pcap.h"
#include <QThread>
#include <QLabel>

View File

@ -117,3 +117,15 @@ QByteArray getNetDev(QWidget *parent, QByteArray def) {
return name;
}
}
QByteArray sendMsg(QByteArray msg) {
return sendMsgNet(msg);
}
QByteArray sendMsgNet(QByteArray msg) {
return msg;
}

View File

@ -6,4 +6,7 @@
QByteArray getNetDev(QWidget *parent, QByteArray);
QByteArray sendMsg(QByteArray);
QByteArray sendMsgNet(QByteArray);
#endif // GLOBALFUNC_H

View File

@ -10,6 +10,13 @@ CONFIG += embed_translations
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
INCLUDEPATH += $$PWD/WpdPack_4_1_2/Include
LIBS += -L$$PWD/WpdPack_4_1_2/Lib/\
-lwpcap\
-lpacket
-lWs2_32
msvc {
QMAKE_CXXFLAGS += -execution-charset:utf-8
QMAKE_CXXFLAGS += -source-charset:utf-8
@ -36,6 +43,7 @@ SOURCES += \
gqt.cpp \
main.cpp \
mainwin.cpp \
pcaprethread.cpp \
pcapwin.cpp \
screenunit.cpp \
table.cpp \
@ -52,6 +60,7 @@ HEADERS += \
globalfunc.h \
gqt.h \
mainwin.h \
pcaprethread.h \
pcapwin.h \
screenunit.h \
table.h \
@ -71,13 +80,6 @@ RESOURCES += \
RC_ICONS = 128.ico
INCLUDEPATH += $$PWD/WpdPack_4_1_2/Include
LIBS += -L$$PWD/WpdPack_4_1_2/Lib/\
-lwpcap\
-lpacket
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin

View File

@ -5,7 +5,7 @@
#include <QTranslator>
#include <QIcon>
#include <QMessageBox>
#include <QDebug>
#include <QStyleFactory>
#ifdef _MSC_VER //MSVC编译器
#define _WINSOCKAPI_
@ -18,10 +18,7 @@ LONG WINAPI handleException(_EXCEPTION_POINTERS *excep) {
QString errCode = QString::number(excep->ExceptionRecord->ExceptionCode, 16);
QString errAddr = QString::number((uint)excep->ExceptionRecord->ExceptionAddress, 16);
HANDLE hDumpFile = CreateFile(L"c:/ledset-crash.dmp", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if(hDumpFile == INVALID_HANDLE_VALUE) {
qDebug()<<"handleException hDumpFile INVALID"<<"ExceptionCode"<<errCode<<"ExceptionAddress"<<errAddr;
return EXCEPTION_CONTINUE_SEARCH; //未处理异常, 让 windows 弹出错误框并结束 (Qt会卡死一段时间)
}
if(hDumpFile == INVALID_HANDLE_VALUE) return EXCEPTION_CONTINUE_SEARCH; //未处理异常, 让 windows 弹出错误框并结束 (Qt会卡死一段时间)
MINIDUMP_EXCEPTION_INFORMATION dumpInfo{GetCurrentThreadId(), excep, TRUE};
MiniDumpWriteDump(GetCurrentProcess(), GetCurrentProcessId(), hDumpFile, MiniDumpNormal, &dumpInfo, NULL, NULL);//写入Dump文件内容
CloseHandle(hDumpFile);
@ -36,47 +33,30 @@ int main(int argc, char *argv[]) {
QApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
QApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
QApplication a(argc, argv);
a.setStyle(QStyleFactory::create("Fusion"));
a.setWindowIcon(QIcon(":/128.ico"));
a.setStyleSheet(R"rrr(
QLineEdit {border: 1px solid #777; border-radius: 2px; padding: 2px;}
QAbstractScrollArea {border: 1px solid #777;}
QTableView {gridline-color:#777;}
QMessageBox {background: #333;}
QGroupBox {border: 1px solid #777; border-radius: 3px; margin-top: 0.5em; padding-top: 0.4em;}
QGroupBox::title {color: #fff; subcontrol-origin: margin; left: 0.5em;}
QLineEdit, QComboBox, QSpinBox, QPushButton, QAbstractScrollArea {border: 1px solid #888;}
QLineEdit, QComboBox, QSpinBox {border-radius: 2px; padding: 2px; background: #222;}
QPushButton {border-radius: 4px; padding: 2px 6px; background: #444;}
QPushButton:hover {background: #555;}
QPushButton:pressed {background: #666;}
QPushButton:checked {background: #026; border-color: #06f;}
QPushButton:!enabled {background: #666; color: #777;}
QPushButton[ss="min"]{border-radius: 4px; padding: 0; width: 30px; height: 25px; background: #07c;}
QPushButton[ss="close"]{border-radius: 4px; padding: 0; width: 30px; height: 25px; background: #e22;}
QPushButton[ss="blue"] {background: #07a; border: 1px solid #0080bb;}
QPushButton:hover[ss="blue"] {background: #069}
QPushButton:pressed[ss="blue"] {background: #058;}
QRadioButton::indicator {border-image: url(:/imgs/radio-un.png); width: 1em; height: 1em;}
QRadioButton::indicator:checked {border-image: url(:/imgs/radio-check.png);}
QCheckBox::indicator {border-image: url(:/imgs/checkbox-un.png); width: 1em; height: 1em;}
QCheckBox::indicator:checked {border-image: url(:/imgs/checkbox-check.png);}
QAbstractScrollArea QScrollBar {background: #222;}
QPushButton[ss="min"]{padding: 0; width: 30px; height: 25px; }
QPushButton[ss="close"]{padding: 0; width: 30px; height: 25px; }
QTableView {gridline-color:#777;}
QHeaderView::section, QTableCornerButton:section {background: #444;}
QSlider::horizontal {height: 16px;}
QSlider::groove {background: transparent;}
QSlider::sub-page:horizontal {background: #07c; margin: 5px 0; border-radius: 2px;}
QSlider::add-page:horizontal {background: #888; margin: 5px 0; border-radius: 2px;}
QSlider::handle {background: #eee; border-radius: 2px;}
QSlider::handle:hover {background: #fff;}
QSlider::handle:horizontal {width: 8px;}
QPushButton[ss="blue"] {background: #07a;}
)rrr");
/*
*/
QFont font;
font.setFamilies(QStringList{"Arial","Microsoft YaHei UI"});
font.setPixelSize(14);
@ -87,14 +67,15 @@ QSlider::handle:horizontal {width: 8px;}
plt.setBrush(QPalette::Base, QColor(0x222222));
plt.setBrush(QPalette::AlternateBase, QColor(0x333333));
plt.setBrush(QPalette::Text, QColor(0xffffff));
plt.setBrush(QPalette::Button, QColor(0x444444));
plt.setBrush(QPalette::PlaceholderText, QColor(0xaaaaaa));
plt.setBrush(QPalette::Button, QColor(0x555555));
plt.setBrush(QPalette::ButtonText, QColor(0xffffff));
plt.setBrush(QPalette::ToolTipBase, QColor(0x444466));
plt.setBrush(QPalette::ToolTipText, QColor(0xffffff));
plt.setBrush(QPalette::ToolTipText, QColor(0xeeeeee));
plt.setBrush(QPalette::Light, QColor(0x444444));
plt.setBrush(QPalette::Midlight, QColor(0x555555));
plt.setBrush(QPalette::Mid, QColor(0x666666));
plt.setBrush(QPalette::Dark, QColor(0x777777));
plt.setBrush(QPalette::Midlight, QColor(0x666666));
plt.setBrush(QPalette::Mid, QColor(0x888888));
plt.setBrush(QPalette::Dark, QColor(0xaaaaaa));
plt.setBrush(QPalette::BrightText, QColor(0,0,0));
plt.setBrush(QPalette::Shadow, QColor(0xaaaaaa));
a.setPalette(plt);

View File

@ -1,4 +1,5 @@
#include "mainwin.h"
#include "pcaprethread.h"
#include "fast.h"
#include "expertwin.h"
#include "brightwin.h"
@ -145,10 +146,11 @@ MainWin::MainWin() {
QMessageBox::critical(this, "Error", QString(tr("打开网卡失败"))+errbuf);
return;
}
if(pcapRe) pcap_close(pcapRe);
if(reThd) reThd->status = 2;
if(pcapSend) pcap_close(pcapSend);
pcapRe = pcapR;
pcapSend = pcapS;
reThd = new PcapReThread(pcapR);
reThd->start();
QSettings config(QApplication::applicationDirPath()+"/ledset.config", QSettings::IniFormat);//QDir::currentPath()为exe位置
config.beginGroup("GLOBAL");
config.setValue("net_name", net_name = name);
@ -159,6 +161,20 @@ MainWin::MainWin() {
auto btnRefresh = new QPushButton(tr("刷新"));
btnRefresh->setMinimumWidth(80);
connect(btnRefresh, &QPushButton::clicked, this, [this] {
reThd->addResp({0x1E0, [=](const QByteArray data) {
if(((u_char)data[10])==0xB0 && data[11]==0 && data[12]==1 && data[13]==1) {
auto rr = table->rowCount();
table->setRowCount(rr+1);
uint32_t virtualVCM = data[6]<<8 | data[7] ;
table->setValue(rr, "type", tr("虚拟设备"));
table->setValue(rr, "name", tr("网口:")+QString::number(virtualVCM));
table->setValue(rr, "link", "千兆网直连");
uint32_t vcsNum = data[20] << 24 | data[21] <<16 | data[22] <<8 | data[23] ;
table->setValue(rr, "vcs", QString::number(vcsNum));
table->setValue(rr, "Pinfo", "P:"+QString::number(virtualVCM));
table->setValue(rr, "Oinfo", "备注:可直接配屏,无需发送卡");
}
}});
auto bytes = QByteArray::fromHex("55 55 01 AD 00 01 FF FF FF FF 00 00 00 00 B0 00 01 00 00 00 3B 11 0A 6C 00 00 00 00 21 44 DF 1C");
if(pcap_sendpacket(pcapSend, (u_char*)bytes.data(), bytes.size())) {
QMessageBox::critical(this, "Error", QString(tr("发送失败: "))+pcap_geterr(pcapSend));
@ -175,63 +191,23 @@ MainWin::MainWin() {
name = getNetDev(this, name);
if(! name.isEmpty()) {
char errbuf[PCAP_ERRBUF_SIZE]{'\0'};
pcapRe = pcap_open_live(name.data(), 65536, PCAP_OPENFLAG_PROMISCUOUS|4|8|16, 50, errbuf);
auto pcapRe = pcap_open_live(name.data(), 65536, PCAP_OPENFLAG_PROMISCUOUS|4|8|16, 50, errbuf);
if(pcapRe == 0) QMessageBox::critical(this, "Error", QString(tr("打开网卡失败"))+errbuf);
else {
pcapSend = pcap_open_live(name.data(), 65536, 0, 50, errbuf);
if(pcapSend == 0) QMessageBox::critical(this, "Error", QString(tr("打开网卡失败"))+errbuf);
else config.setValue("net_name", net_name = name);
else {
config.setValue("net_name", net_name = name);
reThd = new PcapReThread(pcapRe);
reThd->start();
}
}
}
config.endGroup();
}
MainPcapThread::MainPcapThread(pcap_t *pcap) : pcap(pcap) {
connect(this, &QThread::finished, this, &QThread::deleteLater);
}
void MainWin::ProNetData(const u_char *data,int len) {
void MainPcapThread::run() {
pcap_pkthdr *header;
const u_char *data;
int res;
while((res = pcap_next_ex(pcap, &header, &data)) >= 0) {
if(status==2) return;
if(status==1 || res == 0) continue; //超时
//if(data[0]!=0x55 || data[1]!=0x55 || (data[6] ==0xff && data[7] ==0xff && data[8] == 0xff && data[9] == 0xff)) continue;
if(data[0]!=0x55 || data[1]!=0x55 )
continue;
emit onMsg(data,header->caplen);
}
emit onError(pcap_geterr(pcap));
}
void MainWin::ProNetData(const u_char *data,int len)
{
if(table != nullptr)
{
uint32_t pio=data[14] << 24 | data[15] <<16 | data[16] <<8 | data[17] ;
uint8_t srv = data[3];
if(srv == 0xEA && pio == 0xB0000101 )
{
table->setRowCount(1);
uint16_t pIndex = data[10]<<8 | data[11];
uint32_t virtualVCM = pIndex ;
uint32_t vcsNum = data[24] << 24 | data[25] <<16 | data[26] <<8 | data[27] ;
table->setValue(0, "type", tr("虚拟设备"));
table->setValue(0, "name", tr("网口:")+QString::number(virtualVCM));
table->setValue(0, "link", "千兆网直连");
table->setValue(0, "vcs", QString::number(vcsNum));
table->setValue(0, "Pinfo", "P:"+QString::number(virtualVCM));
table->setValue(0, "Oinfo", "备注:可直接配屏,无需发送卡");
}
else
{
QString data_str;
for(uint i=0; i<len; i++) {
data_str.append(QString::asprintf("%.2x ", data[i]));
}
// QMessageBox::critical(this, "net data", data_str);
}
}
}

View File

@ -3,26 +3,7 @@
#include "basewin.h"
#include "table.h"
#define HAVE_REMOTE
#include <winsock2.h>
#include "pcap.h"
#include <QThread>
class MainPcapThread : public QThread {
Q_OBJECT
public:
explicit MainPcapThread(pcap *pcap);
~MainPcapThread() {
pcap_close(pcap);
}
pcap *pcap;
std::atomic<char> status{0};
protected:
void run();
signals:
void onMsg(const u_char *data,int len);
void onError(char *);
};
#include "pcaprethread.h"
class MainWin : public BaseWin {
Q_OBJECT
@ -30,13 +11,12 @@ public:
MainWin();
QWidget *win{0};
QByteArray net_name;
pcap_t *pcapRe{0};
pcap_t *pcapSend{0};
MainPcapThread *thd{0};
Table *table = nullptr;
protected slots:
void ProNetData(const u_char *data,int len);
PcapReThread *reThd{0};
Table *table{0};
protected slots:
void ProNetData(const uint8_t *data, int len);
};
#endif // MAINWIN_H

31
ledset/pcaprethread.cpp Normal file
View File

@ -0,0 +1,31 @@
#include "pcaprethread.h"
PcapReThread::PcapReThread(pcap_t *pcap) : pcap(pcap) {
connect(this, &QThread::finished, this, &QThread::deleteLater);
connect(this, &PcapReThread::onMsg, this, [](Resp resp, const QByteArray data) {
resp.callback(data);
});
}
void PcapReThread::run() {
pcap_pkthdr *header;
const u_char *data;
int res;
while((res = pcap_next_ex(pcap, &header, &data)) >= 0) {
if(status==2) return;
if(status==1 || res == 0) continue; //超时
if(data[0]!=0x55 || data[1]!=0x55 ) continue;
int id = data[2]<<8 | data[3];
{
std::lock_guard<std::mutex> lock(mtx);
for(int i=0; i<resps.size(); i++) if(resps[i].id==id) {
auto resp = resps.takeAt(i);
emit onMsg(resp, QByteArray((char*)(data+4), header->caplen));
break;
}
}
}
emit onError(pcap_geterr(pcap));
}

35
ledset/pcaprethread.h Normal file
View File

@ -0,0 +1,35 @@
#ifndef PCAPRETHREAD_H
#define PCAPRETHREAD_H
#include <QThread>
#define HAVE_REMOTE
#include "pcap.h"
struct Resp {
int id;
std::function<void(const QByteArray)> callback;
};
class PcapReThread : public QThread {
Q_OBJECT
public:
explicit PcapReThread(pcap *pcap);
~PcapReThread() {
pcap_close(pcap);
}
void addResp(const Resp &resp) {
std::lock_guard<std::mutex> lock(mtx);
resps.append(resp);
}
std::atomic<char> status{0};
QList<Resp> resps;
std::mutex mtx;
pcap *pcap;
signals:
void onMsg(Resp resp, const QByteArray data);
void onError(char *);
protected:
void run();
};
#endif // PCAPRETHREAD_H

View File

@ -3,7 +3,6 @@
#include "basewin.h"
#define HAVE_REMOTE
#include <winsock2.h>
#include "pcap.h"
#include <QThread>

View File

@ -136,430 +136,486 @@
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="38"/>
<location filename="../expertsmartpointsetwin.cpp" line="46"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="51"/>
<location filename="../expertsmartpointsetwin.cpp" line="59"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="63"/>
<location filename="../expertsmartpointsetwin.cpp" line="71"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="75"/>
<location filename="../expertsmartpointsetwin.cpp" line="83"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="93"/>
<location filename="../expertsmartpointsetwin.cpp" line="101"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="104"/>
<location filename="../expertsmartpointsetwin.cpp" line="112"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="108"/>
<location filename="../expertsmartpointsetwin.cpp" line="116"/>
<source>138</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="115"/>
<location filename="../expertsmartpointsetwin.cpp" line="123"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="119"/>
<location filename="../expertsmartpointsetwin.cpp" line="127"/>
<source>线</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="120"/>
<location filename="../expertsmartpointsetwin.cpp" line="128"/>
<source>1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="121"/>
<location filename="../expertsmartpointsetwin.cpp" line="129"/>
<source>8</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="122"/>
<location filename="../expertsmartpointsetwin.cpp" line="130"/>
<source>16</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="140"/>
<location filename="../expertsmartpointsetwin.cpp" line="148"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="152"/>
<location filename="../expertsmartpointsetwin.cpp" line="160"/>
<source>线//: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="158"/>
<location filename="../expertsmartpointsetwin.cpp" line="166"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="161"/>
<location filename="../expertsmartpointsetwin.cpp" line="169"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="170"/>
<location filename="../expertsmartpointsetwin.cpp" line="178"/>
<source>线/: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="188"/>
<location filename="../expertsmartpointsetwin.cpp" line="196"/>
<source>245: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="212"/>
<location filename="../expertsmartpointsetwin.cpp" line="220"/>
<source>线</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="217"/>
<location filename="../expertsmartpointsetwin.cpp" line="225"/>
<source>, </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="223"/>
<location filename="../expertsmartpointsetwin.cpp" line="231"/>
<source>1</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="228"/>
<location filename="../expertsmartpointsetwin.cpp" line="254"/>
<location filename="../expertsmartpointsetwin.cpp" line="280"/>
<location filename="../expertsmartpointsetwin.cpp" line="236"/>
<location filename="../expertsmartpointsetwin.cpp" line="262"/>
<location filename="../expertsmartpointsetwin.cpp" line="288"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="233"/>
<location filename="../expertsmartpointsetwin.cpp" line="258"/>
<location filename="../expertsmartpointsetwin.cpp" line="284"/>
<location filename="../expertsmartpointsetwin.cpp" line="241"/>
<location filename="../expertsmartpointsetwin.cpp" line="266"/>
<location filename="../expertsmartpointsetwin.cpp" line="292"/>
<source>绿</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="237"/>
<location filename="../expertsmartpointsetwin.cpp" line="263"/>
<location filename="../expertsmartpointsetwin.cpp" line="288"/>
<location filename="../expertsmartpointsetwin.cpp" line="245"/>
<location filename="../expertsmartpointsetwin.cpp" line="271"/>
<location filename="../expertsmartpointsetwin.cpp" line="296"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="241"/>
<location filename="../expertsmartpointsetwin.cpp" line="267"/>
<location filename="../expertsmartpointsetwin.cpp" line="293"/>
<location filename="../expertsmartpointsetwin.cpp" line="249"/>
<location filename="../expertsmartpointsetwin.cpp" line="275"/>
<location filename="../expertsmartpointsetwin.cpp" line="301"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="250"/>
<location filename="../expertsmartpointsetwin.cpp" line="258"/>
<source>2</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="276"/>
<location filename="../expertsmartpointsetwin.cpp" line="284"/>
<source>3</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="351"/>
<location filename="../expertsmartpointsetwin.cpp" line="359"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="362"/>
<location filename="../expertsmartpointsetwin.cpp" line="370"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="371"/>
<location filename="../expertsmartpointsetwin.cpp" line="561"/>
<location filename="../expertsmartpointsetwin.cpp" line="379"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="402"/>
<location filename="../expertsmartpointsetwin.cpp" line="411"/>
<location filename="../expertsmartpointsetwin.cpp" line="410"/>
<location filename="../expertsmartpointsetwin.cpp" line="419"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="402"/>
<location filename="../expertsmartpointsetwin.cpp" line="410"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="411"/>
<location filename="../expertsmartpointsetwin.cpp" line="419"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="430"/>
<location filename="../expertsmartpointsetwin.cpp" line="438"/>
<source>:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="433"/>
<location filename="../expertsmartpointsetwin.cpp" line="441"/>
<source>: :</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="442"/>
<location filename="../expertsmartpointsetwin.cpp" line="450"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="446"/>
<location filename="../expertsmartpointsetwin.cpp" line="454"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="483"/>
<location filename="../expertsmartpointsetwin.cpp" line="494"/>
<location filename="../expertsmartpointsetwin.cpp" line="523"/>
<location filename="../expertsmartpointsetwin.cpp" line="544"/>
<location filename="../expertsmartpointsetwin.cpp" line="550"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="494"/>
<location filename="../expertsmartpointsetwin.cpp" line="544"/>
<source> %1 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="523"/>
<location filename="../expertsmartpointsetwin.cpp" line="550"/>
<source> %1 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="540"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="511"/>
<location filename="../expertsmartpointsetwin.cpp" line="540"/>
<source>Module file (*.module)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="553"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="516"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="526"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="527"/>
<source>1X2_3扫</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="531"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="539"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="542"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertsmartpointsetwin.cpp" line="566"/>
<source></source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>ExpertWin</name>
<message>
<location filename="../expertwin.cpp" line="196"/>
<location filename="../expertwin.cpp" line="225"/>
<source>线</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="200"/>
<location filename="../expertwin.cpp" line="229"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="258"/>
<location filename="../expertwin.cpp" line="284"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="261"/>
<location filename="../expertwin.cpp" line="287"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="277"/>
<location filename="../expertwin.cpp" line="305"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="280"/>
<location filename="../expertwin.cpp" line="308"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="286"/>
<location filename="../expertwin.cpp" line="314"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="287"/>
<location filename="../expertwin.cpp" line="315"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="288"/>
<location filename="../expertwin.cpp" line="316"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="289"/>
<location filename="../expertwin.cpp" line="317"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="293"/>
<source></source>
<location filename="../expertwin.cpp" line="318"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="294"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="295"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="296"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="300"/>
<source>180</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="302"/>
<source></source>
<location filename="../expertwin.cpp" line="319"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="320"/>
<source></source>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="321"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="326"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="327"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="328"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="329"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="337"/>
<source>180°</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="340"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="352"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="362"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="334"/>
<location filename="../expertwin.cpp" line="370"/>
<source>:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="344"/>
<location filename="../expertwin.cpp" line="381"/>
<source>DCLK频率:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="359"/>
<location filename="../expertwin.cpp" line="396"/>
<source>DCLK相位:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="366"/>
<location filename="../expertwin.cpp" line="403"/>
<source>DCLK占空比:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="373"/>
<location filename="../expertwin.cpp" line="410"/>
<source>(ns):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="382"/>
<location filename="../expertwin.cpp" line="419"/>
<source>:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="384"/>
<location filename="../expertwin.cpp" line="421"/>
<source>100%</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="388"/>
<location filename="../expertwin.cpp" line="425"/>
<source>GCLK频率:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="403"/>
<location filename="../expertwin.cpp" line="440"/>
<source>:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="416"/>
<location filename="../expertwin.cpp" line="453"/>
<source>GCLK占空比:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="423"/>
<location filename="../expertwin.cpp" line="460"/>
<source>(ns):</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="434"/>
<location filename="../expertwin.cpp" line="471"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="445"/>
<location filename="../expertwin.cpp" line="482"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="450"/>
<location filename="../expertwin.cpp" line="487"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="455"/>
<location filename="../expertwin.cpp" line="492"/>
<location filename="../expertwin.cpp" line="514"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="492"/>
<source>Box file (*.box)</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="496"/>
<location filename="../expertwin.cpp" line="502"/>
<location filename="../expertwin.cpp" line="518"/>
<location filename="../expertwin.cpp" line="526"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="496"/>
<location filename="../expertwin.cpp" line="518"/>
<source> %1 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="502"/>
<location filename="../expertwin.cpp" line="526"/>
<source> %1 </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="505"/>
<location filename="../expertwin.cpp" line="529"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="510"/>
<source>Map</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="535"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="460"/>
<location filename="../expertwin.cpp" line="542"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="547"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="465"/>
<location filename="../expertwin.cpp" line="552"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="477"/>
<location filename="../expertwin.cpp" line="564"/>
<source>:</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../expertwin.cpp" line="483"/>
<location filename="../expertwin.cpp" line="570"/>
<source>()</source>
<translation type="unfinished"></translation>
</message>
@ -567,76 +623,82 @@
<context>
<name>MainWin</name>
<message>
<location filename="../mainwin.cpp" line="83"/>
<location filename="../mainwin.cpp" line="82"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="87"/>
<location filename="../mainwin.cpp" line="86"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="91"/>
<location filename="../mainwin.cpp" line="90"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="95"/>
<location filename="../mainwin.cpp" line="94"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="99"/>
<location filename="../mainwin.cpp" line="98"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="103"/>
<location filename="../mainwin.cpp" line="102"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="111"/>
<location filename="../mainwin.cpp" line="107"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="131"/>
<location filename="../mainwin.cpp" line="127"/>
<source>版本:221114</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="144"/>
<location filename="../mainwin.cpp" line="149"/>
<location filename="../mainwin.cpp" line="183"/>
<location filename="../mainwin.cpp" line="186"/>
<location filename="../mainwin.cpp" line="140"/>
<location filename="../mainwin.cpp" line="145"/>
<location filename="../mainwin.cpp" line="179"/>
<location filename="../mainwin.cpp" line="182"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="163"/>
<location filename="../mainwin.cpp" line="159"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="168"/>
<location filename="../mainwin.cpp" line="164"/>
<source>: </source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="223"/>
<location filename="../mainwin.cpp" line="219"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../mainwin.cpp" line="224"/>
<location filename="../mainwin.cpp" line="220"/>
<source>:</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>PcapWin</name>
<message>
<location filename="../pcapwin.cpp" line="16"/>
<location filename="../pcapwin.cpp" line="21"/>
<source></source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../pcapwin.cpp" line="30"/>
<source></source>

View File

@ -3,8 +3,8 @@
#include "basewin.h"
#define HAVE_REMOTE
#include <winsock2.h>
#include "pcap.h"
#include <winsock2.h>
#include <QThread>
#include <QSpinBox>
#include <QLabel>
@ -12,9 +12,6 @@
#include <QCheckBox>
#include "Win32-Extensions.h"
#pragma comment(lib, "wpcap.lib")
#pragma comment(lib, "Ws2_32.lib")
class VideoSendThread : public QThread {
Q_OBJECT
public: