ADuCM4x50 Device Drivers API Reference Manual  Release 4.0.0.0
adi_beep.h
1 
16 #ifndef ADI_BEEP_H
17 #define ADI_BEEP_H
18 
19 #include "adi_processor.h"
20 
21 #include <adi_beep_config.h>
22 #include <adi_callback.h>
23 #include <rtos_map/adi_rtos_map.h>
24 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif /* __cplusplus */
28 
29 
33 #if ADI_BEEP_INCLUDE_PLAY_SEQUENCE == 1
34 
35 #define ADI_BEEP_MEMORY_SIZE (20u + ADI_SEM_SIZE)
36 #else
37 
38 #define ADI_BEEP_MEMORY_SIZE (12u + ADI_SEM_SIZE)
39 #endif
40 
45 typedef enum
46 {
59 
60 
66 typedef enum
67 {
71 
77 typedef enum
78 {
79  ADI_BEEP_INTERRUPT_SEQUENCE_END = BITM_BEEP_CFG_SEQATENDIRQ,
80  ADI_BEEP_INTERRUPT_NOTE_END = BITM_BEEP_CFG_AENDIRQ,
82 
84 #define BEEP_CLK_FREQ (32768.0f)
85 #define FREQUENCY_ENCODE(x) (uint8_t)(BEEP_CLK_FREQ/(x) + 0.5f)
93 typedef enum {
94  /* Constants are pre-computed note frequencies (Hz). */
95  /* See http://www.phy.mtu.edu/~suits/notefreqs.html. */
96  /* Encodings are clock divider values for that note. */
97  /* Flats are the same as the lower sharp, so only sharps are listed. */
98  /* Even though octaves are simple frequency doublings/halvings */
99  /* of adjuacient octaves, we pre-compute each constant (as opposed */
100  /* to halving/doubling the encodings between octaves) to */
101  /* minimize repeated doubling/halving errors across all octaves. */
102  /* !!!ALL ENCODINGS MUST BE IN THE RANGE 4-127!!! */
103 
106  ADI_BEEP_FREQ_C4 = FREQUENCY_ENCODE(261.63f),
107  ADI_BEEP_FREQ_Cs4 = FREQUENCY_ENCODE(277.18f),
108  ADI_BEEP_FREQ_D4 = FREQUENCY_ENCODE(293.66f),
109  ADI_BEEP_FREQ_Ds4 = FREQUENCY_ENCODE(311.13f),
110  ADI_BEEP_FREQ_E4 = FREQUENCY_ENCODE(329.63f),
111  ADI_BEEP_FREQ_F4 = FREQUENCY_ENCODE(349.23f),
112  ADI_BEEP_FREQ_Fs4 = FREQUENCY_ENCODE(369.99f),
113  ADI_BEEP_FREQ_G4 = FREQUENCY_ENCODE(392.00f),
114  ADI_BEEP_FREQ_Gs4 = FREQUENCY_ENCODE(415.30f),
115  ADI_BEEP_FREQ_A4 = FREQUENCY_ENCODE(440.00f),
116  ADI_BEEP_FREQ_As4 = FREQUENCY_ENCODE(466.16f),
117  ADI_BEEP_FREQ_B4 = FREQUENCY_ENCODE(493.88f),
118 
119  ADI_BEEP_FREQ_C5 = FREQUENCY_ENCODE(523.25f),
120  ADI_BEEP_FREQ_Cs5 = FREQUENCY_ENCODE(554.37f),
121  ADI_BEEP_FREQ_D5 = FREQUENCY_ENCODE(587.33f),
122  ADI_BEEP_FREQ_Ds5 = FREQUENCY_ENCODE(622.25f),
123  ADI_BEEP_FREQ_E5 = FREQUENCY_ENCODE(659.26f),
124  ADI_BEEP_FREQ_F5 = FREQUENCY_ENCODE(698.46f),
125  ADI_BEEP_FREQ_Fs5 = FREQUENCY_ENCODE(739.99f),
126  ADI_BEEP_FREQ_G5 = FREQUENCY_ENCODE(783.99f),
127  ADI_BEEP_FREQ_Gs5 = FREQUENCY_ENCODE(830.61f),
128  ADI_BEEP_FREQ_A5 = FREQUENCY_ENCODE(880.00f),
129  ADI_BEEP_FREQ_As5 = FREQUENCY_ENCODE(932.33f),
130  ADI_BEEP_FREQ_B5 = FREQUENCY_ENCODE(987.77f),
131 
132  ADI_BEEP_FREQ_C6 = FREQUENCY_ENCODE(1046.50f),
133  ADI_BEEP_FREQ_Cs6 = FREQUENCY_ENCODE(1108.73f),
134  ADI_BEEP_FREQ_D6 = FREQUENCY_ENCODE(1174.66f),
135  ADI_BEEP_FREQ_Ds6 = FREQUENCY_ENCODE(1244.51f),
136  ADI_BEEP_FREQ_E6 = FREQUENCY_ENCODE(1318.51f),
137  ADI_BEEP_FREQ_F6 = FREQUENCY_ENCODE(1396.91f),
138  ADI_BEEP_FREQ_Fs6 = FREQUENCY_ENCODE(1479.98f),
139  ADI_BEEP_FREQ_G6 = FREQUENCY_ENCODE(1567.98f),
140  ADI_BEEP_FREQ_Gs6 = FREQUENCY_ENCODE(1661.22f),
141  ADI_BEEP_FREQ_A6 = FREQUENCY_ENCODE(1760.00f),
142  ADI_BEEP_FREQ_As6 = FREQUENCY_ENCODE(1864.66f),
143  ADI_BEEP_FREQ_B6 = FREQUENCY_ENCODE(1975.53f),
144 
145  ADI_BEEP_FREQ_C7 = FREQUENCY_ENCODE(2093.00f),
146  ADI_BEEP_FREQ_Cs7 = FREQUENCY_ENCODE(2217.46f),
147  ADI_BEEP_FREQ_D7 = FREQUENCY_ENCODE(2349.32f),
148  ADI_BEEP_FREQ_Ds7 = FREQUENCY_ENCODE(2489.02f),
149  ADI_BEEP_FREQ_E7 = FREQUENCY_ENCODE(2637.02f),
150  ADI_BEEP_FREQ_F7 = FREQUENCY_ENCODE(2793.83f),
151  ADI_BEEP_FREQ_Fs7 = FREQUENCY_ENCODE(2959.96f),
152  ADI_BEEP_FREQ_G7 = FREQUENCY_ENCODE(3135.96f),
153  ADI_BEEP_FREQ_Gs7 = FREQUENCY_ENCODE(3322.44f),
154  ADI_BEEP_FREQ_A7 = FREQUENCY_ENCODE(3520.00f),
155  ADI_BEEP_FREQ_As7 = FREQUENCY_ENCODE(3729.31f),
156  ADI_BEEP_FREQ_B7 = FREQUENCY_ENCODE(3951.07f),
157 
158  ADI_BEEP_FREQ_C8 = FREQUENCY_ENCODE(4186.01f),
159  ADI_BEEP_FREQ_Cs8 = FREQUENCY_ENCODE(4434.92f),
160  ADI_BEEP_FREQ_D8 = FREQUENCY_ENCODE(4698.64f),
161  ADI_BEEP_FREQ_Ds8 = FREQUENCY_ENCODE(4978.03f),
162  ADI_BEEP_FREQ_E8 = FREQUENCY_ENCODE(5274.04f),
163  ADI_BEEP_FREQ_F8 = FREQUENCY_ENCODE(5587.65f),
164  ADI_BEEP_FREQ_Fs8 = FREQUENCY_ENCODE(5919.91f),
165  ADI_BEEP_FREQ_G8 = FREQUENCY_ENCODE(6271.93f),
167 
168 #define ADI_BEEP_DUR_ZERO (0)
169 #define ADI_BEEP_DUR_MIN (1)
170 #define ADI_BEEP_DUR_MAX (254)
171 #define ADI_BEEP_DUR_INFINITE (255)
174 typedef void * ADI_BEEP_HANDLE;
175 
177 #define DURATION_ENCODE(x) (uint8_t)((float)ADI_BEEP_DUR_MAX/(float)(x) + 0.5f)
185 typedef enum {
187  ADI_BEEP_DUR_32_32 = DURATION_ENCODE(1),
188  ADI_BEEP_DUR_16_32 = DURATION_ENCODE(2),
189  ADI_BEEP_DUR_12_32 = DURATION_ENCODE(8/3),
190  ADI_BEEP_DUR_8_32 = DURATION_ENCODE(4),
191  ADI_BEEP_DUR_6_32 = DURATION_ENCODE(16/3),
192  ADI_BEEP_DUR_4_32 = DURATION_ENCODE(8),
193  ADI_BEEP_DUR_2_32 = DURATION_ENCODE(16),
194  ADI_BEEP_DUR_1_32 = DURATION_ENCODE(32),
197 
203 typedef struct {
206 } ADI_BEEP_NOTE;
207 
208 
209 /*================ E X T E R N A L S ==================*/
210 
211 /*
212  * Beeper API
213  */
214 
216  void* const pMemory,
217  uint32_t const MemorySize,
218  ADI_BEEP_HANDLE* const phDevice);
219 
221  ADI_CALLBACK pfCallback,
222  void* const pCBParam);
223 
225  ADI_BEEP_NOTE note);
226 
228  ADI_BEEP_NOTE noteA,
229  ADI_BEEP_NOTE noteB,
230  uint8_t count);
231 
233  ADI_BEEP_NOTE aSequence[],
234  uint8_t count);
235 
237  bool const bFlag);
238 
240 
242 
243 #ifdef __cplusplus
244 }
245 #endif
246 
247 
248 #endif /* ADI_BEEP_H */
249 
ADI_BEEP_RESULT adi_beep_PlayNote(ADI_BEEP_HANDLE const hDevice, ADI_BEEP_NOTE note)
Play a single note/beep.
Definition: adi_beep.c:428
ADI_BEEP_RESULT
Definition: adi_beep.h:45
ADI_BEEP_RESULT adi_beep_Open(ADI_BEEP_DEV_ID const DeviceNum, void *const pMemory, uint32_t const MemorySize, ADI_BEEP_HANDLE *const phDevice)
BEEP Initialization.
Definition: adi_beep.c:161
ADI_BEEP_NOTE_FREQUENCY frequency
Definition: adi_beep.h:204
ADI_BEEP_NOTE_DURATION duration
Definition: adi_beep.h:205
#define ADI_BEEP_DUR_INFINITE
Definition: adi_beep.h:171
ADI_BEEP_RESULT adi_beep_PlaySequence(ADI_BEEP_HANDLE const hDevice, ADI_BEEP_NOTE aSequence[], uint8_t count)
Play a beeper tone sequence.
Definition: adi_beep.c:345
ADI_BEEP_RESULT adi_beep_PlayTwoTone(ADI_BEEP_HANDLE const hDevice, ADI_BEEP_NOTE noteA, ADI_BEEP_NOTE noteB, uint8_t count)
Play a a repeating two-tone beep. Similar to an alarm.
Definition: adi_beep.c:491
ADI_BEEP_RESULT adi_beep_Wait(ADI_BEEP_HANDLE const hDevice)
Wait for the current playback to finish. This is a blocking call, that will not return until the curr...
Definition: adi_beep.c:603
ADI_BEEP_INTERRUPT
Beeper Interrupt Bits.
Definition: adi_beep.h:77
void * ADI_BEEP_HANDLE
Definition: adi_beep.h:174
ADI_BEEP_RESULT adi_beep_Close(ADI_BEEP_HANDLE const hDevice)
Uninitialize and deallocate a BEEP device.
Definition: adi_beep.c:238
ADI_BEEP_NOTE_FREQUENCY
Beeper tone frequency list.
Definition: adi_beep.h:93
ADI_BEEP_RESULT adi_beep_RegisterCallback(ADI_BEEP_HANDLE const hDevice, ADI_CALLBACK pfCallback, void *const pCBParam)
Register a callback for the beeper driver.
Definition: adi_beep.c:293
ADI_BEEP_DEV_ID
Beeper Device IDs.
Definition: adi_beep.h:66
#define ADI_BEEP_DUR_ZERO
Definition: adi_beep.h:168
ADI_BEEP_RESULT adi_beep_Enable(ADI_BEEP_HANDLE const hDevice, bool const bFlag)
Enable or disable the beeper. Other APIs will automatically enable the beeper if required,...
Definition: adi_beep.c:552
Beeper note structure.
Definition: adi_beep.h:203
ADI_BEEP_NOTE_DURATION
Beeper tone duration list.
Definition: adi_beep.h:185