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

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