gg
Dependencies: mbed SDFileSystem
VS1053/VS1053.h@0:1d6e44094672, 2016-10-31 (annotated)
- Committer:
- Priunsh_N
- Date:
- Mon Oct 31 17:12:17 2016 +0000
- Revision:
- 0:1d6e44094672
gg
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Priunsh_N | 0:1d6e44094672 | 1 | /*************************************************** |
Priunsh_N | 0:1d6e44094672 | 2 | This is a library for the Adafruit VS1053 Codec Breakout |
Priunsh_N | 0:1d6e44094672 | 3 | |
Priunsh_N | 0:1d6e44094672 | 4 | Designed specifically to work with the Adafruit VS1053 Codec Breakout |
Priunsh_N | 0:1d6e44094672 | 5 | ----> https://www.adafruit.com/products/1381 |
Priunsh_N | 0:1d6e44094672 | 6 | |
Priunsh_N | 0:1d6e44094672 | 7 | Adafruit invests time and resources providing this open source code, |
Priunsh_N | 0:1d6e44094672 | 8 | please support Adafruit and open-source hardware by purchasing |
Priunsh_N | 0:1d6e44094672 | 9 | products from Adafruit! |
Priunsh_N | 0:1d6e44094672 | 10 | |
Priunsh_N | 0:1d6e44094672 | 11 | Written by Limor Fried/Ladyada for Adafruit Industries. |
Priunsh_N | 0:1d6e44094672 | 12 | BSD license, all text above must be included in any redistribution |
Priunsh_N | 0:1d6e44094672 | 13 | ****************************************************/ |
Priunsh_N | 0:1d6e44094672 | 14 | #ifndef ADAFRUIT_VS1053_H |
Priunsh_N | 0:1d6e44094672 | 15 | #define ADAFRUIT_VS1053_H |
Priunsh_N | 0:1d6e44094672 | 16 | |
Priunsh_N | 0:1d6e44094672 | 17 | |
Priunsh_N | 0:1d6e44094672 | 18 | #include "mbed.h" |
Priunsh_N | 0:1d6e44094672 | 19 | |
Priunsh_N | 0:1d6e44094672 | 20 | #ifdef __SAM3X8E__ |
Priunsh_N | 0:1d6e44094672 | 21 | typedef volatile RwReg PortReg; |
Priunsh_N | 0:1d6e44094672 | 22 | typedef uint32_t PortMask; |
Priunsh_N | 0:1d6e44094672 | 23 | #else |
Priunsh_N | 0:1d6e44094672 | 24 | typedef volatile uint8_t PortReg; |
Priunsh_N | 0:1d6e44094672 | 25 | typedef uint8_t PortMask; |
Priunsh_N | 0:1d6e44094672 | 26 | #endif |
Priunsh_N | 0:1d6e44094672 | 27 | |
Priunsh_N | 0:1d6e44094672 | 28 | |
Priunsh_N | 0:1d6e44094672 | 29 | #define VS1053_FILEPLAYER_TIMER0_INT 255 // allows useInterrupt to accept pins 0 to 254 |
Priunsh_N | 0:1d6e44094672 | 30 | #define VS1053_FILEPLAYER_PIN_INT 5 |
Priunsh_N | 0:1d6e44094672 | 31 | |
Priunsh_N | 0:1d6e44094672 | 32 | #define VS1053_SCI_READ 0x03 |
Priunsh_N | 0:1d6e44094672 | 33 | #define VS1053_SCI_WRITE 0x02 |
Priunsh_N | 0:1d6e44094672 | 34 | |
Priunsh_N | 0:1d6e44094672 | 35 | #define VS1053_REG_MODE 0x00 |
Priunsh_N | 0:1d6e44094672 | 36 | #define VS1053_REG_STATUS 0x01 |
Priunsh_N | 0:1d6e44094672 | 37 | #define VS1053_REG_BASS 0x02 |
Priunsh_N | 0:1d6e44094672 | 38 | #define VS1053_REG_CLOCKF 0x03 |
Priunsh_N | 0:1d6e44094672 | 39 | #define VS1053_REG_DECODETIME 0x04 |
Priunsh_N | 0:1d6e44094672 | 40 | #define VS1053_REG_AUDATA 0x05 |
Priunsh_N | 0:1d6e44094672 | 41 | #define VS1053_REG_WRAM 0x06 |
Priunsh_N | 0:1d6e44094672 | 42 | #define VS1053_REG_WRAMADDR 0x07 |
Priunsh_N | 0:1d6e44094672 | 43 | #define VS1053_REG_HDAT0 0x08 |
Priunsh_N | 0:1d6e44094672 | 44 | #define VS1053_REG_HDAT1 0x09 |
Priunsh_N | 0:1d6e44094672 | 45 | #define VS1053_REG_VOLUME 0x0B |
Priunsh_N | 0:1d6e44094672 | 46 | |
Priunsh_N | 0:1d6e44094672 | 47 | #define VS1053_GPIO_DDR 0xC017 |
Priunsh_N | 0:1d6e44094672 | 48 | #define VS1053_GPIO_IDATA 0xC018 |
Priunsh_N | 0:1d6e44094672 | 49 | #define VS1053_GPIO_ODATA 0xC019 |
Priunsh_N | 0:1d6e44094672 | 50 | |
Priunsh_N | 0:1d6e44094672 | 51 | #define VS1053_INT_ENABLE 0xC01A |
Priunsh_N | 0:1d6e44094672 | 52 | |
Priunsh_N | 0:1d6e44094672 | 53 | #define VS1053_MODE_SM_DIFF 0x0001 |
Priunsh_N | 0:1d6e44094672 | 54 | #define VS1053_MODE_SM_LAYER12 0x0002 |
Priunsh_N | 0:1d6e44094672 | 55 | #define VS1053_MODE_SM_RESET 0x0004 |
Priunsh_N | 0:1d6e44094672 | 56 | #define VS1053_MODE_SM_CANCEL 0x0008 |
Priunsh_N | 0:1d6e44094672 | 57 | #define VS1053_MODE_SM_EARSPKLO 0x0010 |
Priunsh_N | 0:1d6e44094672 | 58 | #define VS1053_MODE_SM_TESTS 0x0020 |
Priunsh_N | 0:1d6e44094672 | 59 | #define VS1053_MODE_SM_STREAM 0x0040 |
Priunsh_N | 0:1d6e44094672 | 60 | #define VS1053_MODE_SM_SDINEW 0x0800 |
Priunsh_N | 0:1d6e44094672 | 61 | #define VS1053_MODE_SM_ADPCM 0x1000 |
Priunsh_N | 0:1d6e44094672 | 62 | #define VS1053_MODE_SM_LINE1 0x4000 |
Priunsh_N | 0:1d6e44094672 | 63 | #define VS1053_MODE_SM_CLKRANGE 0x8000 |
Priunsh_N | 0:1d6e44094672 | 64 | |
Priunsh_N | 0:1d6e44094672 | 65 | |
Priunsh_N | 0:1d6e44094672 | 66 | #define VS1053_SCI_AIADDR 0x0A |
Priunsh_N | 0:1d6e44094672 | 67 | #define VS1053_SCI_AICTRL0 0x0C |
Priunsh_N | 0:1d6e44094672 | 68 | #define VS1053_SCI_AICTRL1 0x0D |
Priunsh_N | 0:1d6e44094672 | 69 | #define VS1053_SCI_AICTRL2 0x0E |
Priunsh_N | 0:1d6e44094672 | 70 | #define VS1053_SCI_AICTRL3 0x0F |
Priunsh_N | 0:1d6e44094672 | 71 | |
Priunsh_N | 0:1d6e44094672 | 72 | #define VS1053_DATABUFFERLEN 32 |
Priunsh_N | 0:1d6e44094672 | 73 | |
Priunsh_N | 0:1d6e44094672 | 74 | |
Priunsh_N | 0:1d6e44094672 | 75 | class Adafruit_VS1053 { |
Priunsh_N | 0:1d6e44094672 | 76 | public: |
Priunsh_N | 0:1d6e44094672 | 77 | Adafruit_VS1053(int8_t mosi, int8_t miso, int8_t clk, |
Priunsh_N | 0:1d6e44094672 | 78 | int8_t rst, int8_t cs, int8_t dcs, int8_t dreq); |
Priunsh_N | 0:1d6e44094672 | 79 | Adafruit_VS1053(int8_t rst, int8_t cs, int8_t dcs, int8_t dreq); |
Priunsh_N | 0:1d6e44094672 | 80 | uint8_t begin(void); |
Priunsh_N | 0:1d6e44094672 | 81 | void reset(void); |
Priunsh_N | 0:1d6e44094672 | 82 | void softReset(void); |
Priunsh_N | 0:1d6e44094672 | 83 | uint16_t sciRead(uint8_t addr); |
Priunsh_N | 0:1d6e44094672 | 84 | void sciWrite(uint8_t addr, uint16_t data); |
Priunsh_N | 0:1d6e44094672 | 85 | void sineTest(uint8_t n, uint16_t ms); |
Priunsh_N | 0:1d6e44094672 | 86 | void spiwrite(uint8_t d); |
Priunsh_N | 0:1d6e44094672 | 87 | uint8_t spiread(void); |
Priunsh_N | 0:1d6e44094672 | 88 | |
Priunsh_N | 0:1d6e44094672 | 89 | uint16_t decodeTime(void); |
Priunsh_N | 0:1d6e44094672 | 90 | void setVolume(uint8_t left, uint8_t right); |
Priunsh_N | 0:1d6e44094672 | 91 | void dumpRegs(void); |
Priunsh_N | 0:1d6e44094672 | 92 | |
Priunsh_N | 0:1d6e44094672 | 93 | void playData(uint8_t *buffer, uint8_t buffsiz); |
Priunsh_N | 0:1d6e44094672 | 94 | boolean readyForData(void); |
Priunsh_N | 0:1d6e44094672 | 95 | void applyPatch(const uint16_t *patch, uint16_t patchsize); |
Priunsh_N | 0:1d6e44094672 | 96 | uint16_t loadPlugin(char *fn); |
Priunsh_N | 0:1d6e44094672 | 97 | |
Priunsh_N | 0:1d6e44094672 | 98 | void GPIO_digitalWrite(uint8_t i, uint8_t val); |
Priunsh_N | 0:1d6e44094672 | 99 | void GPIO_digitalWrite(uint8_t i); |
Priunsh_N | 0:1d6e44094672 | 100 | uint16_t GPIO_digitalRead(void); |
Priunsh_N | 0:1d6e44094672 | 101 | boolean GPIO_digitalRead(uint8_t i); |
Priunsh_N | 0:1d6e44094672 | 102 | void GPIO_pinMode(uint8_t i, uint8_t dir); |
Priunsh_N | 0:1d6e44094672 | 103 | |
Priunsh_N | 0:1d6e44094672 | 104 | boolean prepareRecordOgg(char *plugin); |
Priunsh_N | 0:1d6e44094672 | 105 | void startRecordOgg(boolean mic); |
Priunsh_N | 0:1d6e44094672 | 106 | void stopRecordOgg(void); |
Priunsh_N | 0:1d6e44094672 | 107 | uint16_t recordedWordsWaiting(void); |
Priunsh_N | 0:1d6e44094672 | 108 | uint16_t recordedReadWord(void); |
Priunsh_N | 0:1d6e44094672 | 109 | |
Priunsh_N | 0:1d6e44094672 | 110 | uint8_t mp3buffer[VS1053_DATABUFFERLEN]; |
Priunsh_N | 0:1d6e44094672 | 111 | |
Priunsh_N | 0:1d6e44094672 | 112 | #ifdef ARDUINO_ARCH_SAMD |
Priunsh_N | 0:1d6e44094672 | 113 | protected: |
Priunsh_N | 0:1d6e44094672 | 114 | uint32_t _dreq; |
Priunsh_N | 0:1d6e44094672 | 115 | private: |
Priunsh_N | 0:1d6e44094672 | 116 | int32_t _mosi, _miso, _clk, _reset, _cs, _dcs; |
Priunsh_N | 0:1d6e44094672 | 117 | boolean useHardwareSPI; |
Priunsh_N | 0:1d6e44094672 | 118 | #else |
Priunsh_N | 0:1d6e44094672 | 119 | protected: |
Priunsh_N | 0:1d6e44094672 | 120 | uint8_t _dreq; |
Priunsh_N | 0:1d6e44094672 | 121 | private: |
Priunsh_N | 0:1d6e44094672 | 122 | int8_t _mosi, _miso, _clk, _reset, _cs, _dcs; |
Priunsh_N | 0:1d6e44094672 | 123 | boolean useHardwareSPI; |
Priunsh_N | 0:1d6e44094672 | 124 | #endif |
Priunsh_N | 0:1d6e44094672 | 125 | }; |
Priunsh_N | 0:1d6e44094672 | 126 | |
Priunsh_N | 0:1d6e44094672 | 127 | |
Priunsh_N | 0:1d6e44094672 | 128 | class Adafruit_VS1053_FilePlayer : public Adafruit_VS1053 { |
Priunsh_N | 0:1d6e44094672 | 129 | public: |
Priunsh_N | 0:1d6e44094672 | 130 | Adafruit_VS1053_FilePlayer (int8_t mosi, int8_t miso, int8_t clk, |
Priunsh_N | 0:1d6e44094672 | 131 | int8_t rst, int8_t cs, int8_t dcs, int8_t dreq, |
Priunsh_N | 0:1d6e44094672 | 132 | int8_t cardCS); |
Priunsh_N | 0:1d6e44094672 | 133 | Adafruit_VS1053_FilePlayer (int8_t rst, int8_t cs, int8_t dcs, int8_t dreq, |
Priunsh_N | 0:1d6e44094672 | 134 | int8_t cardCS); |
Priunsh_N | 0:1d6e44094672 | 135 | Adafruit_VS1053_FilePlayer (int8_t cs, int8_t dcs, int8_t dreq, |
Priunsh_N | 0:1d6e44094672 | 136 | int8_t cardCS); |
Priunsh_N | 0:1d6e44094672 | 137 | |
Priunsh_N | 0:1d6e44094672 | 138 | boolean begin(void); |
Priunsh_N | 0:1d6e44094672 | 139 | boolean useInterrupt(uint8_t type); |
Priunsh_N | 0:1d6e44094672 | 140 | File currentTrack; |
Priunsh_N | 0:1d6e44094672 | 141 | volatile boolean playingMusic; |
Priunsh_N | 0:1d6e44094672 | 142 | void feedBuffer(void); |
Priunsh_N | 0:1d6e44094672 | 143 | boolean startPlayingFile(const char *trackname); |
Priunsh_N | 0:1d6e44094672 | 144 | boolean playFullFile(const char *trackname); |
Priunsh_N | 0:1d6e44094672 | 145 | void stopPlaying(void); |
Priunsh_N | 0:1d6e44094672 | 146 | boolean paused(void); |
Priunsh_N | 0:1d6e44094672 | 147 | boolean stopped(void); |
Priunsh_N | 0:1d6e44094672 | 148 | void pausePlaying(boolean pause); |
Priunsh_N | 0:1d6e44094672 | 149 | |
Priunsh_N | 0:1d6e44094672 | 150 | private: |
Priunsh_N | 0:1d6e44094672 | 151 | uint8_t _cardCS; |
Priunsh_N | 0:1d6e44094672 | 152 | }; |
Priunsh_N | 0:1d6e44094672 | 153 | |
Priunsh_N | 0:1d6e44094672 | 154 | #endif // ADAFRUIT_VS1053_H |