summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/main.c5
-rw-r--r--apps/misc.c66
-rw-r--r--apps/misc.h1
-rw-r--r--apps/settings.c2
-rw-r--r--apps/settings_menu.c2
-rw-r--r--apps/tree.c3
6 files changed, 73 insertions, 6 deletions
diff --git a/apps/main.c b/apps/main.c
index b5c6364080..af84a46984 100644
--- a/apps/main.c
+++ b/apps/main.c
@@ -58,7 +58,7 @@
58#include "power.h" 58#include "power.h"
59#include "talk.h" 59#include "talk.h"
60#include "plugin.h" 60#include "plugin.h"
61 61#include "misc.h"
62 62
63#if (CONFIG_HWCODEC == MASNONE) 63#if (CONFIG_HWCODEC == MASNONE)
64#include "pcm_playback.h" 64#include "pcm_playback.h"
@@ -271,6 +271,9 @@ void init(void)
271#if (CONFIG_HWCODEC == MASNONE) 271#if (CONFIG_HWCODEC == MASNONE)
272 pcm_init(); 272 pcm_init();
273#endif 273#endif
274#ifdef HAVE_CHARGING
275 car_adapter_mode_init();
276#endif
274} 277}
275 278
276int main(void) 279int main(void)
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
diff --git a/apps/misc.h b/apps/misc.h
index 956a8fcd5e..105f65732a 100644
--- a/apps/misc.h
+++ b/apps/misc.h
@@ -44,5 +44,6 @@ bool settings_parseline(char* line, char** name, char** value);
44bool clean_shutdown(void); 44bool clean_shutdown(void);
45long default_event_handler_ex(long event, void (*callback)(void *), void *parameter); 45long default_event_handler_ex(long event, void (*callback)(void *), void *parameter);
46long default_event_handler(long event); 46long default_event_handler(long event);
47void car_adapter_mode_init(void);
47 48
48#endif 49#endif
diff --git a/apps/settings.c b/apps/settings.c
index 56dcd0af09..bbfdd54d93 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -825,8 +825,6 @@ void settings_apply(void)
825 lang_load(buf); 825 lang_load(buf);
826 talk_init(); /* use voice of same language */ 826 talk_init(); /* use voice of same language */
827 } 827 }
828
829 set_car_adapter_mode(global_settings.car_adapter_mode);
830} 828}
831 829
832 830
diff --git a/apps/settings_menu.c b/apps/settings_menu.c
index 9590e15476..5af7470c7d 100644
--- a/apps/settings_menu.c
+++ b/apps/settings_menu.c
@@ -63,7 +63,7 @@ static bool car_adapter_mode(void)
63 &global_settings.car_adapter_mode, 63 &global_settings.car_adapter_mode,
64 STR(LANG_SET_BOOL_YES), 64 STR(LANG_SET_BOOL_YES),
65 STR(LANG_SET_BOOL_NO), 65 STR(LANG_SET_BOOL_NO),
66 set_car_adapter_mode); 66 NULL);
67} 67}
68#endif 68#endif
69 69
diff --git a/apps/tree.c b/apps/tree.c
index 139043ab04..c9f5847ab8 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -484,7 +484,8 @@ static bool ask_resume(bool ask_once)
484#endif 484#endif
485 /* Handle sys events, ignore button releases */ 485 /* Handle sys events, ignore button releases */
486 default: 486 default:
487 if(default_event_handler(button) || !(button & BUTTON_REL)) 487 if(default_event_handler(button) == SYS_USB_CONNECTED ||
488 (!(button & SYS_EVENT) && !(button & BUTTON_REL)))
488 stop = true; 489 stop = true;
489 break; 490 break;
490 } 491 }