Moved netloader to the worker thread. Minor improvements.
This commit is contained in:
parent
59e2d7a306
commit
45a10488b1
@ -62,6 +62,7 @@ typedef union {
|
||||
#include "theme.h"
|
||||
#include "message-box.h"
|
||||
#include "power.h"
|
||||
#include "netloader.h"
|
||||
|
||||
void menuStartupPath(void);
|
||||
void menuStartup(void);
|
||||
|
@ -43,13 +43,12 @@ static enum
|
||||
|
||||
void launchMenuNetloaderTask() {
|
||||
if(hbmenu_state == HBMENU_DEFAULT)
|
||||
if(netloader_activate() == 0) hbmenu_state = HBMENU_NETLOADER_ACTIVE;
|
||||
workerSchedule(netloaderTask, NULL);
|
||||
}
|
||||
|
||||
void launchMenuBackTask() {
|
||||
if(hbmenu_state == HBMENU_NETLOADER_ACTIVE) {
|
||||
netloader_deactivate();
|
||||
hbmenu_state = HBMENU_DEFAULT;
|
||||
netloaderSignalExit();
|
||||
}
|
||||
else if(hbmenu_state == HBMENU_THEME_MENU) {
|
||||
hbmenu_state = HBMENU_DEFAULT;
|
||||
@ -496,10 +495,13 @@ void drawButtons(menu_s* menu, bool emptyDir, int *x_image_out) {
|
||||
|
||||
void menuLoop(void) {
|
||||
menuEntry_s* me;
|
||||
menuEntry_s* netloader_me = NULL;
|
||||
menu_s* menu = menuGetCurrent();
|
||||
int i;
|
||||
int x, y;
|
||||
int menupath_x_endpos = 918 + 40;
|
||||
bool netloader_activated = 0, netloader_launch_app = 0;
|
||||
char netloader_errormsg[1024];
|
||||
|
||||
for (y=0; y<450; y++) {
|
||||
for (x=0; x<1280; x+=4) {// don't draw bottom pixels as they are covered by the waves
|
||||
@ -531,19 +533,23 @@ void menuLoop(void) {
|
||||
drawTime();
|
||||
drawCharge();
|
||||
|
||||
netloaderGetState(&netloader_activated, &netloader_launch_app, &netloader_me, netloader_errormsg, sizeof(netloader_errormsg));
|
||||
|
||||
if(hbmenu_state == HBMENU_DEFAULT && netloader_activated) {
|
||||
hbmenu_state = HBMENU_NETLOADER_ACTIVE;
|
||||
} else if(hbmenu_state == HBMENU_NETLOADER_ACTIVE && !netloader_activated && !netloader_launch_app) {
|
||||
hbmenu_state = HBMENU_DEFAULT;
|
||||
}
|
||||
|
||||
if (netloader_errormsg[0]) menuCreateMsgBox(780,300, netloader_errormsg);
|
||||
|
||||
if (menu->nEntries==0 || hbmenu_state == HBMENU_NETLOADER_ACTIVE)
|
||||
{
|
||||
if (hbmenu_state == HBMENU_NETLOADER_ACTIVE) {
|
||||
menuEntry_s me;
|
||||
menuEntryInit(&me,ENTRY_TYPE_FILE);
|
||||
|
||||
int netloader_result = netloader_loop(&me);
|
||||
if( netloader_result != 0) {
|
||||
if (netloader_launch_app) {
|
||||
hbmenu_state = HBMENU_DEFAULT;
|
||||
if (netloader_result == 1) {
|
||||
menuCreateMsgBox(240,240, textGetString(StrId_Loading));
|
||||
launchMenuEntryTask(&me);
|
||||
}
|
||||
menuCreateMsgBox(240,240, textGetString(StrId_Loading));
|
||||
launchMenuEntryTask(netloader_me);
|
||||
}
|
||||
} else {
|
||||
DrawText(interuiregular14, 64, 128 + 18, themeCurrent.textColor, textGetString(StrId_NoAppsFound_Msg));
|
||||
|
@ -40,20 +40,22 @@ static int netloader_datafd = -1;
|
||||
#if PING_ENABLED
|
||||
static int netloader_udpfd = -1;
|
||||
#endif
|
||||
unsigned char in[ZLIB_CHUNK];
|
||||
unsigned char out[ZLIB_CHUNK];
|
||||
static unsigned char in[ZLIB_CHUNK];
|
||||
static unsigned char out[ZLIB_CHUNK];
|
||||
|
||||
static mtx_t netloader_mtx;
|
||||
|
||||
static bool netloader_initialized = 0;
|
||||
static bool netloader_exitflag = 0;
|
||||
static bool netloader_activated = 0, netloader_launchapp = 0;
|
||||
static menuEntry_s netloader_me;
|
||||
static char netloader_errortext[1024];
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
static void netloader_error(const char *func, int err) {
|
||||
//---------------------------------------------------------------------------------
|
||||
char errortext[1024];
|
||||
|
||||
memset(errortext, 0, sizeof(errortext));
|
||||
snprintf(errortext, sizeof(errortext)-1, "%s: err=%d\n %s\n", func, err, strerror(errno));
|
||||
|
||||
menuCreateMsgBox(780,300, errortext);
|
||||
|
||||
netloader_deactivate();
|
||||
memset(netloader_errortext, 0, sizeof(netloader_errortext));
|
||||
snprintf(netloader_errortext, sizeof(netloader_errortext)-1, "%s: err=%d\n %s\n", func, err, strerror(errno));
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
@ -558,7 +560,6 @@ int netloader_loop(menuEntry_s *me) {
|
||||
if(netloader_datafd >= 0)
|
||||
{
|
||||
int result = loadnro(me, netloader_datafd,sa_remote.sin_addr);
|
||||
netloader_deactivate();
|
||||
if (result== 0) {
|
||||
return 1;
|
||||
} else {
|
||||
@ -568,3 +569,84 @@ int netloader_loop(menuEntry_s *me) {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void netloaderGetState(bool *activated, bool *launch_app, menuEntry_s **me, char *errormsg, size_t errormsg_size) {
|
||||
mtx_lock(&netloader_mtx);
|
||||
|
||||
*activated = netloader_activated;
|
||||
*launch_app = netloader_launchapp;
|
||||
*me = &netloader_me;
|
||||
|
||||
memset(errormsg, 0, errormsg_size);
|
||||
if(netloader_errortext[0]) {
|
||||
strncpy(errormsg, netloader_errortext, errormsg_size-1);
|
||||
memset(netloader_errortext, 0, sizeof(netloader_errortext));
|
||||
}
|
||||
|
||||
mtx_unlock(&netloader_mtx);
|
||||
}
|
||||
|
||||
static bool netloaderGetExit(void) {
|
||||
bool flag;
|
||||
mtx_lock(&netloader_mtx);
|
||||
flag = netloader_exitflag;
|
||||
mtx_unlock(&netloader_mtx);
|
||||
return flag;
|
||||
}
|
||||
|
||||
void netloaderSignalExit(void) {
|
||||
mtx_lock(&netloader_mtx);
|
||||
netloader_exitflag = 1;
|
||||
mtx_unlock(&netloader_mtx);
|
||||
}
|
||||
|
||||
bool netloaderInit(void)
|
||||
{
|
||||
if (netloader_initialized) return 1;
|
||||
|
||||
if (mtx_init(&netloader_mtx, mtx_plain) != thrd_success) return 0;
|
||||
|
||||
netloader_initialized = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
void netloaderExit(void)
|
||||
{
|
||||
if (!netloader_initialized) return;
|
||||
netloader_initialized = 0;
|
||||
|
||||
mtx_destroy(&netloader_mtx);
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------
|
||||
void netloaderTask(void* arg) {
|
||||
//---------------------------------------------------------------------------------
|
||||
int ret=0;
|
||||
menuEntryInit(&netloader_me,ENTRY_TYPE_FILE);
|
||||
|
||||
mtx_lock(&netloader_mtx);
|
||||
netloader_exitflag = 0;
|
||||
netloader_activated = 0;
|
||||
netloader_launchapp = 0;
|
||||
mtx_unlock(&netloader_mtx);
|
||||
|
||||
if(netloader_activate() == 0) {
|
||||
mtx_lock(&netloader_mtx);
|
||||
netloader_activated = 1;
|
||||
mtx_unlock(&netloader_mtx);
|
||||
}
|
||||
else {
|
||||
netloader_deactivate();
|
||||
return;
|
||||
}
|
||||
|
||||
while((ret = netloader_loop(&netloader_me)) == 0 && !netloaderGetExit());
|
||||
|
||||
netloader_deactivate();
|
||||
mtx_lock(&netloader_mtx);
|
||||
netloader_exitflag = 0;
|
||||
netloader_activated = 0;
|
||||
if (ret==1) netloader_launchapp = 1;
|
||||
mtx_unlock(&netloader_mtx);
|
||||
}
|
||||
|
||||
|
@ -2,4 +2,12 @@
|
||||
|
||||
int netloader_activate(void);
|
||||
int netloader_deactivate(void);
|
||||
int netloader_loop( menuEntry_s *me);
|
||||
int netloader_loop(menuEntry_s *me);
|
||||
|
||||
bool netloaderInit(void);
|
||||
void netloaderExit(void);
|
||||
|
||||
void netloaderTask(void* arg);
|
||||
|
||||
void netloaderGetState(bool *activated, bool *launch_app, menuEntry_s **me, char *errormsg, size_t errormsg_size);
|
||||
void netloaderSignalExit(void);
|
||||
|
@ -83,6 +83,11 @@ int main(int argc, char **argv)
|
||||
snprintf(errormsg, sizeof(errormsg)-1, "Error: fontInitialize() failed.");
|
||||
}
|
||||
|
||||
if (R_SUCCEEDED(rc) && !netloaderInit()) {
|
||||
rc = 4;
|
||||
snprintf(errormsg, sizeof(errormsg)-1, "Error: netloaderInit() failed.");
|
||||
}
|
||||
|
||||
#ifdef ENABLE_AUDIO
|
||||
if (R_SUCCEEDED(rc)) audio_initialize();
|
||||
#endif
|
||||
@ -164,6 +169,7 @@ int main(int argc, char **argv)
|
||||
audio_exit();
|
||||
#endif
|
||||
|
||||
netloaderExit();
|
||||
fontExit();
|
||||
launchExit();
|
||||
workerExit();
|
||||
|
@ -21,6 +21,7 @@ int main()
|
||||
fontInitialize();
|
||||
workerInit();
|
||||
menuStartup();
|
||||
netloaderInit();
|
||||
|
||||
while (window.isOpen())
|
||||
{
|
||||
@ -53,6 +54,7 @@ int main()
|
||||
window.display();
|
||||
}
|
||||
|
||||
netloaderExit();
|
||||
workerExit();
|
||||
fontExit();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user