summaryrefslogtreecommitdiff
path: root/firmware/pcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/pcm.c')
-rw-r--r--firmware/pcm.c53
1 files changed, 1 insertions, 52 deletions
diff --git a/firmware/pcm.c b/firmware/pcm.c
index 640bb7830f..7a7043bef8 100644
--- a/firmware/pcm.c
+++ b/firmware/pcm.c
@@ -47,14 +47,12 @@
47 * pcm_play_dma_postinit 47 * pcm_play_dma_postinit
48 * pcm_play_dma_start 48 * pcm_play_dma_start
49 * pcm_play_dma_stop 49 * pcm_play_dma_stop
50 * pcm_play_dma_pause
51 * pcm_play_dma_get_peak_buffer 50 * pcm_play_dma_get_peak_buffer
52 * Data Read/Written within TSP - 51 * Data Read/Written within TSP -
53 * pcm_sampr (R) 52 * pcm_sampr (R)
54 * pcm_fsel (R) 53 * pcm_fsel (R)
55 * pcm_curr_sampr (R) 54 * pcm_curr_sampr (R)
56 * pcm_playing (R) 55 * pcm_playing (R)
57 * pcm_paused (R)
58 * 56 *
59 * ==Playback/Recording== 57 * ==Playback/Recording==
60 * Public - 58 * Public -
@@ -93,8 +91,6 @@ volatile pcm_status_callback_type
93 pcm_play_status_callback SHAREDBSS_ATTR = NULL; 91 pcm_play_status_callback SHAREDBSS_ATTR = NULL;
94/* PCM playback state */ 92/* PCM playback state */
95volatile bool pcm_playing SHAREDBSS_ATTR = false; 93volatile bool pcm_playing SHAREDBSS_ATTR = false;
96/* PCM paused state. paused implies playing */
97volatile bool pcm_paused SHAREDBSS_ATTR = false;
98/* samplerate of currently playing audio - undefined if stopped */ 94/* samplerate of currently playing audio - undefined if stopped */
99unsigned long pcm_curr_sampr SHAREDBSS_ATTR = 0; 95unsigned long pcm_curr_sampr SHAREDBSS_ATTR = 0;
100/* samplerate waiting to be set */ 96/* samplerate waiting to be set */
@@ -103,7 +99,6 @@ unsigned long pcm_sampr SHAREDBSS_ATTR = HW_SAMPR_DEFAULT;
103int pcm_fsel SHAREDBSS_ATTR = HW_FREQ_DEFAULT; 99int pcm_fsel SHAREDBSS_ATTR = HW_FREQ_DEFAULT;
104 100
105static void pcm_play_data_start_int(const void *addr, size_t size); 101static void pcm_play_data_start_int(const void *addr, size_t size);
106static void pcm_play_pause_int(bool play);
107void pcm_play_stop_int(void); 102void pcm_play_stop_int(void);
108 103
109#if !defined(HAVE_SW_VOLUME_CONTROL) || defined(PCM_SW_VOLUME_UNBUFFERED) 104#if !defined(HAVE_SW_VOLUME_CONTROL) || defined(PCM_SW_VOLUME_UNBUFFERED)
@@ -118,19 +113,6 @@ static inline void pcm_play_dma_start_int(const void *addr, size_t size)
118 pcm_play_dma_start(addr, size); 113 pcm_play_dma_start(addr, size);
119} 114}
120 115
121static inline void pcm_play_dma_pause_int(bool pause)
122{
123 if (pause || pcm_get_bytes_waiting() > 0)
124 {
125 pcm_play_dma_pause(pause);
126 }
127 else
128 {
129 logf(" no data");
130 pcm_play_data_start_int(NULL, 0);
131 }
132}
133
134static inline void pcm_play_dma_stop_int(void) 116static inline void pcm_play_dma_stop_int(void)
135{ 117{
136 pcm_play_dma_stop(); 118 pcm_play_dma_stop();
@@ -167,7 +149,6 @@ static void pcm_play_data_start_int(const void *addr, size_t size)
167 logf(" pcm_play_dma_start_int"); 149 logf(" pcm_play_dma_start_int");
168 pcm_play_dma_start_int(addr, size); 150 pcm_play_dma_start_int(addr, size);
169 pcm_playing = true; 151 pcm_playing = true;
170 pcm_paused = false;
171 } 152 }
172 else 153 else
173 { 154 {
@@ -177,22 +158,11 @@ static void pcm_play_data_start_int(const void *addr, size_t size)
177 } 158 }
178} 159}
179 160
180static void pcm_play_pause_int(bool play)
181{
182 if (play)
183 pcm_apply_settings();
184
185 logf(" pcm_play_dma_pause_int");
186 pcm_play_dma_pause_int(!play);
187 pcm_paused = !play && pcm_playing;
188}
189
190void pcm_play_stop_int(void) 161void pcm_play_stop_int(void)
191{ 162{
192 pcm_play_dma_stop_int(); 163 pcm_play_dma_stop_int();
193 pcm_callback_for_more = NULL; 164 pcm_callback_for_more = NULL;
194 pcm_play_status_callback = NULL; 165 pcm_play_status_callback = NULL;
195 pcm_paused = false;
196 pcm_playing = false; 166 pcm_playing = false;
197} 167}
198 168
@@ -282,8 +252,7 @@ void pcm_calculate_peaks(int *left, int *right)
282 int count; 252 int count;
283 const void *addr = pcm_play_dma_get_peak_buffer_int(&count); 253 const void *addr = pcm_play_dma_get_peak_buffer_int(&count);
284 254
285 pcm_do_peak_calculation(&peaks, pcm_playing && !pcm_paused, 255 pcm_do_peak_calculation(&peaks, pcm_playing, addr, count);
286 addr, count);
287 256
288 if (left) 257 if (left)
289 *left = peaks.left; 258 *left = peaks.left;
@@ -302,11 +271,6 @@ bool pcm_is_playing(void)
302 return pcm_playing; 271 return pcm_playing;
303} 272}
304 273
305bool pcm_is_paused(void)
306{
307 return pcm_paused;
308}
309
310/**************************************************************************** 274/****************************************************************************
311 * Functions that do not require targeted implementation but only a targeted 275 * Functions that do not require targeted implementation but only a targeted
312 * interface 276 * interface
@@ -358,21 +322,6 @@ void pcm_play_data(pcm_play_callback_type get_more,
358 pcm_play_unlock(); 322 pcm_play_unlock();
359} 323}
360 324
361void pcm_play_pause(bool play)
362{
363 logf("pcm_play_pause: %s", play ? "play" : "pause");
364
365 pcm_play_lock();
366
367 if (play == pcm_paused && pcm_playing)
368 {
369 logf(" pcm_play_pause_int");
370 pcm_play_pause_int(play);
371 }
372
373 pcm_play_unlock();
374}
375
376void pcm_play_stop(void) 325void pcm_play_stop(void)
377{ 326{
378 logf("pcm_play_stop"); 327 logf("pcm_play_stop");