diff options
Diffstat (limited to 'firmware/mpeg.c')
-rw-r--r-- | firmware/mpeg.c | 32 |
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 | ||
475 | static 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 | |||
474 | static void mpeg_thread(void) | 486 | static 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 | } |