summaryrefslogtreecommitdiff
path: root/firmware/mpeg.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r--firmware/mpeg.c32
1 files changed, 25 insertions, 7 deletions
diff --git a/firmware/mpeg.c b/firmware/mpeg.c
index fb53585aef..815de997d5 100644
--- a/firmware/mpeg.c
+++ b/firmware/mpeg.c
@@ -25,6 +25,7 @@
25#include "debug.h" 25#include "debug.h"
26#include "kernel.h" 26#include "kernel.h"
27#include "thread.h" 27#include "thread.h"
28#include "usb.h"
28#include "panic.h" 29#include "panic.h"
29#include "file.h" 30#include "file.h"
30#include "mpeg.h" 31#include "mpeg.h"
@@ -471,6 +472,17 @@ struct mp3entry* mpeg_current_track(void)
471 return &(id3tags[0].id3); 472 return &(id3tags[0].id3);
472} 473}
473 474
475static void stop_playing(void)
476{
477 /* Stop the current stream */
478 playing = false;
479 filling = false;
480 if(mpeg_file >= 0)
481 close(mpeg_file);
482 mpeg_file = -1;
483 stop_dma();
484}
485
474static void mpeg_thread(void) 486static void mpeg_thread(void)
475{ 487{
476 struct event ev; 488 struct event ev;
@@ -526,13 +538,7 @@ static void mpeg_thread(void)
526 538
527 case MPEG_STOP: 539 case MPEG_STOP:
528 DEBUGF("MPEG_STOP\n"); 540 DEBUGF("MPEG_STOP\n");
529 /* Stop the current stream */ 541 stop_playing();
530 playing = false;
531 filling = false;
532 if(mpeg_file >= 0)
533 close(mpeg_file);
534 mpeg_file = -1;
535 stop_dma();
536 break; 542 break;
537 543
538 case MPEG_PAUSE: 544 case MPEG_PAUSE:
@@ -683,6 +689,18 @@ static void mpeg_thread(void)
683 yield(); /* To be safe */ 689 yield(); /* To be safe */
684 } 690 }
685 break; 691 break;
692
693 case SYS_USB_CONNECTED:
694 stop_playing();
695
696 /* Tell the USB thread that we are safe */
697 DEBUGF("mpeg_thread got SYS_USB_CONNECTED\n");
698 usb_acknowledge(SYS_USB_CONNECTED_ACK);
699
700 /* Wait until the system reboots */
701 while(1)
702 yield();
703 break;
686 } 704 }
687 } 705 }
688} 706}