Mateusz Wójcik / Mbed 2 deprecated FRDMK64_SDCard

Dependencies:   mbed

Committer:
kudlatykaskader
Date:
Sat Nov 18 22:04:50 2017 +0000
Revision:
0:e2da1a4652f5
commit;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kudlatykaskader 0:e2da1a4652f5 1 /* mbed VLSI VS1053b library
kudlatykaskader 0:e2da1a4652f5 2 * Copyright (c) 2010 Christian Schmiljun
kudlatykaskader 0:e2da1a4652f5 3 *
kudlatykaskader 0:e2da1a4652f5 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
kudlatykaskader 0:e2da1a4652f5 5 * of this software and associated documentation files (the "Software"), to deal
kudlatykaskader 0:e2da1a4652f5 6 * in the Software without restriction, including without limitation the rights
kudlatykaskader 0:e2da1a4652f5 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
kudlatykaskader 0:e2da1a4652f5 8 * copies of the Software, and to permit persons to whom the Software is
kudlatykaskader 0:e2da1a4652f5 9 * furnished to do so, subject to the following conditions:
kudlatykaskader 0:e2da1a4652f5 10 *
kudlatykaskader 0:e2da1a4652f5 11 * The above copyright notice and this permission notice shall be included in
kudlatykaskader 0:e2da1a4652f5 12 * all copies or substantial portions of the Software.
kudlatykaskader 0:e2da1a4652f5 13 *
kudlatykaskader 0:e2da1a4652f5 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
kudlatykaskader 0:e2da1a4652f5 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
kudlatykaskader 0:e2da1a4652f5 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
kudlatykaskader 0:e2da1a4652f5 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
kudlatykaskader 0:e2da1a4652f5 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
kudlatykaskader 0:e2da1a4652f5 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
kudlatykaskader 0:e2da1a4652f5 20 * THE SOFTWARE.
kudlatykaskader 0:e2da1a4652f5 21 */
kudlatykaskader 0:e2da1a4652f5 22
kudlatykaskader 0:e2da1a4652f5 23 /* This code based on:
kudlatykaskader 0:e2da1a4652f5 24 * mbeduino_MP3_Shield_MP3Player
kudlatykaskader 0:e2da1a4652f5 25 * http://mbed.org/users/xshige/programs/mbeduino_MP3_Shield_MP3Player/lgcx63
kudlatykaskader 0:e2da1a4652f5 26 * 2010-10-16
kudlatykaskader 0:e2da1a4652f5 27 */
kudlatykaskader 0:e2da1a4652f5 28
kudlatykaskader 0:e2da1a4652f5 29 #ifndef _VS1053_H
kudlatykaskader 0:e2da1a4652f5 30 #define _VS1053_H
kudlatykaskader 0:e2da1a4652f5 31
kudlatykaskader 0:e2da1a4652f5 32 // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 33 // Extended settings
kudlatykaskader 0:e2da1a4652f5 34 // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 35 // Enable debug output (Output -> printf ...)
kudlatykaskader 0:e2da1a4652f5 36 // --------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 37 // #define DEBUG
kudlatykaskader 0:e2da1a4652f5 38 // #define DEBUGOUT (x,y...) printf(x, ##y);
kudlatykaskader 0:e2da1a4652f5 39 // Patches, Addons
kudlatykaskader 0:e2da1a4652f5 40 // --------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 41 // #define VS1053_PATCH_1_4_FLAC
kudlatykaskader 0:e2da1a4652f5 42 // #define VS1053_PATCH_1_5
kudlatykaskader 0:e2da1a4652f5 43 // #define VS1053_PATCH_1_5_FLAC
kudlatykaskader 0:e2da1a4652f5 44 // #define VS1053_SPECANA
kudlatykaskader 0:e2da1a4652f5 45 // #define VS1053B_PCM_RECORDER_0_9
kudlatykaskader 0:e2da1a4652f5 46 // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 47
kudlatykaskader 0:e2da1a4652f5 48 #include "defines.h"
kudlatykaskader 0:e2da1a4652f5 49 #include "mbed.h"
kudlatykaskader 0:e2da1a4652f5 50
kudlatykaskader 0:e2da1a4652f5 51 #if defined(VS1053_PATCH_1_4_FLAC) && defined(VS1053_PATCH_1_5) && defined(VS1053_PATCH_1_5_FLAC) && defined(VS1053_SPECANA) && defined(VS1053B_PCM_RECORDER_0_9)
kudlatykaskader 0:e2da1a4652f5 52 #error "VS1053: Exclusive use of patch and app versions."
kudlatykaskader 0:e2da1a4652f5 53 #endif
kudlatykaskader 0:e2da1a4652f5 54 #if defined(VS1053_PATCH_1_4_FLAC) || defined(VS1053_PATCH_1_5) || defined(VS1053_PATCH_1_5_FLAC) || defined(VS1053_SPECANA) || defined(VS1053B_PCM_RECORDER_0_9)
kudlatykaskader 0:e2da1a4652f5 55 #define VS_PATCH
kudlatykaskader 0:e2da1a4652f5 56 #endif
kudlatykaskader 0:e2da1a4652f5 57
kudlatykaskader 0:e2da1a4652f5 58 #ifndef DEBUGOUT
kudlatykaskader 0:e2da1a4652f5 59 #define DEBUGOUT(x,y...)
kudlatykaskader 0:e2da1a4652f5 60 #endif
kudlatykaskader 0:e2da1a4652f5 61
kudlatykaskader 0:e2da1a4652f5 62
kudlatykaskader 0:e2da1a4652f5 63 #define DEFAULT_BALANCE_DIFERENCE_LEFT_RIGHT 0.0f
kudlatykaskader 0:e2da1a4652f5 64 #define DEFAULT_VOLUME -40.0f
kudlatykaskader 0:e2da1a4652f5 65 #define DEFAULT_BASS_AMPLITUDE 5 // 0 - 15 dB
kudlatykaskader 0:e2da1a4652f5 66 #define DEFAULT_BASS_FREQUENCY 100 // 20 - 150 Hz
kudlatykaskader 0:e2da1a4652f5 67 #define DEFAULT_TREBLE_AMPLITUDE 0 // -8 - 7 dB
kudlatykaskader 0:e2da1a4652f5 68 #define DEFAULT_TREBLE_FREQUENCY 15000 //1000 - 15000 Hz
kudlatykaskader 0:e2da1a4652f5 69
kudlatykaskader 0:e2da1a4652f5 70
kudlatykaskader 0:e2da1a4652f5 71
kudlatykaskader 0:e2da1a4652f5 72 // SCI register address assignment
kudlatykaskader 0:e2da1a4652f5 73 #define SCI_MODE 0x00
kudlatykaskader 0:e2da1a4652f5 74 #define SCI_STATUS 0x01
kudlatykaskader 0:e2da1a4652f5 75 #define SCI_BASS 0x02
kudlatykaskader 0:e2da1a4652f5 76 #define SCI_CLOCKF 0x03
kudlatykaskader 0:e2da1a4652f5 77 #define SCI_DECODE_TIME 0x04
kudlatykaskader 0:e2da1a4652f5 78 #define SCI_AUDATA 0x05
kudlatykaskader 0:e2da1a4652f5 79 #define SCI_WRAM 0x06
kudlatykaskader 0:e2da1a4652f5 80 #define SCI_WRAMADDR 0x07
kudlatykaskader 0:e2da1a4652f5 81 #define SCI_HDAT0 0x08
kudlatykaskader 0:e2da1a4652f5 82 #define SCI_HDAT1 0x09
kudlatykaskader 0:e2da1a4652f5 83 #define SCI_AIADDR 0x0A
kudlatykaskader 0:e2da1a4652f5 84 #define SCI_VOL 0x0B
kudlatykaskader 0:e2da1a4652f5 85 #define SCI_AICTRL0 0x0C
kudlatykaskader 0:e2da1a4652f5 86 #define SCI_AICTRL1 0x0D
kudlatykaskader 0:e2da1a4652f5 87 #define SCI_AICTRL2 0x0E
kudlatykaskader 0:e2da1a4652f5 88 #define SCI_AICTRL3 0x0F
kudlatykaskader 0:e2da1a4652f5 89
kudlatykaskader 0:e2da1a4652f5 90
kudlatykaskader 0:e2da1a4652f5 91 //SCI_MODE register bits as of p.38 of the datasheet
kudlatykaskader 0:e2da1a4652f5 92 #define SM_DIFF 0x0001
kudlatykaskader 0:e2da1a4652f5 93 #define SM_LAYER12 0x0002
kudlatykaskader 0:e2da1a4652f5 94 #define SM_RESET 0x0004
kudlatykaskader 0:e2da1a4652f5 95 #define SM_CANCEL 0x0008
kudlatykaskader 0:e2da1a4652f5 96 #define SM_EARSPEAKER_LO 0x0010
kudlatykaskader 0:e2da1a4652f5 97 #define SM_TESTS 0x0020
kudlatykaskader 0:e2da1a4652f5 98 #define SM_STREAM 0x0040
kudlatykaskader 0:e2da1a4652f5 99 #define SM_EARSPEAKER_HI 0x0080
kudlatykaskader 0:e2da1a4652f5 100 #define SM_DACT 0x0100
kudlatykaskader 0:e2da1a4652f5 101 #define SM_SDIORD 0x0200
kudlatykaskader 0:e2da1a4652f5 102 #define SM_SDISHARE 0x0400
kudlatykaskader 0:e2da1a4652f5 103 #define SM_SDINEW 0x0800
kudlatykaskader 0:e2da1a4652f5 104 #define SM_ADPCM 0x1000
kudlatykaskader 0:e2da1a4652f5 105 #define SM_B13 0x2000
kudlatykaskader 0:e2da1a4652f5 106 #define SM_LINE1 0x4000
kudlatykaskader 0:e2da1a4652f5 107 #define SM_CLK_RANGE 0x8000
kudlatykaskader 0:e2da1a4652f5 108
kudlatykaskader 0:e2da1a4652f5 109 //SCI_CLOCKF register bits as of p.42 of the datasheet
kudlatykaskader 0:e2da1a4652f5 110 #define SC_ADD_NOMOD 0x0000
kudlatykaskader 0:e2da1a4652f5 111 #define SC_ADD_10x 0x0800
kudlatykaskader 0:e2da1a4652f5 112 #define SC_ADD_15x 0x1000
kudlatykaskader 0:e2da1a4652f5 113 #define SC_ADD_20x 0x1800
kudlatykaskader 0:e2da1a4652f5 114 #define SC_MULT_XTALI 0x0000
kudlatykaskader 0:e2da1a4652f5 115 #define SC_MULT_XTALIx20 0x2000
kudlatykaskader 0:e2da1a4652f5 116 #define SC_MULT_XTALIx25 0x4000
kudlatykaskader 0:e2da1a4652f5 117 #define SC_MULT_XTALIx30 0x6000
kudlatykaskader 0:e2da1a4652f5 118 #define SC_MULT_XTALIx35 0x8000
kudlatykaskader 0:e2da1a4652f5 119 #define SC_MULT_XTALIx40 0xA000
kudlatykaskader 0:e2da1a4652f5 120 #define SC_MULT_XTALIx45 0xC000
kudlatykaskader 0:e2da1a4652f5 121 #define SC_MULT_XTALIx50 0xE000
kudlatykaskader 0:e2da1a4652f5 122
kudlatykaskader 0:e2da1a4652f5 123 // Extra Parameter in X memory (refer to p.58 of the datasheet)
kudlatykaskader 0:e2da1a4652f5 124 #define para_chipID_0 0x1E00
kudlatykaskader 0:e2da1a4652f5 125 #define para_chipID_1 0x1E01
kudlatykaskader 0:e2da1a4652f5 126 #define para_version 0x1E02
kudlatykaskader 0:e2da1a4652f5 127 #define para_config1 0x1E03
kudlatykaskader 0:e2da1a4652f5 128 #define para_playSpeed 0x1E04
kudlatykaskader 0:e2da1a4652f5 129 #define para_byteRate 0x1E05
kudlatykaskader 0:e2da1a4652f5 130 #define para_endFillByte 0x1E06
kudlatykaskader 0:e2da1a4652f5 131 //
kudlatykaskader 0:e2da1a4652f5 132 #define para_positionMsec_0 0x1E27
kudlatykaskader 0:e2da1a4652f5 133 #define para_positionMsec_1 0x1E28
kudlatykaskader 0:e2da1a4652f5 134 #define para_resync 0x1E29
kudlatykaskader 0:e2da1a4652f5 135
kudlatykaskader 0:e2da1a4652f5 136 #define INTERRUPT_HANDLER_ENABLE _DREQ_INTERUPT_IN.rise(this, &VS1053::dataRequestHandler); timer.attach_us(this, &VS1053::dataRequestHandler, 1000)
kudlatykaskader 0:e2da1a4652f5 137 #define INTERRUPT_HANDLER_DISABLE _DREQ_INTERUPT_IN.rise(NULL); timer.detach()
kudlatykaskader 0:e2da1a4652f5 138
kudlatykaskader 0:e2da1a4652f5 139
kudlatykaskader 0:e2da1a4652f5 140 /** Types of audio streams
kudlatykaskader 0:e2da1a4652f5 141 *
kudlatykaskader 0:e2da1a4652f5 142 */
kudlatykaskader 0:e2da1a4652f5 143 enum AudioType
kudlatykaskader 0:e2da1a4652f5 144 {
kudlatykaskader 0:e2da1a4652f5 145 WAV, /*!< WAVE audio stream */
kudlatykaskader 0:e2da1a4652f5 146 AAC, /*!< AAC audio stream (ADTS (.aac), MPEG2 ADIF (.aac) and MPEG4 AUDIO (.mp4 / .m4a / .3gp / .3g2)) */
kudlatykaskader 0:e2da1a4652f5 147 WMA, /*!< Windows Media Audio (WMA) stream */
kudlatykaskader 0:e2da1a4652f5 148 MIDI, /*!< Midi audio stream */
kudlatykaskader 0:e2da1a4652f5 149 OGG_VORBIS, /*!< Ogg Vorbis audio stream */
kudlatykaskader 0:e2da1a4652f5 150 MP3, /*!< MPEG Audio Layer */
kudlatykaskader 0:e2da1a4652f5 151 UNKNOWN /*!< Unknown */
kudlatykaskader 0:e2da1a4652f5 152 };
kudlatykaskader 0:e2da1a4652f5 153
kudlatykaskader 0:e2da1a4652f5 154 typedef enum AudioType AudioType;
kudlatykaskader 0:e2da1a4652f5 155
kudlatykaskader 0:e2da1a4652f5 156 /** Types of MPEG Audio Layer stream IDs.
kudlatykaskader 0:e2da1a4652f5 157 *
kudlatykaskader 0:e2da1a4652f5 158 */
kudlatykaskader 0:e2da1a4652f5 159 enum MP3_ID
kudlatykaskader 0:e2da1a4652f5 160 {
kudlatykaskader 0:e2da1a4652f5 161 MPG2_5a = 0, /*!< MPG 2.5, nonstandard, proprietary */
kudlatykaskader 0:e2da1a4652f5 162 MPG2_5b = 1, /*!< MPG 2.5, nonstandard, proprietary */
kudlatykaskader 0:e2da1a4652f5 163 MPG2_0 = 2, /*!< ISO 13818-3 MPG 2.0 */
kudlatykaskader 0:e2da1a4652f5 164 MPG1_0 = 3 /*!< ISO 11172-3 MPG 1.0 */
kudlatykaskader 0:e2da1a4652f5 165 };
kudlatykaskader 0:e2da1a4652f5 166
kudlatykaskader 0:e2da1a4652f5 167 typedef enum MP3_ID MP3_ID;
kudlatykaskader 0:e2da1a4652f5 168
kudlatykaskader 0:e2da1a4652f5 169 /** Types of MPEG Audio Layer channel modes.
kudlatykaskader 0:e2da1a4652f5 170 *
kudlatykaskader 0:e2da1a4652f5 171 */
kudlatykaskader 0:e2da1a4652f5 172 enum MP3_MODE
kudlatykaskader 0:e2da1a4652f5 173 {
kudlatykaskader 0:e2da1a4652f5 174 STEREO = 0, /*!< Stereo */
kudlatykaskader 0:e2da1a4652f5 175 JOINT_STEREO = 1, /*!< Joint Stereo */
kudlatykaskader 0:e2da1a4652f5 176 DUAL_CHANNEL = 2, /*!< Dual Channel */
kudlatykaskader 0:e2da1a4652f5 177 MONO = 3 /*!< Mono */
kudlatykaskader 0:e2da1a4652f5 178 };
kudlatykaskader 0:e2da1a4652f5 179
kudlatykaskader 0:e2da1a4652f5 180 typedef enum MP3_MODE MP3_MODE;
kudlatykaskader 0:e2da1a4652f5 181 /** Struct for informations about audio streams.
kudlatykaskader 0:e2da1a4652f5 182 *
kudlatykaskader 0:e2da1a4652f5 183 */
kudlatykaskader 0:e2da1a4652f5 184 typedef struct AudioInfo
kudlatykaskader 0:e2da1a4652f5 185 {
kudlatykaskader 0:e2da1a4652f5 186 AudioType type : 4; /*!< Type of the audio stream - important for the interpretation of the lower union */
kudlatykaskader 0:e2da1a4652f5 187 unsigned short kBitRate; /*!< Average bitrate of the audio stream - in kBit/s */
kudlatykaskader 0:e2da1a4652f5 188 unsigned short decodeTime; /*!< Decode time */
kudlatykaskader 0:e2da1a4652f5 189 union {
kudlatykaskader 0:e2da1a4652f5 190 struct {
kudlatykaskader 0:e2da1a4652f5 191 MP3_ID id : 2; /*!< ID */
kudlatykaskader 0:e2da1a4652f5 192 char layer : 2; /*!< Layer */
kudlatykaskader 0:e2da1a4652f5 193 char protrectBit : 1; /*!< Protect bit, see p.44 of the datasheet */
kudlatykaskader 0:e2da1a4652f5 194 char padBit : 1; /*!< Pad bit, see p.44 of the datasheet */
kudlatykaskader 0:e2da1a4652f5 195 MP3_MODE mode : 2; /*!< Channel mode */
kudlatykaskader 0:e2da1a4652f5 196 char extension : 2; /*!< Extension, see p.44 of the datasheet */
kudlatykaskader 0:e2da1a4652f5 197 char copyright : 1; /*!< Copyright, see p.44 of the datasheet */
kudlatykaskader 0:e2da1a4652f5 198 char original : 1; /*!< Original, see p.44 of the datasheet */
kudlatykaskader 0:e2da1a4652f5 199 char emphasis : 2; /*!< Emphasis, see p.44 of the datasheet */
kudlatykaskader 0:e2da1a4652f5 200 char kSampleRate : 6; /*!< Samplerate - in kHz (rounded) */
kudlatykaskader 0:e2da1a4652f5 201 } mp3; /*!< MPEG Audio Layer */
kudlatykaskader 0:e2da1a4652f5 202 struct {
kudlatykaskader 0:e2da1a4652f5 203
kudlatykaskader 0:e2da1a4652f5 204 } wma; /*!< Windows Media Audio (WMA) stream */
kudlatykaskader 0:e2da1a4652f5 205 struct {
kudlatykaskader 0:e2da1a4652f5 206
kudlatykaskader 0:e2da1a4652f5 207 } aac; /*!< AAC audio stream */
kudlatykaskader 0:e2da1a4652f5 208 struct {
kudlatykaskader 0:e2da1a4652f5 209
kudlatykaskader 0:e2da1a4652f5 210 } other; /*!< Other */
kudlatykaskader 0:e2da1a4652f5 211 } ext;
kudlatykaskader 0:e2da1a4652f5 212
kudlatykaskader 0:e2da1a4652f5 213 } AudioInfo;
kudlatykaskader 0:e2da1a4652f5 214
kudlatykaskader 0:e2da1a4652f5 215 /** Class for VS1053 - Ogg Vorbis / MP3 / AAC / WMA / FLAC / MIDI Audio Codec Chip.
kudlatykaskader 0:e2da1a4652f5 216 * Datasheet, see http://www.vlsi.fi/fileadmin/datasheets/vlsi/vs1053.pdf
kudlatykaskader 0:e2da1a4652f5 217 *
kudlatykaskader 0:e2da1a4652f5 218 * This code based on:
kudlatykaskader 0:e2da1a4652f5 219 * mbeduino_MP3_Shield_MP3Player
kudlatykaskader 0:e2da1a4652f5 220 * http://mbed.org/users/xshige/programs/mbeduino_MP3_Shield_MP3Player/lgcx63
kudlatykaskader 0:e2da1a4652f5 221 * 2010-10-16
kudlatykaskader 0:e2da1a4652f5 222 *
kudlatykaskader 0:e2da1a4652f5 223 * For the use of this class, a file "defines.h" must be created.
kudlatykaskader 0:e2da1a4652f5 224 * It controls debug output and vs1053 patches.
kudlatykaskader 0:e2da1a4652f5 225 *
kudlatykaskader 0:e2da1a4652f5 226 * defines.h:
kudlatykaskader 0:e2da1a4652f5 227 *@code
kudlatykaskader 0:e2da1a4652f5 228 * #ifndef _DEFINES_H
kudlatykaskader 0:e2da1a4652f5 229 * #define _DEFINES_H
kudlatykaskader 0:e2da1a4652f5 230 * // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 231 * // debug output
kudlatykaskader 0:e2da1a4652f5 232 * // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 233 * // optional
kudlatykaskader 0:e2da1a4652f5 234 * #define DEBUG
kudlatykaskader 0:e2da1a4652f5 235 * #ifdef DEBUG
kudlatykaskader 0:e2da1a4652f5 236 * # define DEBUGOUT(x,y...) printf(x, ##y);
kudlatykaskader 0:e2da1a4652f5 237 * #else
kudlatykaskader 0:e2da1a4652f5 238 * # define DEBUGOUT(x,y...)
kudlatykaskader 0:e2da1a4652f5 239 * #endif
kudlatykaskader 0:e2da1a4652f5 240 * // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 241 * // VLSI VS1053b library, patch, apps
kudlatykaskader 0:e2da1a4652f5 242 * // ----------------------------------------------------------------------------
kudlatykaskader 0:e2da1a4652f5 243 * // optional, ONLY ONE
kudlatykaskader 0:e2da1a4652f5 244 * //#define VS1053_PATCH_1_4_FLAC
kudlatykaskader 0:e2da1a4652f5 245 * //#define VS1053_PATCH_1_5
kudlatykaskader 0:e2da1a4652f5 246 * #define VS1053_PATCH_1_5_FLAC
kudlatykaskader 0:e2da1a4652f5 247 * //#define VS1053_SPECANA
kudlatykaskader 0:e2da1a4652f5 248 * //#define VS1053B_PCM_RECORDER_0_9
kudlatykaskader 0:e2da1a4652f5 249 *
kudlatykaskader 0:e2da1a4652f5 250 * #endif //_DEFINES_H
kudlatykaskader 0:e2da1a4652f5 251 *@endcode
kudlatykaskader 0:e2da1a4652f5 252 *
kudlatykaskader 0:e2da1a4652f5 253 * For a complete sample, see http://mbed.org/users/christi_s/programs/Lib_VS1053b
kudlatykaskader 0:e2da1a4652f5 254 *
kudlatykaskader 0:e2da1a4652f5 255 */
kudlatykaskader 0:e2da1a4652f5 256 class VS1053 {
kudlatykaskader 0:e2da1a4652f5 257
kudlatykaskader 0:e2da1a4652f5 258 public:
kudlatykaskader 0:e2da1a4652f5 259 /** Create a vs1053b object.
kudlatykaskader 0:e2da1a4652f5 260 *
kudlatykaskader 0:e2da1a4652f5 261 * @param mosi
kudlatykaskader 0:e2da1a4652f5 262 * SPI Master Out, Slave In pin to vs1053b.
kudlatykaskader 0:e2da1a4652f5 263 * @param miso
kudlatykaskader 0:e2da1a4652f5 264 * SPI Master In, Slave Out pin to vs1053b.
kudlatykaskader 0:e2da1a4652f5 265 * @param sck
kudlatykaskader 0:e2da1a4652f5 266 * SPI Clock pin to vs1053b.
kudlatykaskader 0:e2da1a4652f5 267 * @param cs
kudlatykaskader 0:e2da1a4652f5 268 * Pin to vs1053b control chip select.
kudlatykaskader 0:e2da1a4652f5 269 * @param rst
kudlatykaskader 0:e2da1a4652f5 270 * Pin to vs1053b reset.
kudlatykaskader 0:e2da1a4652f5 271 * @param dreq
kudlatykaskader 0:e2da1a4652f5 272 * Pin to vs1053b data request.
kudlatykaskader 0:e2da1a4652f5 273 * @param dcs
kudlatykaskader 0:e2da1a4652f5 274 * Pin to vs1053b data chip select.
kudlatykaskader 0:e2da1a4652f5 275 * @param buffer
kudlatykaskader 0:e2da1a4652f5 276 * Array to cache audio data.
kudlatykaskader 0:e2da1a4652f5 277 * @param buffer_size
kudlatykaskader 0:e2da1a4652f5 278 * Length of the array.
kudlatykaskader 0:e2da1a4652f5 279 */
kudlatykaskader 0:e2da1a4652f5 280 VS1053(
kudlatykaskader 0:e2da1a4652f5 281 PinName mosi,
kudlatykaskader 0:e2da1a4652f5 282 PinName miso,
kudlatykaskader 0:e2da1a4652f5 283 PinName sck,
kudlatykaskader 0:e2da1a4652f5 284 PinName cs,
kudlatykaskader 0:e2da1a4652f5 285 PinName rst,
kudlatykaskader 0:e2da1a4652f5 286 PinName dreq,
kudlatykaskader 0:e2da1a4652f5 287 PinName dcs,
kudlatykaskader 0:e2da1a4652f5 288 char* buffer,
kudlatykaskader 0:e2da1a4652f5 289 int buffer_size
kudlatykaskader 0:e2da1a4652f5 290 );
kudlatykaskader 0:e2da1a4652f5 291
kudlatykaskader 0:e2da1a4652f5 292 /** Reset the vs1053b. (hardware reset)
kudlatykaskader 0:e2da1a4652f5 293 *
kudlatykaskader 0:e2da1a4652f5 294 */
kudlatykaskader 0:e2da1a4652f5 295 void reset(void);
kudlatykaskader 0:e2da1a4652f5 296
kudlatykaskader 0:e2da1a4652f5 297 /** Stop the playback if the song is completed.
kudlatykaskader 0:e2da1a4652f5 298 * You must call this function for default playback.
kudlatykaskader 0:e2da1a4652f5 299 *
kudlatykaskader 0:e2da1a4652f5 300 */
kudlatykaskader 0:e2da1a4652f5 301 void terminateStream(void);
kudlatykaskader 0:e2da1a4652f5 302
kudlatykaskader 0:e2da1a4652f5 303 /** Initialize the vs1053b device.
kudlatykaskader 0:e2da1a4652f5 304 *
kudlatykaskader 0:e2da1a4652f5 305 * @return
kudlatykaskader 0:e2da1a4652f5 306 * TRUE on success, FALSE on failure.
kudlatykaskader 0:e2da1a4652f5 307 */
kudlatykaskader 0:e2da1a4652f5 308 bool initialize(void);
kudlatykaskader 0:e2da1a4652f5 309
kudlatykaskader 0:e2da1a4652f5 310 /** Set the volume.
kudlatykaskader 0:e2da1a4652f5 311 *
kudlatykaskader 0:e2da1a4652f5 312 * @param volume
kudlatykaskader 0:e2da1a4652f5 313 * Volume -0.5dB, -1.0dB, .. -64.0dB.
kudlatykaskader 0:e2da1a4652f5 314 */
kudlatykaskader 0:e2da1a4652f5 315 void setVolume(float volume = DEFAULT_VOLUME);
kudlatykaskader 0:e2da1a4652f5 316
kudlatykaskader 0:e2da1a4652f5 317 /** Get the volume.
kudlatykaskader 0:e2da1a4652f5 318 *
kudlatykaskader 0:e2da1a4652f5 319 * @return
kudlatykaskader 0:e2da1a4652f5 320 * Return the volume in dB.
kudlatykaskader 0:e2da1a4652f5 321 */
kudlatykaskader 0:e2da1a4652f5 322 float getVolume();
kudlatykaskader 0:e2da1a4652f5 323
kudlatykaskader 0:e2da1a4652f5 324 /** Set the balance - volume difference between left-right.
kudlatykaskader 0:e2da1a4652f5 325 *
kudlatykaskader 0:e2da1a4652f5 326 * @param balance
kudlatykaskader 0:e2da1a4652f5 327 * Difference in dB.
kudlatykaskader 0:e2da1a4652f5 328 */
kudlatykaskader 0:e2da1a4652f5 329 void setBalance(float balance = DEFAULT_BALANCE_DIFERENCE_LEFT_RIGHT);
kudlatykaskader 0:e2da1a4652f5 330
kudlatykaskader 0:e2da1a4652f5 331 /** Get the balance - volume difference between left-right.
kudlatykaskader 0:e2da1a4652f5 332 *
kudlatykaskader 0:e2da1a4652f5 333 * @return
kudlatykaskader 0:e2da1a4652f5 334 * Difference in dB.
kudlatykaskader 0:e2da1a4652f5 335 */
kudlatykaskader 0:e2da1a4652f5 336 float getBalance();
kudlatykaskader 0:e2da1a4652f5 337
kudlatykaskader 0:e2da1a4652f5 338 /** Get the treble frequency limit.
kudlatykaskader 0:e2da1a4652f5 339 *
kudlatykaskader 0:e2da1a4652f5 340 * @return
kudlatykaskader 0:e2da1a4652f5 341 * Frequenzy 1000, 2000 .. 15000Hz.
kudlatykaskader 0:e2da1a4652f5 342 */
kudlatykaskader 0:e2da1a4652f5 343 int getTrebleFrequency(void);
kudlatykaskader 0:e2da1a4652f5 344 /** Set the treble frequency limit.
kudlatykaskader 0:e2da1a4652f5 345 *
kudlatykaskader 0:e2da1a4652f5 346 * @param frequency
kudlatykaskader 0:e2da1a4652f5 347 * Frequenzy 1000, 2000, .. 15000Hz.
kudlatykaskader 0:e2da1a4652f5 348 */
kudlatykaskader 0:e2da1a4652f5 349 void setTrebleFrequency(int frequency = DEFAULT_TREBLE_FREQUENCY);
kudlatykaskader 0:e2da1a4652f5 350
kudlatykaskader 0:e2da1a4652f5 351 /** Get the treble amplitude.
kudlatykaskader 0:e2da1a4652f5 352 *
kudlatykaskader 0:e2da1a4652f5 353 * @return
kudlatykaskader 0:e2da1a4652f5 354 * Amplitude -8 .. 7dB (in 1.5dB steps); 0 = off.
kudlatykaskader 0:e2da1a4652f5 355 */
kudlatykaskader 0:e2da1a4652f5 356 int getTrebleAmplitude(void);
kudlatykaskader 0:e2da1a4652f5 357 /** Set the treble amplitude.
kudlatykaskader 0:e2da1a4652f5 358 *
kudlatykaskader 0:e2da1a4652f5 359 * @param amplitude
kudlatykaskader 0:e2da1a4652f5 360 * Amplitude -8 .. 7dB (in 1.5dB steps); 0 = off.
kudlatykaskader 0:e2da1a4652f5 361 */
kudlatykaskader 0:e2da1a4652f5 362 void setTrebleAmplitude(int amplitude = DEFAULT_TREBLE_AMPLITUDE);
kudlatykaskader 0:e2da1a4652f5 363
kudlatykaskader 0:e2da1a4652f5 364 /** Get the bass frequency limit.
kudlatykaskader 0:e2da1a4652f5 365 *
kudlatykaskader 0:e2da1a4652f5 366 * @return
kudlatykaskader 0:e2da1a4652f5 367 * Frequenzy 20, 30, .. 150Hz.
kudlatykaskader 0:e2da1a4652f5 368 */
kudlatykaskader 0:e2da1a4652f5 369 int getBassFrequency(void);
kudlatykaskader 0:e2da1a4652f5 370 /** Set the bass frequency limit.
kudlatykaskader 0:e2da1a4652f5 371 *
kudlatykaskader 0:e2da1a4652f5 372 * @param frequency
kudlatykaskader 0:e2da1a4652f5 373 * Frequenzy 20, 30, .. 150Hz.
kudlatykaskader 0:e2da1a4652f5 374 */
kudlatykaskader 0:e2da1a4652f5 375 void setBassFrequency(int frequency= DEFAULT_BASS_FREQUENCY);
kudlatykaskader 0:e2da1a4652f5 376
kudlatykaskader 0:e2da1a4652f5 377 /** Get the bass amplitude.
kudlatykaskader 0:e2da1a4652f5 378 *
kudlatykaskader 0:e2da1a4652f5 379 * @return
kudlatykaskader 0:e2da1a4652f5 380 * Amplitude 0 .. 15dB (in 1dB steps); 0 = off.
kudlatykaskader 0:e2da1a4652f5 381 */
kudlatykaskader 0:e2da1a4652f5 382 int getBassAmplitude(void);
kudlatykaskader 0:e2da1a4652f5 383 /** Set the bass amplitude.
kudlatykaskader 0:e2da1a4652f5 384 *
kudlatykaskader 0:e2da1a4652f5 385 * @param amplitude
kudlatykaskader 0:e2da1a4652f5 386 * Amplitude 0 .. 15dB (in 1dB steps); 0 = off.
kudlatykaskader 0:e2da1a4652f5 387 */
kudlatykaskader 0:e2da1a4652f5 388 void setBassAmplitude(int amplitude = DEFAULT_BASS_AMPLITUDE);
kudlatykaskader 0:e2da1a4652f5 389
kudlatykaskader 0:e2da1a4652f5 390 /** Set the speed of a playback.
kudlatykaskader 0:e2da1a4652f5 391 *
kudlatykaskader 0:e2da1a4652f5 392 * @param speed
kudlatykaskader 0:e2da1a4652f5 393 * Speed 0, 1, .. (0, 1 normal speed).
kudlatykaskader 0:e2da1a4652f5 394 * Speeds greater 2 are not recommended, buffer must be filled quickly enough.
kudlatykaskader 0:e2da1a4652f5 395 */
kudlatykaskader 0:e2da1a4652f5 396 void setPlaySpeed(unsigned short speed);
kudlatykaskader 0:e2da1a4652f5 397
kudlatykaskader 0:e2da1a4652f5 398 /** Copy a byte into the audio data buffer.
kudlatykaskader 0:e2da1a4652f5 399 *
kudlatykaskader 0:e2da1a4652f5 400 * @param c
kudlatykaskader 0:e2da1a4652f5 401 * Data for the buffer.
kudlatykaskader 0:e2da1a4652f5 402 *
kudlatykaskader 0:e2da1a4652f5 403 * @return
kudlatykaskader 0:e2da1a4652f5 404 * TRUE on success; FALSE on failure, c isn't copied in the buffer.
kudlatykaskader 0:e2da1a4652f5 405 */
kudlatykaskader 0:e2da1a4652f5 406 bool bufferSetByte(char c);
kudlatykaskader 0:e2da1a4652f5 407
kudlatykaskader 0:e2da1a4652f5 408 /** Copy a array of bytes into the audio data buffer.
kudlatykaskader 0:e2da1a4652f5 409 *
kudlatykaskader 0:e2da1a4652f5 410 * @param s
kudlatykaskader 0:e2da1a4652f5 411 * Data for the buffer.
kudlatykaskader 0:e2da1a4652f5 412 *
kudlatykaskader 0:e2da1a4652f5 413 * @param length
kudlatykaskader 0:e2da1a4652f5 414 * Size of data array.
kudlatykaskader 0:e2da1a4652f5 415 *
kudlatykaskader 0:e2da1a4652f5 416 * @return
kudlatykaskader 0:e2da1a4652f5 417 * TRUE on success; FALSE on failure, s isn't copied in the buffer.
kudlatykaskader 0:e2da1a4652f5 418 */
kudlatykaskader 0:e2da1a4652f5 419 bool bufferPutStream(const char *s, unsigned int length);
kudlatykaskader 0:e2da1a4652f5 420
kudlatykaskader 0:e2da1a4652f5 421 /** Get the free space of the audio data buffer.
kudlatykaskader 0:e2da1a4652f5 422 *
kudlatykaskader 0:e2da1a4652f5 423 * @return
kudlatykaskader 0:e2da1a4652f5 424 * Space 0 .. BUFFER_SIZE - 1.
kudlatykaskader 0:e2da1a4652f5 425 */
kudlatykaskader 0:e2da1a4652f5 426 unsigned int bufferFree(void);
kudlatykaskader 0:e2da1a4652f5 427
kudlatykaskader 0:e2da1a4652f5 428 /** Get the busy space of the audio data buffer.
kudlatykaskader 0:e2da1a4652f5 429 *
kudlatykaskader 0:e2da1a4652f5 430 * @return
kudlatykaskader 0:e2da1a4652f5 431 * Space 0 .. BUFFER_SIZE - 1.
kudlatykaskader 0:e2da1a4652f5 432 */
kudlatykaskader 0:e2da1a4652f5 433 unsigned int bufferCount(void);
kudlatykaskader 0:e2da1a4652f5 434
kudlatykaskader 0:e2da1a4652f5 435 /** Complete length of the audio buffer.
kudlatykaskader 0:e2da1a4652f5 436 *
kudlatykaskader 0:e2da1a4652f5 437 * @return
kudlatykaskader 0:e2da1a4652f5 438 * Buffer length.
kudlatykaskader 0:e2da1a4652f5 439 */
kudlatykaskader 0:e2da1a4652f5 440 unsigned int bufferLength(void);
kudlatykaskader 0:e2da1a4652f5 441
kudlatykaskader 0:e2da1a4652f5 442 /** Start playing audio from buffer.
kudlatykaskader 0:e2da1a4652f5 443 *
kudlatykaskader 0:e2da1a4652f5 444 */
kudlatykaskader 0:e2da1a4652f5 445 void play(void);
kudlatykaskader 0:e2da1a4652f5 446
kudlatykaskader 0:e2da1a4652f5 447 /** Interrupt the playback.
kudlatykaskader 0:e2da1a4652f5 448 *
kudlatykaskader 0:e2da1a4652f5 449 */
kudlatykaskader 0:e2da1a4652f5 450 void pause(void);
kudlatykaskader 0:e2da1a4652f5 451
kudlatykaskader 0:e2da1a4652f5 452 /** Stop the playback in the middle of a song.
kudlatykaskader 0:e2da1a4652f5 453 * After this call, you can now send the next audio file to buffer.
kudlatykaskader 0:e2da1a4652f5 454 *
kudlatykaskader 0:e2da1a4652f5 455 */
kudlatykaskader 0:e2da1a4652f5 456 void stop(void);
kudlatykaskader 0:e2da1a4652f5 457
kudlatykaskader 0:e2da1a4652f5 458 /** Get information about played audio stream.
kudlatykaskader 0:e2da1a4652f5 459 *
kudlatykaskader 0:e2da1a4652f5 460 * @param aInfo
kudlatykaskader 0:e2da1a4652f5 461 * Return value for the informations.
kudlatykaskader 0:e2da1a4652f5 462 *
kudlatykaskader 0:e2da1a4652f5 463 */
kudlatykaskader 0:e2da1a4652f5 464 void getAudioInfo(AudioInfo* aInfo);
kudlatykaskader 0:e2da1a4652f5 465
kudlatykaskader 0:e2da1a4652f5 466 protected:
kudlatykaskader 0:e2da1a4652f5 467 unsigned short int wram_read(unsigned short int);
kudlatykaskader 0:e2da1a4652f5 468 void wram_write(unsigned short int, unsigned short int);
kudlatykaskader 0:e2da1a4652f5 469 void write_plugin(const unsigned short* , unsigned int);
kudlatykaskader 0:e2da1a4652f5 470 void cs_low(void);
kudlatykaskader 0:e2da1a4652f5 471 void cs_high(void);
kudlatykaskader 0:e2da1a4652f5 472 void dcs_low(void);
kudlatykaskader 0:e2da1a4652f5 473 void dcs_high(void);
kudlatykaskader 0:e2da1a4652f5 474 void sci_en(void);
kudlatykaskader 0:e2da1a4652f5 475 void sci_dis(void);
kudlatykaskader 0:e2da1a4652f5 476 void sdi_en(void);
kudlatykaskader 0:e2da1a4652f5 477 void sdi_dis(void);
kudlatykaskader 0:e2da1a4652f5 478
kudlatykaskader 0:e2da1a4652f5 479 void spi_initialise(void);
kudlatykaskader 0:e2da1a4652f5 480
kudlatykaskader 0:e2da1a4652f5 481 void sdi_initialise(void);
kudlatykaskader 0:e2da1a4652f5 482
kudlatykaskader 0:e2da1a4652f5 483 void sci_write(unsigned char, unsigned short int);
kudlatykaskader 0:e2da1a4652f5 484 void sdi_write(unsigned char);
kudlatykaskader 0:e2da1a4652f5 485 unsigned short int sci_read(unsigned short int);
kudlatykaskader 0:e2da1a4652f5 486 void sine_test_activate(unsigned char);
kudlatykaskader 0:e2da1a4652f5 487
kudlatykaskader 0:e2da1a4652f5 488 void sine_test_deactivate(void);
kudlatykaskader 0:e2da1a4652f5 489
kudlatykaskader 0:e2da1a4652f5 490 void changeVolume(void);
kudlatykaskader 0:e2da1a4652f5 491
kudlatykaskader 0:e2da1a4652f5 492
kudlatykaskader 0:e2da1a4652f5 493 // TODO
kudlatykaskader 0:e2da1a4652f5 494 void power_down(void);
kudlatykaskader 0:e2da1a4652f5 495
kudlatykaskader 0:e2da1a4652f5 496 void changeBass(void);
kudlatykaskader 0:e2da1a4652f5 497
kudlatykaskader 0:e2da1a4652f5 498 unsigned char bufferGetByte(void);
kudlatykaskader 0:e2da1a4652f5 499 void bufferReset(void);
kudlatykaskader 0:e2da1a4652f5 500 void dataRequestHandler(void);
kudlatykaskader 0:e2da1a4652f5 501
kudlatykaskader 0:e2da1a4652f5 502 SPI _spi;
kudlatykaskader 0:e2da1a4652f5 503 DigitalOut _CS;
kudlatykaskader 0:e2da1a4652f5 504 DigitalOut _RST;
kudlatykaskader 0:e2da1a4652f5 505 DigitalOut _DCS;
kudlatykaskader 0:e2da1a4652f5 506 DigitalIn _DREQ;
kudlatykaskader 0:e2da1a4652f5 507 InterruptIn _DREQ_INTERUPT_IN;
kudlatykaskader 0:e2da1a4652f5 508
kudlatykaskader 0:e2da1a4652f5 509 char* _buffer;
kudlatykaskader 0:e2da1a4652f5 510 char* _bufferReadPointer;
kudlatykaskader 0:e2da1a4652f5 511 char* _bufferWritePointer;
kudlatykaskader 0:e2da1a4652f5 512 int BUFFER_SIZE;
kudlatykaskader 0:e2da1a4652f5 513
kudlatykaskader 0:e2da1a4652f5 514 bool _isIdle;
kudlatykaskader 0:e2da1a4652f5 515
kudlatykaskader 0:e2da1a4652f5 516 // variables to save
kudlatykaskader 0:e2da1a4652f5 517 // volume, values in db
kudlatykaskader 0:e2da1a4652f5 518 float _balance;
kudlatykaskader 0:e2da1a4652f5 519 float _volume;
kudlatykaskader 0:e2da1a4652f5 520 // bass enhancer settings
kudlatykaskader 0:e2da1a4652f5 521 int _sb_amplitude;
kudlatykaskader 0:e2da1a4652f5 522 int _sb_freqlimit;
kudlatykaskader 0:e2da1a4652f5 523 int _st_amplitude;
kudlatykaskader 0:e2da1a4652f5 524 int _st_freqlimit;
kudlatykaskader 0:e2da1a4652f5 525
kudlatykaskader 0:e2da1a4652f5 526
kudlatykaskader 0:e2da1a4652f5 527 Ticker timer;
kudlatykaskader 0:e2da1a4652f5 528
kudlatykaskader 0:e2da1a4652f5 529 static const char _sampleRateTable[4][4]; // _sampleRateTable[id][srate]
kudlatykaskader 0:e2da1a4652f5 530
kudlatykaskader 0:e2da1a4652f5 531 };
kudlatykaskader 0:e2da1a4652f5 532
kudlatykaskader 0:e2da1a4652f5 533 #endif