ADuCM302x Device Drivers API Reference Manual  Release 3.1.2.0
adi_beep.h
1 
47 #ifndef ADI_BEEP_H
48 #define ADI_BEEP_H
49 
50 #include "adi_processor.h"
51 
52 #include <adi_beep_config.h>
53 #include <adi_callback.h>
54 #include <rtos_map/adi_rtos_map.h>
55 
56 #ifdef __cplusplus
57 extern "C" {
58 #endif /* __cplusplus */
59 
60 
64 #if ADI_BEEP_INCLUDE_PLAY_SEQUENCE == 1
65 
66 #define ADI_BEEP_MEMORY_SIZE (20u + ADI_SEM_SIZE)
67 #else
68 
69 #define ADI_BEEP_MEMORY_SIZE (12u + ADI_SEM_SIZE)
70 #endif
71 
76 typedef enum
77 {
90 
91 
97 typedef enum
98 {
102 
108 typedef enum
109 {
110  ADI_BEEP_INTERRUPT_SEQUENCE_END = BITM_BEEP_CFG_SEQATENDIRQ,
111  ADI_BEEP_INTERRUPT_NOTE_END = BITM_BEEP_CFG_AENDIRQ,
113 
115 #define BEEP_CLK_FREQ (32768.0f)
116 #define FREQUENCY_ENCODE(x) (uint8_t)(BEEP_CLK_FREQ/(x) + 0.5f)
124 typedef enum {
125  /* Constants are pre-computed note frequencies (Hz). */
126  /* See http://www.phy.mtu.edu/~suits/notefreqs.html. */
127  /* Encodings are clock divider values for that note. */
128  /* Flats are the same as the lower sharp, so only sharps are listed. */
129  /* Even though octaves are simple frequency doublings/halvings */
130  /* of adjuacient octaves, we pre-compute each constant (as opposed */
131  /* to halving/doubling the encodings between octaves) to */
132  /* minimize repeated doubling/halving errors across all octaves. */
133  /* !!!ALL ENCODINGS MUST BE IN THE RANGE 4-127!!! */
134 
137  ADI_BEEP_FREQ_C4 = FREQUENCY_ENCODE(261.63f),
138  ADI_BEEP_FREQ_Cs4 = FREQUENCY_ENCODE(277.18f),
139  ADI_BEEP_FREQ_D4 = FREQUENCY_ENCODE(293.66f),
140  ADI_BEEP_FREQ_Ds4 = FREQUENCY_ENCODE(311.13f),
141  ADI_BEEP_FREQ_E4 = FREQUENCY_ENCODE(329.63f),
142  ADI_BEEP_FREQ_F4 = FREQUENCY_ENCODE(349.23f),
143  ADI_BEEP_FREQ_Fs4 = FREQUENCY_ENCODE(369.99f),
144  ADI_BEEP_FREQ_G4 = FREQUENCY_ENCODE(392.00f),
145  ADI_BEEP_FREQ_Gs4 = FREQUENCY_ENCODE(415.30f),
146  ADI_BEEP_FREQ_A4 = FREQUENCY_ENCODE(440.00f),
147  ADI_BEEP_FREQ_As4 = FREQUENCY_ENCODE(466.16f),
148  ADI_BEEP_FREQ_B4 = FREQUENCY_ENCODE(493.88f),
149 
150  ADI_BEEP_FREQ_C5 = FREQUENCY_ENCODE(523.25f),
151  ADI_BEEP_FREQ_Cs5 = FREQUENCY_ENCODE(554.37f),
152  ADI_BEEP_FREQ_D5 = FREQUENCY_ENCODE(587.33f),
153  ADI_BEEP_FREQ_Ds5 = FREQUENCY_ENCODE(622.25f),
154  ADI_BEEP_FREQ_E5 = FREQUENCY_ENCODE(659.26f),
155  ADI_BEEP_FREQ_F5 = FREQUENCY_ENCODE(698.46f),
156  ADI_BEEP_FREQ_Fs5 = FREQUENCY_ENCODE(739.99f),
157  ADI_BEEP_FREQ_G5 = FREQUENCY_ENCODE(783.99f),
158  ADI_BEEP_FREQ_Gs5 = FREQUENCY_ENCODE(830.61f),
159  ADI_BEEP_FREQ_A5 = FREQUENCY_ENCODE(880.00f),
160  ADI_BEEP_FREQ_As5 = FREQUENCY_ENCODE(932.33f),
161  ADI_BEEP_FREQ_B5 = FREQUENCY_ENCODE(987.77f),
162 
163  ADI_BEEP_FREQ_C6 = FREQUENCY_ENCODE(1046.50f),
164  ADI_BEEP_FREQ_Cs6 = FREQUENCY_ENCODE(1108.73f),
165  ADI_BEEP_FREQ_D6 = FREQUENCY_ENCODE(1174.66f),
166  ADI_BEEP_FREQ_Ds6 = FREQUENCY_ENCODE(1244.51f),
167  ADI_BEEP_FREQ_E6 = FREQUENCY_ENCODE(1318.51f),
168  ADI_BEEP_FREQ_F6 = FREQUENCY_ENCODE(1396.91f),
169  ADI_BEEP_FREQ_Fs6 = FREQUENCY_ENCODE(1479.98f),
170  ADI_BEEP_FREQ_G6 = FREQUENCY_ENCODE(1567.98f),
171  ADI_BEEP_FREQ_Gs6 = FREQUENCY_ENCODE(1661.22f),
172  ADI_BEEP_FREQ_A6 = FREQUENCY_ENCODE(1760.00f),
173  ADI_BEEP_FREQ_As6 = FREQUENCY_ENCODE(1864.66f),
174  ADI_BEEP_FREQ_B6 = FREQUENCY_ENCODE(1975.53f),
175 
176  ADI_BEEP_FREQ_C7 = FREQUENCY_ENCODE(2093.00f),
177  ADI_BEEP_FREQ_Cs7 = FREQUENCY_ENCODE(2217.46f),
178  ADI_BEEP_FREQ_D7 = FREQUENCY_ENCODE(2349.32f),
179  ADI_BEEP_FREQ_Ds7 = FREQUENCY_ENCODE(2489.02f),
180  ADI_BEEP_FREQ_E7 = FREQUENCY_ENCODE(2637.02f),
181  ADI_BEEP_FREQ_F7 = FREQUENCY_ENCODE(2793.83f),
182  ADI_BEEP_FREQ_Fs7 = FREQUENCY_ENCODE(2959.96f),
183  ADI_BEEP_FREQ_G7 = FREQUENCY_ENCODE(3135.96f),
184  ADI_BEEP_FREQ_Gs7 = FREQUENCY_ENCODE(3322.44f),
185  ADI_BEEP_FREQ_A7 = FREQUENCY_ENCODE(3520.00f),
186  ADI_BEEP_FREQ_As7 = FREQUENCY_ENCODE(3729.31f),
187  ADI_BEEP_FREQ_B7 = FREQUENCY_ENCODE(3951.07f),
188 
189  ADI_BEEP_FREQ_C8 = FREQUENCY_ENCODE(4186.01f),
190  ADI_BEEP_FREQ_Cs8 = FREQUENCY_ENCODE(4434.92f),
191  ADI_BEEP_FREQ_D8 = FREQUENCY_ENCODE(4698.64f),
192  ADI_BEEP_FREQ_Ds8 = FREQUENCY_ENCODE(4978.03f),
193  ADI_BEEP_FREQ_E8 = FREQUENCY_ENCODE(5274.04f),
194  ADI_BEEP_FREQ_F8 = FREQUENCY_ENCODE(5587.65f),
195  ADI_BEEP_FREQ_Fs8 = FREQUENCY_ENCODE(5919.91f),
196  ADI_BEEP_FREQ_G8 = FREQUENCY_ENCODE(6271.93f),
198 
199 #define ADI_BEEP_DUR_ZERO (0)
200 #define ADI_BEEP_DUR_MIN (1)
201 #define ADI_BEEP_DUR_MAX (254)
202 #define ADI_BEEP_DUR_INFINITE (255)
205 typedef void * ADI_BEEP_HANDLE;
206 
208 #define DURATION_ENCODE(x) (uint8_t)((float)ADI_BEEP_DUR_MAX/(float)(x) + 0.5f)
216 typedef enum {
218  ADI_BEEP_DUR_32_32 = DURATION_ENCODE(1),
219  ADI_BEEP_DUR_16_32 = DURATION_ENCODE(2),
220  ADI_BEEP_DUR_12_32 = DURATION_ENCODE(8/3),
221  ADI_BEEP_DUR_8_32 = DURATION_ENCODE(4),
222  ADI_BEEP_DUR_6_32 = DURATION_ENCODE(16/3),
223  ADI_BEEP_DUR_4_32 = DURATION_ENCODE(8),
224  ADI_BEEP_DUR_2_32 = DURATION_ENCODE(16),
225  ADI_BEEP_DUR_1_32 = DURATION_ENCODE(32),
228 
234 typedef struct {
237 } ADI_BEEP_NOTE;
238 
239 
240 /*================ E X T E R N A L S ==================*/
241 
242 /*
243  * Beeper API
244  */
245 
247  void* const pMemory,
248  uint32_t const MemorySize,
249  ADI_BEEP_HANDLE* const phDevice);
250 
252  ADI_CALLBACK pfCallback,
253  void* const pCBParam);
254 
256  ADI_BEEP_NOTE note);
257 
259  ADI_BEEP_NOTE noteA,
260  ADI_BEEP_NOTE noteB,
261  uint8_t count);
262 
264  ADI_BEEP_NOTE aSequence[],
265  uint8_t count);
266 
268  bool const bFlag);
269 
271 
273 
274 #ifdef __cplusplus
275 }
276 #endif
277 
278 
279 #endif /* ADI_BEEP_H */
280 
ADI_BEEP_RESULT adi_beep_PlayNote(ADI_BEEP_HANDLE const hDevice, ADI_BEEP_NOTE note)
Play a single note/beep.
Definition: adi_beep.c:458
ADI_BEEP_RESULT
Definition: adi_beep.h:76
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:191
ADI_BEEP_NOTE_FREQUENCY frequency
Definition: adi_beep.h:235
ADI_BEEP_NOTE_DURATION duration
Definition: adi_beep.h:236
#define ADI_BEEP_DUR_INFINITE
Definition: adi_beep.h:202
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:375
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:521
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:633
ADI_BEEP_INTERRUPT
Beeper Interrupt Bits.
Definition: adi_beep.h:108
void * ADI_BEEP_HANDLE
Definition: adi_beep.h:205
ADI_BEEP_RESULT adi_beep_Close(ADI_BEEP_HANDLE const hDevice)
Uninitialize and deallocate a BEEP device.
Definition: adi_beep.c:268
ADI_BEEP_NOTE_FREQUENCY
Beeper tone frequency list.
Definition: adi_beep.h:124
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:323
ADI_BEEP_DEV_ID
Beeper Device IDs.
Definition: adi_beep.h:97
#define ADI_BEEP_DUR_ZERO
Definition: adi_beep.h:199
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, so this function is best used in the following situations:
Definition: adi_beep.c:582
Beeper note structure.
Definition: adi_beep.h:234
ADI_BEEP_NOTE_DURATION
Beeper tone duration list.
Definition: adi_beep.h:216