diff --git a/cube/swiss/include/swiss.h b/cube/swiss/include/swiss.h index db2a85b4..ac86dc67 100644 --- a/cube/swiss/include/swiss.h +++ b/cube/swiss/include/swiss.h @@ -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]; diff --git a/cube/swiss/source/config/config.c b/cube/swiss/source/config/config.c index 820f8406..74ca22d5 100644 --- a/cube/swiss/source/config/config.c +++ b/cube/swiss/source/config/config.c @@ -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); @@ -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)); } diff --git a/cube/swiss/source/devices/gcloader/gcloader.c b/cube/swiss/source/devices/gcloader/gcloader.c index 90ce7ca6..9ec3110a 100644 --- a/cube/swiss/source/devices/gcloader/gcloader.c +++ b/cube/swiss/source/devices/gcloader/gcloader.c @@ -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; } @@ -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; diff --git a/cube/swiss/source/devices/gcloader/gcloader.h b/cube/swiss/source/devices/gcloader/gcloader.h index 2b5901b0..0c935322 100644 --- a/cube/swiss/source/devices/gcloader/gcloader.h +++ b/cube/swiss/source/devices/gcloader/gcloader.h @@ -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); diff --git a/cube/swiss/source/gui/info.c b/cube/swiss/source/gui/info.c index 75251cac..41cff190 100644 --- a/cube/swiss/source/gui/info.c +++ b/cube/swiss/source/gui/info.c @@ -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) { diff --git a/cube/swiss/source/main.c b/cube/swiss/source/main.c index 36c2f3fd..78984329 100644 --- a/cube/swiss/source/main.c +++ b/cube/swiss/source/main.c @@ -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);