Browse Source

update

master
zhaohe 2 years ago
parent
commit
ab28efe748
  1. 2
      CMakeLists.txt.user
  2. 2
      libxsync
  3. 120
      mainwindow.cpp
  4. 32
      mainwindow.h
  5. 379
      mainwindow.ui
  6. 13
      src/xsync_udp_factory_impl.cpp

2
CMakeLists.txt.user

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject> <!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 5.0.2, 2024-01-04T09:51:11. -->
<!-- Written by QtCreator 5.0.2, 2024-01-06T22:33:33. -->
<qtcreator> <qtcreator>
<data> <data>
<variable>EnvironmentId</variable> <variable>EnvironmentId</variable>

2
libxsync

@ -1 +1 @@
Subproject commit 2cc98f9f617feb976e1f3f724489a1562dffb20d
Subproject commit f3f3e6ffe2f4badaf89a29003722c8772b82a738

120
mainwindow.cpp

@ -60,8 +60,9 @@ void MainWindow::doinui_slot(QFunction func) {
if (func.get()) func.get()(); if (func.get()) func.get()();
} }
void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag) {
void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag, reg_val_type_t regvaltype) {
DispalyRegIterm *regitem = new DispalyRegIterm(); DispalyRegIterm *regitem = new DispalyRegIterm();
regitem->regvaltype = regvaltype;
{ {
auto *label = new QLabel(parent); auto *label = new QLabel(parent);
label->setObjectName(QString::fromUtf8("label")); label->setObjectName(QString::fromUtf8("label"));
@ -71,7 +72,7 @@ void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t
sizePolicy1.setVerticalStretch(0); sizePolicy1.setVerticalStretch(0);
sizePolicy1.setHeightForWidth(label->sizePolicy().hasHeightForWidth()); sizePolicy1.setHeightForWidth(label->sizePolicy().hasHeightForWidth());
label->setSizePolicy(sizePolicy1); label->setSizePolicy(sizePolicy1);
label->setMinimumSize(QSize(200, 0));
label->setMinimumSize(QSize(250, 0));
label->setMaximumSize(QSize(16777215, 16777215)); label->setMaximumSize(QSize(16777215, 16777215));
ui->reg_table->addWidget(label, off, 0, 1, 1); ui->reg_table->addWidget(label, off, 0, 1, 1);
regitem->label = label; regitem->label = label;
@ -80,7 +81,7 @@ void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t
auto *textbrowser = new QTextBrowser(parent); auto *textbrowser = new QTextBrowser(parent);
textbrowser->setObjectName(QString::fromUtf8("textbrowser")); textbrowser->setObjectName(QString::fromUtf8("textbrowser"));
textbrowser->setEnabled(true); textbrowser->setEnabled(true);
textbrowser->setText(QString("demo"));
textbrowser->setText(QString("unset"));
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(0); sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0); sizePolicy.setVerticalStretch(0);
@ -129,8 +130,8 @@ void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t
auto ecode = Xsync::Ins().reg_write(regadd, regval, readbackval); auto ecode = Xsync::Ins().reg_write(regadd, regval, readbackval);
if (ecode == kxs_ec_success) { if (ecode == kxs_ec_success) {
ZLOGI(TAG, "write reg 0x%04x %d success", regadd, regval); ZLOGI(TAG, "write reg 0x%04x %d success", regadd, regval);
m_regdisplayer[regadd]->regvalcache = regval;
m_regdisplayer[regadd]->regBrowser->setText(QString::number(regval, 16));
m_regdisplayer[regadd]->regvalcache = readbackval;
updateUI_timeCodeInfo(regadd);
} else { } else {
ZLOGE(TAG, "write reg 0x%04x %d fail,ecode:%s", regadd, regval, xs_error_code_2_str(ecode)); ZLOGE(TAG, "write reg 0x%04x %d fail,ecode:%s", regadd, regval, xs_error_code_2_str(ecode));
} }
@ -143,18 +144,52 @@ void MainWindow::push_reg(QWidget *parent, int off, const char *regname, int32_t
m_regdisplayer[regadd] = regitem; m_regdisplayer[regadd] = regitem;
} }
void MainWindow::updateUI_timeCodeInfo(uint32_t regoff) {
// m_regdisplayer[regoff]->regBrowser->setText("0x" + QString::number(regValue, 16));
uint32_t regval = m_regdisplayer[regoff]->regvalcache;
auto *regBrowser = m_regdisplayer[regoff]->regBrowser;
reg_val_type_t regvaltype = m_regdisplayer[regoff]->regvaltype;
if (regvaltype == kreg_val_type_dotted_hex) {
regBrowser->setText(QString(fmt("%02x.%02x.%02x.%02x", (regval >> 0) & 0xff, (regval >> 8) & 0xff, (regval >> 16) & 0xff, (regval >> 24) & 0xff)));
} else if (regvaltype == kreg_val_type_dotted_decimal) {
regBrowser->setText(QString(fmt("%d.%d.%d.%d", (regval >> 0) & 0xff, (regval >> 8) & 0xff, (regval >> 16) & 0xff, (regval >> 24) & 0xff)));
} else if (regvaltype == kreg_val_type_str) {
char text[5] = {0};
memcpy(text, &regval, 4);
regBrowser->setText(QString(text));
} else if (regvaltype == kreg_val_type_hex) {
regBrowser->setText(QString(fmt("0x%08x", regval)));
} else if (regvaltype == kreg_val_type_decimal) {
regBrowser->setText(QString::number(regval, 10));
} else if (regvaltype == kreg_val_type_binary) {
regBrowser->setText(QString::number(regval, 2));
}
}
void MainWindow::construct_reg_table() { // void MainWindow::construct_reg_table() { //
int regoff = 1; int regoff = 1;
push_reg(ui->gridLayoutWidget, regoff++, "software_version", kxsync_reg_software_version, 0);
push_reg(ui->gridLayoutWidget, regoff++, "manufacturer0", kxsync_reg_manufacturer0, 0);
push_reg(ui->gridLayoutWidget, regoff++, "manufacturer1", kxsync_reg_manufacturer1, 0);
push_reg(ui->gridLayoutWidget, regoff++, "product_type_id", kxsync_reg_product_type_id, 0);
push_reg(ui->gridLayoutWidget, regoff++, "sn_id0", kxsync_reg_sn_id0, 0);
push_reg(ui->gridLayoutWidget, regoff++, "sn_id1", kxsync_reg_sn_id1, 0);
push_reg(ui->gridLayoutWidget, regoff++, "sn_id2", kxsync_reg_sn_id2, 0);
push_reg(ui->gridLayoutWidget, regoff++, "mac0", kxsync_reg_mac0, 0);
push_reg(ui->gridLayoutWidget, regoff++, "mac1", kxsync_reg_mac1, 0);
push_reg(ui->gridLayoutWidget, regoff++, "software_version", kxsync_reg_software_version, 0, kreg_val_type_dotted_decimal);
push_reg(ui->gridLayoutWidget, regoff++, "manufacturer0", kxsync_reg_manufacturer0, 0, kreg_val_type_str);
push_reg(ui->gridLayoutWidget, regoff++, "manufacturer1", kxsync_reg_manufacturer1, 0, kreg_val_type_str);
push_reg(ui->gridLayoutWidget, regoff++, "product_type_id", kxsync_reg_product_type_id, 0, kreg_val_type_decimal);
push_reg(ui->gridLayoutWidget, regoff++, "sn_id0", kxsync_reg_sn_id0, 0, kreg_val_type_dotted_hex);
push_reg(ui->gridLayoutWidget, regoff++, "sn_id1", kxsync_reg_sn_id1, 0, kreg_val_type_dotted_hex);
push_reg(ui->gridLayoutWidget, regoff++, "sn_id2", kxsync_reg_sn_id2, 0, kreg_val_type_dotted_hex);
push_reg(ui->gridLayoutWidget, regoff++, "mac0", kxsync_reg_mac0, 0, kreg_val_type_dotted_hex);
push_reg(ui->gridLayoutWidget, regoff++, "mac1", kxsync_reg_mac1, 0, kreg_val_type_dotted_hex);
// kxsync_reg_stm32_ip
// kxsync_reg_stm32_gw
// kxsync_reg_stm32_netmask
// kxsync_reg_stm32_camera_sync_signal_count
push_reg(ui->gridLayoutWidget, regoff++, "stm32_ip", kxsync_reg_stm32_ip, 0, kreg_val_type_dotted_decimal);
push_reg(ui->gridLayoutWidget, regoff++, "stm32_gw", kxsync_reg_stm32_gw, 0, kreg_val_type_dotted_decimal);
push_reg(ui->gridLayoutWidget, regoff++, "stm32_netmask", kxsync_reg_stm32_netmask, 0, kreg_val_type_dotted_decimal);
push_reg(ui->gridLayoutWidget, regoff++, "stm32_camera_sync_signal_count", kxsync_reg_stm32_camera_sync_signal_count, 0, kreg_val_type_decimal);
// 设置table的高度 // 设置table的高度
auto qrect = ui->gridLayoutWidget->geometry(); auto qrect = ui->gridLayoutWidget->geometry();
@ -222,26 +257,16 @@ void MainWindow::on_RefreshRegsButton_clicked() { //
if (ecode == kxs_ec_success) { if (ecode == kxs_ec_success) {
ZLOGI(TAG, "reg_read %x success", reg.first); ZLOGI(TAG, "reg_read %x success", reg.first);
m_regdisplayer[regoff]->regvalcache = regValue;
emit doinui_signal(QFunction([this, regoff, regValue]() { updateUI_timeCodeInfo(regoff); }));
} else {
emit doinui_signal(QFunction([this, regoff, regValue]() { emit doinui_signal(QFunction([this, regoff, regValue]() {
m_regdisplayer[regoff]->regvalcache = regValue;
m_regdisplayer[regoff]->regBrowser->setText("0x" + QString::number(regValue, 16));
m_regdisplayer[regoff]->regvalcache = 0;
m_regdisplayer[regoff]->regBrowser->setText("error");
})); }));
} else {
ZLOGE(TAG, "reg_read %x fail,ecode:%s", reg.first, xs_error_code_2_str(ecode));
suc = false;
break;
} }
} }
if (suc) {
ZLOGI(TAG, "readreg end...");
} else {
ZLOGI(TAG, "readreg error");
}
}); });
// xs_error_code_t ecode = Xsync::Ins().reg_write(0xABCDDCBA, 0x12345678);
// ZLOGI(TAG, "reg_write ecode:%s", xs_error_code_2_str(ecode));
} }
void MainWindow::on_ClearLogButton_clicked() { // void MainWindow::on_ClearLogButton_clicked() { //
ui->logbrowser->clear(); ui->logbrowser->clear();
@ -260,3 +285,40 @@ void MainWindow::mainWindowsRun() { //
// xsudp->sendto(from, "hello\n", 5, NULL); // xsudp->sendto(from, "hello\n", 5, NULL);
// }); // });
} }
#define DO_XSYNC_FUNC(exptr) \
{ \
auto ecode = exptr; \
if (!(ecode == kxs_ec_success)) { \
ZLOGE(TAG, "do: %s fail,ecode:[%d](%s)", #exptr, ecode, xs_error_code_2_str(ecode)); \
return; \
} else { \
ZLOGI(TAG, "do: %s success", #exptr); \
} \
}
void MainWindow::on_GenNewMac_clicked() { DO_XSYNC_FUNC(Xsync::Ins().generatorNewMac()); }
void MainWindow::on_FactoryReset_clicked() { DO_XSYNC_FUNC(Xsync::Ins().factoryReset()); }
void MainWindow::on_Reboot_clicked() { DO_XSYNC_FUNC(Xsync::Ins().reboot()); }
void MainWindow::on_ChangeNetCfg_clicked() { //
DO_XSYNC_FUNC(Xsync::Ins().changeNetworkConfig(ui->ChangeNetCfg_ip->text().toStdString(), ui->ChangeNetCfg_mask->text().toStdString(), ui->ChangeNetCfg_gateway->text().toStdString()));
}
void MainWindow::on_WriteReg_clicked() {
uint32_t regadd = str2int(ui->RegAdd->text());
uint32_t regval = str2int(ui->RegVal->text());
ZLOGI(TAG, "write reg 0x%08x %d", regadd, regval);
uint32_t readbakval = 0;
DO_XSYNC_FUNC(Xsync::Ins().reg_write(regadd, regval, readbakval));
ZLOGI(TAG, "write reg 0x%08x 0x%08x ,readback:0x%08x success", regadd, regval, readbakval);
ui->RegVal->setText(QString(fmt("0x%08x", readbakval)));
}
void MainWindow::on_ReadReg_clicked() {
uint32_t regadd = str2int(ui->RegAdd->text());
uint32_t regval = 0;
DO_XSYNC_FUNC(Xsync::Ins().reg_read(regadd, regval));
ZLOGI(TAG, "read reg 0x%08x 0x%08x success", regadd, regval);
ui->RegVal->setText(QString(fmt("0x%08x", regval)));
}

32
mainwindow.h

@ -40,13 +40,23 @@ class MainWindow;
} }
QT_END_NAMESPACE QT_END_NAMESPACE
typedef enum {
kreg_val_type_dotted_hex, // 16
kreg_val_type_dotted_decimal, // 10
kreg_val_type_str,
kreg_val_type_hex,
kreg_val_type_decimal,
kreg_val_type_binary,
} reg_val_type_t;
class DispalyRegIterm { class DispalyRegIterm {
public: public:
QLabel *label = 0;
QTextBrowser *regBrowser = 0;
QTextEdit *regEditer = 0;
QPushButton *writerButton = 0;
uint32_t regvalcache;
QLabel *label = 0;
QTextBrowser *regBrowser = 0;
QTextEdit *regEditer = 0;
QPushButton *writerButton = 0;
uint32_t regvalcache;
reg_val_type_t regvaltype;
}; };
class MainWindow : public QMainWindow { class MainWindow : public QMainWindow {
@ -65,7 +75,7 @@ class MainWindow : public QMainWindow {
private: private:
void construct_reg_table(); void construct_reg_table();
void push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag);
void push_reg(QWidget *parent, int off, const char *regname, int32_t regadd, int32_t rwflag, reg_val_type_t regvaltype);
/******************************************************************************* /*******************************************************************************
* * * *
*******************************************************************************/ *******************************************************************************/
@ -75,6 +85,15 @@ class MainWindow : public QMainWindow {
void on_RefreshRegsButton_clicked(); void on_RefreshRegsButton_clicked();
void on_ClearLogButton_clicked(); void on_ClearLogButton_clicked();
void on_Connect2XsyncButton_clicked(); void on_Connect2XsyncButton_clicked();
void on_GenNewMac_clicked();
void on_FactoryReset_clicked();
void on_Reboot_clicked();
void on_ChangeNetCfg_clicked();
void on_WriteReg_clicked();
void on_ReadReg_clicked();
void updateUI_timeCodeInfo_slot(QString); void updateUI_timeCodeInfo_slot(QString);
void updateUI_cameraSyncInfo_slot(QString); void updateUI_cameraSyncInfo_slot(QString);
void updateUI_reg_slot(int32_t regadd, uint32_t regval); void updateUI_reg_slot(int32_t regadd, uint32_t regval);
@ -89,5 +108,6 @@ class MainWindow : public QMainWindow {
private: private:
void mainWindowsRun(); void mainWindowsRun();
void updateUI_timeCodeInfo(uint32_t regoff);
}; };
#endif // MAINWINDOW_H #endif // MAINWINDOW_H

379
mainwindow.ui

@ -18,7 +18,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>10</x>
<y>420</y>
<y>490</y>
<width>951</width> <width>951</width>
<height>191</height> <height>191</height>
</rect> </rect>
@ -28,7 +28,7 @@
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>10</x> <x>10</x>
<y>380</y>
<y>450</y>
<width>91</width> <width>91</width>
<height>31</height> <height>31</height>
</rect> </rect>
@ -72,109 +72,320 @@
<bool>false</bool> <bool>false</bool>
</property> </property>
</widget> </widget>
<widget class="QPushButton" name="RefreshRegsButton">
<widget class="QTextBrowser" name="TimecodeDisplayer">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>0</x>
<y>50</y>
<width>91</width>
<x>470</x>
<y>10</y>
<width>141</width>
<height>31</height> <height>31</height>
</rect> </rect>
</property> </property>
<property name="text">
<string>RefreshRegs</string>
</widget>
<widget class="QTextBrowser" name="CameraSyncIndex">
<property name="geometry">
<rect>
<x>620</x>
<y>10</y>
<width>141</width>
<height>31</height>
</rect>
</property> </property>
</widget> </widget>
<widget class="QScrollArea" name="scrollArea">
<widget class="QTabWidget" name="tabWidget">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>100</x>
<x>10</x>
<y>50</y> <y>50</y>
<width>671</width>
<height>311</height>
<width>951</width>
<height>391</height>
</rect> </rect>
</property> </property>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
<property name="currentIndex">
<number>1</number>
</property> </property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustIgnored</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>652</width>
<height>1000</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>1000</height>
</size>
</property>
<widget class="QWidget" name="gridLayoutWidget">
<widget class="QWidget" name="tab">
<attribute name="title">
<string>寄存器读写</string>
</attribute>
<widget class="QScrollArea" name="scrollArea">
<property name="geometry"> <property name="geometry">
<rect> <rect>
<x>20</x>
<x>110</x>
<y>10</y> <y>10</y>
<width>581</width>
<height>91</height>
<width>671</width>
<height>311</height>
</rect> </rect>
</property> </property>
<layout class="QGridLayout" name="reg_table">
<property name="sizeConstraint">
<enum>QLayout::SetNoConstraint</enum>
<property name="minimumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="sizeIncrement">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="baseSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOn</enum>
</property>
<property name="sizeAdjustPolicy">
<enum>QAbstractScrollArea::AdjustIgnored</enum>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaWidgetContents">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>652</width>
<height>1000</height>
</rect>
</property>
<property name="minimumSize">
<size>
<width>0</width>
<height>1000</height>
</size>
</property> </property>
</layout>
<widget class="QWidget" name="gridLayoutWidget">
<property name="geometry">
<rect>
<x>20</x>
<y>10</y>
<width>581</width>
<height>91</height>
</rect>
</property>
<layout class="QGridLayout" name="reg_table">
<property name="sizeConstraint">
<enum>QLayout::SetNoConstraint</enum>
</property>
</layout>
</widget>
</widget>
</widget>
<widget class="QPushButton" name="RefreshRegsButton">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>91</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>RefreshRegs</string>
</property>
</widget>
</widget>
<widget class="QWidget" name="tab_2">
<attribute name="title">
<string>基础功能</string>
</attribute>
<widget class="QPushButton" name="GenNewMac">
<property name="geometry">
<rect>
<x>20</x>
<y>20</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>GenNewMac</string>
</property>
</widget>
<widget class="QPushButton" name="FactoryReset">
<property name="geometry">
<rect>
<x>20</x>
<y>60</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>FactoryReset</string>
</property>
</widget>
<widget class="QPushButton" name="Reboot">
<property name="geometry">
<rect>
<x>20</x>
<y>100</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>Reboot</string>
</property>
</widget>
<widget class="QPushButton" name="ChangeNetCfg">
<property name="geometry">
<rect>
<x>20</x>
<y>140</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>ChangeNetCfg</string>
</property>
</widget>
<widget class="QLineEdit" name="ChangeNetCfg_ip">
<property name="geometry">
<rect>
<x>130</x>
<y>140</y>
<width>111</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>192.168.8.10</string>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="ChangeNetCfg_mask">
<property name="geometry">
<rect>
<x>250</x>
<y>140</y>
<width>111</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>255.255.255.0</string>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="ChangeNetCfg_gateway">
<property name="geometry">
<rect>
<x>370</x>
<y>140</y>
<width>111</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>192.168.8.1</string>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QPushButton" name="WriteReg">
<property name="geometry">
<rect>
<x>20</x>
<y>180</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>WriteReg</string>
</property>
</widget>
<widget class="QPushButton" name="ReadReg">
<property name="geometry">
<rect>
<x>20</x>
<y>220</y>
<width>101</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>ReadReg</string>
</property>
</widget>
<widget class="QLineEdit" name="RegAdd">
<property name="geometry">
<rect>
<x>130</x>
<y>200</y>
<width>111</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>0x0</string>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget>
<widget class="QLineEdit" name="RegVal">
<property name="geometry">
<rect>
<x>250</x>
<y>200</y>
<width>111</width>
<height>31</height>
</rect>
</property>
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>0</string>
</property>
<property name="readOnly">
<bool>false</bool>
</property>
</widget> </widget>
</widget> </widget>
</widget>
<widget class="QTextBrowser" name="TimecodeDisplayer">
<property name="geometry">
<rect>
<x>470</x>
<y>10</y>
<width>141</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QTextBrowser" name="CameraSyncIndex">
<property name="geometry">
<rect>
<x>620</x>
<y>10</y>
<width>141</width>
<height>31</height>
</rect>
</property>
</widget> </widget>
</widget> </widget>
<widget class="QMenuBar" name="menubar"> <widget class="QMenuBar" name="menubar">

13
src/xsync_udp_factory_impl.cpp

@ -5,6 +5,12 @@
#include <winsock2.h> #include <winsock2.h>
// //
#include <Windows.h> #include <Windows.h>
#define ENABLE_LOG
#ifdef ENABLE_LOG
#include "../src/logger.hpp"
#endif
#define TAG "XSYNC_UDP"
#pragma comment(lib, "ws2_32") #pragma comment(lib, "ws2_32")
using namespace iflytop; using namespace iflytop;
@ -104,7 +110,7 @@ xs_error_code_t XSUDP::receive(char* data, int32_t& length, XsyncNetAdd& from, i
struct sockaddr_in sockaddr = {0}; struct sockaddr_in sockaddr = {0};
timeval timeout; timeval timeout;
timeout.tv_sec = overtimems / 1000;
timeout.tv_sec = overtimems; // 这个结构体的单位是ms,不是秒
timeout.tv_usec = 0; timeout.tv_usec = 0;
if (timeout.tv_sec == 0) { if (timeout.tv_sec == 0) {
@ -120,10 +126,11 @@ xs_error_code_t XSUDP::receive(char* data, int32_t& length, XsyncNetAdd& from, i
data[length] = 0; data[length] = 0;
if (ret < 0) { if (ret < 0) {
// ZLOGI(TAG, "recvfrom error %d %s", ret, strerror(errno));
// if (errno == EWOULDBLOCK || errno == EAGAIN) { // if (errno == EWOULDBLOCK || errno == EAGAIN) {
return kxs_ec_overtime;
return kxs_ec_overtime;
// } else { // } else {
// return kxs_ec_receive_fail;
// return kxs_ec_receive_fail;
// } // }
} }

Loading…
Cancel
Save