diff options
Diffstat (limited to 'firmware/export/pcm.h')
-rw-r--r-- | firmware/export/pcm.h | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/firmware/export/pcm.h b/firmware/export/pcm.h index 4a7a5b3193..df82c6092d 100644 --- a/firmware/export/pcm.h +++ b/firmware/export/pcm.h | |||
@@ -24,17 +24,23 @@ | |||
24 | #include <string.h> /* size_t */ | 24 | #include <string.h> /* size_t */ |
25 | #include "config.h" | 25 | #include "config.h" |
26 | 26 | ||
27 | #define DMA_REC_ERROR_DMA (-1) | 27 | enum pcm_dma_status |
28 | { | ||
28 | #ifdef HAVE_SPDIF_REC | 29 | #ifdef HAVE_SPDIF_REC |
29 | #define DMA_REC_ERROR_SPDIF (-2) | 30 | PCM_DMAST_ERR_SPDIF = -2, |
30 | #endif | 31 | #endif |
32 | PCM_DMAST_ERR_DMA = -1, | ||
33 | PCM_DMAST_OK = 0, | ||
34 | PCM_DMAST_STARTED = 1, | ||
35 | }; | ||
31 | 36 | ||
32 | /** RAW PCM routines used with playback and recording **/ | 37 | /** RAW PCM routines used with playback and recording **/ |
33 | 38 | ||
34 | /* Typedef for registered callbacks */ | 39 | /* Typedef for registered data callback */ |
35 | typedef void (*pcm_play_callback_type)(unsigned char **start, | 40 | typedef void (*pcm_play_callback_type)(const void **start, size_t *size); |
36 | size_t *size); | 41 | |
37 | typedef void (*pcm_rec_callback_type)(int status, void **start, size_t *size); | 42 | /* Typedef for registered status callback */ |
43 | typedef enum pcm_dma_status (*pcm_status_callback_type)(enum pcm_dma_status status); | ||
38 | 44 | ||
39 | /* set the pcm frequency - use values in hw_sampr_list | 45 | /* set the pcm frequency - use values in hw_sampr_list |
40 | * when CONFIG_SAMPR_TYPES is #defined, or-in SAMPR_TYPE_* fields with | 46 | * when CONFIG_SAMPR_TYPES is #defined, or-in SAMPR_TYPE_* fields with |
@@ -62,7 +68,8 @@ bool pcm_is_initialized(void); | |||
62 | 68 | ||
63 | /* This is for playing "raw" PCM data */ | 69 | /* This is for playing "raw" PCM data */ |
64 | void pcm_play_data(pcm_play_callback_type get_more, | 70 | void pcm_play_data(pcm_play_callback_type get_more, |
65 | unsigned char* start, size_t size); | 71 | pcm_status_callback_type status_cb, |
72 | const void *start, size_t size); | ||
66 | 73 | ||
67 | void pcm_calculate_peaks(int *left, int *right); | 74 | void pcm_calculate_peaks(int *left, int *right); |
68 | const void* pcm_get_peak_buffer(int* count); | 75 | const void* pcm_get_peak_buffer(int* count); |
@@ -73,12 +80,13 @@ void pcm_play_pause(bool play); | |||
73 | bool pcm_is_paused(void); | 80 | bool pcm_is_paused(void); |
74 | bool pcm_is_playing(void); | 81 | bool pcm_is_playing(void); |
75 | 82 | ||
76 | void pcm_play_set_dma_started_callback(void (* callback)(void)); | ||
77 | |||
78 | #ifdef HAVE_RECORDING | 83 | #ifdef HAVE_RECORDING |
79 | 84 | ||
80 | /** RAW PCM recording routines **/ | 85 | /** RAW PCM recording routines **/ |
81 | 86 | ||
87 | /* Typedef for registered data callback */ | ||
88 | typedef void (*pcm_rec_callback_type)(void **start, size_t *size); | ||
89 | |||
82 | /* Reenterable locks for locking and unlocking the recording interrupt */ | 90 | /* Reenterable locks for locking and unlocking the recording interrupt */ |
83 | void pcm_rec_lock(void); | 91 | void pcm_rec_lock(void); |
84 | void pcm_rec_unlock(void); | 92 | void pcm_rec_unlock(void); |
@@ -90,6 +98,7 @@ void pcm_close_recording(void); | |||
90 | 98 | ||
91 | /* Start recording "raw" PCM data */ | 99 | /* Start recording "raw" PCM data */ |
92 | void pcm_record_data(pcm_rec_callback_type more_ready, | 100 | void pcm_record_data(pcm_rec_callback_type more_ready, |
101 | pcm_status_callback_type status_cb, | ||
93 | void *start, size_t size); | 102 | void *start, size_t size); |
94 | 103 | ||
95 | /* Stop tranferring data into supplied buffer */ | 104 | /* Stop tranferring data into supplied buffer */ |
@@ -98,10 +107,6 @@ void pcm_stop_recording(void); | |||
98 | /* Is pcm currently recording? */ | 107 | /* Is pcm currently recording? */ |
99 | bool pcm_is_recording(void); | 108 | bool pcm_is_recording(void); |
100 | 109 | ||
101 | /* Called by bottom layer ISR when transfer is complete. Returns non-zero | ||
102 | * size if successful. Setting start to NULL forces stop. */ | ||
103 | void pcm_rec_more_ready_callback(int status, void **start, size_t *size); | ||
104 | |||
105 | void pcm_calculate_rec_peaks(int *left, int *right); | 110 | void pcm_calculate_rec_peaks(int *left, int *right); |
106 | 111 | ||
107 | #endif /* HAVE_RECORDING */ | 112 | #endif /* HAVE_RECORDING */ |