From fc76b6a9c6324f20bacfb76ae65dfe7b57ee6a99 Mon Sep 17 00:00:00 2001 From: dimok321 <15055714+dimok789@users.noreply.github.com> Date: Sat, 13 Jun 2009 21:10:37 +0000 Subject: [PATCH] *Changes to the OGG thread handling *Changed the Updater source in some ways and added an own thread for it for later AutoUpdate feature (when gamestarting problem after networkinit is fixed) --- gui.pnproj | 2 +- source/main.cpp | 2 - source/menu.cpp | 19 +-- source/network/updater.c | 133 ---------------- source/network/updater.cpp | 252 +++++++++++++++++++++++++++++++ source/network/updater.h | 25 ++- source/oggplayer.c | 96 +++++------- source/prompts/PromptWindows.cpp | 109 +++++-------- source/prompts/PromptWindows.h | 2 +- 9 files changed, 346 insertions(+), 294 deletions(-) delete mode 100644 source/network/updater.c create mode 100644 source/network/updater.cpp diff --git a/gui.pnproj b/gui.pnproj index 3793a186..a12549eb 100644 --- a/gui.pnproj +++ b/gui.pnproj @@ -1 +1 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/source/main.cpp b/source/main.cpp index 9c981b26..7861a4ee 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -18,8 +18,6 @@ #include "usbloader/wbfs.h" #include "usbloader/video2.h" -#include "network/http.h" -#include "network/dns.h" #include "settings/cfg.h" #include "language/language.h" #include "mload/mload.h" diff --git a/source/menu.cpp b/source/menu.cpp index e65e25c1..90b157bc 100644 --- a/source/menu.cpp +++ b/source/menu.cpp @@ -64,7 +64,6 @@ extern FreeTypeGX *fontClock; extern u8 shutdown; extern u8 reset; extern int cntMissFiles; -extern int networkisinitialized; extern struct discHdr * gameList; extern u32 gameCnt; extern s32 gameSelected, gameStart; @@ -170,6 +169,7 @@ void ExitGUIThreads() { ExitRequested = 1; LWP_JoinThread(guithread, NULL); + guithread = LWP_THREAD_NULL; } @@ -709,22 +709,15 @@ static int MenuDiscList() if (choice != 0) { - int netset; int choice2 = choice; - netset = NetworkInitPromp(choice2); + SearchMissingImages(choice2); - if(netset < 0) + if(IsNetworkInit() == false) { - WindowPrompt(LANGUAGE.Networkiniterror, 0, LANGUAGE.ok,0,0,0); - netcheck = false; + WindowPrompt(LANGUAGE.Networkiniterror, 0, LANGUAGE.ok,0,0,0); - } else { - netcheck = true; - } - - if (netcheck) - { + } else { if (GetMissingFiles() != NULL && cntMissFiles > 0) @@ -1872,7 +1865,7 @@ int MainMenu(int menu) break; } - if(IOS_GetVersion() != ios2 || networkisinitialized == 1) { + if(IOS_GetVersion() != ios2 || IsNetworkInit() == true) { ret = Sys_IosReload(ios2); if(ret < 0) { Sys_IosReload(249); diff --git a/source/network/updater.c b/source/network/updater.c deleted file mode 100644 index 0311db4a..00000000 --- a/source/network/updater.c +++ /dev/null @@ -1,133 +0,0 @@ -#include -#include -#include - -#include "http.h" - -static s32 connection; -bool netcheck = false; - -/*Networking - Forsaekn*/ -int Net_Init(char *ip){ - - s32 res; - while ((res = net_init()) == -EAGAIN) - { - usleep(100 * 1000); //100ms - } - - if (if_config(ip, NULL, NULL, true) < 0) { - printf(" Error reading IP address, exiting"); - usleep(1000 * 1000 * 1); //1 sec - return FALSE; - } - return TRUE; -} - -s32 network_request(const char * request) -{ - char buf[1024]; - char *ptr = NULL; - - u32 cnt, size; - s32 ret; - - /* Send request */ - ret = net_send(connection, request, strlen(request), 0); - if (ret < 0) - return ret; - - /* Clear buffer */ - memset(buf, 0, sizeof(buf)); - - /* Read HTTP header */ - for (cnt = 0; !strstr(buf, "\r\n\r\n"); cnt++) - if (net_recv(connection, buf + cnt, 1, 0) <= 0) - return -1; - - /* HTTP request OK? */ - if (!strstr(buf, "HTTP/1.1 200 OK")) - return -1; - /* Retrieve content size */ - ptr = strstr(buf, "Content-Length:"); - if (!ptr) - return -1; - - sscanf(ptr, "Content-Length: %u", &size); - return size; -} - -s32 network_read(void *buf, u32 len) -{ - s32 read = 0, ret; - - /* Data to be read */ - while (read < len) { - /* Read network data */ - ret = net_read(connection, buf + read, len - read); - if (ret < 0) - return ret; - - /* Read finished */ - if (!ret) - break; - - /* Increment read variable */ - read += ret; - } - - return read; -} - -s32 downloadrev(const char * url) { - - //Check if the url starts with "http://", if not it is not considered a valid url - if(strncmp(url, "http://", strlen("http://")) != 0) - { - //printf("URL '%s' doesn't start with 'http://'\n", url); - return -1; - } - - //Locate the path part of the url by searching for '/' past "http://" - char *path = strchr(url + strlen("http://"), '/'); - - //At the very least the url has to end with '/', ending with just a domain is invalid - if(path == NULL) - { - //printf("URL '%s' has no PATH part\n", url); - return -1; - } - - //Extract the domain part out of the url - int domainlength = path - url - strlen("http://"); - - if(domainlength == 0) - { - //printf("No domain part in URL '%s'\n", url); - return -1; - } - - char domain[domainlength + 1]; - strncpy(domain, url + strlen("http://"), domainlength); - domain[domainlength] = '\0'; - - connection = GetConnection(domain); - if(connection < 0) { - return -1; - } - - //Form a nice request header to send to the webserver - char* headerformat = "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n";; - char header[strlen(headerformat) + strlen(domain) + strlen(path)]; - sprintf(header, headerformat, path, domain); - - s32 filesize = network_request(header); - - return filesize; -} - -void CloseConnection() { - - net_close(connection); - -} diff --git a/source/network/updater.cpp b/source/network/updater.cpp new file mode 100644 index 00000000..81b7c66b --- /dev/null +++ b/source/network/updater.cpp @@ -0,0 +1,252 @@ +/**************************************************************************** + * Updater for USB Loader GX + * + * HTTP operations + * Written by dhewg/bushing modified by dimok + ****************************************************************************/ + +#include +#include +#include + +#include "prompts/PromptWindows.h" +#include "settings/cfg.h" +#include "main.h" +#include "http.h" + +static s32 connection; +static bool updatechecked = false; +static bool networkinitialized = false; +static char IP[16]; + +static lwp_t networkthread = LWP_THREAD_NULL; +static bool networkHalt = true; + +/**************************************************************************** + * Initialize_Network + ***************************************************************************/ +void Initialize_Network(void) { + + if(networkinitialized) return; + + s32 result; + + result = if_config(IP, NULL, NULL, true); + + if(result < 0) { + networkinitialized = false; + return; + } else { + networkinitialized = true; + return; + } +} + +/**************************************************************************** + * Check if network was initialised + ***************************************************************************/ +bool IsNetworkInit(void) +{ + return networkinitialized; +} + +/**************************************************************************** + * Get network IP + ***************************************************************************/ +char * GetNetworkIP(void) +{ + return IP; +} + +s32 network_request(const char * request) +{ + char buf[1024]; + char *ptr = NULL; + + u32 cnt, size; + s32 ret; + + /* Send request */ + ret = net_send(connection, request, strlen(request), 0); + if (ret < 0) + return ret; + + /* Clear buffer */ + memset(buf, 0, sizeof(buf)); + + /* Read HTTP header */ + for (cnt = 0; !strstr(buf, "\r\n\r\n"); cnt++) + if (net_recv(connection, buf + cnt, 1, 0) <= 0) + return -1; + + /* HTTP request OK? */ + if (!strstr(buf, "HTTP/1.1 200 OK")) + return -1; + /* Retrieve content size */ + ptr = strstr(buf, "Content-Length:"); + if (!ptr) + return -1; + + sscanf(ptr, "Content-Length: %u", &size); + return size; +} + +s32 network_read(u8 * buf, u32 len) +{ + u32 read = 0; + s32 ret = -1; + + /* Data to be read */ + while (read < len) { + /* Read network data */ + ret = net_read(connection, buf + read, len - read); + if (ret < 0) + return ret; + + /* Read finished */ + if (!ret) + break; + + /* Increment read variable */ + read += ret; + } + + return read; +} + +/**************************************************************************** + * Download request + ***************************************************************************/ +s32 download_request(const char * url) { + + //Check if the url starts with "http://", if not it is not considered a valid url + if(strncmp(url, "http://", strlen("http://")) != 0) + { + return -1; + } + + //Locate the path part of the url by searching for '/' past "http://" + char *path = strchr(url + strlen("http://"), '/'); + + //At the very least the url has to end with '/', ending with just a domain is invalid + if(path == NULL) + { + return -1; + } + + //Extract the domain part out of the url + int domainlength = path - url - strlen("http://"); + + if(domainlength == 0) + { + return -1; + } + + char domain[domainlength + 1]; + strncpy(domain, url + strlen("http://"), domainlength); + domain[domainlength] = '\0'; + + connection = GetConnection(domain); + if(connection < 0) { + return -1; + } + + //Form a nice request header to send to the webserver + char header[strlen(path)+strlen(domain)+100]; + sprintf(header, "GET %s HTTP/1.1\r\nHost: %s\r\nConnection: close\r\n\r\n", path, domain); + + s32 filesize = network_request(header); + + return filesize; +} + +void CloseConnection() { + + net_close(connection); + +} + +/**************************************************************************** + * Update check + ***************************************************************************/ +int CheckUpdate() +{ + if(!networkinitialized) + return -1; + + int revnumber = 0; + int currentrev = atoi(SVN_REV); + + struct block file = downloadfile("http://www.techjawa.com/usbloadergx/rev.txt"); + char revtxt[10]; + + u8 i; + if(file.data != NULL) { + for(i=0; i<9 || i < file.size; i++) + revtxt[i] = file.data[i]; + revtxt[i] = 0; + revnumber = atoi(revtxt); + free(file.data); + } + + if(revnumber > currentrev) + return revnumber; + else + return -1; +} + +/**************************************************************************** + * HaltNetwork + ***************************************************************************/ +void HaltNetworkThread() +{ + networkHalt = true; + + // wait for thread to finish + while(!LWP_ThreadIsSuspended(networkthread)) + usleep(100); +} + +/**************************************************************************** + * ResumeNetworkThread + ***************************************************************************/ +void ResumeNetworkThread() +{ + networkHalt = false; + LWP_ResumeThread(networkthread); +} + +/********************************************************************************* + * Networkthread for background network initialize and update check with idle prio + *********************************************************************************/ +static void * networkinitcallback(void *arg) +{ + Initialize_Network(); + + if(networkinitialized == true && updatechecked == false) { + if(CheckUpdate() > 0) { + /** Here we can enter the update function later ** + ** when network problem is solved **/ + WindowPrompt("Update available",0,"OK",0,0,0); + } + updatechecked = true; + } + return NULL; +} + +/**************************************************************************** + * InitNetworkThread with priority 0 (idle) + ***************************************************************************/ +void InitNetworkThread() +{ + LWP_CreateThread (&networkthread, networkinitcallback, NULL, NULL, 0, 0); +} + +/**************************************************************************** + * ShutdownThread + ***************************************************************************/ +void ShutdownNetworkThread() +{ + LWP_JoinThread (networkthread, NULL); + networkthread = LWP_THREAD_NULL; +} diff --git a/source/network/updater.h b/source/network/updater.h index dda98110..589afa09 100644 --- a/source/network/updater.h +++ b/source/network/updater.h @@ -1,21 +1,18 @@ #ifndef _UPDATER_H_ #define _UPDATER_H_ -#ifdef __cplusplus -extern "C" -{ -#endif - -extern bool netcheck; - -int Net_Init(char *ip); +void Initialize_Network(void); +bool IsNetworkInit(void); +char * GetNetworkIP(void); s32 network_request(const char * request); -s32 network_read(void *buf, u32 len); -s32 downloadrev(const char * url); +s32 network_read(u8 *buf, u32 len); +s32 download_request(const char * url); void CloseConnection(); - -#ifdef __cplusplus -} -#endif +int CheckUpdate(); + +void HaltNetworkThread(); +void ResumeNetworkThread(); +void InitNetworkThread(); +void ShutdownNetworkThread(); #endif diff --git a/source/oggplayer.c b/source/oggplayer.c index b709857b..adf8ca18 100644 --- a/source/oggplayer.c +++ b/source/oggplayer.c @@ -2,6 +2,8 @@ Copyright (c) 2008 Francisco Muņoz 'Hermes' All rights reserved. + Threading modifications/corrections by Tantric, 2009 + Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -28,6 +30,7 @@ #include #include #include +#include /* OGG control */ @@ -61,15 +64,15 @@ static private_data_ogg private_ogg; #define STACKSIZE 8192 static u8 oggplayer_stack[STACKSIZE]; -static lwpq_t oggplayer_queue; -static lwp_t h_oggplayer; +static lwpq_t oggplayer_queue = LWP_THREAD_NULL; +static lwp_t h_oggplayer = LWP_THREAD_NULL; static int ogg_thread_running = 0; static void ogg_add_callback(int voice) { - if (ogg_thread_running <= 0) + if (!ogg_thread_running) { - SND_StopVoice(0); + ASND_StopVoice(0); return; } @@ -78,7 +81,7 @@ static void ogg_add_callback(int voice) if (private_ogg.pcm_indx >= READ_SAMPLES) { - if (SND_AddVoice(0, + if (ASND_AddVoice(0, (void *) private_ogg.pcmout[private_ogg.pcmout_pos], private_ogg.pcm_indx << 1) == 0) { @@ -101,6 +104,7 @@ static void ogg_add_callback(int voice) static void * ogg_player_thread(private_data_ogg * priv) { int first_time = 1; + long ret; ogg_thread_running = 0; //init @@ -108,7 +112,7 @@ static void * ogg_player_thread(private_data_ogg * priv) priv[0].vi = ov_info(&priv[0].vf, -1); - SND_Pause(0); + ASND_Pause(0); priv[0].pcm_indx = 0; priv[0].pcmout_pos = 0; @@ -118,22 +122,15 @@ static void * ogg_player_thread(private_data_ogg * priv) ogg_thread_running = 1; - while (!priv[0].eof) + while (!priv[0].eof && ogg_thread_running) { - long ret; - if (ogg_thread_running <= 0) - break; - if (priv[0].flag) LWP_ThreadSleep(oggplayer_queue); // wait only when i have samples to send - if (ogg_thread_running <= 0) - break; - if (priv[0].flag == 0) // wait to all samples are sended { - if (SND_TestPointer(0, priv[0].pcmout[priv[0].pcmout_pos]) - && SND_StatusVoice(0) != SND_UNUSED) + if (ASND_TestPointer(0, priv[0].pcmout[priv[0].pcmout_pos]) + && ASND_StatusVoice(0) != SND_UNUSED) { priv[0].flag |= 64; continue; @@ -188,12 +185,12 @@ static void * ogg_player_thread(private_data_ogg * priv) if (priv[0].flag == 1) { - if (SND_StatusVoice(0) == SND_UNUSED || first_time) + if (ASND_StatusVoice(0) == SND_UNUSED || first_time) { first_time = 0; if (priv[0].vi->channels == 2) { - SND_SetVoice(0, VOICE_STEREO_16BIT, priv[0].vi->rate, 0, + ASND_SetVoice(0, VOICE_STEREO_16BIT, priv[0].vi->rate, 0, (void *) priv[0].pcmout[priv[0].pcmout_pos], priv[0].pcm_indx << 1, priv[0].volume, priv[0].volume, ogg_add_callback); @@ -203,7 +200,7 @@ static void * ogg_player_thread(private_data_ogg * priv) } else { - SND_SetVoice(0, VOICE_MONO_16BIT, priv[0].vi->rate, 0, + ASND_SetVoice(0, VOICE_MONO_16BIT, priv[0].vi->rate, 0, (void *) priv[0].pcmout[priv[0].pcmout_pos], priv[0].pcm_indx << 1, priv[0].volume, priv[0].volume, ogg_add_callback); @@ -212,13 +209,8 @@ static void * ogg_player_thread(private_data_ogg * priv) priv[0].flag = 0; } } - else - { - // if(priv[0].pcm_indx==0) priv[0].flag=0; // all samples sended - } - } - + usleep(100); } ov_clear(&priv[0].vf); priv[0].fd = -1; @@ -230,17 +222,20 @@ static void * ogg_player_thread(private_data_ogg * priv) void StopOgg() { - SND_StopVoice(0); - if (ogg_thread_running > 0) - { - ogg_thread_running = -2; - LWP_ThreadSignal(oggplayer_queue); - LWP_JoinThread(h_oggplayer, NULL); + ASND_StopVoice(0); + ogg_thread_running = 0; - while (((volatile int) ogg_thread_running) != 0) - { - ;;; - } + if(h_oggplayer != LWP_THREAD_NULL) + { + if(oggplayer_queue != LWP_TQUEUE_NULL) + LWP_ThreadSignal(oggplayer_queue); + LWP_JoinThread(h_oggplayer, NULL); + h_oggplayer = LWP_THREAD_NULL; + } + if(oggplayer_queue != LWP_TQUEUE_NULL) + { + LWP_CloseQueue(oggplayer_queue); + oggplayer_queue = LWP_TQUEUE_NULL; } } @@ -248,8 +243,6 @@ int PlayOgg(int fd, int time_pos, int mode) { StopOgg(); - ogg_thread_running = 0; - private_ogg.fd = fd; private_ogg.mode = mode; private_ogg.eof = 0; @@ -269,23 +262,18 @@ int PlayOgg(int fd, int time_pos, int mode) { mem_close(private_ogg.fd); // mem_close() can too close files from devices private_ogg.fd = -1; - ogg_thread_running = -1; + ogg_thread_running = 0; return -1; } if (LWP_CreateThread(&h_oggplayer, (void *) ogg_player_thread, &private_ogg, oggplayer_stack, STACKSIZE, 80) == -1) { - ogg_thread_running = -1; + ogg_thread_running = 0; ov_clear(&private_ogg.vf); private_ogg.fd = -1; return -1; } - LWP_ThreadSignal(oggplayer_queue); - while (((volatile int) ogg_thread_running) == 0) - { - ;;; - } return 0; } @@ -342,7 +330,6 @@ void PauseOgg(int pause) if (ogg_thread_running > 0) { LWP_ThreadSignal(oggplayer_queue); - // while(((volatile int )private_ogg.flag)!=1 && ((volatile int )ogg_thread_running)>0) {;;;} } } @@ -351,31 +338,26 @@ void PauseOgg(int pause) int StatusOgg() { - if (ogg_thread_running <= 0) + if (ogg_thread_running == 0) return -1; // Error - - if (private_ogg.eof) + else if (private_ogg.eof) return 255; // EOF - - if (private_ogg.flag & 128) + else if (private_ogg.flag & 128) return 2; // paused - return 1; // running + else + return 1; // running } void SetVolumeOgg(int volume) { private_ogg.volume = volume; - SND_Pause(0); - - SND_ChangeVolumeVoice(0, volume, volume); + ASND_ChangeVolumeVoice(0, volume, volume); } s32 GetTimeOgg() { int ret; - if (ogg_thread_running <= 0) - return 0; - if (private_ogg.fd < 0) + if (ogg_thread_running == 0 || private_ogg.fd < 0) return 0; ret = ((s32) ov_time_tell(&private_ogg.vf)); if (ret < 0) diff --git a/source/prompts/PromptWindows.cpp b/source/prompts/PromptWindows.cpp index 7e11d2ce..529c84ce 100644 --- a/source/prompts/PromptWindows.cpp +++ b/source/prompts/PromptWindows.cpp @@ -25,7 +25,6 @@ /*** Variables that are also used extern ***/ int cntMissFiles = 0; -int networkisinitialized; /*** Variables used only in this file ***/ static GuiText prTxt(NULL, 26, (GXColor){THEME.prompttxt_r, THEME.prompttxt_g, THEME.prompttxt_b, 255}); @@ -1584,14 +1583,10 @@ FormatingPartition(const char *title, partitionEntry *entry) /**************************************************************************** - * NetworkInit + * SearchMissingImages ***************************************************************************/ -int NetworkInitPromp(int choice2) +void SearchMissingImages(int choice2) { - char hostip[16]; - char * IP = NULL; - s32 ret = -1; - GuiWindow promptWindow(472,320); promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); promptWindow.SetPosition(0, -10); @@ -1649,23 +1644,24 @@ int NetworkInitPromp(int choice2) ResumeGui(); - while (!IP) - { + while (!IsNetworkInit()) { VIDEO_WaitVSync(); - ret = Net_Init(hostip); + Initialize_Network(); - if (ret > 0) { - IP = hostip; - } - - if (ret <= 0) { + if (!IsNetworkInit()) { msgTxt.SetText(LANGUAGE.Couldnotinitializenetwork); } - if (IP && ret > 0) { - msgTxt.SetTextf("IP: %s", IP); + if(btn1.GetState() == STATE_CLICKED) { + btn1.ResetState(); + break; + } + } + + if (IsNetworkInit()) { + msgTxt.SetTextf("IP: %s", GetNetworkIP()); cntMissFiles = 0; u32 i = 0; char filename[11]; @@ -1701,16 +1697,8 @@ int NetworkInitPromp(int choice2) } } } - break; } - if(btn1.GetState() == STATE_CLICKED) { - IP = 0; - ret = -1; - break; - } - - } promptWindow.SetEffect(EFFECT_SLIDE_TOP | EFFECT_SLIDE_OUT, 50); while(promptWindow.GetEffect() > 0) usleep(50); HaltGui(); @@ -1718,9 +1706,7 @@ int NetworkInitPromp(int choice2) mainWindow->SetState(STATE_DEFAULT); ResumeGui(); - networkisinitialized = 1; - - return ret; + return; } /**************************************************************************** @@ -2139,15 +2125,11 @@ ProgressDownloadWindow(int choice2) * progress bar showing % completion, or a throbber that only shows that an * action is in progress. ***************************************************************************/ -int -ProgressUpdateWindow() -{ +#define BLOCKSIZE 1024 +int ProgressUpdateWindow() +{ int ret = 0, failed = 0; - const unsigned int blocksize = 1024; - char hostip[16]; - char * IP = NULL; - u8 blockbuffer[blocksize] ATTRIBUTE_ALIGN(32); GuiWindow promptWindow(472,320); promptWindow.SetAlignment(ALIGN_CENTRE, ALIGN_MIDDLE); @@ -2255,23 +2237,19 @@ ProgressUpdateWindow() snprintf(dolpath, sizeof(dolpath), "%sbootnew.dol", Settings.update_path); snprintf(dolpathsuccess, sizeof(dolpathsuccess), "%sboot.dol", Settings.update_path); - while (!IP && !(ret < 0)) { + while (!IsNetworkInit()) { VIDEO_WaitVSync(); - ret = Net_Init(hostip); + Initialize_Network(); - if (ret > 0) { - IP = hostip; - msgTxt.SetText(IP); - } - - if (ret <= 0) { + if (IsNetworkInit()) { + msgTxt.SetText(GetNetworkIP()); + } else { msgTxt.SetText(LANGUAGE.Couldnotinitializenetwork); } if(btn1.GetState() == STATE_CLICKED) { - IP = 0; ret = -1; failed = -1; btn1.ResetState(); @@ -2279,30 +2257,13 @@ ProgressUpdateWindow() } } - if(IP && ret >= 0) { + if(IsNetworkInit() && ret >= 0) { - networkisinitialized = 1; + int newrev = CheckUpdate(); - int revnumber = 0; - int currentrev = atoi(SVN_REV); + if(newrev > 0) { -/// SDCard_deInit(); - struct block file = downloadfile("http://www.techjawa.com/usbloadergx/rev.txt"); - FILE *pfile; -/// SDCard_Init(); - - if(file.data != NULL) - { - char revtxt[10]; - u8 i; - for(i=0; i<9 || i currentrev) { - sprintf(msg, "Rev%i %s.", revnumber, LANGUAGE.available); + sprintf(msg, "Rev%i %s.", newrev, LANGUAGE.available); int choice = WindowPrompt(msg, LANGUAGE.Doyouwanttoupdate, LANGUAGE.Updatedol, LANGUAGE.Updateall, LANGUAGE.Cancel, 0); if(choice == 1 || choice == 2) { titleTxt.SetTextf("%s USB Loader GX", LANGUAGE.updating); @@ -2311,13 +2272,15 @@ ProgressUpdateWindow() promptWindow.Append(&progressbarImg); promptWindow.Append(&progressbarOutlineImg); promptWindow.Append(&prTxt); - msgTxt.SetTextf("%s Rev%i", LANGUAGE.Updateto, revnumber); - int filesize = downloadrev("http://www.techjawa.com/usbloadergx/boot.dol"); + msgTxt.SetTextf("%s Rev%i", LANGUAGE.Updateto, newrev); + s32 filesize = download_request("http://www.techjawa.com/usbloadergx/boot.dol"); if(filesize > 0) { + FILE * pfile; pfile = fopen(dolpath, "wb"); - for (int i = 0; i < filesize; i += blocksize) { + u8 blockbuffer[BLOCKSIZE] ATTRIBUTE_ALIGN(32); + for (s32 i = 0; i < filesize; i += BLOCKSIZE) { prTxt.SetTextf("%i%%", 100*i/filesize); - if ((Settings.wsprompt == yes) && (CFG.widescreen)){/////////////adjust for widescreen + if ((Settings.wsprompt == yes) && (CFG.widescreen)) { progressbarImg.SetTile(80*i/filesize); } else { progressbarImg.SetTile(100*i/filesize); @@ -2334,11 +2297,11 @@ ProgressUpdateWindow() u32 blksize; blksize = (u32)(filesize - i); - if (blksize > blocksize) - blksize = blocksize; + if (blksize > BLOCKSIZE) + blksize = BLOCKSIZE; ret = network_read(blockbuffer, blksize); - if ((u32)ret != blksize) { + if (ret != (s32) blksize) { failed = -1; ret = -1; fclose(pfile); @@ -2359,7 +2322,7 @@ ProgressUpdateWindow() if(choice == 2) { //get the icon.png and the meta.xml char xmliconpath[150]; - file = downloadfile("http://www.techjawa.com/usbloadergx/meta.file"); + struct block file = downloadfile("http://www.techjawa.com/usbloadergx/meta.file"); if(file.data != NULL){ sprintf(xmliconpath, "%smeta.xml", Settings.update_path); pfile = fopen(xmliconpath, "wb"); diff --git a/source/prompts/PromptWindows.h b/source/prompts/PromptWindows.h index 5a71f377..23aeaee2 100644 --- a/source/prompts/PromptWindows.h +++ b/source/prompts/PromptWindows.h @@ -17,7 +17,7 @@ int WindowExitPrompt(const char *title, const char *msg, const char *btn1Label, int GameWindowPrompt(); int DiscWait(const char *title, const char *msg, const char *btn1Label, const char *btn2Label, int IsDeviceWait); int FormatingPartition(const char *title, partitionEntry *entry); -int NetworkInitPromp(int choice2); +void SearchMissingImages(int choice2); int ProgressWindow(const char *title, const char *msg); int ProgressDownloadWindow(int choice2); int ProgressUpdateWindow();