aboutsummaryrefslogtreecommitdiff
path: root/src/frontend/qt_sdl/PowerManagement/PowerManagementDialog.cpp
diff options
context:
space:
mode:
authorRayyan Ansari <rayyan@ansari.sh>2022-02-18 15:32:46 +0000
committerArisotura <thetotalworm@gmail.com>2022-03-07 21:08:54 +0100
commit2569c67a13a6ce855d27821cc6863ebea82c429d (patch)
tree6eb326bfadb2dc28999bb722731c006c4dc327f9 /src/frontend/qt_sdl/PowerManagement/PowerManagementDialog.cpp
parentc3adf6f606c694221342111a850e7b76ac77a56d (diff)
Add support for changing the DS and DSi battery level
The DS battery level is configured via the SPI Power Management Device, and the DSi's is configured via the I2C BPTWL. Add support for changing these registers and add the "Power Management" dialog in the UI.
Diffstat (limited to 'src/frontend/qt_sdl/PowerManagement/PowerManagementDialog.cpp')
-rw-r--r--src/frontend/qt_sdl/PowerManagement/PowerManagementDialog.cpp106
1 files changed, 106 insertions, 0 deletions
diff --git a/src/frontend/qt_sdl/PowerManagement/PowerManagementDialog.cpp b/src/frontend/qt_sdl/PowerManagement/PowerManagementDialog.cpp
new file mode 100644
index 0000000..b67736a
--- /dev/null
+++ b/src/frontend/qt_sdl/PowerManagement/PowerManagementDialog.cpp
@@ -0,0 +1,106 @@
+/*
+ Copyright 2016-2021 Rayyan Ansari
+
+ 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 "PowerManagementDialog.h"
+#include "ui_PowerManagementDialog.h"
+
+#include "SPI.h"
+#include "DSi_I2C.h"
+#include "NDS.h"
+
+#include "types.h"
+
+#include <QtDebug>
+
+PowerManagementDialog* PowerManagementDialog::currentDlg = nullptr;
+
+PowerManagementDialog::PowerManagementDialog(QWidget* parent) : QDialog(parent), ui(new Ui::PowerManagementDialog)
+{
+ ui->setupUi(this);
+ setAttribute(Qt::WA_DeleteOnClose);
+
+ if (NDS::ConsoleType)
+ ui->grpDSBattery->setEnabled(false);
+ else
+ ui->grpDSiBattery->setEnabled(false);
+
+ updateDSBatteryLevelControls();
+
+ ui->cbDSiBatteryCharging->setChecked(DSi_BPTWL::GetBatteryCharging());
+ int dsiBatterySliderPos;
+ switch (DSi_BPTWL::GetBatteryLevel())
+ {
+ case DSi_BPTWL::batteryLevel_AlmostEmpty: dsiBatterySliderPos = 0; break;
+ case DSi_BPTWL::batteryLevel_Low: dsiBatterySliderPos = 1; break;
+ case DSi_BPTWL::batteryLevel_Half: dsiBatterySliderPos = 2; break;
+ case DSi_BPTWL::batteryLevel_ThreeQuarters: dsiBatterySliderPos = 3; break;
+ case DSi_BPTWL::batteryLevel_Full: dsiBatterySliderPos = 4; break;
+ }
+ ui->sliderDSiBatteryLevel->setValue(dsiBatterySliderPos);
+}
+
+PowerManagementDialog::~PowerManagementDialog()
+{
+ delete ui;
+}
+
+void PowerManagementDialog::done(int r)
+{
+ QDialog::done(r);
+
+ closeDlg();
+}
+
+void PowerManagementDialog::on_rbDSBatteryLow_clicked()
+{
+ SPI_Powerman::SetBatteryLevelOkay(false);
+}
+
+void PowerManagementDialog::on_rbDSBatteryOkay_clicked()
+{
+ SPI_Powerman::SetBatteryLevelOkay(true);
+}
+
+void PowerManagementDialog::updateDSBatteryLevelControls()
+{
+ if (SPI_Powerman::GetBatteryLevelOkay())
+ ui->rbDSBatteryOkay->setChecked(true);
+ else
+ ui->rbDSBatteryLow->setChecked(true);
+}
+
+void PowerManagementDialog::on_cbDSiBatteryCharging_toggled()
+{
+ DSi_BPTWL::SetBatteryCharging(ui->cbDSiBatteryCharging->isChecked());
+}
+
+void PowerManagementDialog::on_sliderDSiBatteryLevel_valueChanged(int value)
+{
+ u8 newBatteryLevel;
+ switch (value)
+ {
+ case 0: newBatteryLevel = DSi_BPTWL::batteryLevel_AlmostEmpty; break;
+ case 1: newBatteryLevel = DSi_BPTWL::batteryLevel_Low; break;
+ case 2: newBatteryLevel = DSi_BPTWL::batteryLevel_Half; break;
+ case 3: newBatteryLevel = DSi_BPTWL::batteryLevel_ThreeQuarters; break;
+ case 4: newBatteryLevel = DSi_BPTWL::batteryLevel_Full; break;
+ }
+ DSi_BPTWL::SetBatteryLevel(newBatteryLevel);
+ updateDSBatteryLevelControls();
+}
+