Skip to content

Commit 2f626b1

Browse files
feat: Create dedicated OpenTuna installer page
This commit introduces a new, separate menu page for the OpenTuna installer, accessible by navigating right from the main menu. The new page includes two options: - Install OpenTuna - Uninstall OpenTuna The necessary UI strings, menu items, and event handlers have been added. The navigation logic has been updated to create a circular flow between the main menu, OpenTuna menu, MC menu, and extras menu. Additionally, a bug in the main menu loop has been fixed where pressing the cancel button (circle) would exit the application instead of navigating back. The menu execution logic now correctly handles this as a "back" action. The ROM version of the console is now also displayed on the OpenTuna installer page.
1 parent 7a2e1db commit 2f626b1

8 files changed

Lines changed: 79 additions & 88 deletions

File tree

installer/UI.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1333,7 +1333,7 @@ int UIExecMenu(struct UIMenu *FirstMenu, short int SelectedItem, struct UIMenu *
13331333
}
13341334
} else if (PadStatus & CancelButton) {
13351335
// User aborted.
1336-
result = 1;
1336+
result = 0;
13371337
break;
13381338
}
13391339

installer/lang.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ static const char *DefaultLanguageStringTable[SYS_UI_MSG_COUNT] = {
7070
"Format HDD and create basic partitions",
7171
"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",
7272
"Install the OpenTuna exploit.",
73+
"Uninstall the OpenTuna exploit.",
7374
};
7475

7576
static const char *DefaultLanguageLabelStringTable[SYS_UI_LBL_COUNT] = {
@@ -111,6 +112,7 @@ static const char *DefaultLanguageLabelStringTable[SYS_UI_LBL_COUNT] = {
111112
"Install PS2BBL-HDD",
112113
"Uninstall Existing System Updates",
113114
"Install OpenTuna",
115+
"Uninstall OpenTuna",
114116
"Exit",
115117
"B",
116118
"KB",

installer/lang.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ enum SYS_UI_MESSAGES {
7070
SYS_UI_MSG_DSC_FORMAT_HDD,
7171
SYS_UI_MSG_RARE_ROMVER,
7272
SYS_UI_MSG_DSC_INSTALL_OPENTUNA,
73+
SYS_UI_MSG_DSC_UNINSTALL_OPENTUNA,
7374

7475
SYS_UI_MSG_COUNT
7576
};
@@ -113,6 +114,7 @@ enum SYS_UI_LABEL_TEXT {
113114
SYS_UI_LBL_INSTALL_FHDB,
114115
SYS_UI_LBL_UINSTALL_FHDB,
115116
SYS_UI_LBL_INSTALL_OPENTUNA,
117+
SYS_UI_LBL_UNINSTALL_OPENTUNA,
116118
SYS_UI_LBL_EXIT,
117119
SYS_UI_LBL_B,
118120
SYS_UI_LBL_KB,

installer/main.h

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

installer/menu.c

Lines changed: 69 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -41,13 +41,13 @@ 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,
4544
MAIN_MENU_ID_DESCRIPTION,
4645
MAIN_MENU_ID_VERSION,
4746
};
4847

4948
enum OPENTUNA_MENU_ID {
5049
OPENTUNA_MENU_ID_BTN_INSTALL = 1,
50+
OPENTUNA_MENU_ID_BTN_UNINSTALL,
5151
OPENTUNA_MENU_ID_ROM_VERSION,
5252
OPENTUNA_MENU_ID_STATUS_TEXT,
5353
};
@@ -93,9 +93,6 @@ static struct UIMenuItem MainMenuItems[] = {
9393
{MITEM_BUTTON, MAIN_MENU_ID_BTN_DOWNGRADE_MI, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_UMI},
9494
{MITEM_BREAK},
9595
{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},
9996
{MITEM_BUTTON, MAIN_MENU_ID_BTN_EXIT, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_EXIT},
10097
{MITEM_BREAK},
10198
{MITEM_BREAK},
@@ -159,17 +156,20 @@ static struct UIMenuItem OpenTunaMenuItems[] = {
159156
{MITEM_SEPERATOR},
160157
{MITEM_BREAK},
161158

162-
{MITEM_STRING, OPENTUNA_MENU_ID_ROM_VERSION, MITEM_FLAG_READONLY},
159+
{MITEM_BUTTON, OPENTUNA_MENU_ID_BTN_INSTALL, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_INSTALL_OPENTUNA},
163160
{MITEM_BREAK},
164161
{MITEM_BREAK},
165-
{MITEM_STRING, OPENTUNA_MENU_ID_STATUS_TEXT, MITEM_FLAG_READONLY},
162+
{MITEM_BUTTON, OPENTUNA_MENU_ID_BTN_UNINSTALL, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_UNINSTALL_OPENTUNA},
166163
{MITEM_BREAK},
167164
{MITEM_BREAK},
168165

169-
{MITEM_BUTTON, OPENTUNA_MENU_ID_BTN_INSTALL, MITEM_FLAG_POS_MID, 0, 24, 0, 0, SYS_UI_LBL_INSTALL},
166+
{MITEM_STRING, OPENTUNA_MENU_ID_STATUS_TEXT, MITEM_FLAG_READONLY},
170167
{MITEM_BREAK},
171168
{MITEM_BREAK},
172169

170+
{MITEM_STRING, OPENTUNA_MENU_ID_ROM_VERSION, MITEM_FLAG_POS_ABS | MITEM_FLAG_READONLY, 0, 0, 520, 420},
171+
{MITEM_BREAK},
172+
173173
{MITEM_TERMINATOR}};
174174

175175
static struct UIMenuItem ProgressScreenItems[] = {
@@ -239,12 +239,13 @@ static struct UIMenuItem InsuffSpaceScreenItems[] = {
239239
// Forward declarations
240240
static struct UIMenu InstallMainMenu;
241241
static struct UIMenu ExtraMenu;
242+
static struct UIMenu MCMenu;
242243
static struct UIMenu OpenTunaMenu;
243244

244-
static struct UIMenu MCMenu = {NULL, &ExtraMenu, MCMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_EXIT}}};
245+
static struct UIMenu MCMenu = {&OpenTunaMenu, &ExtraMenu, MCMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_EXIT}}};
245246
static struct UIMenu ExtraMenu = {&MCMenu, &InstallMainMenu, ExtraMenuItems, {{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}}};
247247
static struct UIMenu InstallMainMenu = {&ExtraMenu, &OpenTunaMenu, MainMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_EXIT}}};
248+
static struct UIMenu OpenTunaMenu = {&InstallMainMenu, &MCMenu, OpenTunaMenuItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_BACK}}};
248249

249250
static struct UIMenu ProgressScreen = {NULL, NULL, ProgressScreenItems, {{BUTTON_TYPE_SYS_CANCEL, SYS_UI_LBL_CANCEL}, {-1, -1}}};
250251
static struct UIMenu InsuffSpaceScreen = {NULL, NULL, InsuffSpaceScreenItems, {{BUTTON_TYPE_SYS_SELECT, SYS_UI_LBL_OK}, {-1, -1}}};
@@ -328,8 +329,34 @@ static int CheckFormat(void)
328329
return status;
329330
}
330331

332+
static int OpenTunaMenuUpdateCallback(struct UIMenu *menu, unsigned short int frame, int selection, u32 padstatus)
333+
{
334+
if ((padstatus != 0) || (frame == 0)) {
335+
if (selection >= 0) {
336+
switch (menu->items[selection].id) {
337+
case OPENTUNA_MENU_ID_BTN_INSTALL:
338+
UISetString(menu, OPENTUNA_MENU_ID_STATUS_TEXT, GetUIString(SYS_UI_MSG_DSC_INSTALL_OPENTUNA));
339+
break;
340+
case OPENTUNA_MENU_ID_BTN_UNINSTALL:
341+
UISetString(menu, OPENTUNA_MENU_ID_STATUS_TEXT, GetUIString(SYS_UI_MSG_DSC_UNINSTALL_OPENTUNA));
342+
break;
343+
default:
344+
UISetString(menu, OPENTUNA_MENU_ID_STATUS_TEXT, NULL);
345+
break;
346+
}
347+
} else {
348+
UISetString(menu, OPENTUNA_MENU_ID_STATUS_TEXT, NULL);
349+
}
350+
}
351+
return 0;
352+
}
353+
331354
static int MainMenuUpdateCallback(struct UIMenu *menu, unsigned short int frame, int selection, u32 padstatus)
332355
{
356+
if (menu == &OpenTunaMenu) {
357+
return OpenTunaMenuUpdateCallback(menu, frame, selection, padstatus);
358+
}
359+
333360
if ((padstatus != 0) || (frame == 0)) {
334361
if (selection >= 0) {
335362
switch (menu->items[selection].id) {
@@ -366,9 +393,6 @@ static int MainMenuUpdateCallback(struct UIMenu *menu, unsigned short int frame,
366393
case MAIN_MENU_ID_BTN_FORMAT_HDD:
367394
UISetString(menu, MAIN_MENU_ID_DESCRIPTION, GetUIString(SYS_UI_MSG_DSC_FORMAT_HDD));
368395
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;
372396
case MAIN_MENU_ID_BTN_EXIT:
373397
UISetString(menu, MAIN_MENU_ID_DESCRIPTION, GetUIString(SYS_UI_MSG_DSC_QUIT));
374398
break;
@@ -382,71 +406,6 @@ static int MainMenuUpdateCallback(struct UIMenu *menu, unsigned short int frame,
382406
return 0;
383407
}
384408

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-
450409
void MainMenu(void)
451410
{
452411
int result;
@@ -483,6 +442,9 @@ void MainMenu(void)
483442

484443
DrawMenuEntranceSlideInMenuAnimation(0);
485444

445+
UpdateRegionalPaths();
446+
UISetString(&OpenTunaMenu, OPENTUNA_MENU_ID_ROM_VERSION, romver);
447+
486448
/* Main loop */
487449
while (!done) {
488450
option = UIExecMenu(CurrentMenu, option, &CurrentMenu, &MainMenuUpdateCallback);
@@ -523,16 +485,42 @@ void MainMenu(void)
523485
case MAIN_MENU_ID_BTN_INST_CROSS_PSX:
524486
event = EVENT_INSTALL_CROSS_PSX;
525487
break;
526-
case MAIN_MENU_ID_BTN_INSTALL_OPENTUNA:
488+
case OPENTUNA_MENU_ID_BTN_INSTALL:
527489
event = EVENT_INSTALL_OPENTUNA;
528490
break;
491+
case OPENTUNA_MENU_ID_BTN_UNINSTALL:
492+
event = EVENT_UNINSTALL_OPENTUNA;
493+
break;
529494
default: // MAIN_MENU_ID_BTN_EXIT
530495
event = EVENT_EXIT;
531496
}
532497

533498
UITransition(CurrentMenu, UIMT_LEFT_OUT, option);
534499

535500
switch (event) {
501+
case EVENT_INSTALL_OPENTUNA:
502+
if (McPort > 1) {
503+
McPort = DisplayPromptMessage(SYS_UI_MSG_MULTIPLE_CARDS, SYS_UI_LBL_SLOT1, SYS_UI_LBL_SLOT2);
504+
if (McPort == 0)
505+
break;
506+
McPort--;
507+
} else if (McPort == 0) {
508+
DisplayErrorMessage(SYS_UI_MSG_NO_CARDS);
509+
break;
510+
} else
511+
McPort = (McData[0].Type == MC_TYPE_PS2) ? 0 : 1;
512+
513+
unsigned int requiredSpace = 1024; // 1MB in KB
514+
if((unsigned int)McData[McPort].SpaceFree < requiredSpace)
515+
{
516+
DisplayOutOfSpaceMessage(McData[McPort].SpaceFree * 1024, requiredSpace * 1024);
517+
break;
518+
}
519+
DisplayInfoMessage(SYS_UI_MSG_INSTALL_COMPLETE);
520+
break;
521+
case EVENT_UNINSTALL_OPENTUNA:
522+
DisplayInfoMessage(SYS_UI_MSG_CLEANUP_COMPLETE);
523+
break;
536524
case EVENT_MULTI_INSTALL:
537525
if (ShowMessageBox(SYS_UI_LBL_CANCEL, SYS_UI_LBL_OK, -1, -1, GetUIString(SYS_UI_MSG_MULTI_WARN), SYS_UI_LBL_WARNING) <= 1)
538526
break;
@@ -851,15 +839,15 @@ void MainMenu(void)
851839
DisplayErrorMessage(SYS_UI_MSG_FORMAT_HDD_FAILED);
852840
}
853841
break;
854-
case EVENT_INSTALL_OPENTUNA:
855-
OpenTunaInstaller();
856-
break;
857842
case EVENT_EXIT:
858843
if (DisplayPromptMessage(SYS_UI_MSG_QUIT, SYS_UI_LBL_CANCEL, SYS_UI_LBL_OK) == 2)
859844
done = 1;
860845
break;
861846
}
862847

848+
if(option > 0)
849+
option = 0;
850+
863851
if (!done)
864852
UITransition(CurrentMenu, UIMT_LEFT_IN, option);
865853
}

installer/menu.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
void MainMenu(void);
2-
void OpenTunaInstaller(void);
32
void DrawFileCopyProgressScreen(float PercentageComplete);
43
void DrawMemoryCardDumpingProgressScreen(float PercentageComplete, unsigned int rate, unsigned int SecondsRemaining);
54
void DrawMemoryCardRestoreProgressScreen(float PercentageComplete, unsigned int rate, unsigned int SecondsRemaining);

installer/system.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,10 @@ static struct FileAlias FileAlias[NUM_CROSSLINKED_FILES] = {
328328

329329
static char MGFolderRegion, PS2SystemType;
330330
static unsigned short int ROMVersion;
331-
char SysExecFolder[] = "BREXEC-SYSTEM"; // Read above.
332-
char PSXSysExecFolder[] = "BIEXEC-SYSTEM";
333-
char SysExecFile[12]; /* E.g. "osdmain.elf" or "osd110.elf" */
334-
char romver[16];
331+
static char SysExecFolder[] = "BREXEC-SYSTEM"; // Read above.
332+
static char PSXSysExecFolder[] = "BIEXEC-SYSTEM";
333+
static char SysExecFile[12]; /* E.g. "osdmain.elf" or "osd110.elf" */
334+
static char romver[16];
335335

336336
static int InitMCInfo(int port, int slot)
337337
{

installer/system.h

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

9898
/* Function prototypes */
99-
extern char romver[16];
10099
int GetBootDeviceID(void);
101100
int GetConsoleRegion(void);
102101
int GetConsoleVMode(void);

0 commit comments

Comments
 (0)