Author: jaguarondi
Date: 2008-06-24 12:41:14 +0200 (Tue, 24 Jun 2008)
New Revision: 1258

Modified:
   firmware/fuxusb/branches/new_rf/fuxusb.Opt
   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/main.c
   firmware/fuxusb/branches/new_rf/src/rf.c
   firmware/fuxusb/branches/new_rf/src/spi_task.c
   firmware/fuxusb/branches/new_rf/src/spi_task.h
   firmware/fuxusb/branches/new_rf/src/usb_commands.c
   firmware/fuxusb/branches/new_rf/src/usb_desc.h
   firmware/fuxusb/branches/new_rf/src/usb_ep.c
   firmware/fuxusb/branches/new_rf/src/version.h
Log:
* First functional version.


Modified: firmware/fuxusb/branches/new_rf/fuxusb.Opt
===================================================================
(Binary files differ)

Modified: firmware/fuxusb/branches/new_rf/src/fifo_mic.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/fifo_mic.c      2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/fifo_mic.c      2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -76,9 +76,9 @@
  * be previously selected.
  * \ingroup fifo_mic
  */
-void FIFO_MIC_put_n(uint8_t const n)
+void FIFO_MIC_put_n(uint8_t *p, uint8_t const n)
 { 
-    uint8_t data i;
+    uint8_t i;
 
     i = n;
     do 
@@ -87,7 +87,7 @@
             return;
 
         Mic_buf[FifoIn_MIC_Idx++ & (MIC_BUF_SIZE-1)] = \
-                    received_rf_data[n-i];
+                    p[n-i];
     } while (-- i);
 }
 

Modified: firmware/fuxusb/branches/new_rf/src/fifo_mic.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/fifo_mic.h      2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/fifo_mic.h      2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -30,7 +30,7 @@
 
 extern void FIFO_MIC_init (void);
 extern bit FIFO_MIC_ready(void);
-extern void FIFO_MIC_put_n (uint8_t const n);
+extern void FIFO_MIC_put_n(uint8_t *p, uint8_t const n);
 extern uint8_t 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-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/fifo_spk.c      2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -33,8 +33,6 @@
  * @{ */
 /** Buffer size */
 #define SPK_BUF_SIZE 64
-/** Ready threshold. This value allow to empty the fifo */
-#define FIFO_SPK_READY 32
 /*! @} */
 
 /** \name Variables
@@ -63,10 +61,11 @@
 /**
  * \brief Check if the fifo is ready to be empty.
  */
-bit FIFO_SPK_ready(void)
+uint8_t FIFO_SPK_length(void)
 {
-    return ((FifoIn_SPK_Idx - FifoOut_SPK_Idx) > FIFO_SPK_READY); 
+    return (FifoIn_SPK_Idx - FifoOut_SPK_Idx);
 }
+
 /**
  * \brief Push N bytes in the Speaker FIFO.
  * \param n The number of byte to push.

Modified: firmware/fuxusb/branches/new_rf/src/fifo_spk.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/fifo_spk.h      2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/fifo_spk.h      2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -29,9 +29,8 @@
 #ifndef _FIFO_SPK_H_
 #define _FIFO_SPK_H_
 
-
 extern void FIFO_SPK_init (void);
-extern bit FIFO_SPK_ready(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);
 

Modified: firmware/fuxusb/branches/new_rf/src/main.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/main.c  2008-06-24 10:37:20 UTC (rev 
1257)
+++ firmware/fuxusb/branches/new_rf/src/main.c  2008-06-24 10:41:14 UTC (rev 
1258)
@@ -60,7 +60,7 @@
             i2c_task();
         }
         /* Bootloader inactive : if RF is online, process spi_task. */
-        else if (is_rf_online())
+        else
         {
             spi_task();
         }

Modified: firmware/fuxusb/branches/new_rf/src/rf.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/rf.c    2008-06-24 10:37:20 UTC (rev 
1257)
+++ firmware/fuxusb/branches/new_rf/src/rf.c    2008-06-24 10:41:14 UTC (rev 
1258)
@@ -83,7 +83,6 @@
         {
             reset_rf();
         }
-        new_cmd_enabled = True;
         rf_is_running = False;
         return False;
     }

Modified: firmware/fuxusb/branches/new_rf/src/spi_task.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/spi_task.c      2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/spi_task.c      2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -57,11 +57,6 @@
 /** Indicate the RF state.
  */
 uint8_t RF_Status;
-/** This flag is set when a new command can be received from the USB.
- * When a command for tux is received, this flag = False. When the commands has
- * been sent to the RF, this flag is set.
- */
-bit new_cmd_enabled;
 /** This flag is set when a command for tux is received. It indicate the
  *  RF that a command must be included in the frame.
  */
@@ -77,7 +72,30 @@
 static bit spi_ready = 0;
 static bit spi_Start_Flag = 0; 
 
+/** \name SPI frame constants 
+ * @{ */
+/** Size of the audio data in the SPI frame */
+#define AUDIO_SIZE 17
 
+/* Bits of the config byte */
+#define _BV(x) (1<<x)
+#define CFG_CRCOK_MK _BV(0)
+#define CFG_DATA_MK _BV(1)
+#define CFG_AUDIO_MK _BV(2)
+#define CFG_PREVAUDIO_MK _BV(3)
+
+/* SPI frame organization */
+#define SPI_SIZE 50
+#define SPI_IDX_OFFSET 0
+#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;
+static uint8_t idx_in, idx_out;
+
 /**
  * \brief Reset the SPI task to the defaults states.
  * This function reset all SPI variables.
@@ -91,7 +109,6 @@
     SPI_CSn = 1;            // Chip select
     spi_Start_Flag = 0; 
     spi_ready = 0;
-    new_cmd_enabled = True;
 }
 
 /**
@@ -132,8 +149,6 @@
 
     spi_slave   = 0; // Reset State Machine of spi_task()
     spi_master  = 0; // Reset State Machine of spi_task()
-
-    new_cmd_enabled = True;
 }
 
 /**
@@ -144,7 +159,33 @@
  */
 void it_INT0(void) interrupt IRQ_INT0
 {
-    spi_ready = 1;
+    P3_7 = 1; /* XXX debug */
+    if (SPI_CSn)
+    {
+        /* No start yet. */
+        P3_7 = 0; /* XXX debug */
+        return;
+    }
+    /* Check that the previous SPI transmission is done. */
+    /* XXX we can delete that later */
+    if ((SPSTA & 0x80) == 0)
+    {
+        P3_7 = 0; /* XXX debug */
+        return;
+    }
+
+    spi_in[spi_idx++] = SPDAT;
+
+    if (spi_idx == SPI_SIZE)
+    {
+        /* Last byte done, unselect. */
+        SPI_CSn = 1;
+    }
+    else
+    {
+        SPDAT = spi_out[spi_idx];
+    }
+    P3_7 = 0; /* XXX debug */
 }
 
 /**
@@ -154,6 +195,119 @@
  */
 void spi_task(void)
 {
+    uint8_t config;
+    uint8_t i;
+    static bit prev_spi_start = False;
+
+    P3_6 = 1; /* XXX debug */
+    /* Resset SPI state when the RF is done */
+    if (!SPI_START)
+    {
+        prev_spi_start = False;
+    }
+    /* Check for rising edge on SPI_START */
+    else if (!prev_spi_start) /* && SPI_START */
+    {
+        prev_spi_start = True;
+
+        /* Chip select */
+        SPI_CSn = 0;
+        /* Send the first data */
+        spi_idx = 0;
+        SPDAT = spi_out[spi_idx];
+        P3_6 = 0; /* XXX debug */
+        return;
+    }
+
+    if (SPI_CSn == 0)
+    {
+        /* We're busy already */
+        P3_6 = 0; /* XXX debug */
+        return;
+    }
+    else if (spi_idx >= SPI_SIZE)
+    {
+        spi_idx = 0;
+        /* Prepare next SPI frame to be sent to the RF */
+        config = 0;
+        if (new_command_received)
+        {
+            new_command_received = False;          
+            config |= CFG_DATA_MK;
+            for (i=0; i<CMD_SIZE; i++)
+            {
+                spi_out[i+SPI_DATA_OFFSET] = command_received[i];
+            }
+        }
+        if (FIFO_SPK_length() >= AUDIO_SIZE)
+        {
+            config |= CFG_AUDIO_MK;
+            for (i=0; i<AUDIO_SIZE; 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;
+            }
+        }
+
+
+        /* 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++)*/
+            /*spi_out[i] = 0x00;//1<<(i&7);*/
+        /*for (i=23; i<45; i++)*/
+            /*spi_out[i] = 0x00;//1<<(i&7);*/
+        /*for (i=45; i<SPI_SIZE; i+=1)*/
+            /*spi_out[i] = 0x01;*/
+        /*for (i=40; i<50; i++)*/
+            /*spi_out[i] = 0x55;*/
+
+        /* Store and increment the index of the frame. */
+
+        /* Process last SPI frame received from the RF */
+        if (idx_in != spi_in[SPI_IDX_OFFSET])
+        {
+            idx_in = spi_in[SPI_IDX_OFFSET];
+            config = spi_in[SPI_CONFIG_OFFSET];
+            if (config & CFG_DATA_MK)
+            {
+                for (i=0; i<CMD_SIZE; i++)
+                {
+                    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);
+                }
+            }
+        }
+    }
+    P3_6 = 0; /* XXX debug */
+}
+
+void tmp(void)
+{
     uint8_t Spi_Overflow_Ctr;
     uint8_t i;
     uint8_t received_status[4];
@@ -200,7 +354,7 @@
                 
//--------------------------------------------------------------------------
                 if (spi_slave == HEADERS)
                 {
-                    if (FIFO_SPK_ready())
+                    if (1)//FIFO_SPK_ready())
                     {
                         if (new_command_received) //
                         {
@@ -321,8 +475,6 @@
                     }
                     if (spi_count == spi_lenght_data + 6)
                     {
-                        new_cmd_enabled = True;
-
                         spi_Start_Flag = 0;
                         SPI_CSn = 1; // Chip deselect
                         spi_enable = 1;
@@ -334,7 +486,7 @@
                         if (spi_master_config & (RF_2FRAMES_HDR | \
                                                  RF_AUDIO_HDR)) 
                         {
-                            FIFO_MIC_put_n(spi_lenght_data); 
+                            //FIFO_MIC_put_n(spi_lenght_data); 
                         } 
                         // 
                         // Store STATUS in the FIFO 

Modified: firmware/fuxusb/branches/new_rf/src/spi_task.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/spi_task.h      2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/spi_task.h      2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -27,12 +27,11 @@
 #ifndef _SPITASK_H_
 #define _SPITASK_H_
 
-#define SPI_START      P3_4
-#define SPI_DREADY  P3_2
+#define SPI_START P3_4
+#define SPI_DREADY P3_2
 
 /* Variables */
 extern uint8_t RF_Status;
-extern bit new_cmd_enabled;
 extern bit new_command_received;
 
 /* Functions */

Modified: firmware/fuxusb/branches/new_rf/src/usb_commands.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/usb_commands.c  2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/usb_commands.c  2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -74,11 +74,7 @@
 
         /* Commands for Tux */
         case TUX_CMD_HDR:
-            new_cmd_enabled = False;
             new_command_received = True;
-            /* Transfert commands from command_received buffer to rf_commands. 
*/                            
-            for(i=0;i < 4;i++)
-                rf_commands[i] = command_received[i];
             break;
 
         /* Bootloader commands */
@@ -106,7 +102,7 @@
         Usb_write_byte(0);
         Usb_write_byte(RF_OFFLINE ? 0 : 1);
         Usb_write_byte(RF_Status);
-        Usb_write_byte(FifoIn_STT_Idx ? (FifoIn_STT_Idx / 4) : 0);
+        Usb_write_byte(FifoIn_STT_Idx ? (FifoIn_STT_Idx / CMD_SIZE) : 0);
 
         /* Write statuses */
         for(i=0;i<FifoIn_STT_Idx;i++)

Modified: firmware/fuxusb/branches/new_rf/src/usb_desc.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/usb_desc.h      2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/usb_desc.h      2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -30,7 +30,7 @@
 #include "version.h"
 
 /** Enable / Disable the HID interface */
-#define HID_DEVICE
+//#define HID_DEVICE
 
 /** \name Descriptors type
  * @{ */

Modified: firmware/fuxusb/branches/new_rf/src/usb_ep.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/usb_ep.c        2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/usb_ep.c        2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -98,11 +98,8 @@
     /* EP5 : Command out EP (PC -> dongle) */
     if(Usb_test_it_ep(EP_CMD_OUT))
     {      
-        if (new_cmd_enabled)
-        {
-            commands_parser();
-            clear_cmdout_ep();
-        }
+        commands_parser();
+        clear_cmdout_ep();
     }
 }
 

Modified: firmware/fuxusb/branches/new_rf/src/version.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/version.h       2008-06-24 10:37:20 UTC 
(rev 1257)
+++ firmware/fuxusb/branches/new_rf/src/version.h       2008-06-24 10:41:14 UTC 
(rev 1258)
@@ -19,7 +19,7 @@
  * KySoH iTux agent created on 2005/10/20 by David Bourgeois
  */
 
-/* $Id:$ */
+/* $Id$ */
 
 #ifndef _VERSION_H_
 #define _VERSION_H_


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