mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-24 14:49:53 -06:00

* Add proper BPTWL interrupts * Added DSi power button and volume switch hotkeys * Added hardware reset workaround * Adjusted syntax to follow guidelines * Added DSi output volume synchronization * Fix trivial member function error
117 lines
2.9 KiB
C++
117 lines
2.9 KiB
C++
/*
|
|
Copyright 2016-2022 melonDS team
|
|
|
|
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 DSI_I2C_H
|
|
#define DSI_I2C_H
|
|
|
|
#include "types.h"
|
|
#include "Savestate.h"
|
|
|
|
namespace DSi_BPTWL
|
|
{
|
|
|
|
u8 GetBootFlag();
|
|
|
|
bool GetBatteryCharging();
|
|
void SetBatteryCharging(bool charging);
|
|
|
|
enum
|
|
{
|
|
batteryLevel_Critical = 0x0,
|
|
batteryLevel_AlmostEmpty = 0x1,
|
|
batteryLevel_Low = 0x3,
|
|
batteryLevel_Half = 0x7,
|
|
batteryLevel_ThreeQuarters = 0xB,
|
|
batteryLevel_Full = 0xF
|
|
};
|
|
|
|
u8 GetBatteryLevel();
|
|
void SetBatteryLevel(u8 batteryLevel);
|
|
|
|
// 0-31
|
|
u8 GetVolumeLevel();
|
|
void SetVolumeLevel(u8 volume);
|
|
|
|
// 0-4
|
|
u8 GetBacklightLevel();
|
|
void SetBacklightLevel(u8 backlight);
|
|
|
|
void DoHardwareReset(bool direct);
|
|
void DoShutdown();
|
|
|
|
enum
|
|
{
|
|
volumeKey_Up,
|
|
volumeKey_Down,
|
|
};
|
|
|
|
// Used by hotkeys
|
|
void SetPowerButtonHeld(double time);
|
|
void SetPowerButtonReleased(double time);
|
|
void SetVolumeSwitchHeld(u32 key);
|
|
void SetVolumeSwitchReleased(u32 key);
|
|
s32 ProcessVolumeSwitchInput(double time);
|
|
|
|
void DoPowerButtonPress();
|
|
void DoPowerButtonReset();
|
|
void DoPowerButtonShutdown();
|
|
void DoPowerButtonForceShutdown();
|
|
void DoVolumeSwitchPress(u32 key);
|
|
|
|
enum
|
|
{
|
|
IRQ_PowerButtonReset = 0x01, // Triggered after releasing the power button quickly
|
|
IRQ_PowerButtonShutdown = 0x02, // Triggered after holding the power button for less than a second
|
|
IRQ_PowerButtonPressed = 0x08, // Triggered after pressing the power button
|
|
IRQ_BatteryEmpty = 0x10, //
|
|
IRQ_BatteryLow = 0x20, // Triggered when the battery level reaches 1
|
|
IRQ_VolumeSwitchPressed = 0x40, // Triggered once when the volume sliders are first pressed and repeatedly when held down
|
|
/*
|
|
Bit 2 (0x04) could be set when holding the power button for more than 5 seconds? (forced power off)
|
|
It is unknown whether it is set as the console powers off immediately.
|
|
Bit 7 (0x80) is unused?
|
|
Both bits are never used by the official ARM7 libraries, but could have some undocumented hardware functionality (?).
|
|
*/
|
|
IRQ_ValidMask = 0x7B,
|
|
};
|
|
|
|
void SetIRQ(u8 irqFlag);
|
|
|
|
}
|
|
|
|
namespace DSi_I2C
|
|
{
|
|
|
|
extern u8 Cnt;
|
|
|
|
bool Init();
|
|
void DeInit();
|
|
void Reset();
|
|
void DoSavestate(Savestate* file);
|
|
|
|
void WriteCnt(u8 val);
|
|
|
|
u8 ReadData();
|
|
void WriteData(u8 val);
|
|
|
|
//void TransferDone(u32 param);
|
|
|
|
}
|
|
|
|
#endif // DSI_I2C_H
|