pcap: Add settings to Emu->Devtools

This commit is contained in:
embr 2024-08-29 16:27:01 +02:00
parent 40a08564ed
commit c3f171f781
5 changed files with 115 additions and 40 deletions

View File

@ -309,6 +309,8 @@ LegacyEntry LegacyFile[] =
{"GdbARM7BreakOnStartup", 1, "Gdb.ARM7.BreakOnStartup", true},
{"GdbARM9BreakOnStartup", 1, "Gdb.ARM9.BreakOnStartup", true},
#endif
{"PcapEnabled", 1, "Pcap.Enabled", false},
{"PcapPath", 2, "Pcap.Path", false},
{"Camera0_InputType", 0, "DSi.Camera0.InputType", false},
{"Camera0_ImagePath", 2, "DSi.Camera0.ImagePath", false},

View File

@ -2056,13 +2056,16 @@ void EmuInstance::animatedROMIcon(const u8 (&data)[8][512], const u16 (&palette)
void EmuInstance::startPacketCapture()
{
if (!pcap)
pcap = melonDS::LibPCap::New();
if (packetCapture != nullptr || packetCaptureDumper != nullptr)
stopPacketCapture();
std::string pcapPath = getAssetPath(false, globalCfg.GetString("PacketCapturePath"), instanceFileSuffix() + ".pcap");
if (!globalCfg.GetBool("Pcap.Enabled"))
return;
if (!pcap)
pcap = melonDS::LibPCap::New();
std::string pcapPath = getAssetPath(false, globalCfg.GetString("Pcap.Path"), instanceFileSuffix() + ".pcap");
Log(LogLevel::Debug, "Starting packet capture: %s\n", pcapPath.c_str());
packetCapture = pcap->open_dead(DLT_IEEE802_11, 1024);

View File

@ -18,6 +18,7 @@
#include <QFileDialog>
#include <QMessageBox>
#include <QTemporaryFile>
#include "types.h"
#include "Platform.h"
@ -107,9 +108,12 @@ EmuSettingsDialog::EmuSettingsDialog(QWidget* parent) : QDialog(parent), ui(new
ui->cbGdbBOSA7->setDisabled(true);
ui->cbGdbBOSA9->setDisabled(true);
#endif
ui->cbPcapEnabled->setChecked(cfg.GetBool("Pcap.Enabled"));
ui->txtPcapPath->setText(cfg.GetQString("Pcap.Path"));
on_chkEnableJIT_toggled();
on_cbGdbEnabled_toggled();
on_cbPcapEnabled_toggled();
on_chkExternalBIOS_toggled();
const int imgsizes[] = {256, 512, 1024, 2048, 4096, 0};
@ -292,6 +296,8 @@ void EmuSettingsDialog::done(int r)
instcfg.SetBool("Gdb.ARM7.BreakOnStartup", ui->cbGdbBOSA7->isChecked());
instcfg.SetBool("Gdb.ARM9.BreakOnStartup", ui->cbGdbBOSA9->isChecked());
#endif
cfg.SetBool("Pcap.Enabled", ui->cbPcapEnabled->isChecked());
cfg.SetQString("Pcap.Path", ui->txtPcapPath->text());
cfg.SetInt("Emu.ConsoleType", ui->cbxConsoleType->currentIndex());
cfg.SetBool("Emu.DirectBoot", ui->chkDirectBoot->isChecked());
@ -565,6 +571,30 @@ void EmuSettingsDialog::on_cbGdbEnabled_toggled()
ui->cbGdbBOSA9->setDisabled(disabled);
}
void EmuSettingsDialog::on_cbPcapEnabled_toggled()
{
bool disabled = !ui->cbPcapEnabled->isChecked();
ui->txtPcapPath->setDisabled(disabled);
ui->btnPcapBrowse->setDisabled(disabled);
}
void EmuSettingsDialog::on_btnPcapBrowse_clicked()
{
QString dir = QFileDialog::getExistingDirectory(this,
"Select packet captures path...",
lastBIOSFolder);
if (dir.isEmpty()) return;
if (!QTemporaryFile(dir).open())
{
QMessageBox::critical(this, "melonDS", "Unable to write to packet captures directory.\nPlease check file/folder write permissions.");
return;
}
ui->txtPcapPath->setText(dir);
}
void EmuSettingsDialog::on_chkExternalBIOS_toggled()
{
bool disabled = !ui->chkExternalBIOS->isChecked();

View File

@ -80,6 +80,8 @@ private slots:
void on_chkExternalBIOS_toggled();
void on_cbGdbEnabled_toggled();
void on_cbPcapEnabled_toggled();
void on_btnPcapBrowse_clicked();
private:
void verifyFirmware();

View File

@ -7,7 +7,7 @@
<x>0</x>
<y>0</y>
<width>575</width>
<height>416</height>
<height>456</height>
</rect>
</property>
<property name="sizePolicy">
@ -21,7 +21,7 @@
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
<enum>QLayout::SizeConstraint::SetFixedSize</enum>
</property>
<item>
<widget class="QTabWidget" name="tabWidget">
@ -59,7 +59,7 @@
<item row="3" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -99,7 +99,7 @@
<item row="4" column="0">
<spacer name="verticalSpacer_5">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -457,7 +457,7 @@
<item row="5" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -539,7 +539,7 @@
<item row="5" column="0">
<spacer name="verticalSpacer_3">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -573,17 +573,38 @@
<string>Devtools</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="0">
<widget class="QLabel" name="label_16">
<item row="2" column="0">
<widget class="QLabel" name="label_17">
<property name="text">
<string>ARM9 port</string>
<string>ARM7 port</string>
</property>
</widget>
</item>
<item row="5" column="0">
<item row="2" column="5">
<widget class="QCheckBox" name="cbGdbBOSA7">
<property name="text">
<string>Break on startup</string>
</property>
</widget>
</item>
<item row="9" column="0" colspan="6">
<widget class="QLabel" name="label_23">
<property name="text">
<string>Packet captures are stored in .pcap format, by default in the same directory as the ROM.</string>
</property>
</widget>
</item>
<item row="7" column="5">
<widget class="QPushButton" name="btnPcapBrowse">
<property name="text">
<string>Browse...</string>
</property>
</widget>
</item>
<item row="11" column="0">
<spacer name="verticalSpacer_4">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Orientation::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
@ -593,10 +614,10 @@
</property>
</spacer>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_17">
<item row="1" column="5">
<widget class="QCheckBox" name="cbGdbBOSA9">
<property name="text">
<string>ARM7 port</string>
<string>Break on startup</string>
</property>
</widget>
</item>
@ -607,28 +628,14 @@
</property>
</widget>
</item>
<item row="4" column="0" colspan="7">
<item row="4" column="0" colspan="6">
<widget class="QLabel" name="label_18">
<property name="text">
<string>Note: melonDS must be restarted in order for these changes to have effect</string>
</property>
</widget>
</item>
<item row="3" column="0" colspan="7">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Note: GDB stub cannot be used together with the JIT recompiler</string>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QCheckBox" name="cbGdbBOSA9">
<property name="text">
<string>Break on startup</string>
</property>
</widget>
</item>
<item row="1" column="1" colspan="5">
<item row="1" column="1" colspan="4">
<widget class="QSpinBox" name="intGdbPortA9">
<property name="minimum">
<number>1000</number>
@ -641,7 +648,21 @@
</property>
</widget>
</item>
<item row="2" column="1" colspan="5">
<item row="1" column="0">
<widget class="QLabel" name="label_16">
<property name="text">
<string>ARM9 port</string>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_22">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="1" colspan="4">
<widget class="QSpinBox" name="intGdbPortA7">
<property name="minimum">
<number>1000</number>
@ -654,10 +675,27 @@
</property>
</widget>
</item>
<item row="2" column="6">
<widget class="QCheckBox" name="cbGdbBOSA7">
<item row="3" column="0" colspan="6">
<widget class="QLabel" name="label_19">
<property name="text">
<string>Break on startup</string>
<string>Note: GDB stub cannot be used together with the JIT recompiler</string>
</property>
</widget>
</item>
<item row="7" column="1" colspan="4">
<widget class="QPathInput" name="txtPcapPath"/>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_21">
<property name="text">
<string>Directory:</string>
</property>
</widget>
</item>
<item row="6" column="0" colspan="6">
<widget class="QCheckBox" name="cbPcapEnabled">
<property name="text">
<string>Enable network packet capture</string>
</property>
</widget>
</item>
@ -668,10 +706,10 @@
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
<set>QDialogButtonBox::StandardButton::Cancel|QDialogButtonBox::StandardButton::Ok</set>
</property>
</widget>
</item>