gg

Dependencies:   mbed SDFileSystem

Committer:
Priunsh_N
Date:
Mon Oct 31 17:12:17 2016 +0000
Revision:
0:1d6e44094672
gg

Who changed what in which revision?

UserRevisionLine numberNew 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