Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: APA102
Audio.h@1:8c2e60bafc91, 2018-05-17 (annotated)
- Committer:
- vrou44
- Date:
- Thu May 17 17:12:17 2018 +0000
- Revision:
- 1:8c2e60bafc91
- Parent:
- 0:5648c217e527
Initial release
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| vrou44 | 0:5648c217e527 | 1 | /* |
| vrou44 | 0:5648c217e527 | 2 | * Audio.h |
| vrou44 | 0:5648c217e527 | 3 | * |
| vrou44 | 0:5648c217e527 | 4 | * Created on: 28 mars 2018 |
| vrou44 | 0:5648c217e527 | 5 | * Author: hd01073 |
| vrou44 | 0:5648c217e527 | 6 | */ |
| vrou44 | 0:5648c217e527 | 7 | |
| vrou44 | 0:5648c217e527 | 8 | #ifndef AUDIO_H_ |
| vrou44 | 0:5648c217e527 | 9 | #define AUDIO_H_ |
| vrou44 | 0:5648c217e527 | 10 | |
| vrou44 | 0:5648c217e527 | 11 | |
| vrou44 | 0:5648c217e527 | 12 | #include "mbed.h" |
| vrou44 | 0:5648c217e527 | 13 | #include "BNP_Ctrl.h" |
| vrou44 | 0:5648c217e527 | 14 | |
| vrou44 | 0:5648c217e527 | 15 | #define AUDIO_OPT |
| vrou44 | 0:5648c217e527 | 16 | |
| vrou44 | 0:5648c217e527 | 17 | #ifdef AUDIO_OPT |
| vrou44 | 0:5648c217e527 | 18 | |
| vrou44 | 0:5648c217e527 | 19 | #define MUTE VOL_0 |
| vrou44 | 0:5648c217e527 | 20 | #define VOL_0 0xFFF0 |
| vrou44 | 0:5648c217e527 | 21 | #define VOL_1 0xFFF1 |
| vrou44 | 0:5648c217e527 | 22 | #define VOL_2 0xFFF2 |
| vrou44 | 0:5648c217e527 | 23 | #define VOL_3 0xFFF3 |
| vrou44 | 0:5648c217e527 | 24 | #define VOL_4 0xFFF4 |
| vrou44 | 0:5648c217e527 | 25 | #define VOL_5 0xFFF5 |
| vrou44 | 0:5648c217e527 | 26 | #define VOL_6 0xFFF6 |
| vrou44 | 0:5648c217e527 | 27 | #define VOL_7 0xFFF7 |
| vrou44 | 0:5648c217e527 | 28 | #define PLAY_PAUSE 0xFFFE |
| vrou44 | 0:5648c217e527 | 29 | #define STOP 0xFFFF |
| vrou44 | 0:5648c217e527 | 30 | |
| vrou44 | 0:5648c217e527 | 31 | |
| vrou44 | 0:5648c217e527 | 32 | /** |
| vrou44 | 0:5648c217e527 | 33 | * soundboard class |
| vrou44 | 0:5648c217e527 | 34 | * Used to control the WTV020SD board from sparkfun |
| vrou44 | 0:5648c217e527 | 35 | */ |
| vrou44 | 0:5648c217e527 | 36 | |
| vrou44 | 0:5648c217e527 | 37 | class soundboard |
| vrou44 | 0:5648c217e527 | 38 | { |
| vrou44 | 0:5648c217e527 | 39 | public: |
| vrou44 | 0:5648c217e527 | 40 | /** Creates the soundboard class with the specified reset pin, clock pin, data pin and busy pin*/ |
| vrou44 | 0:5648c217e527 | 41 | soundboard(PinName resetPin, PinName clockPin, PinName dataPin, PinName busyPin); |
| vrou44 | 0:5648c217e527 | 42 | |
| vrou44 | 0:5648c217e527 | 43 | void startReset(void); |
| vrou44 | 0:5648c217e527 | 44 | void startCommand(unsigned int); |
| vrou44 | 0:5648c217e527 | 45 | |
| vrou44 | 0:5648c217e527 | 46 | private: |
| vrou44 | 0:5648c217e527 | 47 | static void singleInstManageReset(void) ; |
| vrou44 | 0:5648c217e527 | 48 | void manageReset(void) ; |
| vrou44 | 0:5648c217e527 | 49 | static void singleInstManageCmd(void) ; |
| vrou44 | 0:5648c217e527 | 50 | void manageCmd(void) ; |
| vrou44 | 0:5648c217e527 | 51 | |
| vrou44 | 0:5648c217e527 | 52 | private: |
| vrou44 | 0:5648c217e527 | 53 | DigitalOut _resetPin; |
| vrou44 | 0:5648c217e527 | 54 | DigitalOut _clockPin; |
| vrou44 | 0:5648c217e527 | 55 | DigitalOut _dataPin; |
| vrou44 | 0:5648c217e527 | 56 | DigitalIn _busyPin; // TODO : use it as an interrupt with a call back |
| vrou44 | 0:5648c217e527 | 57 | // function to notify cmd complete. Not wired |
| vrou44 | 0:5648c217e527 | 58 | // (hardware limitation) presently |
| vrou44 | 0:5648c217e527 | 59 | |
| vrou44 | 0:5648c217e527 | 60 | private: |
| vrou44 | 0:5648c217e527 | 61 | volatile int resetState ; |
| vrou44 | 0:5648c217e527 | 62 | volatile int cmdState ; |
| vrou44 | 0:5648c217e527 | 63 | unsigned int _cmd ; |
| vrou44 | 0:5648c217e527 | 64 | unsigned int _mask ; |
| vrou44 | 0:5648c217e527 | 65 | |
| vrou44 | 0:5648c217e527 | 66 | |
| vrou44 | 0:5648c217e527 | 67 | }; |
| vrou44 | 0:5648c217e527 | 68 | |
| vrou44 | 0:5648c217e527 | 69 | |
| vrou44 | 0:5648c217e527 | 70 | #endif |
| vrou44 | 0:5648c217e527 | 71 | |
| vrou44 | 0:5648c217e527 | 72 | class Audio { |
| vrou44 | 0:5648c217e527 | 73 | public: |
| vrou44 | 0:5648c217e527 | 74 | static void init(void) ; |
| vrou44 | 0:5648c217e527 | 75 | static void startPlay(BNP_Ctrl::AudioTrack track) ; |
| vrou44 | 0:5648c217e527 | 76 | |
| vrou44 | 0:5648c217e527 | 77 | private: |
| vrou44 | 0:5648c217e527 | 78 | enum State { |
| vrou44 | 0:5648c217e527 | 79 | noState, |
| vrou44 | 0:5648c217e527 | 80 | soundResetInProgress, |
| vrou44 | 0:5648c217e527 | 81 | sendingVolCmd, |
| vrou44 | 0:5648c217e527 | 82 | waitingVolCmdComplete, |
| vrou44 | 0:5648c217e527 | 83 | idle, |
| vrou44 | 0:5648c217e527 | 84 | sendingPlayCmd, |
| vrou44 | 0:5648c217e527 | 85 | waitingPlayCmdComplete |
| vrou44 | 0:5648c217e527 | 86 | }; |
| vrou44 | 0:5648c217e527 | 87 | |
| vrou44 | 0:5648c217e527 | 88 | static State state ; |
| vrou44 | 0:5648c217e527 | 89 | static BNP_Ctrl::AudioTrack demandedTrack ; |
| vrou44 | 0:5648c217e527 | 90 | |
| vrou44 | 0:5648c217e527 | 91 | public: |
| vrou44 | 0:5648c217e527 | 92 | enum Evt { |
| vrou44 | 0:5648c217e527 | 93 | noEvt, |
| vrou44 | 0:5648c217e527 | 94 | soundResetComplete, |
| vrou44 | 0:5648c217e527 | 95 | soundCmdSent, |
| vrou44 | 0:5648c217e527 | 96 | soundNotBusy, |
| vrou44 | 0:5648c217e527 | 97 | newJingleRequired |
| vrou44 | 0:5648c217e527 | 98 | }; |
| vrou44 | 0:5648c217e527 | 99 | |
| vrou44 | 0:5648c217e527 | 100 | static void feedFsm(Evt evt) ; |
| vrou44 | 0:5648c217e527 | 101 | } ; |
| vrou44 | 0:5648c217e527 | 102 | |
| vrou44 | 0:5648c217e527 | 103 | |
| vrou44 | 0:5648c217e527 | 104 | |
| vrou44 | 0:5648c217e527 | 105 | #endif /* AUDIO_H_ */ |