diff options
Diffstat (limited to 'firmware/export/pcm-internal.h')
-rw-r--r-- | firmware/export/pcm-internal.h | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/firmware/export/pcm-internal.h b/firmware/export/pcm-internal.h new file mode 100644 index 0000000000..d69138f534 --- /dev/null +++ b/firmware/export/pcm-internal.h | |||
@@ -0,0 +1,81 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2005 by Linus Nielsen Feltzing | ||
11 | * Copyright (C) 2011 by Michael Sevakis | ||
12 | * | ||
13 | * This program is free software; you can redistribute it and/or | ||
14 | * modify it under the terms of the GNU General Public License | ||
15 | * as published by the Free Software Foundation; either version 2 | ||
16 | * of the License, or (at your option) any later version. | ||
17 | * | ||
18 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
19 | * KIND, either express or implied. | ||
20 | * | ||
21 | ****************************************************************************/ | ||
22 | #ifndef PCM_INTERNAL_H | ||
23 | #define PCM_INTERNAL_H | ||
24 | |||
25 | /** The following are for internal use between pcm.c and target- | ||
26 | specific portion **/ | ||
27 | |||
28 | /* Called by the bottom layer ISR when more data is needed. Returns non- | ||
29 | * zero size if more data is to be played. Setting start to NULL | ||
30 | * forces stop. */ | ||
31 | void pcm_play_get_more_callback(void **start, size_t *size); | ||
32 | |||
33 | /* Called by the bottom layer ISR after next transfer has begun in order | ||
34 | to fill more data for next "get more" callback to implement double-buffered | ||
35 | callbacks - except for a couple ASM handlers, help drivers to implement | ||
36 | this functionality with minimal overhead */ | ||
37 | static FORCE_INLINE void pcm_play_dma_started_callback(void) | ||
38 | { | ||
39 | extern void (* pcm_play_dma_started)(void); | ||
40 | void (* callback)(void) = pcm_play_dma_started; | ||
41 | if (callback) | ||
42 | callback(); | ||
43 | } | ||
44 | |||
45 | extern unsigned long pcm_curr_sampr; | ||
46 | extern unsigned long pcm_sampr; | ||
47 | extern int pcm_fsel; | ||
48 | |||
49 | #ifdef HAVE_PCM_DMA_ADDRESS | ||
50 | void * pcm_dma_addr(void *addr); | ||
51 | #endif | ||
52 | |||
53 | extern volatile bool pcm_playing; | ||
54 | extern volatile bool pcm_paused; | ||
55 | |||
56 | void pcm_play_dma_lock(void); | ||
57 | void pcm_play_dma_unlock(void); | ||
58 | void pcm_play_dma_init(void) INIT_ATTR; | ||
59 | void pcm_play_dma_start(const void *addr, size_t size); | ||
60 | void pcm_play_dma_stop(void); | ||
61 | void pcm_play_dma_pause(bool pause); | ||
62 | const void * pcm_play_dma_get_peak_buffer(int *count); | ||
63 | |||
64 | void pcm_dma_apply_settings(void); | ||
65 | |||
66 | #ifdef HAVE_RECORDING | ||
67 | |||
68 | /* DMA transfer in is currently active */ | ||
69 | extern volatile bool pcm_recording; | ||
70 | |||
71 | /* APIs implemented in the target-specific portion */ | ||
72 | void pcm_rec_dma_init(void); | ||
73 | void pcm_rec_dma_close(void); | ||
74 | void pcm_rec_dma_start(void *addr, size_t size); | ||
75 | void pcm_rec_dma_record_more(void *start, size_t size); | ||
76 | void pcm_rec_dma_stop(void); | ||
77 | const void * pcm_rec_dma_get_peak_buffer(void); | ||
78 | |||
79 | #endif /* HAVE_RECORDING */ | ||
80 | |||
81 | #endif /* PCM_INTERNAL_H */ | ||