Overhauled brightness control.
This commit is contained in:
parent
bd6bc4fd54
commit
1fe529f4c5
|
@ -0,0 +1,3 @@
|
|||
[submodule "libn3ds"]
|
||||
path = libn3ds
|
||||
url = https://github.com/profi200/libn3ds.git
|
|
@ -23,9 +23,7 @@
|
|||
|
||||
|
||||
Result oafParseConfigEarly(void);
|
||||
u8 oafGetBacklightConfig(void);
|
||||
u8 oafGetBacklightAdjustmentConfig(void);
|
||||
void changeBacklight(s16 amount);
|
||||
Result oafInitAndRun(void);
|
||||
void oafUpdate(void);
|
||||
void oafFinish(void);
|
||||
void adjustBrightness(void);
|
|
@ -0,0 +1 @@
|
|||
Subproject commit 6bc4822e0128c86c3f80bd28e84b1195c29cf472
|
|
@ -27,33 +27,12 @@
|
|||
|
||||
|
||||
|
||||
static void setBacklight(void)
|
||||
{
|
||||
u8 backlightMax;
|
||||
u8 backlightMin;
|
||||
if(MCU_getSystemModel() >= 4)
|
||||
{
|
||||
backlightMax=142;
|
||||
backlightMin=16;
|
||||
}
|
||||
else
|
||||
{
|
||||
backlightMax=117;
|
||||
backlightMin=20;
|
||||
}
|
||||
|
||||
const u8 backlight = oafGetBacklightConfig();
|
||||
if (backlight > backlightMax) GFX_setBrightness(backlightMax, backlightMax);
|
||||
else if (backlight < backlightMin) GFX_setBrightness(backlightMin, backlightMin);
|
||||
else GFX_setBrightness(backlight, backlight);
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
Result res = fMount(FS_DRIVE_SDMC);
|
||||
if(res == RES_OK) res = oafParseConfigEarly();
|
||||
GFX_init(GFX_BGR8, GFX_RGB565);
|
||||
setBacklight();
|
||||
changeBacklight(0); // Apply backlight config.
|
||||
consoleInit(SCREEN_BOT, NULL);
|
||||
//CODEC_init();
|
||||
|
||||
|
@ -61,8 +40,6 @@ int main(void)
|
|||
{
|
||||
while(1)
|
||||
{
|
||||
adjustBrightness();
|
||||
|
||||
hidScanInput();
|
||||
if(hidGetExtraKeys(0) & (KEY_POWER_HELD | KEY_POWER)) break;
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@
|
|||
#define INI_BUF_SIZE (1024u)
|
||||
#define DEFAULT_CONFIG "[general]\n" \
|
||||
"backlight=64\n" \
|
||||
"backlightAdjustment=5\n" \
|
||||
"backlightSteps=5\n" \
|
||||
"directBoot=false\n" \
|
||||
"useGbaDb=true\n\n" \
|
||||
"[video]\n" \
|
||||
|
@ -62,13 +62,13 @@
|
|||
typedef struct
|
||||
{
|
||||
// [general]
|
||||
u8 backlight; // Both LCDs.
|
||||
u8 backlightAdjustment;
|
||||
u8 backlight; // Both LCDs.
|
||||
u8 backlightSteps;
|
||||
bool directBoot;
|
||||
bool useGbaDb;
|
||||
|
||||
// [video]
|
||||
u8 scaler; // 0 = 1:1, 1 = bilinear (GPU) x1.5, 2 = matrix (hardware) x1.5.
|
||||
u8 scaler; // 0 = 1:1, 1 = bilinear (GPU) x1.5, 2 = matrix (hardware) x1.5.
|
||||
float gbaGamma;
|
||||
float lcdGamma;
|
||||
float contrast;
|
||||
|
@ -97,7 +97,7 @@ static OafConfig g_oafConfig =
|
|||
{
|
||||
// [general]
|
||||
64, // backlight
|
||||
5, // backlightAdjustment
|
||||
5, // backlightSteps
|
||||
false, // directBoot
|
||||
true, // useGbaDb
|
||||
|
||||
|
@ -117,67 +117,7 @@ static OafConfig g_oafConfig =
|
|||
};
|
||||
static KHandle g_frameReadyEvent = 0;
|
||||
|
||||
static u8 currentBacklight = 64;
|
||||
static u8 backChange = 5;
|
||||
static bool displayOn = true;
|
||||
|
||||
static void changeBrightness(int16_t amount) {
|
||||
u8 backlightMax;
|
||||
u8 backlightMin;
|
||||
if(MCU_getSystemModel() >= 4)
|
||||
{
|
||||
backlightMin=16;
|
||||
backlightMax=142;
|
||||
}
|
||||
else
|
||||
{
|
||||
backlightMin=20;
|
||||
backlightMax=117;
|
||||
}
|
||||
u8 newBacklight;
|
||||
const int16_t newVal = currentBacklight+amount;
|
||||
if (amount < 0)
|
||||
newBacklight = newVal >= 0 && newVal < currentBacklight && newVal >= backlightMin ? newVal : backlightMin;
|
||||
else
|
||||
newBacklight = newVal >= currentBacklight && newVal <= backlightMax ? newVal : backlightMax;
|
||||
|
||||
//checks prevent newBacklight from exceding u8 bounds, so we can safely cast it down
|
||||
GFX_setBrightness(newBacklight, newBacklight);
|
||||
currentBacklight = (u8)newBacklight;
|
||||
}
|
||||
|
||||
void adjustBrightness(void) {
|
||||
//check for special button combos
|
||||
const int kHeld = hidKeysHeld();
|
||||
const int kDown = hidKeysDown();
|
||||
if (kDown && kHeld) {
|
||||
//adjust screen brightness up
|
||||
if(kHeld == (KEY_X | KEY_DUP))
|
||||
changeBrightness(backChange);
|
||||
//adjust screen brightness down
|
||||
if(kHeld == (KEY_X | KEY_DDOWN))
|
||||
changeBrightness(-backChange);
|
||||
|
||||
//turn off screen
|
||||
if(displayOn && kHeld == (KEY_X | KEY_DLEFT)) {
|
||||
#ifdef NDEBUG
|
||||
GFX_powerOffBacklights(GFX_BLIGHT_TOP);
|
||||
#else
|
||||
GFX_powerOffBacklights(GFX_BLIGHT_BOTH);
|
||||
#endif
|
||||
displayOn = false;
|
||||
}
|
||||
//turn on screen
|
||||
if(!displayOn && kHeld == (KEY_X | KEY_DRIGHT)) {
|
||||
#ifdef NDEBUG
|
||||
GFX_powerOnBacklights(GFX_BLIGHT_TOP);
|
||||
#else
|
||||
GFX_powerOnBacklights(GFX_BLIGHT_BOTH);
|
||||
#endif
|
||||
displayOn = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static u32 fixRomPadding(u32 romFileSize)
|
||||
{
|
||||
|
@ -585,8 +525,8 @@ static int cfgIniCallback(void* user, const char* section, const char* name, con
|
|||
{
|
||||
if(strcmp(name, "backlight") == 0)
|
||||
config->backlight = (u8)strtoul(value, NULL, 10);
|
||||
else if(strcmp(name, "backlightAdjustment") == 0)
|
||||
config->backlightAdjustment = (u8)strtoul(value, NULL, 10);
|
||||
else if(strcmp(name, "backlightSteps") == 0)
|
||||
config->backlightSteps = (u8)strtoul(value, NULL, 10);
|
||||
else if(strcmp(name, "directBoot") == 0)
|
||||
config->directBoot = (strcmp(value, "false") == 0 ? false : true);
|
||||
else if(strcmp(name, "useGbaDb") == 0)
|
||||
|
@ -640,6 +580,67 @@ static Result parseOafConfig(const char *const path, const bool writeDefaultCfg)
|
|||
return res;
|
||||
}
|
||||
|
||||
void changeBacklight(s16 amount)
|
||||
{
|
||||
u8 min, max;
|
||||
if(MCU_getSystemModel() >= 4)
|
||||
{
|
||||
min = 16;
|
||||
max = 142;
|
||||
}
|
||||
else
|
||||
{
|
||||
min = 20;
|
||||
max = 117;
|
||||
}
|
||||
|
||||
s16 newVal = g_oafConfig.backlight + amount;
|
||||
newVal = (newVal > max ? max : newVal);
|
||||
newVal = (newVal < min ? min : newVal);
|
||||
g_oafConfig.backlight = (u8)newVal;
|
||||
|
||||
GFX_setBrightness((u8)newVal, (u8)newVal);
|
||||
}
|
||||
|
||||
static void updateBacklight(void)
|
||||
{
|
||||
// Check for special button combos.
|
||||
const u32 kHeld = hidKeysHeld();
|
||||
static bool backlightOn = true;
|
||||
if(hidKeysDown() && kHeld)
|
||||
{
|
||||
// Adjust LCD brightness up.
|
||||
const s16 steps = g_oafConfig.backlightSteps;
|
||||
if(kHeld == (KEY_X | KEY_DUP))
|
||||
changeBacklight(steps);
|
||||
|
||||
// Adjust LCD brightness down.
|
||||
if(kHeld == (KEY_X | KEY_DDOWN))
|
||||
changeBacklight(-steps);
|
||||
|
||||
// Disable backlight switching in debug builds on 2DS.
|
||||
const GfxBlight lcd = (MCU_getSystemModel() != 3 ? GFX_BLIGHT_TOP : GFX_BLIGHT_BOT);
|
||||
#ifndef NDEBUG
|
||||
if(lcd != GFX_BLIGHT_BOT)
|
||||
#endif
|
||||
{
|
||||
// Turn off backlight.
|
||||
if(backlightOn && kHeld == (KEY_X | KEY_DLEFT))
|
||||
{
|
||||
backlightOn = false;
|
||||
GFX_powerOffBacklights(lcd);
|
||||
}
|
||||
|
||||
// Turn on backlight.
|
||||
if(!backlightOn && kHeld == (KEY_X | KEY_DRIGHT))
|
||||
{
|
||||
backlightOn = true;
|
||||
GFX_powerOnBacklights(lcd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Result showFileBrowser(char romAndSavePath[512])
|
||||
{
|
||||
Result res;
|
||||
|
@ -733,14 +734,6 @@ Result oafParseConfigEarly(void)
|
|||
return res;
|
||||
}
|
||||
|
||||
u8 oafGetBacklightConfig(void)
|
||||
{
|
||||
return g_oafConfig.backlight;
|
||||
}
|
||||
u8 oafGetBacklightAdjustmentConfig(void) {
|
||||
return g_oafConfig.backlightAdjustment;
|
||||
}
|
||||
|
||||
Result oafInitAndRun(void)
|
||||
{
|
||||
Result res;
|
||||
|
@ -749,8 +742,6 @@ Result oafInitAndRun(void)
|
|||
{
|
||||
do
|
||||
{
|
||||
currentBacklight = oafGetBacklightConfig();
|
||||
backChange = oafGetBacklightAdjustmentConfig();
|
||||
// Try to load the ROM path from autoboot.txt.
|
||||
// If this file doesn't exist show the file browser.
|
||||
if((res = fsLoadPathFromFile("autoboot.txt", filePath)) == RES_FR_NO_FILE)
|
||||
|
@ -810,6 +801,7 @@ Result oafInitAndRun(void)
|
|||
void oafUpdate(void)
|
||||
{
|
||||
LGY_handleOverrides();
|
||||
updateBacklight();
|
||||
waitForEvent(g_frameReadyEvent);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue