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 "theme.h"
|
||||||
#include "message-box.h"
|
#include "message-box.h"
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
|
#include "netloader.h"
|
||||||
|
|
||||||
void menuStartupPath(void);
|
void menuStartupPath(void);
|
||||||
void menuStartup(void);
|
void menuStartup(void);
|
||||||
|
@ -43,13 +43,12 @@ static enum
|
|||||||
|
|
||||||
void launchMenuNetloaderTask() {
|
void launchMenuNetloaderTask() {
|
||||||
if(hbmenu_state == HBMENU_DEFAULT)
|
if(hbmenu_state == HBMENU_DEFAULT)
|
||||||
if(netloader_activate() == 0) hbmenu_state = HBMENU_NETLOADER_ACTIVE;
|
workerSchedule(netloaderTask, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void launchMenuBackTask() {
|
void launchMenuBackTask() {
|
||||||
if(hbmenu_state == HBMENU_NETLOADER_ACTIVE) {
|
if(hbmenu_state == HBMENU_NETLOADER_ACTIVE) {
|
||||||
netloader_deactivate();
|
netloaderSignalExit();
|
||||||
hbmenu_state = HBMENU_DEFAULT;
|
|
||||||
}
|
}
|
||||||
else if(hbmenu_state == HBMENU_THEME_MENU) {
|
else if(hbmenu_state == HBMENU_THEME_MENU) {
|
||||||
hbmenu_state = HBMENU_DEFAULT;
|
hbmenu_state = HBMENU_DEFAULT;
|
||||||
@ -496,10 +495,13 @@ void drawButtons(menu_s* menu, bool emptyDir, int *x_image_out) {
|
|||||||
|
|
||||||
void menuLoop(void) {
|
void menuLoop(void) {
|
||||||
menuEntry_s* me;
|
menuEntry_s* me;
|
||||||
|
menuEntry_s* netloader_me = NULL;
|
||||||
menu_s* menu = menuGetCurrent();
|
menu_s* menu = menuGetCurrent();
|
||||||
int i;
|
int i;
|
||||||
int x, y;
|
int x, y;
|
||||||
int menupath_x_endpos = 918 + 40;
|
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 (y=0; y<450; y++) {
|
||||||
for (x=0; x<1280; x+=4) {// don't draw bottom pixels as they are covered by the waves
|
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();
|
drawTime();
|
||||||
drawCharge();
|
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 (menu->nEntries==0 || hbmenu_state == HBMENU_NETLOADER_ACTIVE)
|
||||||
{
|
{
|
||||||
if (hbmenu_state == HBMENU_NETLOADER_ACTIVE) {
|
if (hbmenu_state == HBMENU_NETLOADER_ACTIVE) {
|
||||||
menuEntry_s me;
|
if (netloader_launch_app) {
|
||||||
menuEntryInit(&me,ENTRY_TYPE_FILE);
|
|
||||||
|
|
||||||
int netloader_result = netloader_loop(&me);
|
|
||||||
if( netloader_result != 0) {
|
|
||||||
hbmenu_state = HBMENU_DEFAULT;
|
hbmenu_state = HBMENU_DEFAULT;
|
||||||
if (netloader_result == 1) {
|
|
||||||
menuCreateMsgBox(240,240, textGetString(StrId_Loading));
|
menuCreateMsgBox(240,240, textGetString(StrId_Loading));
|
||||||
launchMenuEntryTask(&me);
|
launchMenuEntryTask(netloader_me);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DrawText(interuiregular14, 64, 128 + 18, themeCurrent.textColor, textGetString(StrId_NoAppsFound_Msg));
|
DrawText(interuiregular14, 64, 128 + 18, themeCurrent.textColor, textGetString(StrId_NoAppsFound_Msg));
|
||||||
|
@ -40,20 +40,22 @@ static int netloader_datafd = -1;
|
|||||||
#if PING_ENABLED
|
#if PING_ENABLED
|
||||||
static int netloader_udpfd = -1;
|
static int netloader_udpfd = -1;
|
||||||
#endif
|
#endif
|
||||||
unsigned char in[ZLIB_CHUNK];
|
static unsigned char in[ZLIB_CHUNK];
|
||||||
unsigned char out[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) {
|
static void netloader_error(const char *func, int err) {
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
char errortext[1024];
|
memset(netloader_errortext, 0, sizeof(netloader_errortext));
|
||||||
|
snprintf(netloader_errortext, sizeof(netloader_errortext)-1, "%s: err=%d\n %s\n", func, err, strerror(errno));
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
@ -558,7 +560,6 @@ int netloader_loop(menuEntry_s *me) {
|
|||||||
if(netloader_datafd >= 0)
|
if(netloader_datafd >= 0)
|
||||||
{
|
{
|
||||||
int result = loadnro(me, netloader_datafd,sa_remote.sin_addr);
|
int result = loadnro(me, netloader_datafd,sa_remote.sin_addr);
|
||||||
netloader_deactivate();
|
|
||||||
if (result== 0) {
|
if (result== 0) {
|
||||||
return 1;
|
return 1;
|
||||||
} else {
|
} else {
|
||||||
@ -568,3 +569,84 @@ int netloader_loop(menuEntry_s *me) {
|
|||||||
|
|
||||||
return 0;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -3,3 +3,11 @@
|
|||||||
int netloader_activate(void);
|
int netloader_activate(void);
|
||||||
int netloader_deactivate(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.");
|
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
|
#ifdef ENABLE_AUDIO
|
||||||
if (R_SUCCEEDED(rc)) audio_initialize();
|
if (R_SUCCEEDED(rc)) audio_initialize();
|
||||||
#endif
|
#endif
|
||||||
@ -164,6 +169,7 @@ int main(int argc, char **argv)
|
|||||||
audio_exit();
|
audio_exit();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
netloaderExit();
|
||||||
fontExit();
|
fontExit();
|
||||||
launchExit();
|
launchExit();
|
||||||
workerExit();
|
workerExit();
|
||||||
|
@ -21,6 +21,7 @@ int main()
|
|||||||
fontInitialize();
|
fontInitialize();
|
||||||
workerInit();
|
workerInit();
|
||||||
menuStartup();
|
menuStartup();
|
||||||
|
netloaderInit();
|
||||||
|
|
||||||
while (window.isOpen())
|
while (window.isOpen())
|
||||||
{
|
{
|
||||||
@ -53,6 +54,7 @@ int main()
|
|||||||
window.display();
|
window.display();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
netloaderExit();
|
||||||
workerExit();
|
workerExit();
|
||||||
fontExit();
|
fontExit();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user