mirror of
https://github.com/wiiu-env/AutobootModule.git
synced 2024-11-25 12:06:58 +01:00
Add autobooting support
This commit is contained in:
parent
be672f5a86
commit
addcf74802
108
source/main.cpp
108
source/main.cpp
@ -1,4 +1,6 @@
|
|||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <cstdio>
|
||||||
|
#include <cstring>
|
||||||
#include <coreinit/screen.h>
|
#include <coreinit/screen.h>
|
||||||
#include <coreinit/filesystem.h>
|
#include <coreinit/filesystem.h>
|
||||||
#include <coreinit/memdefaultheap.h>
|
#include <coreinit/memdefaultheap.h>
|
||||||
@ -31,6 +33,13 @@
|
|||||||
#define COLOR_BORDER Color(204, 204, 204, 255)
|
#define COLOR_BORDER Color(204, 204, 204, 255)
|
||||||
#define COLOR_BORDER_HIGHLIGHTED Color(0x3478e4ff)
|
#define COLOR_BORDER_HIGHLIGHTED Color(0x3478e4ff)
|
||||||
|
|
||||||
|
enum {
|
||||||
|
BOOT_OPTION_WII_U_MENU,
|
||||||
|
BOOT_OPTION_HOMEBREW_LAUNCHER,
|
||||||
|
BOOT_OPTION_VWII_SYSTEM_MENU,
|
||||||
|
BOOT_OPTION_VWII_HOMEBREW_CHANNEL,
|
||||||
|
};
|
||||||
|
|
||||||
static const char* menu_options[] = {
|
static const char* menu_options[] = {
|
||||||
"Wii U Menu",
|
"Wii U Menu",
|
||||||
"Homebrew Launcher",
|
"Homebrew Launcher",
|
||||||
@ -38,6 +47,45 @@ static const char* menu_options[] = {
|
|||||||
"vWii Homebrew Channel",
|
"vWii Homebrew Channel",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char* autoboot_config_strings[] = {
|
||||||
|
"wiiu_menu",
|
||||||
|
"homebrew_launcher",
|
||||||
|
"vwii_system_menu",
|
||||||
|
"vwii_homebrew_channel",
|
||||||
|
};
|
||||||
|
|
||||||
|
int autobootOption = -1;
|
||||||
|
|
||||||
|
void readAutobootOption(){
|
||||||
|
FILE* f = fopen("autoboot.txt", "r");
|
||||||
|
if (f) {
|
||||||
|
char buf[128]{};
|
||||||
|
fgets(buf, sizeof(buf), f);
|
||||||
|
fclose(f);
|
||||||
|
|
||||||
|
for (uint32_t i = 0; i < sizeof(autoboot_config_strings) / sizeof(char*); i++) {
|
||||||
|
if (strncmp(autoboot_config_strings[i], buf, strlen(autoboot_config_strings[i])) == 0) {
|
||||||
|
autobootOption = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeAutobootOption(){
|
||||||
|
FILE* f = fopen("autoboot.txt", "w");
|
||||||
|
if (f) {
|
||||||
|
if (autobootOption >= 0) {
|
||||||
|
fputs(autoboot_config_strings[autobootOption], f);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
fputs("none", f);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
bool getQuickBoot() {
|
bool getQuickBoot() {
|
||||||
auto bootCheck = CCRSysCaffeineBootCheck();
|
auto bootCheck = CCRSysCaffeineBootCheck();
|
||||||
if (bootCheck == 0) {
|
if (bootCheck == 0) {
|
||||||
@ -181,7 +229,7 @@ static void launchvWiiTitle(uint32_t titleId_low, uint32_t titleId_high){
|
|||||||
if (CMPTCheckScreenState() < 0) {
|
if (CMPTCheckScreenState() < 0) {
|
||||||
CMPTAcctSetScreenType(SCREEN_TYPE_DRC);
|
CMPTAcctSetScreenType(SCREEN_TYPE_DRC);
|
||||||
if (CMPTCheckScreenState() < 0) {
|
if (CMPTCheckScreenState() < 0) {
|
||||||
CMPTAcctSetScreenType(SCREEN_TYPE_TV);
|
CMPTAcctSetScreenType(SCREEN_TYPE_TV);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -198,10 +246,10 @@ void bootvWiiMenu(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void bootHomebrewChannel(void){
|
void bootHomebrewChannel(void){
|
||||||
launchvWiiTitle(0x00010001, 'OHBC');
|
launchvWiiTitle(0x00010001, 0x4f484243); // 'OHBC'
|
||||||
}
|
}
|
||||||
|
|
||||||
void handleMenuScreen(void){
|
int handleMenuScreen(void){
|
||||||
OSScreenInit();
|
OSScreenInit();
|
||||||
|
|
||||||
uint32_t tvBufferSize = OSScreenGetBufferSizeEx(SCREEN_TV);
|
uint32_t tvBufferSize = OSScreenGetBufferSizeEx(SCREEN_TV);
|
||||||
@ -219,7 +267,6 @@ void handleMenuScreen(void){
|
|||||||
DrawUtils::initFont();
|
DrawUtils::initFont();
|
||||||
|
|
||||||
uint32_t selected = 0;
|
uint32_t selected = 0;
|
||||||
int autoBoot = -1;
|
|
||||||
bool redraw = true;
|
bool redraw = true;
|
||||||
while (true) {
|
while (true) {
|
||||||
VPADStatus vpad{};
|
VPADStatus vpad{};
|
||||||
@ -241,11 +288,13 @@ void handleMenuScreen(void){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
else if (vpad.trigger & VPAD_BUTTON_X) {
|
else if (vpad.trigger & VPAD_BUTTON_X) {
|
||||||
autoBoot = -1;
|
autobootOption = -1;
|
||||||
|
writeAutobootOption();
|
||||||
redraw = true;
|
redraw = true;
|
||||||
}
|
}
|
||||||
else if (vpad.trigger & VPAD_BUTTON_Y) {
|
else if (vpad.trigger & VPAD_BUTTON_Y) {
|
||||||
autoBoot = selected;
|
autobootOption = selected;
|
||||||
|
writeAutobootOption();
|
||||||
redraw = true;
|
redraw = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -259,11 +308,11 @@ void handleMenuScreen(void){
|
|||||||
if (i == selected) {
|
if (i == selected) {
|
||||||
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16*2, 44, 4, COLOR_BORDER_HIGHLIGHTED);
|
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16*2, 44, 4, COLOR_BORDER_HIGHLIGHTED);
|
||||||
} else {
|
} else {
|
||||||
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16*2, 44, 2, (i == autoBoot) ? COLOR_AUTOBOOT : COLOR_BORDER);
|
DrawUtils::drawRect(16, index, SCREEN_WIDTH - 16*2, 44, 2, (i == (uint32_t) autobootOption) ? COLOR_AUTOBOOT : COLOR_BORDER);
|
||||||
}
|
}
|
||||||
|
|
||||||
DrawUtils::setFontSize(24);
|
DrawUtils::setFontSize(24);
|
||||||
DrawUtils::setFontColor((i == autoBoot) ? COLOR_AUTOBOOT : COLOR_TEXT);
|
DrawUtils::setFontColor((i == (uint32_t) autobootOption) ? COLOR_AUTOBOOT : COLOR_TEXT);
|
||||||
DrawUtils::print(16*2, index + 8 + 24, menu_options[i]);
|
DrawUtils::print(16*2, index + 8 + 24, menu_options[i]);
|
||||||
index += 42 + 8;
|
index += 42 + 8;
|
||||||
}
|
}
|
||||||
@ -291,22 +340,9 @@ void handleMenuScreen(void){
|
|||||||
|
|
||||||
DrawUtils::deinitFont();
|
DrawUtils::deinitFont();
|
||||||
|
|
||||||
switch (selected) {
|
|
||||||
case 0:
|
|
||||||
bootSystemMenu();
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
bootHomebrewLauncher();
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
bootvWiiMenu();
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
bootHomebrewChannel();
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
free(screenBuffer);
|
free(screenBuffer);
|
||||||
|
|
||||||
|
return selected;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -323,15 +359,35 @@ int main(int argc, char **argv){
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readAutobootOption();
|
||||||
|
int bootSelection = autobootOption;
|
||||||
|
|
||||||
VPADStatus vpad{};
|
VPADStatus vpad{};
|
||||||
VPADRead(VPAD_CHAN_0, &vpad, 1, NULL);
|
VPADRead(VPAD_CHAN_0, &vpad, 1, NULL);
|
||||||
|
|
||||||
if (vpad.hold & VPAD_BUTTON_PLUS) {
|
if (vpad.hold & VPAD_BUTTON_PLUS) {
|
||||||
handleMenuScreen();
|
bootSelection = handleMenuScreen();
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bootSystemMenu();
|
if (bootSelection >= 0) {
|
||||||
|
switch (bootSelection) {
|
||||||
|
case BOOT_OPTION_WII_U_MENU:
|
||||||
|
bootSystemMenu();
|
||||||
|
break;
|
||||||
|
case BOOT_OPTION_HOMEBREW_LAUNCHER:
|
||||||
|
bootHomebrewLauncher();
|
||||||
|
break;
|
||||||
|
case BOOT_OPTION_VWII_SYSTEM_MENU:
|
||||||
|
bootvWiiMenu();
|
||||||
|
break;
|
||||||
|
case BOOT_OPTION_VWII_HOMEBREW_CHANNEL:
|
||||||
|
bootHomebrewChannel();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bootSystemMenu();
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user