Fix the shutdown sequence for maemo, SDL and simulator builds
Do proper shutdown in RaaA builds like writeout of
last.FM scrobbler file and other neat things.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29309 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/misc.c b/apps/misc.c
index a08dac3..b2f1df5 100644
--- a/apps/misc.c
+++ b/apps/misc.c
@@ -256,7 +256,7 @@
static bool clean_shutdown(void (*callback)(void *), void *parameter)
{
-#if (CONFIG_PLATFORM & PLATFORM_HOSTED)
+#if (CONFIG_PLATFORM & PLATFORM_ANDROID)
(void)callback;
(void)parameter;
bookmark_autobookmark(false);
diff --git a/firmware/target/hosted/maemo/maemo-thread.c b/firmware/target/hosted/maemo/maemo-thread.c
index f655ed5..6593a9f 100644
--- a/firmware/target/hosted/maemo/maemo-thread.c
+++ b/firmware/target/hosted/maemo/maemo-thread.c
@@ -23,6 +23,7 @@
#include <libhal.h>
#include <libosso.h>
#include <SDL_thread.h>
+#include <SDL_events.h>
#include "config.h"
#include "system.h"
@@ -213,6 +214,11 @@
void shutdown_hw(void)
{
+ /* Shut down SDL event loop */
+ SDL_Event event;
+ memset(&event, 0, sizeof(SDL_Event));
+ event.type = SDL_USEREVENT;
+ SDL_PushEvent(&event);
}
void cancel_shutdown(void)
diff --git a/firmware/target/hosted/sdl/button-sdl.c b/firmware/target/hosted/sdl/button-sdl.c
index 25dad09..9c8188a 100644
--- a/firmware/target/hosted/sdl/button-sdl.c
+++ b/firmware/target/hosted/sdl/button-sdl.c
@@ -261,7 +261,12 @@
break;
}
case SDL_QUIT:
+ /* Post SYS_POWEROFF event. Will post SDL_USEREVENT in shutdown_hw() if successful. */
+ queue_broadcast(SYS_POWEROFF, 0);
+ break;
+ case SDL_USEREVENT:
return true;
+ break;
}
return false;
diff --git a/uisimulator/common/powermgmt-sim.c b/uisimulator/common/powermgmt-sim.c
index dbd3149..30b04d6 100644
--- a/uisimulator/common/powermgmt-sim.c
+++ b/uisimulator/common/powermgmt-sim.c
@@ -24,6 +24,7 @@
#include <time.h>
#include "kernel.h"
#include "powermgmt.h"
+#include <SDL_events.h>
#define BATT_MINMVOLT 2500 /* minimum millivolts of battery */
#define BATT_MAXMVOLT 4500 /* maximum millivolts of battery */
@@ -155,6 +156,11 @@
void shutdown_hw(void)
{
+ /* Shut down SDL event loop */
+ SDL_Event event;
+ memset(&event, 0, sizeof(SDL_Event));
+ event.type = SDL_USEREVENT;
+ SDL_PushEvent(&event);
}
void cancel_shutdown(void)