/C-OSD/trunk/CHANGE.LOG |
---|
18,6 → 18,12 |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
20090407-2100 |
+added request of OSD data, disrequest of debug data and uptime reset to menu |
-removed the uptime-reset binding from S2 |
+pgm space for some strings to save _normal_ data space |
*some code movement |
20090406-0130 |
*MK-Datastruct updated to work with NaviCtrl 0.15c firmware |
*changed flags from NO* to invers versions |
/C-OSD/trunk/c-osd.aws |
---|
1,0 → 0,0 |
<AVRWorkspace><IOSettings><CurrentRegisters><USART1><register register="UBRR1L" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UCSR1B" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UCSR1A" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UDR" group="USART1" display="1" locked="0"/></USART1><CPU><register register="OSCCAL" group="CPU" display="1" locked="0"/></CPU><JTAG><register register="OCDR" group="JTAG" display="1" locked="0"/></JTAG><PORTE><register register="PINE" group="PORTE" display="1" locked="0"/></PORTE><PORTE><register register="DDRE" group="PORTE" display="1" locked="0"/></PORTE><PORTE><register register="PORTE" group="PORTE" display="1" locked="0"/></PORTE><ANALOG_COMPARATOR><register register="ACSR" group="ANALOG_COMPARATOR" display="1" locked="0"/></ANALOG_COMPARATOR><USART0><register register="UBRR0L" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UCSR0B" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UCSR0A" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UDR0" group="USART0" display="1" locked="0"/></USART0><SPI><register register="SPCR" group="SPI" display="1" locked="0"/></SPI><SPI><register register="SPSR" group="SPI" display="1" locked="0"/></SPI><SPI><register register="SPDR" group="SPI" display="1" locked="0"/></SPI><PORTD><register register="PIND" group="PORTD" display="1" locked="0"/></PORTD><PORTD><register register="DDRD" group="PORTD" display="1" locked="0"/></PORTD><PORTD><register register="PORTD" group="PORTD" display="1" locked="0"/></PORTD><PORTC><register register="PINC" group="PORTC" display="1" locked="0"/></PORTC><PORTC><register register="DDRC" group="PORTC" display="1" locked="0"/></PORTC><PORTC><register register="PORTC" group="PORTC" display="1" locked="0"/></PORTC><PORTB><register register="PINB" group="PORTB" display="1" locked="0"/></PORTB><PORTB><register register="DDRB" group="PORTB" display="1" locked="0"/></PORTB><PORTB><register register="PORTB" group="PORTB" display="1" locked="0"/></PORTB><PORTA><register register="PINA" group="PORTA" display="1" locked="0"/></PORTA><PORTA><register register="DDRA" group="PORTA" display="1" locked="0"/></PORTA><PORTA><register register="PORTA" group="PORTA" display="1" locked="0"/></PORTA><EEPROM><register register="EECR" group="EEPROM" display="1" locked="0"/></EEPROM><EEPROM><register register="EEDR" group="EEPROM" display="1" locked="0"/></EEPROM><EEPROM><register register="EEAR" group="EEPROM" display="1" locked="0"/></EEPROM><USART0><register register="UBRR0H" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UCSR0C" group="USART0" display="1" locked="0"/></USART0><WATCHDOG><register register="WDTCR" group="WATCHDOG" display="1" locked="0"/></WATCHDOG><TIMER_COUNTER_2><register register="OCR2" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_2><register register="TCNT2" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_1><register register="ICR1" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_2><register register="ASSR" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_2><register register="TCCR2" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_1><register register="OCR1B" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="OCR1A" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="TCNT1" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="TCCR1B" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="TCCR1A" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><CPU><register register="SFIOR" group="CPU" display="1" locked="0"/></CPU><TIMER_COUNTER_0><register register="OCR0" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_0><register register="TCNT0" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_0><register register="TCCR0" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><CPU><register register="MCUCSR" group="CPU" display="1" locked="0"/></CPU><JTAG><register register="MCUCSR" group="JTAG" display="1" locked="0"/></JTAG><CPU><register register="MCUCR" group="CPU" display="1" locked="0"/></CPU><EXTERNAL_INTERRUPT><register register="MCUCR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><CPU><register register="EMCUCR" group="CPU" display="1" locked="0"/></CPU><EXTERNAL_INTERRUPT><register register="EMCUCR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><BOOT_LOAD><register register="SPMCR" group="BOOT_LOAD" display="1" locked="0"/></BOOT_LOAD><TIMER_COUNTER_0><register register="TIFR" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_1><register register="TIFR" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_2><register register="TIFR" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_0><register register="TIMSK" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_1><register register="TIMSK" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_2><register register="TIMSK" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><EXTERNAL_INTERRUPT><register register="GIFR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><EXTERNAL_INTERRUPT><register register="GICR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><USART1><register register="UBRR1H" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UCSR1C" group="USART1" display="1" locked="0"/></USART1><CPU><register register="SP" group="CPU" display="1" locked="0"/></CPU><CPU><register register="SREG" group="CPU" display="1" locked="0"/></CPU><CPU><register register="CLKPR" group="CPU" display="1" locked="0"/></CPU><EXTERNAL_INTERRUPT><register register="PCMSK0" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><EXTERNAL_INTERRUPT><register register="PCMSK1" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><TIMER_COUNTER_3><register register="ETIFR" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="ETIMSK" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="ICR3" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="OCR3B" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="OCR3A" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="TCNT3" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="TCCR3B" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="TCCR3A" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3></CurrentRegisters></IOSettings><part name="ATMEGA162"/><Files><File00000 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\main.c" Position="523 139 1163 663" LineCol="534 0"/><File00001 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\mk-data-structs.h" Position="545 161 1177 655" LineCol="21 0"/><File00002 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.h" Position="567 183 1199 677" LineCol="18 0"/><File00003 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.c" Position="589 205 1221 699" LineCol="18 0"/><File00004 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.c" Position="611 227 1243 721" LineCol="18 0"/><File00005 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.h" Position="633 249 1265 743" LineCol="18 0"/><File00006 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\characters.c" Position="655 271 1287 765" LineCol="20 0"/></Files></AVRWorkspace> |
<AVRWorkspace><IOSettings><CurrentRegisters><USART1><register register="UBRR1L" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UCSR1B" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UCSR1A" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UDR" group="USART1" display="1" locked="0"/></USART1><CPU><register register="OSCCAL" group="CPU" display="1" locked="0"/></CPU><JTAG><register register="OCDR" group="JTAG" display="1" locked="0"/></JTAG><PORTE><register register="PINE" group="PORTE" display="1" locked="0"/></PORTE><PORTE><register register="DDRE" group="PORTE" display="1" locked="0"/></PORTE><PORTE><register register="PORTE" group="PORTE" display="1" locked="0"/></PORTE><ANALOG_COMPARATOR><register register="ACSR" group="ANALOG_COMPARATOR" display="1" locked="0"/></ANALOG_COMPARATOR><USART0><register register="UBRR0L" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UCSR0B" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UCSR0A" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UDR0" group="USART0" display="1" locked="0"/></USART0><SPI><register register="SPCR" group="SPI" display="1" locked="0"/></SPI><SPI><register register="SPSR" group="SPI" display="1" locked="0"/></SPI><SPI><register register="SPDR" group="SPI" display="1" locked="0"/></SPI><PORTD><register register="PIND" group="PORTD" display="1" locked="0"/></PORTD><PORTD><register register="DDRD" group="PORTD" display="1" locked="0"/></PORTD><PORTD><register register="PORTD" group="PORTD" display="1" locked="0"/></PORTD><PORTC><register register="PINC" group="PORTC" display="1" locked="0"/></PORTC><PORTC><register register="DDRC" group="PORTC" display="1" locked="0"/></PORTC><PORTC><register register="PORTC" group="PORTC" display="1" locked="0"/></PORTC><PORTB><register register="PINB" group="PORTB" display="1" locked="0"/></PORTB><PORTB><register register="DDRB" group="PORTB" display="1" locked="0"/></PORTB><PORTB><register register="PORTB" group="PORTB" display="1" locked="0"/></PORTB><PORTA><register register="PINA" group="PORTA" display="1" locked="0"/></PORTA><PORTA><register register="DDRA" group="PORTA" display="1" locked="0"/></PORTA><PORTA><register register="PORTA" group="PORTA" display="1" locked="0"/></PORTA><EEPROM><register register="EECR" group="EEPROM" display="1" locked="0"/></EEPROM><EEPROM><register register="EEDR" group="EEPROM" display="1" locked="0"/></EEPROM><EEPROM><register register="EEAR" group="EEPROM" display="1" locked="0"/></EEPROM><USART0><register register="UBRR0H" group="USART0" display="1" locked="0"/></USART0><USART0><register register="UCSR0C" group="USART0" display="1" locked="0"/></USART0><WATCHDOG><register register="WDTCR" group="WATCHDOG" display="1" locked="0"/></WATCHDOG><TIMER_COUNTER_2><register register="OCR2" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_2><register register="TCNT2" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_1><register register="ICR1" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_2><register register="ASSR" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_2><register register="TCCR2" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_1><register register="OCR1B" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="OCR1A" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="TCNT1" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="TCCR1B" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_1><register register="TCCR1A" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><CPU><register register="SFIOR" group="CPU" display="1" locked="0"/></CPU><TIMER_COUNTER_0><register register="OCR0" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_0><register register="TCNT0" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_0><register register="TCCR0" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><CPU><register register="MCUCSR" group="CPU" display="1" locked="0"/></CPU><JTAG><register register="MCUCSR" group="JTAG" display="1" locked="0"/></JTAG><CPU><register register="MCUCR" group="CPU" display="1" locked="0"/></CPU><EXTERNAL_INTERRUPT><register register="MCUCR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><CPU><register register="EMCUCR" group="CPU" display="1" locked="0"/></CPU><EXTERNAL_INTERRUPT><register register="EMCUCR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><BOOT_LOAD><register register="SPMCR" group="BOOT_LOAD" display="1" locked="0"/></BOOT_LOAD><TIMER_COUNTER_0><register register="TIFR" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_1><register register="TIFR" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_2><register register="TIFR" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><TIMER_COUNTER_0><register register="TIMSK" group="TIMER_COUNTER_0" display="1" locked="0"/></TIMER_COUNTER_0><TIMER_COUNTER_1><register register="TIMSK" group="TIMER_COUNTER_1" display="1" locked="0"/></TIMER_COUNTER_1><TIMER_COUNTER_2><register register="TIMSK" group="TIMER_COUNTER_2" display="1" locked="0"/></TIMER_COUNTER_2><EXTERNAL_INTERRUPT><register register="GIFR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><EXTERNAL_INTERRUPT><register register="GICR" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><USART1><register register="UBRR1H" group="USART1" display="1" locked="0"/></USART1><USART1><register register="UCSR1C" group="USART1" display="1" locked="0"/></USART1><CPU><register register="SP" group="CPU" display="1" locked="0"/></CPU><CPU><register register="SREG" group="CPU" display="1" locked="0"/></CPU><CPU><register register="CLKPR" group="CPU" display="1" locked="0"/></CPU><EXTERNAL_INTERRUPT><register register="PCMSK0" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><EXTERNAL_INTERRUPT><register register="PCMSK1" group="EXTERNAL_INTERRUPT" display="1" locked="0"/></EXTERNAL_INTERRUPT><TIMER_COUNTER_3><register register="ETIFR" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="ETIMSK" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="ICR3" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="OCR3B" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="OCR3A" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="TCNT3" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="TCCR3B" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3><TIMER_COUNTER_3><register register="TCCR3A" group="TIMER_COUNTER_3" display="1" locked="0"/></TIMER_COUNTER_3></CurrentRegisters></IOSettings><part name="ATMEGA162"/><Files><File00000 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\main.c" Position="628 126 1266 650" LineCol="49 0"/><File00001 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\mk-data-structs.h" Position="650 148 1280 642" LineCol="42 0"/><File00002 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.h" Position="672 170 1302 664" LineCol="109 0"/><File00003 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.c" Position="694 192 1324 686" LineCol="41 0"/><File00004 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.c" Position="716 214 1346 708" LineCol="137 0"/><File00005 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.h" Position="738 236 1368 730" LineCol="0 0"/><File00006 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\characters.c" Position="760 258 1390 752" LineCol="277 0"/></Files></AVRWorkspace> |
/C-OSD/trunk/default/Makefile |
---|
35,7 → 35,7 |
## Objects that must be built in order to link |
OBJECTS = main.o |
OBJECTS = main.o usart1.o max7456_software_spi.o |
## Objects explicitly added by the user |
LINKONLYOBJECTS = |
47,6 → 47,12 |
main.o: ../main.c |
$(CC) $(INCLUDES) $(CFLAGS) -c $< |
usart1.o: ../usart1.c |
$(CC) $(INCLUDES) $(CFLAGS) -c $< |
max7456_software_spi.o: ../max7456_software_spi.c |
$(CC) $(INCLUDES) $(CFLAGS) -c $< |
##Link |
$(TARGET): $(OBJECTS) |
$(CC) $(LDFLAGS) $(OBJECTS) $(LINKONLYOBJECTS) $(LIBDIRS) $(LIBS) -o $(TARGET) |
72,4 → 78,3 |
## Other dependencies |
-include $(shell mkdir dep 2>/dev/null) $(wildcard dep/*) |
/C-OSD/trunk/main.c |
---|
28,7 → 28,9 |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include "max7456_software_spi.c" |
#include <avr/pgmspace.h> |
#include "main.h" |
#include "max7456_software_spi.h" |
#include "usart1.h" |
/* TODO: |
36,72 → 38,14 |
* - clean up code :) |
*/ |
/* ########################################################################## |
* Debugging and general purpose definitions |
* ##########################################################################*/ |
#define ALLCHARSDEBUG 0 // set to 1 and flash firmware to see all chars |
#ifndef WRITECHARS // if WRITECHARS not set via makefile |
#define WRITECHARS -1 // set to 2XX and flash firmware to write new char |
// enables the allchars as well to see results |
#endif |
#ifndef NTSC // if NTSC is not thet via makefile |
#define NTSC 0 // set to 1 for NTSC mode + lifts the bottom line |
#endif |
#define HUD 1 // set to 0 to disable HUD by default |
#define ARTHORIZON 0 // set to 1 to enable roll&nick artificial horizon by default |
#define STATS 1 // set to 1 to enable statistics during motor off by default |
#define WARNINGS 1 // set to 1 to display battery+rc warning even if HUD is disabled |
#define UBAT_WRN 94 // voltage for blinking warning, like FC settings |
#define RCLVL_WRN 100 // make the RC level blink if below this number |
// ### read datasheet before changing stuff below this line :) |
#define BLINK 0b01001111 // attribute byte for blinking chars |
/* ########################################################################## |
* FLAGS usable during runtime |
* ##########################################################################*/ |
#define COSD_FLAG_NTSC 1 |
#define COSD_FLAG_HUD 2 |
#define COSD_FLAG_ARTHORIZON 4 |
#define COSD_FLAG_STATS 8 |
#define COSD_FLAG_WARNINGS 16 |
#define COSD_ICONS_WRITTEN 32 |
/* ########################################################################## |
* LED controll |
* ##########################################################################*/ |
#define LED1_ON PORTC |= (1 << PC0); |
#define LED1_OFF PORTC &= ~(1 << PC0); |
#define LED2_ON PORTC |= (1 << PC1); |
#define LED2_OFF PORTC &= ~(1 << PC1); |
#define LED3_ON PORTC |= (1 << PC2); |
#define LED3_OFF PORTC &= ~(1 << PC2); |
#define LED4_ON PORTC |= (1 << PC3); |
#define LED4_OFF PORTC &= ~(1 << PC3); |
/* ########################################################################## |
* switch controll |
* ##########################################################################*/ |
#define S1_PRESSED !(PINC & (1<<PC5)) |
#define S2_PRESSED !(PINC & (1<<PC4)) |
#if !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
// data structs |
// data structs not needed for character flashin |
#include "mk-data-structs.h" |
/* ########################################################################## |
* global definitions and global vars |
* ##########################################################################*/ |
volatile uint8_t rxd_buffer_locked = 0; |
volatile uint8_t rxd_buffer[RXD_BUFFER_LEN]; |
volatile uint8_t txd_buffer[TXD_BUFFER_LEN]; |
volatile uint8_t ReceivedBytes = 0; |
volatile uint8_t *pRxData = 0; |
volatile uint8_t RxDataLen = 0; |
volatile uint16_t setsReceived = 0; |
volatile NaviData_t naviData; |
119,6 → 63,18 |
// remember last time data was received |
volatile uint8_t seconds_since_last_data = 0; |
// store stats description in progmem to save space |
char stats_item_0[] PROGMEM = "max Altitude:"; |
char stats_item_1[] PROGMEM = "max Speed :"; |
char stats_item_2[] PROGMEM = "max Distance:"; |
char stats_item_3[] PROGMEM = "min voltage :"; |
char stats_item_4[] PROGMEM = "max time :"; |
char* stats_item_pointers[] PROGMEM = {stats_item_0, stats_item_1, stats_item_2, stats_item_3, stats_item_4}; |
// store more fixed strings in progmen |
char ON[] PROGMEM = "ON "; |
char OFF[] PROGMEM = "OFF"; |
#endif // ends !(ALLCHARSDEBUG|(WRITECHARS != -1)) |
// general PAL|NTSC distingiusch stuff |
153,7 → 109,7 |
/** |
* serial support |
*/ |
#include "usart1.c" |
//#include "usart1.c" |
/* ########################################################################## |
300,32 → 256,41 |
*/ |
void config_menu_drawings(uint8_t chosen) { |
// clear prevoius _cursor_ |
write_ascii_string(3, (chosen + 4) % 5, " "); |
write_ascii_string(3, (chosen + 6) % 7, " "); |
// draw current _cursor_ |
write_ascii_string(3, chosen + 6, ">"); |
if (COSD_FLAGS & COSD_FLAG_HUD) { |
write_ascii_string(23, 6, "ON "); |
write_ascii_string_pgm(23, 6, ON); |
} else { |
write_ascii_string(23, 6, "OFF"); |
write_ascii_string_pgm(23, 6, OFF); |
} |
if (COSD_FLAGS & COSD_FLAG_ARTHORIZON) { |
write_ascii_string(23, 7, "ON "); |
write_ascii_string_pgm(23, 7, ON); |
} else { |
write_ascii_string(23, 7, "OFF"); |
write_ascii_string_pgm(23, 7, OFF); |
} |
if (COSD_FLAGS & COSD_FLAG_STATS) { |
write_ascii_string(23, 8, "ON "); |
write_ascii_string_pgm(23, 8, ON); |
} else { |
write_ascii_string(23, 8, "OFF"); |
write_ascii_string_pgm(23, 8, OFF); |
} |
if (COSD_FLAGS & COSD_FLAG_WARNINGS) { |
write_ascii_string(23, 9, "ON "); |
write_ascii_string_pgm(23, 9, ON); |
} else { |
write_ascii_string(23, 9, "OFF"); |
write_ascii_string_pgm(23, 9, OFF); |
} |
} |
/** |
* some sort of clicking response in the menu |
*/ |
void config_menu_doclick(uint8_t chosen, char** menu) { |
write_ascii_string(4, chosen + 6, "DONE "); |
_delay_ms(1000); |
write_ascii_string(4, chosen + 6, menu[chosen]); |
} |
/** |
* a simple config menu tryout |
*/ |
void config_menu(void) { |
335,10 → 300,13 |
// clear screen |
clear(); |
char* menu[5] = {"Full HUD", |
char* menu[8] = {"Full HUD", |
"Art.Horizon in HUD", |
"Statistics", |
"Warnings", // TODO: do it! |
"Reset uptime", |
"Request OSD-data", |
"Disable Debug-data", |
"EXIT"}; |
uint8_t inmenu = 1; |
353,6 → 321,9 |
write_ascii_string(4, 8, menu[2]); |
write_ascii_string(4, 9, menu[3]); |
write_ascii_string(4, 10, menu[4]); |
write_ascii_string(4, 11, menu[5]); |
write_ascii_string(4, 12, menu[6]); |
write_ascii_string(4, 13, menu[7]); |
config_menu_drawings(chosen); |
359,7 → 330,7 |
while (inmenu) { |
if (s2_pressed()) { |
write_ascii_string(3, chosen+6, " "); |
chosen = (chosen + 1) % 5; |
chosen = (chosen + 1) % 8; |
write_ascii_string(3, chosen+6, ">"); |
_delay_ms(500); |
} else if (s1_pressed()) { |
380,7 → 351,22 |
COSD_FLAGS ^= COSD_FLAG_WARNINGS; |
config_menu_drawings(chosen); |
break; |
case 4: // exit |
case 4: // reset uptime |
uptime = 0; |
config_menu_doclick(chosen, menu); |
break; |
case 5: // re-request OSD data |
// request OSD Data from NC every 100ms |
usart1_request_mk_data(1, 'o', 100); |
config_menu_doclick(chosen, menu); |
break; |
case 6: // disable debug data |
// disable sending of debug data |
// may result in smoother ddata display |
usart1_request_mk_data(0, 'd', 0); |
config_menu_doclick(chosen, menu); |
break; |
case 7: // exit |
inmenu = 0; |
break; |
} |
530,16 → 516,14 |
//usart1_puts("hello world!\r\n"); |
// request data ever 100ms from FC |
//unsigned char ms = 10; |
//sendMKData('d', 0, &ms, 1); |
// request data ever 100ms from FC; |
//usart1_request_mk_data(0, 'd', 100); |
// request OSD Data from NC every 100ms |
unsigned char ms = 10; |
sendMKData('o', 1, &ms, 1); |
usart1_request_mk_data(1, 'o', 100); |
// and disable debug... |
//ms = 0; |
//sendMKData('d', 0, &ms, 1); |
//usart1_request_mk_data(0, 'd', 0); |
// disable TXD-pin |
usart1_DisableTXD(); |
648,19 → 632,19 |
} else { |
// stats |
if (COSD_FLAGS & COSD_FLAG_STATS) { |
write_ascii_string(2, 5, "max Altitude:"); |
write_ascii_string_pgm(2, 5, stats_item_pointers[0]); // max Altitude |
write_number_s(17, 5, max_Altimeter / 30); |
write_char_xy(22, 5, 204); // small meters m |
write_ascii_string(2, 6, "max Speed :"); |
write_ascii_string_pgm(2, 6, stats_item_pointers[1]); // max Speed |
write_3digit_number_u(19, 6, (uint16_t) (((uint32_t) max_GroundSpeed * 36) / 1000)); |
write_char_xy(22, 6, 203); // km/h |
write_ascii_string(2, 7, "max Distance:"); |
write_ascii_string_pgm(2, 7, stats_item_pointers[2]); // max Distance |
write_number_s(17, 7, max_Distance / 100); |
write_char_xy(22, 7, 204); // small meters m |
write_ascii_string(2, 8, "min voltage :"); |
write_ascii_string_pgm(2, 8, stats_item_pointers[3]); // min voltage |
write_number_u_10th(16, 8, min_UBat); |
write_ascii_string(22, 8, "V"); // voltage |
write_ascii_string(2, 9, "max time :"); |
write_ascii_string_pgm(2, 9, stats_item_pointers[4]); // max time |
write_time(16, 9, max_FlyingTime); |
write_char_xy(22, 9, 210); // fly clock |
} else if (COSD_FLAGS & COSD_FLAG_ARTHORIZON) { // if no stats there is space horizon |
711,30 → 695,11 |
} |
// handle keypress |
if (s1_pressed()) { |
//sendMKData('d', 1, (unsigned char*) 0, 1); |
// request OSD Data from NC every 100ms |
/*unsigned char ms = 10; |
sendMKData('o', 1, &ms, 1); |
_delay_ms(500);*/ |
config_menu(); |
} |
if (s2_pressed()) { |
uptime = 0; |
_delay_ms(100); |
} |
if (seconds_since_last_data > 2) { |
// re-request OSD Data from NC |
// re-enable TXD pin |
usart1_EnableTXD(); |
// every 100ms |
unsigned char ms = 10; |
sendMKData('o', 1, &ms, 1); |
// disable TXD pin again |
usart1_DisableTXD(); |
// request OSD Data from NC every 100ms |
usart1_request_mk_data(1, 'o', 100); |
seconds_since_last_data = 0; |
} |
} |
/C-OSD/trunk/main.h |
---|
0,0 → 1,73 |
/**************************************************************************** |
* Copyright (C) 2009 by Claas Anders "CaScAdE" Rathje * |
* admiralcascade@gmail.com * |
* Project-URL: http://www.mylifesucks.de/oss/c-osd/ * |
* * |
* This program is free software; you can redistribute it and/or modify * |
* it under the terms of the GNU General Public License as published by * |
* the Free Software Foundation; either version 2 of the License. * |
* * |
* This program is distributed in the hope that it will be useful, * |
* but WITHOUT ANY WARRANTY; without even the implied warranty of * |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
* GNU General Public License for more details. * |
* * |
* You should have received a copy of the GNU General Public License * |
* along with this program; if not, write to the * |
* Free Software Foundation, Inc., * |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
/* ########################################################################## |
* Debugging and general purpose definitions |
* ##########################################################################*/ |
#define ALLCHARSDEBUG 0 // set to 1 and flash firmware to see all chars |
#ifndef WRITECHARS // if WRITECHARS not set via makefile |
#define WRITECHARS -1 // set to 2XX and flash firmware to write new char |
// enables the allchars as well to see results |
#endif |
#ifndef NTSC // if NTSC is not thet via makefile |
#define NTSC 0 // set to 1 for NTSC mode + lifts the bottom line |
#endif |
#define HUD 1 // set to 0 to disable HUD by default |
#define ARTHORIZON 0 // set to 1 to enable roll&nick artificial horizon by default |
#define STATS 1 // set to 1 to enable statistics during motor off by default |
#define WARNINGS 1 // set to 1 to display battery+rc warning even if HUD is disabled |
#define UBAT_WRN 94 // voltage for blinking warning, like FC settings |
#define RCLVL_WRN 100 // make the RC level blink if below this number |
// ### read datasheet before changing stuff below this line :) |
#define BLINK 0b01001111 // attribute byte for blinking chars |
/* ########################################################################## |
* FLAGS usable during runtime |
* ##########################################################################*/ |
#define COSD_FLAG_NTSC 1 |
#define COSD_FLAG_HUD 2 |
#define COSD_FLAG_ARTHORIZON 4 |
#define COSD_FLAG_STATS 8 |
#define COSD_FLAG_WARNINGS 16 |
#define COSD_ICONS_WRITTEN 32 |
/* ########################################################################## |
* LED controll |
* ##########################################################################*/ |
#define LED1_ON PORTC |= (1 << PC0); |
#define LED1_OFF PORTC &= ~(1 << PC0); |
#define LED2_ON PORTC |= (1 << PC1); |
#define LED2_OFF PORTC &= ~(1 << PC1); |
#define LED3_ON PORTC |= (1 << PC2); |
#define LED3_OFF PORTC &= ~(1 << PC2); |
#define LED4_ON PORTC |= (1 << PC3); |
#define LED4_OFF PORTC &= ~(1 << PC3); |
/* ########################################################################## |
* switch controll |
* ##########################################################################*/ |
#define S1_PRESSED !(PINC & (1<<PC5)) |
#define S2_PRESSED !(PINC & (1<<PC4)) |
/C-OSD/trunk/max7456_software_spi.c |
---|
18,6 → 18,9 |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <util/delay.h> |
#include <avr/pgmspace.h> |
#include "max7456_software_spi.h" |
/* ########################################################################## |
136,6 → 139,14 |
} |
/** |
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string_pgm(uint8_t x, uint8_t y, char *string) { |
while (pgm_read_byte(string) != 0x00) |
write_ascii_char(((x++)+(y * 30)), pgm_read_byte(string++)); |
} |
/** |
* Write only the last three digits of a <number> at <x>/<y> to MAX7456 |
* display memory. takes full 16bit numbers as well for stuff |
* like compass only taking three characters (values <= 999) |
/C-OSD/trunk/max7456_software_spi.h |
---|
79,6 → 79,11 |
void write_ascii_string(uint8_t, uint8_t, char*); |
/** |
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory |
*/ |
void write_ascii_string_pgm(uint8_t, uint8_t, char*); |
/** |
* Write only the last three digits of a <number> at <x>/<y> to MAX7456 |
* display memory. takes full 16bit numbers as well for stuff |
* like compass only taking three characters (values <= 999) |
/C-OSD/trunk/usart1.c |
---|
18,8 → 18,19 |
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * |
****************************************************************************/ |
#include <avr/io.h> |
#include <avr/interrupt.h> |
#include <util/delay.h> |
#include "main.h" |
#include "usart1.h" |
volatile uint8_t rxd_buffer_locked = 0; |
volatile uint8_t rxd_buffer[RXD_BUFFER_LEN]; |
volatile uint8_t txd_buffer[TXD_BUFFER_LEN]; |
volatile uint8_t ReceivedBytes = 0; |
volatile uint8_t *pRxData = 0; |
volatile uint8_t RxDataLen = 0; |
/* ########################################################################## |
* USART stuff |
* ##########################################################################*/ |
216,3 → 227,19 |
usart1_puts((char*) txd_buffer); |
} |
/** |
* short script to directly send a request thorugh usart including en- and disabling it |
* where <address> is the address of the receipient, <label> is which data set to request |
* and <ms> represents the milliseconds delay between data |
*/ |
void usart1_request_mk_data(uint8_t address, char label, uint8_t ms) { |
// re-enable TXD pin |
usart1_EnableTXD(); |
unsigned char mstenth = ms/10; |
sendMKData(label, address, &mstenth, 1); |
// disable TXD pin again |
usart1_DisableTXD(); |
} |
/C-OSD/trunk/usart1.h |
---|
23,7 → 23,21 |
#define RXD_BUFFER_LEN 150 |
#define TXD_BUFFER_LEN 150 |
extern volatile uint8_t rxd_buffer_locked; |
extern volatile uint8_t rxd_buffer[RXD_BUFFER_LEN]; |
extern volatile uint8_t txd_buffer[TXD_BUFFER_LEN]; |
extern volatile uint8_t ReceivedBytes; |
extern volatile uint8_t *pRxData; |
extern volatile uint8_t RxDataLen; |
extern |
/** |
* init usart1 |
*/ |
void usart1_init(); |
/** |
* disable the txd pin of usart1 |
*/ |
void usart1_DisableTXD(void); |
32,3 → 46,37 |
* enable the txd pin of usart1 |
*/ |
void usart1_EnableTXD(void); |
/** |
* send a <string> throught usart1 |
*/ |
void usart1_puts(char*); |
/** |
* receive data through usart1 |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Fbranches%2FV0.72p+Code+Redesign+killagreg%2Fuart0.c |
*/ |
ISR(SIG_USART1_RECV); |
/** |
* Decode the recevied Buffer |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.c |
*/ |
void Decode64(void); |
/** |
* request Data through USART in special MK format by adding checksum and |
* encode data in modified Base64 |
* portions taken and adapted from |
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.c |
*/ |
void sendMKData(unsigned char, unsigned char, unsigned char*, unsigned char); |
/** |
* short script to directly send a request thorugh usart including en- and disabling it |
* where <address> is the address of the receipient, <label> is which data set to request |
* and <ms> represents the milliseconds delay between data |
*/ |
void usart1_request_mk_data(uint8_t, char, uint8_t); |