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