Adafruit VS1053 Arduino Library
Adafruit_VS1053.h
Go to the documentation of this file.
1 
5 #ifndef ADAFRUIT_VS1053_H
6 #define ADAFRUIT_VS1053_H
7 
8 #if (ARDUINO >= 100)
9 #include <Arduino.h>
10 #else
11 #include <WProgram.h>
12 #include <pins_arduino.h>
13 #endif
14 
15 #if !defined(ARDUINO_STM32_FEATHER)
16 #include "pins_arduino.h"
17 #include "wiring_private.h"
18 #endif
19 
20 #include <Adafruit_SPIDevice.h>
21 
22 #if defined(PREFER_SDFAT_LIBRARY)
23 #include <SdFat.h>
24 extern SdFat SD;
25 #else
26 #include <SD.h>
27 #endif
28 
29 // define here the size of a register!
30 #if defined(ARDUINO_STM32_FEATHER)
31 typedef volatile uint32 RwReg;
32 typedef uint32_t PortMask;
33 #elif defined(ARDUINO_ARCH_AVR)
34 typedef volatile uint8_t RwReg;
35 typedef uint8_t PortMask;
36 #elif defined(__arm__)
37 #if defined(TEENSYDUINO)
38 typedef volatile uint8_t RwReg;
39 typedef uint8_t PortMask;
40 #else
41 typedef volatile uint32_t RwReg;
42 typedef uint32_t PortMask;
43 #endif
44 #elif defined(ESP8266) || defined(ESP32)
45 typedef volatile uint32_t RwReg;
46 typedef uint32_t PortMask;
47 #elif defined(__ARDUINO_ARC__)
48 typedef volatile uint32_t RwReg;
49 typedef uint32_t PortMask;
50 #else
51 typedef volatile uint8_t RwReg;
52 typedef uint8_t PortMask;
53 #endif
55 
56 typedef volatile RwReg PortReg;
57 
59 #define VS1053_FILEPLAYER_TIMER0_INT \
60  255
61 #define VS1053_FILEPLAYER_PIN_INT \
62  5
63 
64 #define VS1053_SCI_READ 0x03
65 #define VS1053_SCI_WRITE 0x02
66 
67 #define VS1053_REG_MODE 0x00
68 #define VS1053_REG_STATUS 0x01
69 #define VS1053_REG_BASS 0x02
70 #define VS1053_REG_CLOCKF 0x03
71 #define VS1053_REG_DECODETIME 0x04
72 #define VS1053_REG_AUDATA 0x05
73 #define VS1053_REG_WRAM 0x06
74 #define VS1053_REG_WRAMADDR 0x07
75 #define VS1053_REG_HDAT0 0x08
76 #define VS1053_REG_HDAT1 0x09
77 #define VS1053_REG_VOLUME 0x0B
78 
79 #define VS1053_GPIO_DDR 0xC017
80 #define VS1053_GPIO_IDATA 0xC018
81 #define VS1053_GPIO_ODATA 0xC019
82 
83 #define VS1053_INT_ENABLE 0xC01A
84 
85 #define VS1053_MODE_SM_DIFF \
86  0x0001
87 #define VS1053_MODE_SM_LAYER12 0x0002
88 #define VS1053_MODE_SM_RESET 0x0004
89 #define VS1053_MODE_SM_CANCEL 0x0008
90 #define VS1053_MODE_SM_EARSPKLO 0x0010
91 #define VS1053_MODE_SM_TESTS 0x0020
92 #define VS1053_MODE_SM_STREAM 0x0040
93 #define VS1053_MODE_SM_SDINEW 0x0800
94 #define VS1053_MODE_SM_ADPCM 0x1000
95 #define VS1053_MODE_SM_LINE1 0x4000
96 #define VS1053_MODE_SM_CLKRANGE \
97  0x8000
98 
99 #define VS1053_SCI_AIADDR \
100  0x0A
101 #define VS1053_SCI_AICTRL0 \
103  0x0C
104 #define VS1053_SCI_AICTRL1 \
105  0x0D
106 #define VS1053_SCI_AICTRL2 \
107  0x0E
108 #define VS1053_SCI_AICTRL3 \
109  0x0F
110 #define VS1053_SCI_WRAM 0x06
111 #define VS1053_SCI_WRAMADDR 0x07
112 
113 #define VS1053_PARA_PLAYSPEED 0x1E04
114 
115 #define VS1053_DATABUFFERLEN 32
116 
117 
121 public:
132  Adafruit_VS1053(int8_t mosi, int8_t miso, int8_t clk, int8_t rst, int8_t cs,
133  int8_t dcs, int8_t dreq);
141  Adafruit_VS1053(int8_t rst, int8_t cs, int8_t dcs, int8_t dreq);
146  uint8_t begin(void);
150  void reset(void);
154  void softReset(void);
160  uint16_t sciRead(uint8_t addr);
166  void sciWrite(uint8_t addr, uint16_t data);
172  void sineTest(uint8_t n, uint16_t ms);
177  uint16_t decodeTime(void);
183  void setVolume(uint8_t left, uint8_t right);
187  void dumpRegs(void);
188 
194  void playData(uint8_t *buffer, uint8_t buffsiz);
199  boolean readyForData(void);
205  void applyPatch(const uint16_t *patch, uint16_t patchsize);
212  uint16_t loadPlugin(char *fn);
213 
219  void GPIO_digitalWrite(uint8_t i, uint8_t val);
224  void GPIO_digitalWrite(uint8_t i);
229  uint16_t GPIO_digitalRead(void);
235  boolean GPIO_digitalRead(uint8_t i);
241  void GPIO_pinMode(uint8_t i, uint8_t dir);
242 
248  boolean prepareRecordOgg(char *plugin);
253  void startRecordOgg(boolean mic);
257  void stopRecordOgg(void);
262  uint16_t recordedWordsWaiting(void);
267  uint16_t recordedReadWord(void);
268 
270 
272 #ifdef ARDUINO_ARCH_SAMD
273 protected:
274  uint32_t _dreq;
275  boolean usingInterrupts = false;
276 
277 private:
278  Adafruit_SPIDevice *spi_dev_ctrl = NULL;
279  Adafruit_SPIDevice *spi_dev_data = NULL;
280  int32_t _mosi, _miso, _clk, _reset, _cs, _dcs;
281  boolean useHardwareSPI;
282 #else
283 protected:
284  uint8_t _dreq;
285  boolean usingInterrupts = false;
286 
287 private:
288  Adafruit_SPIDevice *spi_dev_ctrl = NULL;
289  Adafruit_SPIDevice *spi_dev_data = NULL;
290  int8_t _mosi, _miso, _clk, _reset, _cs, _dcs;
291  boolean useHardwareSPI;
292 #endif
293 };
294 
299 public:
312  Adafruit_VS1053_FilePlayer(int8_t mosi, int8_t miso, int8_t clk, int8_t rst,
313  int8_t cs, int8_t dcs, int8_t dreq, int8_t cardCS);
323  Adafruit_VS1053_FilePlayer(int8_t rst, int8_t cs, int8_t dcs, int8_t dreq,
324  int8_t cardCS);
325 
334  Adafruit_VS1053_FilePlayer(int8_t cs, int8_t dcs, int8_t dreq, int8_t cardCS);
335 
340  boolean begin(void);
347  boolean useInterrupt(uint8_t type);
349  volatile boolean playingMusic;
350 
354  void feedBuffer(void);
360  static boolean isMP3File(const char *fileName);
366  unsigned long mp3_ID3Jumper(File mp3);
373  boolean startPlayingFile(const char *trackname);
380  boolean playFullFile(const char *trackname);
381  void stopPlaying(void);
382 
386  boolean paused(void);
391  boolean stopped(void);
396  void pausePlaying(boolean pause);
403  void playbackLoop(boolean loopState);
408  boolean playbackLooped();
413  uint16_t getPlaySpeed();
418  void setPlaySpeed(uint16_t speed);
419 
420 private:
421  void feedBuffer_noLock(void);
422 
423  uint8_t _cardCS;
424 };
425 
426 #endif // ADAFRUIT_VS1053_H
uint16_t recordedWordsWaiting(void)
Returns the number of words recorded.
Definition: Adafruit_VS1053.cpp:564
File player for the Adafruit VS1053.
Definition: Adafruit_VS1053.h:298
File currentTrack
File that is currently playing.
Definition: Adafruit_VS1053.h:348
void stopRecordOgg(void)
Stop the recording.
Definition: Adafruit_VS1053.cpp:601
void GPIO_digitalWrite(uint8_t i, uint8_t val)
Write to a GPIO pin.
Definition: Adafruit_VS1053.cpp:647
uint16_t decodeTime(void)
Reads the DECODETIME register from the chip.
Definition: Adafruit_VS1053.cpp:494
void sineTest(uint8_t n, uint16_t ms)
Generate a sine-wave test signal.
Definition: Adafruit_VS1053.cpp:691
void softReset(void)
Attempts a soft reset of the chip.
Definition: Adafruit_VS1053.cpp:502
boolean readyForData(void)
Test if ready for more data.
Definition: Adafruit_VS1053.cpp:473
volatile RwReg PortReg
Definition: Adafruit_VS1053.h:56
uint16_t loadPlugin(char *fn)
Load the specified plug-in.
Definition: Adafruit_VS1053.cpp:415
uint16_t GPIO_digitalRead(void)
Read all 8 GPIO pins at once.
Definition: Adafruit_VS1053.cpp:663
void reset(void)
Performs a hard reset of the chip.
Definition: Adafruit_VS1053.cpp:507
uint8_t begin(void)
Initialize communication and (hard) reset the chip.
Definition: Adafruit_VS1053.cpp:526
Definition: Adafruit_VS1053.h:120
uint8_t mp3buffer[VS1053_DATABUFFERLEN]
Definition: Adafruit_VS1053.h:269
uint8_t PortMask
Definition: Adafruit_VS1053.h:52
void sciWrite(uint8_t addr, uint16_t data)
Writes to the specified register on the chip.
Definition: Adafruit_VS1053.cpp:685
#define VS1053_DATABUFFERLEN
Length of the data buffer.
Definition: Adafruit_VS1053.h:115
void setVolume(uint8_t left, uint8_t right)
Set the output volume for the chip.
Definition: Adafruit_VS1053.cpp:479
boolean prepareRecordOgg(char *plugin)
Initialize chip for OGG recording.
Definition: Adafruit_VS1053.cpp:572
Adafruit_VS1053(int8_t mosi, int8_t miso, int8_t clk, int8_t rst, int8_t cs, int8_t dcs, int8_t dreq)
Software SPI constructor - must specify all pins.
Definition: Adafruit_VS1053.cpp:360
uint16_t sciRead(uint8_t addr)
Reads from the specified register on the chip.
Definition: Adafruit_VS1053.cpp:679
void dumpRegs(void)
Prints the contents of the MODE, STATUS, CLOCKF and VOLUME registers.
Definition: Adafruit_VS1053.cpp:553
uint8_t _dreq
Data request pin.
Definition: Adafruit_VS1053.h:284
void applyPatch(const uint16_t *patch, uint16_t patchsize)
Apply a code patch.
Definition: Adafruit_VS1053.cpp:386
uint16_t recordedReadWord(void)
Reads the next word from the buffer of recorded words.
Definition: Adafruit_VS1053.cpp:568
void playData(uint8_t *buffer, uint8_t buffsiz)
Decode and play the contents of the supplied buffer.
Definition: Adafruit_VS1053.cpp:475
void startRecordOgg(boolean mic)
Start recording.
Definition: Adafruit_VS1053.cpp:603
volatile uint8_t RwReg
1-byte read-write register
Definition: Adafruit_VS1053.h:51
void GPIO_pinMode(uint8_t i, uint8_t dir)
Set the Pin Mode (INPUT/OUTPUT) for a GPIO pin.
Definition: Adafruit_VS1053.cpp:626
boolean usingInterrupts
True if using interrupts.
Definition: Adafruit_VS1053.h:285
volatile boolean playingMusic
Whether or not music is playing.
Definition: Adafruit_VS1053.h:349