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) && !defined(ARDUINO_UNOR4_WIFI) && \
16  !defined(ARDUINO_UNOR4_MINIMA)
17 #include "pins_arduino.h"
18 #include "wiring_private.h"
19 #endif
20 
21 #include <Adafruit_SPIDevice.h>
22 
23 #if defined(PREFER_SDFAT_LIBRARY)
24 #include <SdFat.h>
25 extern SdFat SD;
26 #else
27 #include <SD.h>
28 #endif
29 
30 // define here the size of a register!
31 #if defined(ARDUINO_STM32_FEATHER)
32 typedef volatile uint32 RwReg;
33 typedef uint32_t PortMask;
34 #elif defined(ARDUINO_ARCH_AVR)
35 typedef volatile uint8_t RwReg;
36 typedef uint8_t PortMask;
37 #elif defined(__arm__)
38 #if defined(TEENSYDUINO)
39 typedef volatile uint8_t RwReg;
40 typedef uint8_t PortMask;
41 #else
42 typedef volatile uint32_t RwReg;
43 typedef uint32_t PortMask;
44 #endif
45 #elif defined(ESP8266) || defined(ESP32)
46 typedef volatile uint32_t RwReg;
47 typedef uint32_t PortMask;
48 #elif defined(__ARDUINO_ARC__)
49 typedef volatile uint32_t RwReg;
50 typedef uint32_t PortMask;
51 #else
52 typedef volatile uint8_t RwReg;
53 typedef uint8_t PortMask;
54 #endif
56 
57 typedef volatile RwReg PortReg;
58 
60 #define VS1053_FILEPLAYER_TIMER0_INT \
61  255
62 #define VS1053_FILEPLAYER_PIN_INT \
63  5
64 
65 #define VS1053_SCI_READ 0x03
66 #define VS1053_SCI_WRITE 0x02
67 
68 #define VS1053_REG_MODE 0x00
69 #define VS1053_REG_STATUS 0x01
70 #define VS1053_REG_BASS 0x02
71 #define VS1053_REG_CLOCKF 0x03
72 #define VS1053_REG_DECODETIME 0x04
73 #define VS1053_REG_AUDATA 0x05
74 #define VS1053_REG_WRAM 0x06
75 #define VS1053_REG_WRAMADDR 0x07
76 #define VS1053_REG_HDAT0 0x08
77 #define VS1053_REG_HDAT1 0x09
78 #define VS1053_REG_VOLUME 0x0B
79 
80 #define VS1053_GPIO_DDR 0xC017
81 #define VS1053_GPIO_IDATA 0xC018
82 #define VS1053_GPIO_ODATA 0xC019
83 
84 #define VS1053_INT_ENABLE 0xC01A
85 
86 #define VS1053_MODE_SM_DIFF \
87  0x0001
88 #define VS1053_MODE_SM_LAYER12 0x0002
89 #define VS1053_MODE_SM_RESET 0x0004
90 #define VS1053_MODE_SM_CANCEL 0x0008
91 #define VS1053_MODE_SM_EARSPKLO 0x0010
92 #define VS1053_MODE_SM_TESTS 0x0020
93 #define VS1053_MODE_SM_STREAM 0x0040
94 #define VS1053_MODE_SM_SDINEW 0x0800
95 #define VS1053_MODE_SM_ADPCM 0x1000
96 #define VS1053_MODE_SM_LINE1 0x4000
97 #define VS1053_MODE_SM_CLKRANGE \
98  0x8000
99 
100 #define VS1053_SCI_AIADDR \
101  0x0A
102 #define VS1053_SCI_AICTRL0 \
104  0x0C
105 #define VS1053_SCI_AICTRL1 \
106  0x0D
107 #define VS1053_SCI_AICTRL2 \
108  0x0E
109 #define VS1053_SCI_AICTRL3 \
110  0x0F
111 #define VS1053_SCI_WRAM 0x06
112 #define VS1053_SCI_WRAMADDR 0x07
113 
114 #define VS1053_PARA_PLAYSPEED 0x1E04
115 
116 #define VS1053_DATABUFFERLEN 32
117 
118 
122 public:
133  Adafruit_VS1053(int8_t mosi, int8_t miso, int8_t clk, int8_t rst, int8_t cs,
134  int8_t dcs, int8_t dreq);
142  Adafruit_VS1053(int8_t rst, int8_t cs, int8_t dcs, int8_t dreq);
147  uint8_t begin(void);
151  void reset(void);
155  void softReset(void);
161  uint16_t sciRead(uint8_t addr);
167  void sciWrite(uint8_t addr, uint16_t data);
173  void sineTest(uint8_t n, uint16_t ms);
178  uint16_t decodeTime(void);
184  void setVolume(uint8_t left, uint8_t right);
188  void dumpRegs(void);
189 
195  void playData(uint8_t *buffer, uint8_t buffsiz);
200  boolean readyForData(void);
206  void applyPatch(const uint16_t *patch, uint16_t patchsize);
213  uint16_t loadPlugin(char *fn);
214 
220  void GPIO_digitalWrite(uint8_t i, uint8_t val);
225  void GPIO_digitalWrite(uint8_t i);
230  uint16_t GPIO_digitalRead(void);
236  boolean GPIO_digitalRead(uint8_t i);
242  void GPIO_pinMode(uint8_t i, uint8_t dir);
243 
249  boolean prepareRecordOgg(char *plugin);
254  void startRecordOgg(boolean mic);
258  void stopRecordOgg(void);
263  uint16_t recordedWordsWaiting(void);
268  uint16_t recordedReadWord(void);
269 
271 
273 #ifdef ARDUINO_ARCH_SAMD
274 protected:
275  uint32_t _dreq;
276  boolean usingInterrupts = false;
277 
278 private:
279  Adafruit_SPIDevice *spi_dev_ctrl = NULL;
280  Adafruit_SPIDevice *spi_dev_data = NULL;
281  int32_t _mosi, _miso, _clk, _reset, _cs, _dcs;
282  boolean useHardwareSPI;
283 #else
284 protected:
285  uint8_t _dreq;
286  boolean usingInterrupts = false;
287 
288 private:
289  Adafruit_SPIDevice *spi_dev_ctrl = NULL;
290  Adafruit_SPIDevice *spi_dev_data = NULL;
291  int8_t _mosi, _miso, _clk, _reset, _cs, _dcs;
292  boolean useHardwareSPI;
293 #endif
294 };
295 
300 public:
313  Adafruit_VS1053_FilePlayer(int8_t mosi, int8_t miso, int8_t clk, int8_t rst,
314  int8_t cs, int8_t dcs, int8_t dreq, int8_t cardCS);
324  Adafruit_VS1053_FilePlayer(int8_t rst, int8_t cs, int8_t dcs, int8_t dreq,
325  int8_t cardCS);
326 
335  Adafruit_VS1053_FilePlayer(int8_t cs, int8_t dcs, int8_t dreq, int8_t cardCS);
336 
341  boolean begin(void);
348  boolean useInterrupt(uint8_t type);
350  volatile boolean playingMusic;
351 
355  void feedBuffer(void);
361  static boolean isMP3File(const char *fileName);
367  unsigned long mp3_ID3Jumper(File mp3);
374  boolean startPlayingFile(const char *trackname);
381  boolean playFullFile(const char *trackname);
382  void stopPlaying(void);
383 
387  boolean paused(void);
392  boolean stopped(void);
397  void pausePlaying(boolean pause);
404  void playbackLoop(boolean loopState);
409  boolean playbackLooped();
414  uint16_t getPlaySpeed();
419  void setPlaySpeed(uint16_t speed);
420 
421 private:
422  void feedBuffer_noLock(void);
423 
424  uint8_t _cardCS;
425 };
426 
427 #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:299
File currentTrack
File that is currently playing.
Definition: Adafruit_VS1053.h:349
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:57
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:121
uint8_t mp3buffer[VS1053_DATABUFFERLEN]
Definition: Adafruit_VS1053.h:270
uint8_t PortMask
Definition: Adafruit_VS1053.h:53
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:116
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:285
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:52
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:286
volatile boolean playingMusic
Whether or not music is playing.
Definition: Adafruit_VS1053.h:350