aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/frontend/qt_sdl/Platform.cpp22
-rw-r--r--src/frontend/qt_sdl/WifiSettingsDialog.cpp140
-rw-r--r--src/frontend/qt_sdl/WifiSettingsDialog.h68
-rw-r--r--src/frontend/qt_sdl/main.cpp19
-rw-r--r--src/frontend/qt_sdl/main.h1
5 files changed, 237 insertions, 13 deletions
diff --git a/src/frontend/qt_sdl/Platform.cpp b/src/frontend/qt_sdl/Platform.cpp
index 6b256e0..edc8d45 100644
--- a/src/frontend/qt_sdl/Platform.cpp
+++ b/src/frontend/qt_sdl/Platform.cpp
@@ -22,8 +22,8 @@
#include <SDL2/SDL.h>
#include "Platform.h"
#include "PlatformConfig.h"
-//#include "LAN_Socket.h"
-//#include "LAN_PCap.h"
+#include "LAN_Socket.h"
+#include "LAN_PCap.h"
#include <string>
#ifdef __WIN32__
@@ -559,7 +559,7 @@ int MP_RecvPacket(u8* data, bool block)
bool LAN_Init()
{
- /*if (Config::DirectLAN)
+ if (Config::DirectLAN)
{
if (!LAN_PCap::Init(true))
return false;
@@ -568,7 +568,7 @@ bool LAN_Init()
{
if (!LAN_Socket::Init())
return false;
- }*/
+ }
return true;
}
@@ -580,26 +580,24 @@ void LAN_DeInit()
// LAN_PCap::DeInit();
//else
// LAN_Socket::DeInit();
- /*LAN_PCap::DeInit();
- LAN_Socket::DeInit();*/
+ LAN_PCap::DeInit();
+ LAN_Socket::DeInit();
}
int LAN_SendPacket(u8* data, int len)
{
- /*if (Config::DirectLAN)
+ if (Config::DirectLAN)
return LAN_PCap::SendPacket(data, len);
else
- return LAN_Socket::SendPacket(data, len);*/
- return 0;
+ return LAN_Socket::SendPacket(data, len);
}
int LAN_RecvPacket(u8* data)
{
- /*if (Config::DirectLAN)
+ if (Config::DirectLAN)
return LAN_PCap::RecvPacket(data);
else
- return LAN_Socket::RecvPacket(data);*/
- return 0;
+ return LAN_Socket::RecvPacket(data);
}
diff --git a/src/frontend/qt_sdl/WifiSettingsDialog.cpp b/src/frontend/qt_sdl/WifiSettingsDialog.cpp
new file mode 100644
index 0000000..457a78d
--- /dev/null
+++ b/src/frontend/qt_sdl/WifiSettingsDialog.cpp
@@ -0,0 +1,140 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#include <stdio.h>
+#include <QFileDialog>
+
+#include "types.h"
+#include "Platform.h"
+#include "Config.h"
+#include "PlatformConfig.h"
+
+#include "LAN_Socket.h"
+#include "LAN_PCap.h"
+#include "Wifi.h"
+
+#include "WifiSettingsDialog.h"
+#include "ui_WifiSettingsDialog.h"
+
+
+#ifdef __WIN32__
+#define PCAP_NAME "winpcap/npcap"
+#else
+#define PCAP_NAME "libpcap"
+#endif
+
+
+WifiSettingsDialog* WifiSettingsDialog::currentDlg = nullptr;
+
+
+WifiSettingsDialog::WifiSettingsDialog(QWidget* parent) : QDialog(parent), ui(new Ui::WifiSettingsDialog)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ LAN_Socket::Init();
+ haspcap = LAN_PCap::Init(false);
+
+ ui->cbDirectMode->setText("Direct mode (requires " PCAP_NAME " and ethernet connection)");
+
+ ui->cbBindAnyAddr->setChecked(Config::SocketBindAnyAddr != 0);
+
+ int sel = 0;
+ for (int i = 0; i < LAN_PCap::NumAdapters; i++)
+ {
+ LAN_PCap::AdapterData* adapter = &LAN_PCap::Adapters[i];
+
+ ui->cbxDirectAdapter->addItem(QString(adapter->FriendlyName));
+
+ if (!strncmp(adapter->DeviceName, Config::LANDevice, 128))
+ sel = i;
+ }
+ ui->cbxDirectAdapter->setCurrentIndex(sel);
+
+ ui->cbDirectMode->setChecked(Config::DirectLAN != 0);
+ if (!haspcap) ui->cbDirectMode->setEnabled(false);
+
+ updateAdapterControls();
+}
+
+WifiSettingsDialog::~WifiSettingsDialog()
+{
+ delete ui;
+}
+
+void WifiSettingsDialog::on_WifiSettingsDialog_accepted()
+{
+ Config::SocketBindAnyAddr = ui->cbBindAnyAddr->isChecked() ? 1:0;
+ Config::DirectLAN = ui->cbDirectMode->isChecked() ? 1:0;
+
+ int sel = ui->cbxDirectAdapter->currentIndex();
+ if (sel < 0 || sel >= LAN_PCap::NumAdapters) sel = 0;
+ if (LAN_PCap::NumAdapters < 1)
+ {
+ Config::LANDevice[0] = '\0';
+ }
+ else
+ {
+ strncpy(Config::LANDevice, LAN_PCap::Adapters[sel].DeviceName, 127);
+ Config::LANDevice[127] = '\0';
+ }
+
+ Config::Save();
+
+ closeDlg();
+}
+
+void WifiSettingsDialog::on_WifiSettingsDialog_rejected()
+{
+ closeDlg();
+}
+
+void WifiSettingsDialog::on_cbDirectMode_stateChanged(int state)
+{
+ updateAdapterControls();
+}
+
+void WifiSettingsDialog::on_cbxDirectAdapter_currentIndexChanged(int sel)
+{
+ if (!haspcap) return;
+
+ if (sel < 0 || sel >= LAN_PCap::NumAdapters) return;
+ if (LAN_PCap::NumAdapters < 1) return;
+
+ LAN_PCap::AdapterData* adapter = &LAN_PCap::Adapters[sel];
+ char tmp[64];
+
+ sprintf(tmp, "MAC: %02X:%02X:%02X:%02X:%02X:%02X",
+ adapter->MAC[0], adapter->MAC[1], adapter->MAC[2],
+ adapter->MAC[3], adapter->MAC[4], adapter->MAC[5]);
+ ui->lblAdapterMAC->setText(QString(tmp));
+
+ sprintf(tmp, "IP: %d.%d.%d.%d",
+ adapter->IP_v4[0], adapter->IP_v4[1],
+ adapter->IP_v4[2], adapter->IP_v4[3]);
+ ui->lblAdapterIP->setText(QString(tmp));
+}
+
+void WifiSettingsDialog::updateAdapterControls()
+{
+ bool enable = haspcap && ui->cbDirectMode->isChecked();
+
+ ui->cbxDirectAdapter->setEnabled(enable);
+ ui->lblAdapterMAC->setEnabled(enable);
+ ui->lblAdapterIP->setEnabled(enable);
+}
diff --git a/src/frontend/qt_sdl/WifiSettingsDialog.h b/src/frontend/qt_sdl/WifiSettingsDialog.h
new file mode 100644
index 0000000..f8aad1b
--- /dev/null
+++ b/src/frontend/qt_sdl/WifiSettingsDialog.h
@@ -0,0 +1,68 @@
+/*
+ Copyright 2016-2020 Arisotura
+
+ This file is part of melonDS.
+
+ melonDS is free software: you can redistribute it and/or modify it under
+ the terms of the GNU General Public License as published by the Free
+ Software Foundation, either version 3 of the License, or (at your option)
+ any later version.
+
+ melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
+ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with melonDS. If not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef WIFISETTINGSDIALOG_H
+#define WIFISETTINGSDIALOG_H
+
+#include <QDialog>
+
+namespace Ui { class WifiSettingsDialog; }
+class WifiSettingsDialog;
+
+class WifiSettingsDialog : public QDialog
+{
+ Q_OBJECT
+
+public:
+ explicit WifiSettingsDialog(QWidget* parent);
+ ~WifiSettingsDialog();
+
+ static WifiSettingsDialog* currentDlg;
+ static WifiSettingsDialog* openDlg(QWidget* parent)
+ {
+ if (currentDlg)
+ {
+ currentDlg->activateWindow();
+ return currentDlg;
+ }
+
+ currentDlg = new WifiSettingsDialog(parent);
+ currentDlg->show();
+ return currentDlg;
+ }
+ static void closeDlg()
+ {
+ currentDlg = nullptr;
+ }
+
+private slots:
+ void on_WifiSettingsDialog_accepted();
+ void on_WifiSettingsDialog_rejected();
+
+ void on_cbDirectMode_stateChanged(int state);
+ void on_cbxDirectAdapter_currentIndexChanged(int sel);
+
+private:
+ Ui::WifiSettingsDialog* ui;
+
+ bool haspcap;
+
+ void updateAdapterControls();
+};
+
+#endif // WIFISETTINGSDIALOG_H
diff --git a/src/frontend/qt_sdl/main.cpp b/src/frontend/qt_sdl/main.cpp
index e60a58d..5870d8a 100644
--- a/src/frontend/qt_sdl/main.cpp
+++ b/src/frontend/qt_sdl/main.cpp
@@ -1671,7 +1671,24 @@ void MainWindow::onAudioSettingsFinished(int res)
void MainWindow::onOpenWifiSettings()
{
- WifiSettingsDialog::openDlg(this);
+ WifiSettingsDialog* dlg = WifiSettingsDialog::openDlg(this);
+ connect(dlg, &WifiSettingsDialog::finished, this, &MainWindow::onWifiSettingsFinished);
+}
+
+void MainWindow::onWifiSettingsFinished(int res)
+{
+ emuThread->emuPause();
+
+ if (Wifi::MPInited)
+ {
+ Platform::MP_DeInit();
+ Platform::MP_Init();
+ }
+
+ Platform::LAN_DeInit();
+ Platform::LAN_Init();
+
+ emuThread->emuUnpause();
}
void MainWindow::onChangeSavestateSRAMReloc(bool checked)
diff --git a/src/frontend/qt_sdl/main.h b/src/frontend/qt_sdl/main.h
index ef51158..279aed8 100644
--- a/src/frontend/qt_sdl/main.h
+++ b/src/frontend/qt_sdl/main.h
@@ -205,6 +205,7 @@ private slots:
void onOpenAudioSettings();
void onAudioSettingsFinished(int res);
void onOpenWifiSettings();
+ void onWifiSettingsFinished(int res);
void onChangeSavestateSRAMReloc(bool checked);
void onChangeScreenSize();
void onChangeScreenRotation(QAction* act);