diff options
author | Linus Nielsen Feltzing <linus@haxx.se> | 2005-04-06 11:12:22 +0000 |
---|---|---|
committer | Linus Nielsen Feltzing <linus@haxx.se> | 2005-04-06 11:12:22 +0000 |
commit | 3d2178148bbabac312ea01ad4d9cc6d86bcff75c (patch) | |
tree | bd222448c25549d124d81ecb468f7ad3ef89bb70 /apps/misc.c | |
parent | 3b853c692e65b603c71655537288fc811b25214f (diff) | |
download | rockbox-3d2178148bbabac312ea01ad4d9cc6d86bcff75c.tar.gz rockbox-3d2178148bbabac312ea01ad4d9cc6d86bcff75c.zip |
Moved the car adapter mode handling to apps/, now every thread gets SYS_CHARGER_CONNECTED and SYS_CHARGER_DISCONNECTED events
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@6255 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/misc.c')
-rw-r--r-- | apps/misc.c | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/apps/misc.c b/apps/misc.c index af1c417fd6..e7438d673e 100644 --- a/apps/misc.c +++ b/apps/misc.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include "screens.h" | 31 | #include "screens.h" |
32 | #include "talk.h" | 32 | #include "talk.h" |
33 | #include "mpeg.h" | 33 | #include "mpeg.h" |
34 | #include "audio.h" | ||
34 | #include "mp3_playback.h" | 35 | #include "mp3_playback.h" |
35 | #include "settings.h" | 36 | #include "settings.h" |
36 | #include "ata.h" | 37 | #include "ata.h" |
@@ -289,6 +290,61 @@ bool clean_shutdown(void) | |||
289 | return false; | 290 | return false; |
290 | } | 291 | } |
291 | 292 | ||
293 | #ifdef HAVE_CHARGING | ||
294 | static bool waiting_to_resume_play = false; | ||
295 | static long play_resume_tick; | ||
296 | |||
297 | static void car_adapter_mode_processing(bool inserted) | ||
298 | { | ||
299 | if (global_settings.car_adapter_mode) | ||
300 | { | ||
301 | if(inserted) | ||
302 | { | ||
303 | /* | ||
304 | * Just got plugged in, delay & resume if we were playing | ||
305 | */ | ||
306 | if (audio_status() & AUDIO_STATUS_PAUSE) | ||
307 | { | ||
308 | /* delay resume a bit while the engine is cranking */ | ||
309 | play_resume_tick = current_tick + HZ*5; | ||
310 | waiting_to_resume_play = true; | ||
311 | } | ||
312 | } | ||
313 | else | ||
314 | { | ||
315 | /* | ||
316 | * Just got unplugged, pause if playing | ||
317 | */ | ||
318 | if ((audio_status() & AUDIO_STATUS_PLAY) && | ||
319 | !(audio_status() & AUDIO_STATUS_PAUSE)) | ||
320 | { | ||
321 | audio_pause(); | ||
322 | } | ||
323 | } | ||
324 | } | ||
325 | } | ||
326 | |||
327 | static void car_adapter_tick(void) | ||
328 | { | ||
329 | if (waiting_to_resume_play) | ||
330 | { | ||
331 | if (TIME_AFTER(current_tick, play_resume_tick)) | ||
332 | { | ||
333 | if (audio_status() & AUDIO_STATUS_PAUSE) | ||
334 | { | ||
335 | audio_resume(); | ||
336 | } | ||
337 | waiting_to_resume_play = false; | ||
338 | } | ||
339 | } | ||
340 | } | ||
341 | |||
342 | void car_adapter_mode_init(void) | ||
343 | { | ||
344 | tick_add_task(car_adapter_tick); | ||
345 | } | ||
346 | #endif | ||
347 | |||
292 | long default_event_handler_ex(long event, void (*callback)(void *), void *parameter) | 348 | long default_event_handler_ex(long event, void (*callback)(void *), void *parameter) |
293 | { | 349 | { |
294 | switch(event) | 350 | switch(event) |
@@ -307,6 +363,15 @@ long default_event_handler_ex(long event, void (*callback)(void *), void *parame | |||
307 | if (!clean_shutdown()) | 363 | if (!clean_shutdown()) |
308 | return SYS_POWEROFF; | 364 | return SYS_POWEROFF; |
309 | break; | 365 | break; |
366 | #ifdef HAVE_CHARGING | ||
367 | case SYS_CHARGER_CONNECTED: | ||
368 | car_adapter_mode_processing(true); | ||
369 | return SYS_CHARGER_CONNECTED; | ||
370 | |||
371 | case SYS_CHARGER_DISCONNECTED: | ||
372 | car_adapter_mode_processing(false); | ||
373 | return SYS_CHARGER_DISCONNECTED; | ||
374 | #endif | ||
310 | } | 375 | } |
311 | return 0; | 376 | return 0; |
312 | } | 377 | } |
@@ -315,4 +380,3 @@ long default_event_handler(long event) | |||
315 | { | 380 | { |
316 | return default_event_handler_ex(event, NULL, NULL); | 381 | return default_event_handler_ex(event, NULL, NULL); |
317 | } | 382 | } |
318 | |||