Author: jaguarondi
Date: 2008-06-25 13:11:17 +0200 (Wed, 25 Jun 2008)
New Revision: 1266

Modified:
   firmware/fuxusb/branches/new_rf/src/fifo_mic.c
   firmware/fuxusb/branches/new_rf/src/fifo_mic.h
   firmware/fuxusb/branches/new_rf/src/fifo_spk.c
   firmware/fuxusb/branches/new_rf/src/fifo_spk.h
   firmware/fuxusb/branches/new_rf/src/spi_task.c
   firmware/fuxusb/branches/new_rf/src/usb_ep.c
   firmware/fuxusb/branches/new_rf/src/usb_ep.h
   firmware/fuxusb/branches/new_rf/src/usb_task.c
Log:
* Had some trouble to add the microphone. Now it works but the audio output is
  disturbed when recording. Some optimizations have to be done in the USB.


Modified: firmware/fuxusb/branches/new_rf/src/fifo_mic.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/fifo_mic.c      2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/fifo_mic.c      2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -28,6 +28,7 @@
 #include "config.h"
 #include "global.h"
 #include "fifo_mic.h"
+#include "lib_mcu\usb\usb_drv.h"
 
 /** \name Fifo's constants 
  * @{ */
@@ -89,6 +90,16 @@
         Mic_buf[FifoIn_MIC_Idx++ & (MIC_BUF_SIZE-1)] = \
                     p[n-i];
     } while (-- i);
+/*void FIFO_MIC_put_n(uint8_t *p, uint8_t n)*/
+/*{ */
+    /*uint8_t i=0;*/
+    /*do*/
+    /*{*/
+        /*if ((FifoIn_MIC_Idx - FifoOut_MIC_Idx) == MIC_BUF_SIZE)*/
+        /*return;*/
+
+        /*Mic_buf[FifoIn_MIC_Idx++ & (MIC_BUF_SIZE-1)] = p[i++];*/
+    /*} while (--n);*/
 }
 
 /**
@@ -96,11 +107,18 @@
  * \param Data : The data to push.
  * \ingroup fifo_mic
  */
-uint8_t FIFO_MIC_get (void)
+void FIFO_MIC_get (void)
 {
-    /* Fifo empty */
-    if (FifoOut_MIC_Idx == FifoIn_MIC_Idx)
-        return 0x80;
-
-    return Mic_buf[FifoOut_MIC_Idx++ & (MIC_BUF_SIZE - 1)];
+    uint8_t i = 8;
+    do {
+        if (FifoOut_MIC_Idx == FifoIn_MIC_Idx)
+        {
+            Usb_write_byte(0x80);
+        }
+        else
+        {
+            Usb_write_byte(Mic_buf[FifoOut_MIC_Idx++ & (MIC_BUF_SIZE - 1)]);
+        }
+        i--;
+    } while(i);
 }

Modified: firmware/fuxusb/branches/new_rf/src/fifo_mic.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/fifo_mic.h      2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/fifo_mic.h      2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -31,6 +31,6 @@
 extern void FIFO_MIC_init (void);
 extern bit FIFO_MIC_ready(void);
 extern void FIFO_MIC_put_n(uint8_t *p, uint8_t const n);
-extern uint8_t FIFO_MIC_get (void);
+extern void FIFO_MIC_get (void);
 
 #endif /*_FIFO_MIC_H_*/

Modified: firmware/fuxusb/branches/new_rf/src/fifo_spk.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/fifo_spk.c      2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/fifo_spk.c      2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -94,11 +94,11 @@
  * \return The popped byte.
  * \ingroup fifo_spk
  */
-uint8_t FIFO_SPK_get(void)
+void FIFO_SPK_get_n(uint8_t *p, uint8_t n)
 {
-    /* Fifo empty */
-    if (FifoOut_SPK_Idx == FifoIn_SPK_Idx)
-        return 0x80;
-
-    return Spk_buf[FifoOut_SPK_Idx++ & (SPK_BUF_SIZE - 1)];
+    uint8_t i;
+    for (i=0; i<n; i++)
+    {
+        p[i] = Spk_buf[FifoOut_SPK_Idx++ & (SPK_BUF_SIZE - 1)];
+    }
 }

Modified: firmware/fuxusb/branches/new_rf/src/fifo_spk.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/fifo_spk.h      2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/fifo_spk.h      2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -32,6 +32,6 @@
 extern void FIFO_SPK_init (void);
 extern uint8_t FIFO_SPK_length(void);
 extern void FIFO_SPK_put_n (uint8_t const n); 
-extern uint8_t FIFO_SPK_get (void);
+extern void FIFO_SPK_get_n (uint8_t *, uint8_t);
 
 #endif /* _FIFO_SPK_H_*/

Modified: firmware/fuxusb/branches/new_rf/src/spi_task.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/spi_task.c      2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/spi_task.c      2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -76,8 +76,8 @@
  * @{ */
 /** Size of the audio data in the SPI frame */
 // XXX Double frame
-//#define AUDIO_SIZE 34
-#define AUDIO_SIZE 17
+#define AUDIO_SPK_SIZE 34
+#define AUDIO_MIC_SIZE 17
 
 /* Bits of the config byte */
 #define _BV(x) (1<<x)
@@ -92,7 +92,6 @@
 #define SPI_CONFIG_OFFSET 1
 #define SPI_DATA_OFFSET 3
 #define SPI_AUDIO_OFFSET (SPI_DATA_OFFSET + CMD_SIZE)
-#define SPI_PREVAUDIO_OFFSET (SPI_AUDIO_OFFSET + AUDIO_SIZE)
 /*! @} */
 
 static uint8_t spi_in[SPI_SIZE], spi_out[SPI_SIZE], spi_idx;
@@ -241,30 +240,16 @@
                 spi_out[i+SPI_DATA_OFFSET] = command_received[i];
             }
         }
-        if (FIFO_SPK_length() >= 34)//AUDIO_SIZE)
+        if (FIFO_SPK_length() >= AUDIO_SPK_SIZE)
         {
             config |= CFG_AUDIO_MK;
-            //for (i=0; i<AUDIO_SIZE; i++)
-            for (i=0; i<34; i++)
-            {
-                //static uint8_t cnt = 0;
-                //static bit dir = 1;
-                spi_out[i+SPI_AUDIO_OFFSET] = FIFO_SPK_get();
-                //spi_out[i+SPI_AUDIO_OFFSET] = cnt;
-                //if (dir)
-                    //cnt++;
-                //else
-                    //cnt--;
-                //if ((cnt == 0xFF) || (cnt == 0))
-                    //dir = !dir;
-            }
+            FIFO_SPK_get_n(&spi_out[SPI_AUDIO_OFFSET], AUDIO_SPK_SIZE);
         }
 
 
         /* Store the frame index and the config byte. */
         spi_out[SPI_IDX_OFFSET] = idx_out++;
         spi_out[SPI_CONFIG_OFFSET] = config;
-        spi_out[2] = 0x81; //XXX debug
 
         /* XXX debug */
         /*for (i=0; i<SPI_SIZE; i++)*/
@@ -290,19 +275,9 @@
                     FIFO_STT_put(spi_in[i+SPI_DATA_OFFSET]);
                 }
             }
-            if (config & CFG_PREVAUDIO_MK)
-            {
-                for (i=0; i<AUDIO_SIZE; i++)
-                {
-                    FIFO_MIC_put_n(&spi_in[i+SPI_PREVAUDIO_OFFSET], 
AUDIO_SIZE);
-                }
-            }
             if (config & CFG_AUDIO_MK)
             {
-                for (i=0; i<AUDIO_SIZE; i++)
-                {
-                    FIFO_MIC_put_n(&spi_in[i+SPI_AUDIO_OFFSET], AUDIO_SIZE);
-                }
+                FIFO_MIC_put_n(&spi_in[SPI_AUDIO_OFFSET], AUDIO_MIC_SIZE);
             }
         }
     }
@@ -396,7 +371,7 @@
                         spi_slave = PUT_COMMAND; // Next state
                     if (spi_slave_config & RF_AUDIO_HDR)
                     {                                       
-                        SPDAT = FIFO_SPK_get(); // Get data from FIFO
+//                        SPDAT = FIFO_SPK_get(); // Get data from FIFO
                     }
                     else
                         SPDAT = 0x00; // No data to transmit

Modified: firmware/fuxusb/branches/new_rf/src/usb_ep.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/usb_ep.c        2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/usb_ep.c        2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -53,7 +53,7 @@
 static void clear_cmdout_ep(void);
 static void clear_cmdin_ep(void);
 
-static bit fifo_mic_loaded = False;
+bit fifo_mic_loaded = False;
 
 /**
  * \brief Parse all endpoints
@@ -128,17 +128,18 @@
  */
 void fill_mic_ep(void)
 {
-    if(usb_configuration_nb && FIFO_MIC_ready() && !fifo_mic_loaded)
+    //if(usb_configuration_nb && FIFO_MIC_ready() && !fifo_mic_loaded)
     {
-        uint8_t i;       
+//        uint8_t i;       
    
         Usb_select_ep(EP_AUDIO_IN);
     
-        i = 8;
-        do {
-            Usb_write_byte(FIFO_MIC_get());
-            i--;
-        } while(i);
+        FIFO_MIC_get();
+        /*i = 8;*/
+        /*do {*/
+            /*Usb_write_byte(FIFO_MIC_get());*/
+            /*i--;*/
+        /*} while(i);*/
     
         Usb_set_tx_ready();
         fifo_mic_loaded = True;

Modified: firmware/fuxusb/branches/new_rf/src/usb_ep.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/usb_ep.h        2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/usb_ep.h        2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -37,5 +37,6 @@
 void endpoints_parser(void);
 void send_status(void);
 void fill_mic_ep(void);
+extern bit fifo_mic_loaded;
 
 #endif // _USB_EP_H_

Modified: firmware/fuxusb/branches/new_rf/src/usb_task.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/usb_task.c      2008-06-25 08:30:11 UTC 
(rev 1265)
+++ firmware/fuxusb/branches/new_rf/src/usb_task.c      2008-06-25 11:11:17 UTC 
(rev 1266)
@@ -33,6 +33,8 @@
 #include "usb_commands.h"
 #include "usb_ep.h"
 #include "misc.h"
+#include "fifo_mic.h"
+#include "usb_ep.h"
 #include "lib_mcu\usb\usb_drv.h"
 
 /**
@@ -98,7 +100,8 @@
      * Load the microphone EP if it's not already loaded and if the micro 
      * fifo is ready. 
      */
-    fill_mic_ep();
+    if(usb_configuration_nb && FIFO_MIC_ready() && !fifo_mic_loaded)
+        fill_mic_ep();
 
     /* 
      * Prepare the statuses when a request has been received


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn

Reply via email to