Author: jaguarondi
Date: 2008-08-20 13:07:43 +0200 (Wed, 20 Aug 2008)
New Revision: 1558

Modified:
   firmware/fuxusb/branches/new_rf/src/global.h
   firmware/fuxusb/branches/new_rf/src/main.c
   firmware/fuxusb/branches/new_rf/src/misc.c
   firmware/fuxusb/branches/new_rf/src/rf.c
   firmware/fuxusb/branches/new_rf/src/spi_task.c
   firmware/fuxusb/branches/new_rf/src/usb_commands.c
   firmware/rf/trunk/Makefile
   firmware/rf/trunk/main.c
   firmware/rf/trunk/prot.c
   firmware/rf/trunk/rf_ctrl.c
   firmware/rf/trunk/varis.c
   firmware/rf/trunk/varis.h
Log:
* Added the online/offline link signal.

* Added the capability to detect a disconnection and reconnect after.

* Some cleanup of the RF states.

* RF_OFFLINE signal was actually RF_ONLINE in the USB CPU, corrected now.



Modified: firmware/fuxusb/branches/new_rf/src/global.h
===================================================================
--- firmware/fuxusb/branches/new_rf/src/global.h        2008-08-20 07:48:18 UTC 
(rev 1557)
+++ firmware/fuxusb/branches/new_rf/src/global.h        2008-08-20 11:07:43 UTC 
(rev 1558)
@@ -201,7 +201,7 @@
 #include "common\defines.h"
 
 #define rf_reset_signal P0_1
-#define RF_OFFLINE      P2_3
+#define RF_ONLINE       P2_3
 
 #define RF_2FRAMES_HDR  0x80
 #define RF_AUDIO_HDR    0x02

Modified: firmware/fuxusb/branches/new_rf/src/main.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/main.c  2008-08-20 07:48:18 UTC (rev 
1557)
+++ firmware/fuxusb/branches/new_rf/src/main.c  2008-08-20 11:07:43 UTC (rev 
1558)
@@ -78,7 +78,7 @@
 
     /* Reset the RF card while the USB isn't configured */
     rf_reset_signal = 0;
-    RF_OFFLINE = 1;
+    RF_ONLINE = 0;
 
     /* Enable interrupt (for INT0) */
     Enable_interrupt();

Modified: firmware/fuxusb/branches/new_rf/src/misc.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/misc.c  2008-08-20 07:48:18 UTC (rev 
1557)
+++ firmware/fuxusb/branches/new_rf/src/misc.c  2008-08-20 11:07:43 UTC (rev 
1558)
@@ -68,7 +68,7 @@
         blink_led(BL_LED_ON, BL_LED_OFF);
     }
     /* RF is online */
-    else if (!RF_OFFLINE)
+    else if (RF_ONLINE)
     {
         blink_led(ONLINE_LED_ON, ONLINE_LED_OFF);
     }

Modified: firmware/fuxusb/branches/new_rf/src/rf.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/rf.c    2008-08-20 07:48:18 UTC (rev 
1557)
+++ firmware/fuxusb/branches/new_rf/src/rf.c    2008-08-20 11:07:43 UTC (rev 
1558)
@@ -72,7 +72,7 @@
      */
     static bit rf_is_running = False;
 
-    if (!RF_OFFLINE)
+    if (RF_ONLINE)
     {
         rf_is_running = True;
         return True;

Modified: firmware/fuxusb/branches/new_rf/src/spi_task.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/spi_task.c      2008-08-20 07:48:18 UTC 
(rev 1557)
+++ firmware/fuxusb/branches/new_rf/src/spi_task.c      2008-08-20 11:07:43 UTC 
(rev 1558)
@@ -379,7 +379,7 @@
                 if (spi_master == HEADERM)
                 {
                     while (!(SPSTA == 0x80));    // Wait SPI response
-                    if(RF_OFFLINE) 
+                    if(!RF_ONLINE) 
                         return; 
 
                     spi_master_config = SPDAT;  
@@ -393,7 +393,7 @@
                 else if (spi_master == PUT_SOUND_FIFO)
                 {
                     while (!(SPSTA == 0x80));    // Wait SPI response
-                    if(RF_OFFLINE) 
+                    if(!RF_ONLINE) 
                         return; 
 
                     if (spi_master_config & RF_AUDIO_HDR)
@@ -408,7 +408,7 @@
                 else if (spi_master == READ_COMMAND)
                 {
                     while (!(SPSTA == 0x80)); // Wait SPI response
-                    if(RF_OFFLINE) 
+                    if(!RF_ONLINE) 
                         return; 
 
                     if (spi_master_config & RF_CMD_HDR)

Modified: firmware/fuxusb/branches/new_rf/src/usb_commands.c
===================================================================
--- firmware/fuxusb/branches/new_rf/src/usb_commands.c  2008-08-20 07:48:18 UTC 
(rev 1557)
+++ firmware/fuxusb/branches/new_rf/src/usb_commands.c  2008-08-20 11:07:43 UTC 
(rev 1558)
@@ -100,7 +100,7 @@
 
         /* Write header */
         Usb_write_byte(0);
-        Usb_write_byte(RF_OFFLINE ? 0 : 1);
+        Usb_write_byte(RF_ONLINE ? 1 : 0);
         Usb_write_byte(RF_Status);
         Usb_write_byte(FifoIn_STT_Idx ? (FifoIn_STT_Idx / CMD_SIZE) : 0);
 

Modified: firmware/rf/trunk/Makefile
===================================================================
--- firmware/rf/trunk/Makefile  2008-08-20 07:48:18 UTC (rev 1557)
+++ firmware/rf/trunk/Makefile  2008-08-20 11:07:43 UTC (rev 1558)
@@ -29,9 +29,7 @@
     CFLAGS += -D_MASTER
 else
     PROJECT = tuxrf
-    ifneq (,$(findstring slave, $(TYPE)))
     CFLAGS += -D_SLAVE
-    endif
 endif
 TARGET =  $(PROJECT).elf
 

Modified: firmware/rf/trunk/main.c
===================================================================
--- firmware/rf/trunk/main.c    2008-08-20 07:48:18 UTC (rev 1557)
+++ firmware/rf/trunk/main.c    2008-08-20 11:07:43 UTC (rev 1558)
@@ -102,13 +102,15 @@
     init_varis();
     interface_init();
 
-    /* XXX debug */
-    DDRB |= _BV(PB3) | _BV(PB5);
-    DDRC |= _BV(PC3);
+    sei();
 
-
-    sei();
-    system_start_up();
-    for(;;){
+    /* Main loop */
+    for(;;)
+    {
+        if (disconnected_flag)
+        {
+            disconnected_flag = false;
+            system_start_up();
+        }
     }
 }

Modified: firmware/rf/trunk/prot.c
===================================================================
--- firmware/rf/trunk/prot.c    2008-08-20 07:48:18 UTC (rev 1557)
+++ firmware/rf/trunk/prot.c    2008-08-20 11:07:43 UTC (rev 1558)
@@ -68,7 +68,7 @@
  * M/S starts in SLAVE mode then switch to MASTER if no masters are found
  * within a certain time.
  */
-/* SLAVE of M/S */
+/* SLAVE or M/S */
 #ifndef _MASTER
        uint8_t tmp;
        uint16_t j;

Modified: firmware/rf/trunk/rf_ctrl.c
===================================================================
--- firmware/rf/trunk/rf_ctrl.c 2008-08-20 07:48:18 UTC (rev 1557)
+++ firmware/rf/trunk/rf_ctrl.c 2008-08-20 11:07:43 UTC (rev 1558)
@@ -30,6 +30,7 @@
 uint8_t checksum_tx;
 
 static void reset_atr2406(void);
+static void stop_rf_timer(void);
 
 //*****************************************************************************
 //* Project: RF-Firmware for ISM                                              *
@@ -50,42 +51,49 @@
 ISR (SIG_OUTPUT_COMPARE1A)
 {
     //PORTD ^= 0x08; // XXX DEBUG
-    switch(rf_state)
+    switch(rf_state++)
     {
     /*
      * TX
      */
     case 0x00:
-        /* Power up for TX. */
-        //OCR1A = OCR1A + T_PWR_UP;
-        //pwr_up_atr2406();
-        //break;
-        rf_state = 1;
-    case 0x01:
         /* RX complete, check what we got. */
         UCSR0A = 0x00;
         UCSR0B = 0x00;
         UCSR0C = 0x00;
         reset_atr2406();
 
-        /* XXX thought we shouldn't power down at full rate */
+        /* We shouldn't power down at full rate */
         //pwr_dwn_atr2406();
 
         if (rf_rx_state==0xFF)
-            /* Good frame received. */
         {
+            set_link();
+            /* Good frame received. */
+            connected = CONNECTED_TIMEOUT;
             if (checksum==0x00)
             {
                 /* Switch rx buffer */
                 uint8_t volatile *p = rf_buffer_rx;
                 rf_buffer_rx = rf_buffer_rx_full;
                 rf_buffer_rx_full = p;
-                PORTD ^= 0x08; // XXX DEBUG
+                //PORTD ^= 0x08; // XXX DEBUG
             }
             checksum1 = checksum;
         }
         else
-            checksum1 = 10;
+        {
+            checksum1 = 10; /* or whatever value */
+            if (connected)
+            {
+                if (!--connected)
+                {
+                    clr_link();
+                    disconnected_flag = true;
+                    stop_rf_timer();
+                }
+            }
+        }
         /* Configure in TX. */
 #ifdef NOHOPP
         channel = TRX_CHANNEL;
@@ -117,7 +125,7 @@
         spi_complete();
 
         break;
-    case 0x02:
+    case 0x01:
         /* Start transmission. */
         OCR1A = OCR1A + T_TX2RX;
         rf_tx_counter = 0x00;
@@ -143,23 +151,12 @@
             //}
         //}
 
-        rf_state = 3; // XXX skip PU
         break;
 
     /*
      * RX
      */
-    case 0x03:
-        /* End of TX, power up for RX. */
-        OCR1A = OCR1A + T_PWR_UP;
-
-        /* Request a SPI communication. */
-        /* XXX Should check here whether we're connected or not */
-        spi_request();
-
-        //pwr_up_atr2406();
-        break;
-    case 0x04:
+    case 0x02:
         /* Configure in RX mode. */
         reset_atr2406();
         spi_request();
@@ -188,56 +185,23 @@
         //PIN configuration for input or output
         DDRD = DDRD&0xEF;//XCK PIN set to input!!
         break;
-    case 0x05:
+    case 0x03:
         /* Start receiving. */
         OCR1A = OCR1A+T_RX_ON;
         set_rxon();//power up RF-Chip in receive mode
         //Setup SOFs!!
         sof_ary[0] = channel;
         break;
-    case 0x06:
+    case 0x04:
         /* Used to resync probably. */
         checksum = 0x00;
         UCSR0A = 0x00;
         UCSR0B = 0x90;
         UCSR0C = 0x46;
         OCR1A = OCR1A + T_ACTIVE + T_PWR_DWN;
-        rf_state = 0; // XXX skip PU
         break;
-    case 0x07:
-        /* RX complete, check what we got. */
-        UCSR0A = 0x00;
-        UCSR0B = 0x00;
-        UCSR0C = 0x00;
-        reset_atr2406();
-
-        /* XXX thought we shouldn't power down at full rate */
-        //pwr_dwn_atr2406();
-
-        if (rf_rx_state==0xFF)
-            /* Good frame received. */
-        {
-            if (checksum==0x00)
-            {
-                /* Switch rx buffer */
-                uint8_t volatile *p = rf_buffer_rx;
-                rf_buffer_rx = rf_buffer_rx_full;
-                rf_buffer_rx_full = p;
-            }
-        }
-#if defined(_SLAVE)
-        /* If slave, synchronisation occurs when a frame is received. */
-        else
-#endif
-            /* Wrong frame, just continue. */
-        {
-            OCR1A = OCR1A + T_PWR_DWN;
-        }
-        rf_state = 0; // XXX skip PU
-        break;
     }
-    rf_state = (rf_state + 1) & 7;
-    //PORTD ^= 0x08; // XXX DEBUG
+    rf_state = rf_state % 5;
 }
 
 /*
@@ -250,7 +214,13 @@
     TCNT1L = 0x00;
     TCCR1A = 0x00;
     TCCR1B = 0x02; /* sys_clk/8 ==> 1 click = 578,704ns */
+    TIFR1 = 0x02; /* Clear all flags */
     TIMSK1 = 0x02; /* Enable compare A IRQ */
+}
+
+static void stop_rf_timer(void)
+{
+    TIMSK1 = 0x00; /* Disable IRQs */
     TIFR1 = 0x02; /* Clear all flags */
 }
 

Modified: firmware/rf/trunk/varis.c
===================================================================
--- firmware/rf/trunk/varis.c   2008-08-20 07:48:18 UTC (rev 1557)
+++ firmware/rf/trunk/varis.c   2008-08-20 11:07:43 UTC (rev 1558)
@@ -42,11 +42,16 @@
 //* license agreement.                                                        *
 //*****************************************************************************
 
-#include "defines.h"
+#include "varis.h"
 
-/* GFCS parameter of the ATR2406 (gaussian filter) */
+/* GFCS parameter of the ATR2406 (gaussian filter). */
 uint8_t GFCS;
 
+/* Timeout running down to 0 when master and slaved get disconnected. */
+uint8_t volatile connected;
+/* Flag raised when master and slave get disconnected */
+bool volatile disconnected_flag = true;
+
 //*****************************************************************************
 // SETUP of RF_BUFFER_TX:                                                     *
 // 0 - 5   -> Preamble                                                        *

Modified: firmware/rf/trunk/varis.h
===================================================================
--- firmware/rf/trunk/varis.h   2008-08-20 07:48:18 UTC (rev 1557)
+++ firmware/rf/trunk/varis.h   2008-08-20 11:07:43 UTC (rev 1558)
@@ -44,9 +44,14 @@
 #ifndef VARIS_H
 #define VARIS_H
 
+#include <stdbool.h>
+
 #include "defines.h"
 
 extern uint8_t GFCS;
+#define CONNECTED_TIMEOUT 255
+extern uint8_t volatile connected;
+extern bool volatile disconnected_flag;
 
 extern volatile uint8_t rf_buffer_tx[];
 extern uint8_t volatile *rf_buffer_rx;


-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Tux-droid-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/tux-droid-svn

Reply via email to