From 726a4f3355f2547ccf75410da68c86de814b7557 Mon Sep 17 00:00:00 2001 From: profi200 Date: Sat, 5 Aug 2023 02:07:13 +0200 Subject: [PATCH] Implemented proper headphone detection. Added a config option to override the audio output. --- README.md | 8 +++++++- source/arm11/open_agb_firm.c | 22 ++++++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 5f84aa3..390631a 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,12 @@ Video-related settings. `float brightness` - Screen lift * Default: `0.0` +### Audio +Audio settings. + +`u8 audioOut` - Audio output. 0 = auto, 1 = speakers, 2 = headphones. +* Default: `0` + ### Game Game-specific settings. Only intended to be used in the per-game settings (romName.ini in `/3ds/open_agb_firm/saves`). @@ -201,4 +207,4 @@ You may use this under the terms of the GNU General Public License GPL v3 or the * **Oleh Prypin (oprypin) for nightly.link** * ...everyone who contributed to **3dbrew.org** -Copyright (C) 2021 derrek, profi200, d0k3 +Copyright (C) 2021 derrek, profi200, d0k3 \ No newline at end of file diff --git a/source/arm11/open_agb_firm.c b/source/arm11/open_agb_firm.c index 9e447bd..a0cf4d7 100644 --- a/source/arm11/open_agb_firm.c +++ b/source/arm11/open_agb_firm.c @@ -36,6 +36,7 @@ #include "arm11/filebrowser.h" #include "arm11/drivers/lcd.h" #include "arm11/gpu_cmd_lists.h" +#include "arm11/drivers/codec.h" #include "arm11/drivers/mcu.h" #include "arm11/patch.h" #include "kernel.h" @@ -56,6 +57,8 @@ "lcdGamma=1.54\n" \ "contrast=1.0\n" \ "brightness=0.0\n\n" \ + "[audio]\n" \ + "audioOut=0\n\n" \ "[advanced]\n" \ "saveOverride=false\n" \ "defaultSave=14" @@ -69,12 +72,15 @@ typedef struct 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; float brightness; + // [audio] + u8 audioOut; // 0 = auto, 1 = speakers, 2 = headphones. + // [game] u8 saveSlot; u8 saveType; @@ -109,9 +115,12 @@ static OafConfig g_oafConfig = 1.f, // contrast 0.f, // brightness + // [audio] + 0, // Automatic audio output. + // [game] 0, // saveSlot - 0xFF, // saveType + 0xFF, // saveType // [advanced] false, // saveOverride @@ -507,6 +516,7 @@ static void gbaGfxHandler(void *args) GFX_waitForP3D(); GX_displayTransfer((u32*)(0x18180000 + (16 * 240 * 3)), 368u<<16 | 240u, GFX_getFramebuffer(SCREEN_TOP) + (16 * 240 * 3), 368u<<16 | 240u, 1u<<12 | 1u<<8); + CODEC_runHeadphoneDetection(); // Run headphone detection while PPF is busy. GFX_waitForPPF(); GFX_swapFramebufs(); @@ -546,6 +556,11 @@ static int cfgIniCallback(void* user, const char* section, const char* name, con else if(strcmp(name, "brightness") == 0) config->brightness = str2float(value); } + else if(strcmp(section, "audio") == 0) + { + if(strcmp(name, "audioOut") == 0) + config->audioOut = (u8)strtoul(value, NULL, 10); + } else if(strcmp(section, "game") == 0) { if(strcmp(name, "saveSlot") == 0) @@ -745,6 +760,9 @@ Result oafInitAndRun(void) { do { + // Set audio output. + CODEC_setAudioOutput(g_oafConfig.audioOut); + // 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)