From 258626f4550be2e586c9e5acf20cb71ee001a8e4 Mon Sep 17 00:00:00 2001 From: Thomas Jarosch Date: Tue, 15 Feb 2011 19:43:04 +0000 Subject: 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 --- apps/misc.c | 2 +- firmware/target/hosted/maemo/maemo-thread.c | 6 ++++++ firmware/target/hosted/sdl/button-sdl.c | 5 +++++ uisimulator/common/powermgmt-sim.c | 6 ++++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/misc.c b/apps/misc.c index a08dac3ebf..b2f1df52f3 100644 --- a/apps/misc.c +++ b/apps/misc.c @@ -256,7 +256,7 @@ static void system_restore(void) 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 f655ed597e..6593a9faa5 100644 --- a/firmware/target/hosted/maemo/maemo-thread.c +++ b/firmware/target/hosted/maemo/maemo-thread.c @@ -23,6 +23,7 @@ #include #include #include +#include #include "config.h" #include "system.h" @@ -213,6 +214,11 @@ void reset_poweroff_timer(void) 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 25dad09341..9c8188a12f 100644 --- a/firmware/target/hosted/sdl/button-sdl.c +++ b/firmware/target/hosted/sdl/button-sdl.c @@ -261,7 +261,12 @@ static bool event_handler(SDL_Event *event) 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 dbd3149fbb..30b04d6a0b 100644 --- a/uisimulator/common/powermgmt-sim.c +++ b/uisimulator/common/powermgmt-sim.c @@ -24,6 +24,7 @@ #include #include "kernel.h" #include "powermgmt.h" +#include #define BATT_MINMVOLT 2500 /* minimum millivolts of battery */ #define BATT_MAXMVOLT 4500 /* maximum millivolts of battery */ @@ -155,6 +156,11 @@ void reset_poweroff_timer(void) 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) -- cgit v1.2.3