mGUI: Show battery percentage

This commit is contained in:
Vicki Pfau 2020-08-09 17:56:26 -07:00
parent d746cb16d6
commit 3b784485f8
9 changed files with 39 additions and 26 deletions

View File

@ -47,6 +47,7 @@ Misc:
- GBA: Allow pausing event loop while CPU is blocked - GBA: Allow pausing event loop while CPU is blocked
- Debugger: Keep track of global cycle count - Debugger: Keep track of global cycle count
- FFmpeg: Add looping option for GIF/APNG - FFmpeg: Add looping option for GIF/APNG
- mGUI: Show battery percentage
- Qt: Renderer can be changed while a game is running - Qt: Renderer can be changed while a game is running
- Qt: Add hex index to palette view - Qt: Add hex index to palette view
- Qt: Add transformation matrix info to sprite view - Qt: Add transformation matrix info to sprite view

View File

@ -42,13 +42,15 @@ enum GUICursorState {
enum { enum {
BATTERY_EMPTY = 0, BATTERY_EMPTY = 0,
BATTERY_LOW = 1, BATTERY_LOW = 25,
BATTERY_HALF = 2, BATTERY_HALF = 50,
BATTERY_HIGH = 3, BATTERY_HIGH = 75,
BATTERY_FULL = 4, BATTERY_FULL = 100,
BATTERY_VALUE = 0x7F,
BATTERY_PERCENTAGE_VALID = 0x80,
BATTERY_CHARGING = 8, BATTERY_CHARGING = 0x100,
BATTERY_NOT_PRESENT = 16 BATTERY_NOT_PRESENT = 0x200,
}; };
struct GUIBackground { struct GUIBackground {

View File

@ -154,14 +154,13 @@ AccessControlInfo:
- cam:u - cam:u
- cecd:u - cecd:u
- cfg:u - cfg:u
- dlp:FKCL
- dlp:SRVR
- dsp::DSP - dsp::DSP
- frd:u - frd:u
- fs:USER - fs:USER
- gsp::Gpu - gsp::Gpu
- hid:USER - hid:USER
- http:C - http:C
- mcu::HWC
- mic:u - mic:u
- ndm:u - ndm:u
- news:u - news:u

View File

@ -187,6 +187,7 @@ static void _cleanup(void) {
camExit(); camExit();
ndspExit(); ndspExit();
ptmuExit(); ptmuExit();
mcuHwcExit();
} }
static void _map3DSKey(struct mInputMap* map, int ctrKey, enum GBAKey key) { static void _map3DSKey(struct mInputMap* map, int ctrKey, enum GBAKey key) {
@ -237,15 +238,20 @@ static void _drawEnd(void) {
static int _batteryState(void) { static int _batteryState(void) {
u8 charge; u8 charge;
u8 adapter; u8 adapter;
PTMU_GetBatteryLevel(&charge);
PTMU_GetBatteryChargeState(&adapter); PTMU_GetBatteryChargeState(&adapter);
int state = 0; int state = 0;
if (adapter) { if (R_SUCCEEDED(MCUHWC_GetBatteryLevel(&charge))) {
state |= BATTERY_CHARGING; charge |= BATTERY_PERCENTAGE_VALID;
} } else {
PTMU_GetBatteryLevel(&charge);
if (charge > 0) { if (charge > 0) {
--charge; --charge;
} }
}
if (adapter) {
state |= BATTERY_CHARGING;
}
return state | charge; return state | charge;
} }
@ -814,6 +820,7 @@ int main() {
camera.cam = SELECT_IN1; camera.cam = SELECT_IN1;
ptmuInit(); ptmuInit();
mcuHwcInit();
camInit(); camInit();
hasSound = NO_SOUND; hasSound = NO_SOUND;

View File

@ -72,13 +72,12 @@ static enum GUICursorState _pollCursor(unsigned* x, unsigned* y) {
} }
static int _batteryState(void) { static int _batteryState(void) {
int charge = scePowerGetBatteryLifePercent(); int charge = scePowerGetBatteryLifePercent() | BATTERY_PERCENTAGE_VALID;
int adapter = scePowerIsPowerOnline(); int adapter = scePowerIsPowerOnline();
int state = 0; int state = 0;
if (adapter) { if (adapter) {
state |= BATTERY_CHARGING; state |= BATTERY_CHARGING;
} }
charge /= 25;
return state | charge; return state | charge;
} }

View File

@ -607,7 +607,7 @@ static int _batteryState(void) {
u32 charge; u32 charge;
int state = 0; int state = 0;
if (R_SUCCEEDED(psmGetBatteryChargePercentage(&charge))) { if (R_SUCCEEDED(psmGetBatteryChargePercentage(&charge))) {
state = (charge + 12) / 25; state = charge | BATTERY_PERCENTAGE_VALID;
} else { } else {
return BATTERY_NOT_PRESENT; return BATTERY_NOT_PRESENT;
} }

View File

@ -137,11 +137,11 @@ const struct GUIFontGlyphMetric defaultFontMetrics[128] = {
}; };
const struct GUIIconMetric defaultIconMetrics[] = { const struct GUIIconMetric defaultIconMetrics[] = {
[GUI_ICON_BATTERY_FULL] = { 0, 0, 32, 16 }, [GUI_ICON_BATTERY_FULL] = { 0, 2, 32, 12 },
[GUI_ICON_BATTERY_HIGH] = { 32, 0, 32, 16 }, [GUI_ICON_BATTERY_HIGH] = { 32, 2, 32, 12 },
[GUI_ICON_BATTERY_HALF] = { 64, 0, 32, 16 }, [GUI_ICON_BATTERY_HALF] = { 64, 2, 32, 12 },
[GUI_ICON_BATTERY_LOW] = { 96, 0, 32, 16 }, [GUI_ICON_BATTERY_LOW] = { 96, 2, 32, 12 },
[GUI_ICON_BATTERY_EMPTY] = { 128, 0, 32, 16 }, [GUI_ICON_BATTERY_EMPTY] = { 128, 2, 32, 12 },
[GUI_ICON_SCROLLBAR_BUTTON] = { 6, 16, 4, 5 }, [GUI_ICON_SCROLLBAR_BUTTON] = { 6, 16, 4, 5 },
[GUI_ICON_SCROLLBAR_TRACK] = { 23, 16, 2, 16 }, [GUI_ICON_SCROLLBAR_TRACK] = { 23, 16, 2, 16 },
[GUI_ICON_SCROLLBAR_THUMB] = { 38, 16, 4, 16 }, [GUI_ICON_SCROLLBAR_THUMB] = { 38, 16, 4, 16 },

View File

@ -43,7 +43,7 @@ void GUIFontPrint(const struct GUIFont* font, int x, int y, enum GUIAlignment al
if (c == '\1') { if (c == '\1') {
c = utf8Char(&text, &len); c = utf8Char(&text, &len);
if (c < GUI_ICON_MAX) { if (c < GUI_ICON_MAX) {
GUIFontDrawIcon(font, x, y, GUI_ALIGN_BOTTOM, GUI_ORIENT_0, color, c); GUIFontDrawIcon(font, x, y, (align & GUI_ALIGN_HCENTER) | GUI_ALIGN_BOTTOM, GUI_ORIENT_0, color, c);
unsigned w; unsigned w;
GUIFontIconMetrics(font, c, &w, 0); GUIFontIconMetrics(font, c, &w, 0);
x += w; x += w;

View File

@ -264,20 +264,20 @@ void GUIDrawBattery(struct GUIParams* params) {
return; return;
} }
uint32_t color = 0xFF000000; uint32_t color = 0xFF000000;
if (state == (BATTERY_CHARGING | BATTERY_FULL)) { if ((state & (BATTERY_CHARGING | BATTERY_FULL)) == (BATTERY_CHARGING | BATTERY_FULL)) {
color |= 0xFFC060; color |= 0xFFC060;
} else if (state & BATTERY_CHARGING) { } else if (state & BATTERY_CHARGING) {
color |= 0x60FF60; color |= 0x60FF60;
} else if (state >= BATTERY_HALF) { } else if ((state & BATTERY_VALUE) >= BATTERY_HALF) {
color |= 0xFFFFFF; color |= 0xFFFFFF;
} else if (state == BATTERY_LOW) { } else if ((state & BATTERY_VALUE) >= BATTERY_LOW) {
color |= 0x30FFFF; color |= 0x30FFFF;
} else { } else {
color |= 0x3030FF; color |= 0x3030FF;
} }
enum GUIIcon batteryIcon; enum GUIIcon batteryIcon;
switch (state & ~BATTERY_CHARGING) { switch ((state & BATTERY_VALUE) - (state & BATTERY_VALUE) % 25) {
case BATTERY_EMPTY: case BATTERY_EMPTY:
batteryIcon = GUI_ICON_BATTERY_EMPTY; batteryIcon = GUI_ICON_BATTERY_EMPTY;
break; break;
@ -298,7 +298,12 @@ void GUIDrawBattery(struct GUIParams* params) {
break; break;
} }
GUIFontDrawIcon(params->font, params->width, 0, GUI_ALIGN_RIGHT, GUI_ORIENT_0, color, batteryIcon); GUIFontDrawIcon(params->font, params->width, GUIFontHeight(params->font) + 2, GUI_ALIGN_RIGHT | GUI_ALIGN_BOTTOM, GUI_ORIENT_0, color, batteryIcon);
if (state & BATTERY_PERCENTAGE_VALID) {
unsigned width;
GUIFontIconMetrics(params->font, batteryIcon, &width, NULL);
GUIFontPrintf(params->font, params->width - width, GUIFontHeight(params->font), GUI_ALIGN_RIGHT, color, "%u%%", state & BATTERY_VALUE);
}
} }
void GUIDrawClock(struct GUIParams* params) { void GUIDrawClock(struct GUIParams* params) {