OSDN Git Service

Changed the VS1011E module interface.
authorShinichiro Nakamura <shinta.main.jp@gmail.com>
Sat, 14 Jul 2012 23:22:13 +0000 (08:22 +0900)
committerShinichiro Nakamura <shinta.main.jp@gmail.com>
Sat, 14 Jul 2012 23:22:13 +0000 (08:22 +0900)
firm/sample/sample1/bootload/vs1011e.c
firm/sample/sample1/bootload/vs1011e.h
firm/sample/sample1/os/task_audio.c
firm/sample/sample1/os/vs1011e.c
firm/sample/sample1/os/vs1011e.h

index 3468d9b..0b1a743 100644 (file)
@@ -183,28 +183,28 @@ void vs1011e_volume_write(const uint8 left, const uint8 right)
     vs1011e_write(REGADDR_VOL, val);
 }
 
-void vs1011e_play(int8(*func) (uint8 * buf, const uint16 len))
+void vs1011e_play(
+        void *buf, int siz,
+        int (*readfunc)(void * buf, const int len))
 {
-#define UNITBYTE    (128)
-    uint8 i;
-    uint8 buf[UNITBYTE];
+    int i;
     while (1) {
         /*
          * Read the song data.
          */
-        int8 len = func(buf, UNITBYTE);
-        if (len <= 0) {
+        int n = readfunc(buf, siz);
+        if (n <= 0) {
             return;
         }
         /*
          * Send the data.
          */
-        for (i = 0; i < UNITBYTE; i++) {
+        spi_select(SpiTarget_VS1011E_DATA);
+        for (i = 0; i < n; i++) {
             while (VS1011E_CHK_DREQ()) { }
-            spi_select(SpiTarget_VS1011E_DATA);
-            spi_tx(*(buf + i));
-            spi_deselect();
+            spi_tx(*((char *)buf + i));
         }
+        spi_deselect();
     }
 }
 
index 17138d9..7380b5d 100644 (file)
@@ -11,7 +11,9 @@ void vs1011e_set_enhancer(uint8 st_amp, uint8 st_freq, uint8 sb_amp, uint8 sb_fr
 void vs1011e_get_enhancer(uint8 * st_amp, uint8 * st_freq, uint8 * sb_amp, uint8 * sb_freq);
 void vs1011e_volume_read(uint8 * left, uint8 * right);
 void vs1011e_volume_write(const uint8 left, const uint8 right);
-void vs1011e_play(int8(*func) (uint8 * buf, const uint16 len));
+void vs1011e_play(
+        void *buf, int siz,
+        int (*readfunc)(void * buf, const int len));
 void vs1011e_decodetime_read(uint16 * sec);
 void vs1011e_decodetime_write(const uint16 sec);
 void vs1011e_register_print(void);
index b6408bb..f6ba2b0 100644 (file)
@@ -32,7 +32,7 @@ static int audio_cmdproc(char *p)
   return 0;
 }
 
-int8 readfunc(uint8 * buf, const uint16 len)
+int readfunc(void * buf, const int len)
 {
     WORD cnt;
     pf_read(buf, len, &cnt);
@@ -45,7 +45,10 @@ static int play(const char *filename)
     if (r != FR_OK) {
         return 1;
     }
-    vs1011e_play(readfunc);
+    int siz = 512;
+    void *p = kz_kmalloc(siz);
+    vs1011e_play(p, siz, readfunc);
+    kz_kmfree(p);
     return 0;
 }
 
@@ -54,7 +57,7 @@ int task_audio(int argc, char *argv[])
   int size;
   char *p;
 
-#if 0
+#if 1
   FATFS fatfs;
   DIR dir;
   FILINFO filinfo;
index 3468d9b..0b1a743 100644 (file)
@@ -183,28 +183,28 @@ void vs1011e_volume_write(const uint8 left, const uint8 right)
     vs1011e_write(REGADDR_VOL, val);
 }
 
-void vs1011e_play(int8(*func) (uint8 * buf, const uint16 len))
+void vs1011e_play(
+        void *buf, int siz,
+        int (*readfunc)(void * buf, const int len))
 {
-#define UNITBYTE    (128)
-    uint8 i;
-    uint8 buf[UNITBYTE];
+    int i;
     while (1) {
         /*
          * Read the song data.
          */
-        int8 len = func(buf, UNITBYTE);
-        if (len <= 0) {
+        int n = readfunc(buf, siz);
+        if (n <= 0) {
             return;
         }
         /*
          * Send the data.
          */
-        for (i = 0; i < UNITBYTE; i++) {
+        spi_select(SpiTarget_VS1011E_DATA);
+        for (i = 0; i < n; i++) {
             while (VS1011E_CHK_DREQ()) { }
-            spi_select(SpiTarget_VS1011E_DATA);
-            spi_tx(*(buf + i));
-            spi_deselect();
+            spi_tx(*((char *)buf + i));
         }
+        spi_deselect();
     }
 }
 
index 17138d9..7380b5d 100644 (file)
@@ -11,7 +11,9 @@ void vs1011e_set_enhancer(uint8 st_amp, uint8 st_freq, uint8 sb_amp, uint8 sb_fr
 void vs1011e_get_enhancer(uint8 * st_amp, uint8 * st_freq, uint8 * sb_amp, uint8 * sb_freq);
 void vs1011e_volume_read(uint8 * left, uint8 * right);
 void vs1011e_volume_write(const uint8 left, const uint8 right);
-void vs1011e_play(int8(*func) (uint8 * buf, const uint16 len));
+void vs1011e_play(
+        void *buf, int siz,
+        int (*readfunc)(void * buf, const int len));
 void vs1011e_decodetime_read(uint16 * sec);
 void vs1011e_decodetime_write(const uint16 sec);
 void vs1011e_register_print(void);