Skip to content

Commit

Permalink
- Add firmware version tracking for GC Loader HW2+.
Browse files Browse the repository at this point in the history
  • Loading branch information
Extrems committed Aug 26, 2023
1 parent 5f3f8e1 commit 1fdbc93
Show file tree
Hide file tree
Showing 6 changed files with 34 additions and 14 deletions.
1 change: 1 addition & 0 deletions cube/swiss/include/swiss.h
Expand Up @@ -144,6 +144,7 @@ typedef struct {
int bs2Boot;
int showHiddenFiles;
int recentListLevel; // off, lazy, on
int gcloaderVersion;
char gcloaderTopVersion[32];
char autoload[PATHNAME_MAX];
char flattenDir[PATHNAME_MAX];
Expand Down
4 changes: 4 additions & 0 deletions cube/swiss/source/config/config.c
Expand Up @@ -182,6 +182,7 @@ int config_update_global(bool checkConfigDevice) {
fprintf(fp, "BBAUseDHCP=%s\r\n", swissSettings.bbaUseDhcp ? "Yes":"No");
fprintf(fp, "ShowHiddenFiles=%s\r\n", swissSettings.showHiddenFiles ? "Yes":"No");
fprintf(fp, "RecentListLevel=%s\r\n", recentListLevelStr[swissSettings.recentListLevel]);
fprintf(fp, "GCLoaderVersion=%i\r\n", swissSettings.gcloaderVersion);
fprintf(fp, "GCLoaderTopVersion=%s\r\n", swissSettings.gcloaderTopVersion);
fprintf(fp, "Autoload=%s\r\n", swissSettings.autoload);
fprintf(fp, "FlattenDir=%s\r\n", swissSettings.flattenDir);
Expand Down Expand Up @@ -866,6 +867,9 @@ void config_parse_global(char *configData) {
}
}
}
else if(!strcmp("GCLoaderVersion", name)) {
swissSettings.gcloaderVersion = atoi(value);
}
else if(!strcmp("GCLoaderTopVersion", name)) {
strlcpy(swissSettings.gcloaderTopVersion, value, sizeof(swissSettings.gcloaderTopVersion));
}
Expand Down
6 changes: 3 additions & 3 deletions cube/swiss/source/devices/gcloader/gcloader.c
Expand Up @@ -39,8 +39,8 @@ u32 gcloaderReadId() {
return __gcloaderCmdImm(0xB0000000, 0x00000000, 0x00000000);
}

char *gcloaderGetVersion() {
int len = (__gcloaderCmdImm(0xB1000001, 0x00000000, 0x00000000)+31)&~31;
char *gcloaderGetVersion(u8 hwVersion) {
int len = (__gcloaderCmdImm(0xB1000001, hwVersion, 0x00000000)+31)&~31;
if(len <= 0) {
return NULL;
}
Expand All @@ -49,7 +49,7 @@ char *gcloaderGetVersion() {
return NULL;
}
gcloader[2] = 0xB1000000;
gcloader[3] = 0;
gcloader[3] = hwVersion;
gcloader[4] = 0;
gcloader[5] = (u32)buffer;
gcloader[6] = len;
Expand Down
2 changes: 1 addition & 1 deletion cube/swiss/source/devices/gcloader/gcloader.h
Expand Up @@ -13,7 +13,7 @@
#define MAX_GCLOADER_FRAGS_PER_DISC (40)

u32 gcloaderReadId();
char *gcloaderGetVersion();
char *gcloaderGetVersion(u8 hwVersion);
int gcloaderWriteFrags(u32 discNum, file_frag *fragList, u32 totFrags);
int gcloaderWriteDiscNum(u32 discNum);

Expand Down
5 changes: 3 additions & 2 deletions cube/swiss/source/gui/info.c
Expand Up @@ -130,8 +130,9 @@ uiDrawObj_t * info_draw_page(int page_num) {
sprintf(topStr, "%s %02X %02X%02X/%02X (%02X)",device->hwName,driveVersion[6],driveVersion[4],driveVersion[5],driveVersion[7],driveVersion[8]);
}
else if(device == &__device_gcloader) {
char* gcloaderVersionStr = gcloaderGetVersion();
sprintf(topStr, "%s %s",device->hwName,gcloaderVersionStr);
int gcloaderVersion = driveInfo.pad[2]+1;
char* gcloaderVersionStr = gcloaderGetVersion(driveInfo.pad[2]);
sprintf(topStr, "%s HW%i (%s)",device->hwName,gcloaderVersion,gcloaderVersionStr);
free(gcloaderVersionStr);
}
else if(device == &__device_wkf) {
Expand Down
30 changes: 22 additions & 8 deletions cube/swiss/source/main.c
Expand Up @@ -248,16 +248,30 @@ int main(int argc, char *argv[])
}
}
else if(device == &__device_gcloader) {
char *gcloaderVersionStr = gcloaderGetVersion();
if(gcloaderVersionStr != NULL && !endsWith(gcloaderVersionStr, ".GCLOADER_HW2")) {
if(strverscmp(swissSettings.gcloaderTopVersion, gcloaderVersionStr) < 0) {
int gcloaderVersion = driveInfo.pad[2] + 1;
char *gcloaderVersionStr = gcloaderGetVersion(driveInfo.pad[2]);
if(gcloaderVersionStr != NULL) {
if(strverscmp(swissSettings.gcloaderTopVersion, gcloaderVersionStr) < 0 || swissSettings.gcloaderVersion != gcloaderVersion) {
strlcpy(swissSettings.gcloaderTopVersion, gcloaderVersionStr, sizeof(swissSettings.gcloaderTopVersion));
swissSettings.gcloaderVersion = gcloaderVersion;
}
if(strverscmp(swissSettings.gcloaderTopVersion, "2.0.1") < 0) {
find_existing_entry("gcldr:/GCLoader_Updater_2.0.1*.dol", true);
uiDrawObj_t *msgBox = DrawPublish(DrawMessageBox(D_INFO, "A firmware update is available.\ngc-loader.com/firmware-updates"));
wait_press_A();
DrawDispose(msgBox);
switch(gcloaderVersion) {
case 1:
if(strverscmp(swissSettings.gcloaderTopVersion, "2.0.1") < 0) {
find_existing_entry("gcldr:/GCLoader_Updater_2.0.1*.dol", true);
uiDrawObj_t *msgBox = DrawPublish(DrawMessageBox(D_INFO, "A firmware update is available.\ngc-loader.com/firmware-updates"));
wait_press_A();
DrawDispose(msgBox);
}
break;
case 2:
if(strverscmp(swissSettings.gcloaderTopVersion, "1.0.1") < 0) {
find_existing_entry("gcldr:/GC_LOADER_HW2_UPDATER_1.0.1.dol", true);
uiDrawObj_t *msgBox = DrawPublish(DrawMessageBox(D_INFO, "A firmware update is available.\ngc-loader.com/firmware-updates-hw2"));
wait_press_A();
DrawDispose(msgBox);
}
break;
}
}
free(gcloaderVersionStr);
Expand Down

0 comments on commit 1fdbc93

Please sign in to comment.