summaryrefslogtreecommitdiff
path: root/firmware/pcm_playback.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/pcm_playback.c')
-rw-r--r--firmware/pcm_playback.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/firmware/pcm_playback.c b/firmware/pcm_playback.c
index 34310cf916..049978e381 100644
--- a/firmware/pcm_playback.c
+++ b/firmware/pcm_playback.c
@@ -99,15 +99,6 @@ static void dma_start(const void *addr, long size)
99 DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START; 99 DCR0 = DMA_INT | DMA_EEXT | DMA_CS | DMA_SINC | DMA_START;
100} 100}
101 101
102/* Stops the DMA transfer and interrupt */
103static void dma_stop(void)
104{
105 pcm_playing = false;
106
107 /* Reset the FIFO */
108 IIS2CONFIG = 0x800;
109}
110
111void pcm_boost(bool state) 102void pcm_boost(bool state)
112{ 103{
113 static bool boost_state = false; 104 static bool boost_state = false;
@@ -121,6 +112,16 @@ void pcm_boost(bool state)
121 } 112 }
122} 113}
123 114
115/* Stops the DMA transfer and interrupt */
116static void dma_stop(void)
117{
118 pcm_playing = false;
119
120 /* Reset the FIFO */
121 IIS2CONFIG = 0x800;
122 pcm_boost(false);
123}
124
124/* set volume of the main channel */ 125/* set volume of the main channel */
125void pcm_set_volume(int volume) 126void pcm_set_volume(int volume)
126{ 127{
@@ -385,6 +386,7 @@ bool pcm_is_lowdata(void)
385 386
386void pcm_crossfade_start(void) 387void pcm_crossfade_start(void)
387{ 388{
389 //logf("cf:%d", audiobuffer_free / CHUNK_SIZE);
388 if (audiobuffer_free > CHUNK_SIZE * 4 || !crossfade_enabled) { 390 if (audiobuffer_free > CHUNK_SIZE * 4 || !crossfade_enabled) {
389 return ; 391 return ;
390 } 392 }
@@ -493,6 +495,7 @@ void pcm_play_init(void)
493 pcmbuf_read_index = 0; 495 pcmbuf_read_index = 0;
494 pcmbuf_write_index = 0; 496 pcmbuf_write_index = 0;
495 pcmbuf_unplayed_bytes = 0; 497 pcmbuf_unplayed_bytes = 0;
498 crossfade_enabled = false;
496 pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback); 499 pcm_play_set_watermark(PCM_WATERMARK, pcm_watermark_callback);
497 500
498 /* Play a small chunk of zeroes to initialize the playback system. */ 501 /* Play a small chunk of zeroes to initialize the playback system. */
@@ -501,9 +504,7 @@ void pcm_play_init(void)
501 memset(&audiobuffer[0], 0, audiobuffer_pos); 504 memset(&audiobuffer[0], 0, audiobuffer_pos);
502 pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL); 505 pcm_play_add_chunk(&audiobuffer[0], audiobuffer_pos, NULL);
503 pcm_play_start(); 506 pcm_play_start();
504 cpu_boost(false);
505 507
506 crossfade_enabled = false;
507} 508}
508 509
509void pcm_crossfade_enable(bool on_off) 510void pcm_crossfade_enable(bool on_off)
@@ -511,6 +512,11 @@ void pcm_crossfade_enable(bool on_off)
511 crossfade_enabled = on_off; 512 crossfade_enabled = on_off;
512} 513}
513 514
515bool pcm_is_crossfade_enabled(void)
516{
517 return crossfade_enabled;
518}
519
514void pcm_play_start(void) 520void pcm_play_start(void)
515{ 521{
516 struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index]; 522 struct pcmbufdesc *desc = &pcmbuffers[pcmbuf_read_index];