Library for VLSI VS1053b - Ogg Vorbis / MP3 / AAC / WMA / FLAC / MIDI Audio Codec Chip for a complete sample see Lib_VS1053b
Dependents: Lab3_1 RTOS-VS1053b-mp3_semaphore RTOS-VS1053b-mp3_v01
Diff: VS1053.h
- Revision:
- 1:ced2c297cc1b
- Parent:
- 0:7728d9c6c487
- Child:
- 2:5bab956cb59e
--- a/VS1053.h Tue Dec 14 18:22:54 2010 +0000 +++ b/VS1053.h Thu Dec 16 21:54:03 2010 +0000 @@ -1,44 +1,61 @@ +/* mbed VLSI VS1053b library + * Copyright (c) 2010 Christian Schmiljun + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +/* This code based on: + * mbeduino_MP3_Shield_MP3Player + * http://mbed.org/users/xshige/programs/mbeduino_MP3_Shield_MP3Player/lgcx63 + * 2010-10-16 + */ + #ifndef VS1053_H #define VS1053_H + // ---------------------------------------------------------------------------- // Extended settings // ---------------------------------------------------------------------------- +// Enable debug output (Output -> printf ...) +// -------------------------------------------------------------------------- +#define DEBUG // Patches, Addons // -------------------------------------------------------------------------- - -#define VS_PATCH -//#define VS_SPECANA - -// Version //#define VS1053_PATCH_1_4_FLAC -#define VS1053_PATCH_1_5 -//#define VS1053_PATCH_1_5_FLAC - +//#define VS1053_PATCH_1_5 +#define VS1053_PATCH_1_5_FLAC +//#define VS1053_SPECANA +//#define VS1053B_PCM_RECORDER_0_9 // ---------------------------------------------------------------------------- - - -#if defined(VS_PATCH) && defined(VS_SPECANA) -#error "Exclusive use! Use VS_PATCH or VS_SPECANA, not both." +#if defined(VS1053_PATCH_1_4_FLAC) && defined(VS1053_PATCH_1_5) && defined(VS1053_PATCH_1_5_FLAC) && defined(VS1053_SPECANA) && defined(VS1053B_PCM_RECORDER_0_9) +#error "VS1053: Exclusive use of patch and app versions." +#endif +#if defined(VS1053_PATCH_1_4_FLAC) || defined(VS1053_PATCH_1_5) || defined(VS1053_PATCH_1_5_FLAC) || defined(VS1053_SPECANA) || defined(VS1053B_PCM_RECORDER_0_9) +#define VS_PATCH #endif -#ifdef VS_PATCH -#if defined(VS1053_PATCH_1_4_FLAC) && defined(VS1053_PATCH_1_5) && defined(VS1053_PATCH_1_5_FLAC) -#error "Exclusive use of patch versions." -#endif -#if defined(VS1053_PATCH_1_4_FLAC) || defined(VS1053_PATCH_1_5) || defined(VS1053_PATCH_1_5_FLAC) -#else -#error "Select patch versions." -#endif -#endif +#include "mbed.h" - - -#include "mbed.h" -//#include "SDFileSystem.h" -#include "string" -#include "string.h" +#define DEFAULT_BALANCE_DIFERENCE_LEFT_RIGHT 0.0f +#define DEFAULT_VOLUME -40.0f // SCI register address assignment #define SCI_MODE 0x0 @@ -107,19 +124,72 @@ #define para_resync 0x1E29 +/** Class for VS1053 - Ogg Vorbis / MP3 / AAC / WMA / FLAC / MIDI Audio Codec Chip + * + * + */ class VS1053 { public: + /** Create a vs1053b object. + * + * @param mosi SPI Master Out, Slave In pin to vs1053b + * @param miso SPI Master In, Slave Out pin to vs1053b + * @param sck SPI Clock pin to vs1053b + * @param cs Pin to vs1053b control chip select + * @param rst Pin to vs1053b reset + * @param dreq Pin to vs1053b data request + * @param dcs Pin to vs1053b data chip select + */ VS1053( - PinName _mosi, - PinName _miso, - PinName _sck, - PinName _cs, - PinName _rst, - PinName _dreq, - PinName _dcs + PinName mosi, + PinName miso, + PinName sck, + PinName cs, + PinName rst, + PinName dreq, + PinName dcs ); + /** Reset the vs1053b. (hardware reset) + * + */ + void reset(void); + + void power_down(void); + + /** Write data stream to vs1053b + * + * @param data Data to be sent to vs1053b + * @param length Length of data + */ + void writeStream(unsigned char* data, unsigned int length); + +#if 0 + void putcStream(unsigned char); +#endif + //void stop(void); + void terminateStream(void); + + /** Initialize the vs1053b device + * + * @return + */ + bool initialize(void); + + void setVolume(float); + float getVolume(); + + void setBalance(float); + float getBalance(); + + + void setPlaySpeed(unsigned short speed); + +protected: + unsigned short int wram_read(unsigned short int); + void wram_write(unsigned short int, unsigned short int); + void write_plugin(const unsigned short* , unsigned int); void cs_low(void); void cs_high(void); void dcs_low(void); @@ -129,10 +199,9 @@ void sdi_en(void); void sdi_dis(void); - void sci_initialise(void); + void spi_initialise(void); + void sdi_initialise(void); - void reset(void); - void power_down(void); void sci_write(unsigned char, unsigned short int); void sdi_write(unsigned char); @@ -140,26 +209,18 @@ void sine_test_activate(unsigned char); void sine_test_deactivate(void); - void writeStream(unsigned char *, int); -#if 0 - void putcStream(unsigned char); -#endif - void terminateStream(void); - void initialize(void); - void setVolume(unsigned short int); - + void changeVolume(void); + + SPI _spi; + DigitalOut _CS; + DigitalOut _DCS; DigitalIn _DREQ; DigitalOut _RST; - -protected: - unsigned short int wram_read(unsigned short int); - void wram_write(unsigned short int, unsigned short int); - void write_plugin(const unsigned short *, unsigned int); - SPI _spi; - DigitalOut _CS; - DigitalOut _DCS; - int firstTime; + + // variables to save volume, values in db + float _balance; + float _volume; }; #endif