-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Showing
17 changed files
with
11,418 additions
and
0 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,163 @@ | ||
/*************************************************** | ||
This is a library for the Adafruit VS1053 Codec Breakout | ||
Designed specifically to work with the Adafruit VS1053 Codec Breakout | ||
----> https://www.adafruit.com/products/1381 | ||
Adafruit invests time and resources providing this open source code, | ||
please support Adafruit and open-source hardware by purchasing | ||
products from Adafruit! | ||
Written by Limor Fried/Ladyada for Adafruit Industries. | ||
BSD license, all text above must be included in any redistribution | ||
****************************************************/ | ||
#ifndef ADAFRUIT_VS1053_H | ||
#define ADAFRUIT_VS1053_H | ||
|
||
#if (ARDUINO >= 100) | ||
#include <Arduino.h> | ||
#else | ||
#include <WProgram.h> | ||
#include <pins_arduino.h> | ||
#endif | ||
|
||
#include "pins_arduino.h" | ||
#include "wiring_private.h" | ||
#include <SPI.h> | ||
#include <SD.h> | ||
|
||
#ifdef __SAM3X8E__ | ||
typedef volatile RwReg PortReg; | ||
typedef uint32_t PortMask; | ||
#else | ||
typedef volatile uint8_t PortReg; | ||
typedef uint8_t PortMask; | ||
#endif | ||
|
||
|
||
#define VS1053_FILEPLAYER_TIMER0_INT 255 // allows useInterrupt to accept pins 0 to 254 | ||
#define VS1053_FILEPLAYER_PIN_INT 5 | ||
|
||
#define VS1053_SCI_READ 0x03 | ||
#define VS1053_SCI_WRITE 0x02 | ||
|
||
#define VS1053_REG_MODE 0x00 | ||
#define VS1053_REG_STATUS 0x01 | ||
#define VS1053_REG_BASS 0x02 | ||
#define VS1053_REG_CLOCKF 0x03 | ||
#define VS1053_REG_DECODETIME 0x04 | ||
#define VS1053_REG_AUDATA 0x05 | ||
#define VS1053_REG_WRAM 0x06 | ||
#define VS1053_REG_WRAMADDR 0x07 | ||
#define VS1053_REG_HDAT0 0x08 | ||
#define VS1053_REG_HDAT1 0x09 | ||
#define VS1053_REG_VOLUME 0x0B | ||
|
||
#define VS1053_GPIO_DDR 0xC017 | ||
#define VS1053_GPIO_IDATA 0xC018 | ||
#define VS1053_GPIO_ODATA 0xC019 | ||
|
||
#define VS1053_INT_ENABLE 0xC01A | ||
|
||
#define VS1053_MODE_SM_DIFF 0x0001 | ||
#define VS1053_MODE_SM_LAYER12 0x0002 | ||
#define VS1053_MODE_SM_RESET 0x0004 | ||
#define VS1053_MODE_SM_CANCEL 0x0008 | ||
#define VS1053_MODE_SM_EARSPKLO 0x0010 | ||
#define VS1053_MODE_SM_TESTS 0x0020 | ||
#define VS1053_MODE_SM_STREAM 0x0040 | ||
#define VS1053_MODE_SM_SDINEW 0x0800 | ||
#define VS1053_MODE_SM_ADPCM 0x1000 | ||
#define VS1053_MODE_SM_LINE1 0x4000 | ||
#define VS1053_MODE_SM_CLKRANGE 0x8000 | ||
|
||
|
||
#define VS1053_SCI_AIADDR 0x0A | ||
#define VS1053_SCI_AICTRL0 0x0C | ||
#define VS1053_SCI_AICTRL1 0x0D | ||
#define VS1053_SCI_AICTRL2 0x0E | ||
#define VS1053_SCI_AICTRL3 0x0F | ||
|
||
#define VS1053_DATABUFFERLEN 32 | ||
|
||
|
||
class Adafruit_VS1053 { | ||
public: | ||
Adafruit_VS1053(int8_t mosi, int8_t miso, int8_t clk, | ||
int8_t rst, int8_t cs, int8_t dcs, int8_t dreq); | ||
Adafruit_VS1053(int8_t rst, int8_t cs, int8_t dcs, int8_t dreq); | ||
uint8_t begin(void); | ||
void reset(void); | ||
void softReset(void); | ||
uint16_t sciRead(uint8_t addr); | ||
void sciWrite(uint8_t addr, uint16_t data); | ||
void sineTest(uint8_t n, uint16_t ms); | ||
void spiwrite(uint8_t d); | ||
uint8_t spiread(void); | ||
|
||
uint16_t decodeTime(void); | ||
void setVolume(uint8_t left, uint8_t right); | ||
void dumpRegs(void); | ||
|
||
void playData(uint8_t *buffer, uint8_t buffsiz); | ||
boolean readyForData(void); | ||
void applyPatch(const uint16_t *patch, uint16_t patchsize); | ||
uint16_t loadPlugin(char *fn); | ||
|
||
void GPIO_digitalWrite(uint8_t i, uint8_t val); | ||
void GPIO_digitalWrite(uint8_t i); | ||
uint16_t GPIO_digitalRead(void); | ||
boolean GPIO_digitalRead(uint8_t i); | ||
void GPIO_pinMode(uint8_t i, uint8_t dir); | ||
|
||
boolean prepareRecordOgg(char *plugin); | ||
void startRecordOgg(boolean mic); | ||
void stopRecordOgg(void); | ||
uint16_t recordedWordsWaiting(void); | ||
uint16_t recordedReadWord(void); | ||
|
||
uint8_t mp3buffer[VS1053_DATABUFFERLEN]; | ||
|
||
#ifdef ARDUINO_ARCH_SAMD | ||
protected: | ||
uint32_t _dreq; | ||
private: | ||
int32_t _mosi, _miso, _clk, _reset, _cs, _dcs; | ||
boolean useHardwareSPI; | ||
#else | ||
protected: | ||
uint8_t _dreq; | ||
private: | ||
int8_t _mosi, _miso, _clk, _reset, _cs, _dcs; | ||
boolean useHardwareSPI; | ||
#endif | ||
}; | ||
|
||
|
||
class Adafruit_VS1053_FilePlayer : public Adafruit_VS1053 { | ||
public: | ||
Adafruit_VS1053_FilePlayer (int8_t mosi, int8_t miso, int8_t clk, | ||
int8_t rst, int8_t cs, int8_t dcs, int8_t dreq, | ||
int8_t cardCS); | ||
Adafruit_VS1053_FilePlayer (int8_t rst, int8_t cs, int8_t dcs, int8_t dreq, | ||
int8_t cardCS); | ||
Adafruit_VS1053_FilePlayer (int8_t cs, int8_t dcs, int8_t dreq, | ||
int8_t cardCS); | ||
|
||
boolean begin(void); | ||
boolean useInterrupt(uint8_t type); | ||
File currentTrack; | ||
volatile boolean playingMusic; | ||
void feedBuffer(void); | ||
boolean startPlayingFile(const char *trackname); | ||
boolean playFullFile(const char *trackname); | ||
void stopPlaying(void); | ||
boolean paused(void); | ||
boolean stopped(void); | ||
void pausePlaying(boolean pause); | ||
|
||
private: | ||
uint8_t _cardCS; | ||
}; | ||
|
||
#endif // ADAFRUIT_VS1053_H |
Oops, something went wrong.