summaryrefslogtreecommitdiff
path: root/apps/misc.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/misc.c')
-rw-r--r--apps/misc.c66
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
294static bool waiting_to_resume_play = false;
295static long play_resume_tick;
296
297static 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
327static 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
342void car_adapter_mode_init(void)
343{
344 tick_add_task(car_adapter_tick);
345}
346#endif
347
292long default_event_handler_ex(long event, void (*callback)(void *), void *parameter) 348long 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