Skip to content

Commit b05cbde

Browse files
feat: Create OpenTuna installer page
This commit introduces the initial OpenTuna installer page. The main menu now has an "Install OpenTuna" option that navigates to this new page. The OpenTuna installer page currently performs the following actions: - Detects and displays the PS2's ROM version. - Handles memory card selection, prompting the user if multiple cards are inserted. - Performs a free space check on the selected memory card.
1 parent cd56a0b commit b05cbde

6 files changed

Lines changed: 116 additions & 2 deletions

File tree

installer/lang.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,9 @@ static const char *DefaultLanguageStringTable[SYS_UI_MSG_COUNT] = {
6868
"Failed to format the HardDisk Drive (HDD) unit.",
6969
"Format the HardDisk Drive (HDD) unit?\nWarning: All data will be erased.",
7070
"Format HDD and create basic partitions",
71-
"The installer has detected that your console is a very rare unit\nIf you want to colaborate with the homebrew PS2 comunity please contact me: \n\nhttps://github.com/israpps"};
71+
"The installer has detected that your console is a very rare unit\nIf you want to colaborate with the homebrew PS2 comunity please contact me: \n\nhttps://github.com/israpps",
72+
"Install the OpenTuna exploit.",
73+
};
7274

7375
static const char *DefaultLanguageLabelStringTable[SYS_UI_LBL_COUNT] = {
7476
"OK",
@@ -108,6 +110,7 @@ static const char *DefaultLanguageLabelStringTable[SYS_UI_LBL_COUNT] = {
108110
"Install PS2BBL (PSX/DESR)",
109111
"Install PS2BBL-HDD",
110112
"Uninstall Existing System Updates",
113+
"Install OpenTuna",
111114
"Exit",
112115
"B",
113116
"KB",
@@ -122,5 +125,6 @@ static const char *DefaultLanguageLabelStringTable[SYS_UI_LBL_COUNT] = {
122125
"Main Menu",
123126
"Extras Menu",
124127
"Memory Card Menu",
128+
"OpenTuna Installer",
125129
"Format HDD",
126130
};

installer/lang.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ enum SYS_UI_MESSAGES {
6969
SYS_UI_MSG_FORMAT_HDD_MANUAL,
7070
SYS_UI_MSG_DSC_FORMAT_HDD,
7171
SYS_UI_MSG_RARE_ROMVER,
72+
SYS_UI_MSG_DSC_INSTALL_OPENTUNA,
7273

7374
SYS_UI_MSG_COUNT
7475
};
@@ -111,6 +112,7 @@ enum SYS_UI_LABEL_TEXT {
111112
SYS_UI_LBL_INSTALL_CROSS_PSX,
112113
SYS_UI_LBL_INSTALL_FHDB,
113114
SYS_UI_LBL_UINSTALL_FHDB,
115+
SYS_UI_LBL_INSTALL_OPENTUNA,
114116
SYS_UI_LBL_EXIT,
115117
SYS_UI_LBL_B,
116118
SYS_UI_LBL_KB,
@@ -125,6 +127,7 @@ enum SYS_UI_LABEL_TEXT {
125127
SYS_UI_LBL_MENU_MAIN,
126128
SYS_UI_LBL_MENU_EXTRAS,
127129
SYS_UI_LBL_MENU_MC,
130+
SYS_UI_LBL_MENU_OPENTUNA,
128131
SYS_UI_LBL_FORMAT_HDD,
129132

130133
SYS_UI_LBL_COUNT

installer/main.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ enum MainMenuEvents {
2121
EVENT_CLEANUP_FHDB,
2222
EVENT_INSTALL_CROSS_PSX,
2323
EVENT_FORMAT_HDD,
24+
EVENT_INSTALL_OPENTUNA,
2425
EVENT_EXIT,
2526
EVENT_OPTION_COUNT /* The number of valid events. */
2627
};

installer/menu.c

Lines changed: 105 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,17 @@ enum MAIN_MENU_ID {
4141
MAIN_MENU_ID_BTN_INST_FHDB,
4242
MAIN_MENU_ID_BTN_UINST_FHDB,
4343
MAIN_MENU_ID_BTN_FORMAT_HDD,
44+
MAIN_MENU_ID_BTN_INSTALL_OPENTUNA,
4445
MAIN_MENU_ID_DESCRIPTION,
4546
MAIN_MENU_ID_VERSION,
4647
};
4748

49+
enum OPENTUNA_MENU_ID {
50+
OPENTUNA_MENU_ID_BTN_INSTALL = 1,
51+
OPENTUNA_MENU_ID_ROM_VERSION,
52+
OPENTUNA_MENU_ID_STATUS_TEXT,
53+
};
54+
4855
enum PRG_SCREEN_ID {
4956
PRG_SCREEN_ID_TITLE = 1,
5057
PRG_SCREEN_ID_ETA_LBL,
@@ -86,6 +93,9 @@ static struct UIMenuItem MainMenuItems[] = {
8693
{MITEM_BUTTON, MAIN_MENU_ID_BTN_DOWNGRADE_MI, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_UMI},
8794
{MITEM_BREAK},
8895
{MITEM_BREAK},
96+
{MITEM_BUTTON, MAIN_MENU_ID_BTN_INSTALL_OPENTUNA, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_INSTALL_OPENTUNA},
97+
{MITEM_BREAK},
98+
{MITEM_BREAK},
8999
{MITEM_BUTTON, MAIN_MENU_ID_BTN_EXIT, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_EXIT},
90100
{MITEM_BREAK},
91101
{MITEM_BREAK},
@@ -144,6 +154,24 @@ static struct UIMenuItem MCMenuItems[] = {
144154

145155
{MITEM_TERMINATOR}};
146156

157+
static struct UIMenuItem OpenTunaMenuItems[] = {
158+
{MITEM_LABEL, 0, 0, 0, 0, 0, 0, SYS_UI_LBL_MENU_OPENTUNA},
159+
{MITEM_SEPERATOR},
160+
{MITEM_BREAK},
161+
162+
{MITEM_STRING, OPENTUNA_MENU_ID_ROM_VERSION, MITEM_FLAG_READONLY},
163+
{MITEM_BREAK},
164+
{MITEM_BREAK},
165+
{MITEM_STRING, OPENTUNA_MENU_ID_STATUS_TEXT, MITEM_FLAG_READONLY},
166+
{MITEM_BREAK},
167+
{MITEM_BREAK},
168+
169+
{MITEM_BUTTON, OPENTUNA_MENU_ID_BTN_INSTALL, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_INSTALL},
170+
{MITEM_BREAK},
171+
{MITEM_BREAK},
172+
173+
{MITEM_TERMINATOR}};
174+
147175
static struct UIMenuItem ProgressScreenItems[] = {
148176
{MITEM_LABEL, PRG_SCREEN_ID_TITLE},
149177
{MITEM_SEPERATOR},
@@ -211,10 +239,12 @@ static struct UIMenuItem InsuffSpaceScreenItems[] = {
211239
// Forward declarations
212240
static struct UIMenu InstallMainMenu;
213241
static struct UIMenu ExtraMenu;
242+
static struct UIMenu OpenTunaMenu;
214243

215244
static struct UIMenu MCMenu = {NULL, &ExtraMenu, MCMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_EXIT}}};
216245
static struct UIMenu ExtraMenu = {&MCMenu, &InstallMainMenu, ExtraMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_EXIT}}};
217-
static struct UIMenu InstallMainMenu = {&ExtraMenu, NULL, MainMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_EXIT}}};
246+
static struct UIMenu OpenTunaMenu = {&InstallMainMenu, NULL, OpenTunaMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_BACK}}};
247+
static struct UIMenu InstallMainMenu = {&ExtraMenu, &OpenTunaMenu, MainMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_EXIT}}};
218248

219249
static struct UIMenu ProgressScreen = {NULL, NULL, ProgressScreenItems, {{BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_CANCEL}, {-1, -1}}};
220250
static struct UIMenu InsuffSpaceScreen = {NULL, NULL, InsuffSpaceScreenItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {-1, -1}}};
@@ -336,6 +366,9 @@ static int MainMenuUpdateCallback(struct UIMenu *menu, unsigned short int frame,
336366
case MAIN_MENU_ID_BTN_FORMAT_HDD:
337367
UISetString(menu, MAIN_MENU_ID_DESCRIPTION, GetUIString(SYS_UI_MSG_DSC_FORMAT_HDD));
338368
break;
369+
case MAIN_MENU_ID_BTN_INSTALL_OPENTUNA:
370+
UISetString(menu, MAIN_MENU_ID_DESCRIPTION, GetUIString(SYS_UI_MSG_DSC_INSTALL_OPENTUNA));
371+
break;
339372
case MAIN_MENU_ID_BTN_EXIT:
340373
UISetString(menu, MAIN_MENU_ID_DESCRIPTION, GetUIString(SYS_UI_MSG_DSC_QUIT));
341374
break;
@@ -349,6 +382,71 @@ static int MainMenuUpdateCallback(struct UIMenu *menu, unsigned short int frame,
349382
return 0;
350383
}
351384

385+
static int OpenTunaUpdateCallback(struct UIMenu *menu, unsigned short int frame, int selection, u32 padstatus)
386+
{
387+
if ((padstatus != 0) || (frame == 0)) {
388+
if (selection >= 0) {
389+
switch (menu->items[selection].id) {
390+
case OPENTUNA_MENU_ID_BTN_INSTALL:
391+
UISetString(menu, OPENTUNA_MENU_ID_STATUS_TEXT, GetUIString(SYS_UI_MSG_DSC_INST_FMCB));
392+
break;
393+
default:
394+
UISetString(menu, OPENTUNA_MENU_ID_STATUS_TEXT, NULL);
395+
}
396+
} else
397+
UISetString(menu, OPENTUNA_MENU_ID_STATUS_TEXT, NULL);
398+
}
399+
400+
return 0;
401+
}
402+
403+
void OpenTunaInstaller(void)
404+
{
405+
short int option;
406+
struct UIMenu *CurrentMenu;
407+
unsigned char McPort;
408+
struct McData McData[2];
409+
410+
memset(McData, 0, sizeof(McData));
411+
412+
CurrentMenu = &OpenTunaMenu;
413+
option = 0;
414+
415+
UpdateRegionalPaths();
416+
UISetString(CurrentMenu, OPENTUNA_MENU_ID_ROM_VERSION, romver);
417+
418+
while (1) {
419+
option = UIExecMenu(CurrentMenu, option, &CurrentMenu, &OpenTunaUpdateCallback);
420+
421+
McPort = GetNumMemcardsInserted(McData);
422+
423+
switch(option)
424+
{
425+
case OPENTUNA_MENU_ID_BTN_INSTALL:
426+
if (McPort > 1) {
427+
McPort = DisplayPromptMessage(SYS_UI_MSG_MULTIPLE_CARDS, SYS_UI_LBL_SLOT1, SYS_UI_LBL_SLOT2);
428+
if (McPort == 0)
429+
break;
430+
McPort--;
431+
} else if (McPort == 0) {
432+
DisplayErrorMessage(SYS_UI_MSG_NO_CARDS);
433+
break;
434+
} else
435+
McPort = (McData[0].Type == MC_TYPE_PS2) ? 0 : 1;
436+
437+
unsigned int requiredSpace = 1024; // 1MB in KB
438+
if((unsigned int)McData[McPort].SpaceFree < requiredSpace)
439+
{
440+
DisplayOutOfSpaceMessage(McData[McPort].SpaceFree * 1024, requiredSpace * 1024);
441+
break;
442+
}
443+
break;
444+
default: // Exit
445+
return;
446+
}
447+
}
448+
}
449+
352450
void MainMenu(void)
353451
{
354452
int result;
@@ -425,6 +523,9 @@ void MainMenu(void)
425523
case MAIN_MENU_ID_BTN_INST_CROSS_PSX:
426524
event = EVENT_INSTALL_CROSS_PSX;
427525
break;
526+
case MAIN_MENU_ID_BTN_INSTALL_OPENTUNA:
527+
event = EVENT_INSTALL_OPENTUNA;
528+
break;
428529
default: // MAIN_MENU_ID_BTN_EXIT
429530
event = EVENT_EXIT;
430531
}
@@ -750,6 +851,9 @@ void MainMenu(void)
750851
DisplayErrorMessage(SYS_UI_MSG_FORMAT_HDD_FAILED);
751852
}
752853
break;
854+
case EVENT_INSTALL_OPENTUNA:
855+
OpenTunaInstaller();
856+
break;
753857
case EVENT_EXIT:
754858
if (DisplayPromptMessage(SYS_UI_MSG_QUIT, SYS_UI_LBL_CANCEL, SYS_UI_LBL_OK) == 2)
755859
done = 1;

installer/menu.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
void MainMenu(void);
2+
void OpenTunaInstaller(void);
23
void DrawFileCopyProgressScreen(float PercentageComplete);
34
void DrawMemoryCardDumpingProgressScreen(float PercentageComplete, unsigned int rate, unsigned int SecondsRemaining);
45
void DrawMemoryCardRestoreProgressScreen(float PercentageComplete, unsigned int rate, unsigned int SecondsRemaining);

installer/system.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,7 @@ struct WorkerThreadMcMaintParams
9696
};
9797

9898
/* Function prototypes */
99+
extern char romver[16];
99100
int GetBootDeviceID(void);
100101
int GetConsoleRegion(void);
101102
int GetConsoleVMode(void);

0 commit comments

Comments
 (0)