Subversion Repositories Projects

Compare Revisions

Regard whitespace Rev 772 → Rev 783

/C-OSD/trunk/CHANGE.LOG
18,6 → 18,12
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
****************************************************************************/
 
20100730-1345
*added current setting display
*updated structs for FC 0.80 and NC 0.20 (old version will still work, just cosmetics)
*battery warn level now _can_ be taken from the FC-Settings
*corrected some defines so FC stuff is only in FC Builds and NC stuff only in NC builds
 
20100701-1745
*hopefully fixed altimeter-stats
*some basic antenna tracking insertion for others to test
/C-OSD/trunk/c-osd.aws
1,0 → 0,0
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA162"/><Files><File00000 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\main.c" Position="295 112 842 570" LineCol="425 36" State="Maximized"/><File00001 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\mk-data-structs.h" Position="317 134 856 562" LineCol="31 19" State="Maximized"/><File00002 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.h" Position="339 156 878 584" LineCol="147 0" State="Maximized"/><File00003 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.c" Position="361 178 900 606" LineCol="24 0" State="Maximized"/><File00004 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.c" Position="383 200 922 628" LineCol="25 0" State="Maximized"/><File00005 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.h" Position="405 222 944 650" LineCol="31 33" State="Maximized"/><File00006 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\characters.c" Position="427 244 966 672" LineCol="5911 18" State="Maximized"/><File00007 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\main.h" Position="291 89 1300 859" LineCol="40 38" State="Maximized"/><File00008 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_helpers.c" Position="471 288 1010 716" LineCol="206 0" State="Maximized"/><File00009 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_helpers.h" Position="493 310 1032 738" LineCol="77 0" State="Maximized"/><File00010 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_default.c" Position="295 112 834 540" LineCol="128 0" State="Maximized"/><File00011 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_fcmode_default.c" Position="317 134 856 562" LineCol="58 0" State="Maximized"/><File00012 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\config.c" Position="339 156 878 584" LineCol="44 0" State="Maximized"/><File00013 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\config.h" Position="361 178 900 606" LineCol="21 0" State="Maximized"/><File00014 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\spi.c" Position="383 200 922 628" LineCol="71 3" State="Maximized"/><File00015 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\spi.h" Position="405 222 944 650" LineCol="70 0" State="Maximized"/><File00016 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\buttons.c" Position="427 244 966 672" LineCol="0 0" State="Maximized"/><File00017 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\buttons.h" Position="449 266 988 694" LineCol="20 0" State="Maximized"/><File00018 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\ppm.c" Position="471 288 1010 716" LineCol="43 0" State="Maximized"/><File00019 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\ppm.h" Position="493 310 1032 738" LineCol="36 0" State="Maximized"/><File00020 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_minimal.c" Position="295 112 834 540" LineCol="57 0" State="Maximized"/><File00021 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_default.h" Position="317 134 856 562" LineCol="26 0" State="Maximized"/><File00022 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_minimal.h" Position="339 156 878 584" LineCol="26 0" State="Maximized"/><File00023 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_fcmode_default.h" Position="361 178 900 606" LineCol="20 0" State="Maximized"/><File00024 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\characters.h" Position="383 200 922 628" LineCol="20 0" State="Maximized"/><File00025 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_fcmode_jopl.c" Position="405 222 944 650" LineCol="78 0" State="Maximized"/><File00026 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\default\Makefile" Position="427 244 966 672" LineCol="19 0" State="Maximized"/><File00027 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart0.c" Position="361 178 1120 679" LineCol="19 0" State="Maximized"/><File00028 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart0.h" Position="383 200 1142 701" LineCol="33 3" State="Maximized"/><File00029 Name="c:\WinAVR\avr\include\math.h" Position="405 222 1164 723" LineCol="339 49" State="Maximized"/></Files></AVRWorkspace>
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATMEGA162"/><Files><File00000 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\main.c" Position="678 101 1419 630" LineCol="444 28" State="Maximized"/><File00001 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\mk-data-structs.h" Position="700 123 1455 644" LineCol="259 18" State="Maximized"/><File00002 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.h" Position="722 145 1477 666" LineCol="88 27" State="Maximized"/><File00003 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\max7456_software_spi.c" Position="744 167 1499 688" LineCol="203 50" State="Maximized"/><File00004 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.c" Position="766 189 1521 710" LineCol="236 0" State="Maximized"/><File00005 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart1.h" Position="788 211 1543 732" LineCol="38 26" State="Maximized"/><File00006 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\characters.c" Position="810 233 1565 754" LineCol="0 0" State="Maximized"/><File00007 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\main.h" Position="674 78 1683 872" LineCol="44 16" State="Maximized"/><File00008 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_helpers.c" Position="854 277 1609 798" LineCol="0 0" State="Maximized"/><File00009 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_helpers.h" Position="876 299 1631 820" LineCol="0 0" State="Maximized"/><File00010 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_default.c" Position="898 321 1653 842" LineCol="25 0" State="Maximized"/><File00011 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_fcmode_default.c" Position="920 343 1675 864" LineCol="23 1" State="Maximized"/><File00012 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\config.c" Position="678 101 1433 622" LineCol="184 15" State="Maximized"/><File00013 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\config.h" Position="700 123 1455 644" LineCol="0 0" State="Maximized"/><File00014 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\spi.c" Position="722 145 1477 666" LineCol="0 0" State="Maximized"/><File00015 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\spi.h" Position="744 167 1499 688" LineCol="0 0" State="Maximized"/><File00016 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\buttons.c" Position="766 189 1521 710" LineCol="0 0" State="Maximized"/><File00017 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\buttons.h" Position="788 211 1543 732" LineCol="0 0" State="Maximized"/><File00018 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\ppm.c" Position="810 233 1565 754" LineCol="0 0" State="Maximized"/><File00019 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\ppm.h" Position="832 255 1587 776" LineCol="0 0" State="Maximized"/><File00020 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_minimal.c" Position="854 277 1609 798" LineCol="25 0" State="Maximized"/><File00021 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_default.h" Position="876 299 1631 820" LineCol="25 6" State="Maximized"/><File00022 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_ncmode_minimal.h" Position="898 321 1653 842" LineCol="25 6" State="Maximized"/><File00023 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_fcmode_default.h" Position="920 343 1675 864" LineCol="0 0" State="Maximized"/><File00024 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\characters.h" Position="678 101 1433 622" LineCol="0 0" State="Maximized"/><File00025 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\osd_fcmode_jopl.c" Position="700 123 1455 644" LineCol="28 0" State="Maximized"/><File00026 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\default\Makefile" Position="722 145 1477 666" LineCol="0 0" State="Maximized"/><File00027 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart0.c" Position="744 167 1499 688" LineCol="0 0" State="Maximized"/><File00028 Name="G:\Eigene Dateien\C-Projects\C-OSD\trunk\usart0.h" Position="766 189 1521 710" LineCol="0 0" State="Maximized"/><File00029 Name="c:\WinAVR\avr\include\math.h" Position="788 211 1543 732" LineCol="0 0" State="Maximized"/></Files></AVRWorkspace>
/C-OSD/trunk/config.c
43,8 → 43,8
 
const displaymode_t * mode;
 
const char ee_message0[] PROGMEM = "Loading Data from EEPROM";
const char ee_message1[] PROGMEM = "No saved Data in EEPROM";
const char ee_message0[] PROGMEM = "Loading from EEPROM";
const char ee_message1[] PROGMEM = "No Data in EEPROM";
const char* ee_msg[] PROGMEM = {ee_message0, ee_message1};
 
/**
52,13 → 52,13
*/
void get_eeprom(uint8_t verbose) {
if (eeprom_read_byte(&ee_checkbyte1) == CHECKBYTE1 && eeprom_read_byte(&ee_checkbyte2) == CHECKBYTE2) {
if (verbose) write_ascii_string_pgm(2, 9, ee_msg[0]); // Loading data
if (verbose) write_ascii_string_pgm(2, 2, ee_msg[0]); // Loading data
COSD_FLAGS_MODES = eeprom_read_byte(&ee_COSD_FLAGS_MODES);
COSD_FLAGS_CONFIG = eeprom_read_byte(&ee_COSD_FLAGS_CONFIG);
COSD_DISPLAYMODE = eeprom_read_byte(&ee_COSD_DISPLAYMODE);
//if (verbose) write_ndigit_number_u(23, 11, COSD_DISPLAYMODE, 2, 0);
} else {
if (verbose) write_ascii_string_pgm(2, 9, ee_msg[1]); // Loading data
if (verbose) write_ascii_string_pgm(2, 2, ee_msg[1]); // Loading data
}
}
 
79,58 → 79,82
*/
void init_cosd(uint8_t UBat) {
clear();
write_ascii_string_pgm(2, 1, PSTR("C-OSD Initialisation")); // C-OSD Initialisation
write_ascii_string_pgm(2, 1, PSTR("C-OSD Init"));
write_ascii_string_pgm(2, 4, PSTR(BUILDDATE));
 
#if FCONLY
write_ascii_string_pgm(2, 2, PSTR("FC only Mode")); // FC only mode
write_ascii_string_pgm(2, 3, PSTR("FC only Mode"));
#else
write_ascii_string_pgm(2, 2, PSTR("NaviCtrl Mode")); // NaviCtrl Mode
write_ascii_string_pgm(2, 3, PSTR("NaviCtrl Mode"));
 
usart1_EnableTXD();
usart1_puts_pgm(PSTR(REQUEST_UART_TO_FC));
usart1_DisableTXD();
#endif
write_ascii_string_pgm(2, 3, PSTR(BUILDDATE));
uint8_t cellnum = 0;
 
 
usart1_request_blocking('Q', PSTR(REQUEST_CURRENT_SETTING));
 
//write_ascii_char(4 + 12 * 30, rxd_buffer[2]);
 
paramset_serial setting;
setting = *((paramset_serial*)pRxData);
 
write_ascii_string_pgm(2, 6, PSTR("Setting: "));
write_ndigit_number_u(11, 6, setting.SettingsIndex, 1, 1);
write_ascii_string_len(13, 6, setting.param.Name, 12);
 
uint8_t cells = 0;
write_ascii_string_pgm(2, 8, PSTR("Battery:")); // Guessing Number of Cells
if (CELL_NUM == -1) {
write_ascii_string_pgm(2, 4, PSTR("Guessing Number of Cells")); // Guessing Number of Cells
do {
cellnum++;
} while (UBat > ((cellnum * CELL_VOLT_MAX) + 23));
#define MAX_CELL_VOLTAGE 43 // max cell volatage for LiPO
if (setting.param.UnterspannungsWarnung < 50) {
// up to 6s LiPo, less than 2s is technical impossible
for(cells = 2; cells < 7; cells++) {
if(UBat < cells * MAX_CELL_VOLTAGE) break;
}
 
min_voltage = cells * setting.param.UnterspannungsWarnung;
} else {
cellnum = CELL_NUM;
min_voltage = setting.param.UnterspannungsWarnung;
cells = min_voltage / CELL_VOLT_MIN;
}
min_voltage = cellnum * CELL_VOLT_MIN;
max_voltage = cellnum * CELL_VOLT_MAX;
write_ascii_string_pgm(2, 5, PSTR("Number of Cells:")); // Number of Cells
write_ndigit_number_u(21, 5, cellnum, 1, 0);
write_ascii_string_pgm(2, 6, PSTR("Warn Voltage :")); // Warn Voltage
write_ndigit_number_s_10th(20, 6, min_voltage, 3, 0);
write_ascii_string_pgm(2, 7, PSTR("Max Voltage :")); // Max Voltage
write_ndigit_number_s_10th(20, 7, max_voltage, 3, 0);
//write_ndigit_number_u(10, 13, setting.param.UnterspannungsWarnung, 3, 1);
} else {
cells = CELL_NUM;
min_voltage = cells * CELL_VOLT_MIN;
}
 
max_voltage = cells * CELL_VOLT_MAX;
 
write_ndigit_number_u(11, 8, cells, 1, 0);
write_ascii_string_pgm(13, 8, PSTR("Cells")); // Number of Cells
write_ascii_string_pgm(2, 9, PSTR("Warn:")); // Warn Voltage
write_ndigit_number_s_10th(8, 9, min_voltage, 3, 0);
write_ascii_string_pgm(14, 9, PSTR("Max:")); // Max Voltage
write_ndigit_number_s_10th(20, 9, max_voltage, 3, 0);
 
get_eeprom(1);
 
//write_ascii_string_pgm(23, 2, vm[COSD_FLAGS & COSD_FLAG_NTSC]);
if (COSD_FLAGS_CONFIG & COSD_FLAG_NTSC) {
write_ascii_string_pgm(23, 2, VM_NTSC);
write_ascii_string_pgm(23, 1, VM_NTSC);
} else {
write_ascii_string_pgm(23, 2, VM_PAL);
write_ascii_string_pgm(23, 1, VM_PAL);
}
 
// request version from board
rxd_buffer_locked = 0;
usart1_EnableTXD();
#if FCONLY
//usart1_request_mk_data(0, 'v', 0);
write_ascii_string_pgm(2, 11, PSTR("FC VERSION: ........"));
usart1_puts_pgm(PSTR(REQUEST_FC_VERSION));
usart1_request_blocking('V', PSTR(REQUEST_FC_VERSION));
#else
usart1_request_nc_uart();
//usart1_request_mk_data(1, 'v', 0);
usart1_puts_pgm(PSTR(REQUEST_NC_VERSION));
write_ascii_string_pgm(2, 11, PSTR("NC VERSION: ........"));
usart1_request_blocking('V', PSTR(REQUEST_NC_VERSION));
#endif
usart1_DisableTXD();
// wait for response
while (rxd_buffer_locked == 0) {
asm("nop");
}
Decode64();
str_VersionInfo VersionInfo;
VersionInfo = *((str_VersionInfo*)pRxData);
 
140,6 → 164,8
// end version request
 
 
 
 
#if FCONLY
COSD_DISPLAYMODE %= (sizeof (fcdisplaymodes) / sizeof (displaymode_t));
mode = fcdisplaymodes;
156,7 → 182,7
//usart1_request_mk_data(1, 'o', 100);
#endif
 
_delay_ms(3000);
_delay_ms(5000);
clear();
// update flags to paint display again because of clear
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN;
/C-OSD/trunk/default/dist.bat
19,7 → 19,8
:: * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
:: ****************************************************************************/
 
set DATE=20100701-1745
set DATE=20100730-1345
 
:: date /T
 
:: clean up first
/C-OSD/trunk/main.c
61,7 → 61,7
#if !(ALLCHARSDEBUG|(WRITECHARS != -1))
 
volatile NaviData_t naviData;
volatile DebugOut_t debugData;
volatile str_DebugOut debugData;
 
// cache old vars for blinking attribute, checkup is faster than full
// attribute write each time
139,20 → 139,24
const char str_2[] PROGMEM = "minimal";
const char str_3[] PROGMEM = " jopl";
 
const displaymode_t ncdisplaymodes[] PROGMEM = {
{ osd_ncmode_default, (char *)str_1},
{ osd_ncmode_minimal, (char *)str_2}
};
 
#if FCONLY
const displaymode_t fcdisplaymodes[] PROGMEM = {
{ osd_fcmode_default, (char *)str_1},
{ osd_fcmode_jopl, (char *)str_3}
};
int (*osd_fcmode)(void) = (int(*)(void)) & osd_fcmode_default;
#else
 
const displaymode_t ncdisplaymodes[] PROGMEM = {
{ osd_ncmode_default, (char *)str_1},
{ osd_ncmode_minimal, (char *)str_2}
};
int (*osd_ncmode)(void) = (int(*)(void)) & osd_ncmode_default;
int (*osd_fcmode)(void) = (int(*)(void)) & osd_fcmode_default;
#endif
 
 
#endif
 
/* ##########################################################################
* Interrupt handler
* ##########################################################################*/
334,6 → 338,7
// clear serial screen
//usart1_puts("\x1B[2J\x1B[H");
 
 
while (1) {
// in case SPI is ready and there is nothing to send right now
if (!icnt && spi_ready) {
360,7 → 365,7
#if FCONLY
if (rxd_buffer[2] == 'D') { // FC Data
Decode64();
debugData = *((DebugOut_t*)pRxData);
debugData = *((str_DebugOut*)pRxData);
 
// init on first data retrival, distinguished by last battery :)
if (last_UBat == 255) {
436,6 → 441,10
config_menu();
}
if (seconds_since_last_data > 0) {
#if !FCONLY
usart1_request_nc_uart();
#endif
 
usart1_EnableTXD();
//usart1_puts_pgm(PSTR("zu alt\r\n"));
#if FCONLY
/C-OSD/trunk/main.h
143,7 → 143,7
volatile uint16_t setsReceived;
 
volatile NaviData_t naviData;
volatile DebugOut_t debugData;
volatile str_DebugOut debugData;
 
// cache old vars for blinking attribute, checkup is faster than full
// attribute write each time
/C-OSD/trunk/max7456_software_spi.c
197,6 → 197,16
}
 
/**
* write an ascii <string> with lenght <len> at <x>/<y> to MAX7456 display memory
*/
void write_ascii_string_len(uint8_t x, uint8_t y, char *string, uint8_t len) {
while (len--) {
write_ascii_char(((x++)+(y * 30)), *string);
string++;
}
}
 
/**
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory
*/
void write_ascii_string_pgm(uint8_t x, uint8_t y, const char *string) {
/C-OSD/trunk/max7456_software_spi.h
84,6 → 84,11
void write_ascii_string(uint8_t, uint8_t, char*);
 
/**
* write an ascii <string> with lenght <len> at <x>/<y> to MAX7456 display memory
*/
void write_ascii_string_len(uint8_t x, uint8_t y, char *string, uint8_t len);
 
/**
* write an ascii <string> from progmen at <x>/<y> to MAX7456 display memory
*/
void write_ascii_string_pgm(uint8_t, uint8_t, const char*);
/C-OSD/trunk/mk-data-structs.h
34,12 → 34,12
/*
* FC Debug Struct
* portions taken and adapted from
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.72p%2Fuart.h
* http://svn.mikrokopter.de/filedetails.php?repname=FlightCtrl&path=/tags/V0.80d/uart.h
*/
typedef struct {
uint8_t Digital[2];
uint16_t Analog[32]; // Debugvalues
} __attribute__((packed)) DebugOut_t;
unsigned char Status[2];
signed int Analog[32]; // Debugwerte
} __attribute__((packed)) str_DebugOut;
 
typedef struct {
unsigned char SWMajor;
47,13 → 47,13
unsigned char ProtoMajor;
unsigned char ProtoMinor;
unsigned char SWPatch;
unsigned char Reserved[5];
} str_VersionInfo;
unsigned char HardwareError[5];
} __attribute__((packed)) str_VersionInfo;
 
/*
* NaviCtrl OSD Structs
* NaviCtrl GPS Structs
* portions taken and adapted from
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.18c%2Fuart1.h
* http://svn.mikrokopter.de/filedetails.php?repname=NaviCtrl&path=/tags/V0.20c/ubx.h
*/
typedef struct {
s32 Longitude; // in 1E-7 deg
61,12 → 61,19
s32 Altitude; // in mm
u8 Status; // validity of data
} __attribute__((packed)) GPS_Pos_t;
#define INVALID 0x00
#define NEWDATA 0x01
#define PROCESSED 0x02
 
 
/*
* NaviCtrl OSD Structs
* portions taken and adapted from
* http://svn.mikrokopter.de/filedetails.php?repname=NaviCtrl&path=/tags/V0.20c/uart1.h
*/
typedef struct {
u16 Distance; // distance to target in cm
u16 Distance; // distance to target in dm
s16 Bearing; // course to target in deg
} __attribute__((packed)) GPS_PosDev_t;
 
85,10 → 92,10
u16 FlyingTime; // in seconds
u8 UBat; // Battery Voltage in 0.1 Volts
u16 GroundSpeed; // speed over ground in cm/s (2D)
s16 Heading; // current flight direction in � as angle to north
s16 CompassHeading; // current compass value in �
s8 AngleNick; // current Nick angle in 1�
s8 AngleRoll; // current Rick angle in 1�
s16 Heading; // current flight direction in ° as angle to north
s16 CompassHeading; // current compass value in °
s8 AngleNick; // current Nick angle in 1°
s8 AngleRoll; // current Rick angle in 1°
u8 RC_Quality; // RC_Quality
u8 FCFlags; // Flags from FC
u8 NCFlags; // Flags from NC
103,11 → 110,19
u16 UsedCapacity; // used capacity in mAh
} __attribute__((packed)) NaviData_t;
 
#define NC_FLAG_FREE 0x01
#define NC_FLAG_PH 0x02
#define NC_FLAG_CH 0x04
#define NC_FLAG_RANGE_LIMIT 0x08
#define NC_FLAG_NOSERIALLINK 0x10
#define NC_FLAG_TARGET_REACHED 0x20
#define NC_FLAG_MANUAL_CONTROL 0x40
#define NC_FLAG_8 0x80
 
/*
* MikroKopter Flags
* taken from
* http://svn.mikrokopter.de/mikrowebsvn/filedetails.php?repname=FlightCtrl&path=%2Ftags%2FV0.78b%2Ffc.h
* portions taken and adapted from
* http://svn.mikrokopter.de/filedetails.php?repname=FlightCtrl&path=/tags/V0.80d/fc.h
*/
#define FCFLAG_MOTOR_RUN 0x01
#define FCFLAG_FLY 0x02
118,25 → 133,132
#define FCFLAG_SPI_RX_ERR 0x40
#define FCFLAG_I2CERR 0x80
 
// backward compat
#define FLAG_MOTOR_RUN FCFLAG_MOTOR_RUN
#define FLAG_FLY FCFLAG_FLY
#define FLAG_CALIBRATE FCFLAG_CALIBRATE
#define FLAG_START FCFLAG_START
#define DEFEKT_G_NICK 0x01
#define DEFEKT_G_ROLL 0x02
#define DEFEKT_G_GIER 0x04
#define DEFEKT_A_NICK 0x08
#define DEFEKT_A_ROLL 0x10
#define DEFEKT_A_Z 0x20
#define DEFEKT_PRESSURE 0x40
#define DEFEKT_CAREFREE_ERR 0x80
 
#define DEFEKT_I2C 0x01
#define DEFEKT_BL_MISSING 0x02
#define DEFEKT_SPI_RX_ERR 0x04
#define DEFEKT_PPM_ERR 0x08
#define DEFEKT_MIXER_ERR 0x10
 
 
/*
* NaviCtrl Flags
* taken from
* http://mikrocontroller.cco-ev.de/mikrowebsvn/filedetails.php?repname=NaviCtrl&path=%2Ftags%2FV0.17e%2Fuart1.h
* MikroKopter config struct
* portions taken and adapted from
* http://svn.mikrokopter.de/filedetails.php?repname=FlightCtrl&path=/tags/V0.80d/eeprom.h
*/
#define NC_FLAG_FREE 0x01
#define NC_FLAG_PH 0x02
#define NC_FLAG_CH 0x04
#define NC_FLAG_RANGE_LIMIT 0x08
#define NC_FLAG_NOSERIALLINK 0x10
#define NC_FLAG_TARGET_REACHED 0x20
#define NC_FLAG_MANUAL_CONTROL 0x40
#define NC_FLAG_8 0x80
typedef struct {
unsigned char Revision;
unsigned char Kanalbelegung[12]; // GAS[0], GIER[1],NICK[2], ROLL[3], POTI1, POTI2, POTI3
unsigned char GlobalConfig; // 0x01=Höhenregler aktiv,0x02=Kompass aktiv, 0x04=GPS aktiv, 0x08=Heading Hold aktiv
unsigned char Hoehe_MinGas; // Wert : 0-100
unsigned char Luftdruck_D; // Wert : 0-250
unsigned char MaxHoehe; // Wert : 0-32
unsigned char Hoehe_P; // Wert : 0-32
unsigned char Hoehe_Verstaerkung; // Wert : 0-50
unsigned char Hoehe_ACC_Wirkung; // Wert : 0-250
unsigned char Hoehe_HoverBand; // Wert : 0-250
unsigned char Hoehe_GPS_Z; // Wert : 0-250
unsigned char Hoehe_StickNeutralPoint;// Wert : 0-250
unsigned char Stick_P; // Wert : 1-6
unsigned char Stick_D; // Wert : 0-64
unsigned char Gier_P; // Wert : 1-20
unsigned char Gas_Min; // Wert : 0-32
unsigned char Gas_Max; // Wert : 33-250
unsigned char GyroAccFaktor; // Wert : 1-64
unsigned char KompassWirkung; // Wert : 0-32
unsigned char Gyro_P; // Wert : 10-250
unsigned char Gyro_I; // Wert : 0-250
unsigned char Gyro_D; // Wert : 0-250
unsigned char Gyro_Gier_P; // Wert : 10-250
unsigned char Gyro_Gier_I; // Wert : 0-250
unsigned char Gyro_Stability; // Wert : 0-16
unsigned char UnterspannungsWarnung; // Wert : 0-250
unsigned char NotGas; // Wert : 0-250 //Gaswert bei Empängsverlust
unsigned char NotGasZeit; // Wert : 0-250 // Zeitbis auf NotGas geschaltet wird, wg. Rx-Problemen
unsigned char Receiver; // 0= Summensignal, 1= Spektrum, 2 =Jeti, 3=ACT DSL, 4=ACT S3D
unsigned char I_Faktor; // Wert : 0-250
unsigned char UserParam1; // Wert : 0-250
unsigned char UserParam2; // Wert : 0-250
unsigned char UserParam3; // Wert : 0-250
unsigned char UserParam4; // Wert : 0-250
unsigned char ServoNickControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoNickComp; // Wert : 0-250 // Einfluss Gyro/Servo
unsigned char ServoNickMin; // Wert : 0-250 // Anschlag
unsigned char ServoNickMax; // Wert : 0-250 // Anschlag
//--- Seit V0.75
unsigned char ServoRollControl; // Wert : 0-250 // Stellung des Servos
unsigned char ServoRollComp; // Wert : 0-250
unsigned char ServoRollMin; // Wert : 0-250
unsigned char ServoRollMax; // Wert : 0-250
//---
unsigned char ServoNickRefresh; // Speed of the Servo
unsigned char Servo3; // Value or mapping of the Servo Output
unsigned char Servo4; // Value or mapping of the Servo Output
unsigned char Servo5; // Value or mapping of the Servo Output
unsigned char LoopGasLimit; // Wert: 0-250 max. Gas während Looping
unsigned char LoopThreshold; // Wert: 0-250 Schwelle für Stickausschlag
unsigned char LoopHysterese; // Wert: 0-250 Hysterese für Stickausschlag
unsigned char AchsKopplung1; // Wert: 0-250 Faktor, mit dem Gier die Achsen Roll und Nick koppelt (NickRollMitkopplung)
unsigned char AchsKopplung2; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char CouplingYawCorrection; // Wert: 0-250 Faktor, mit dem Nick und Roll verkoppelt werden
unsigned char WinkelUmschlagNick; // Wert: 0-250 180°-Punkt
unsigned char WinkelUmschlagRoll; // Wert: 0-250 180°-Punkt
unsigned char GyroAccAbgleich; // 1/k (Koppel_ACC_Wirkung)
unsigned char Driftkomp;
unsigned char DynamicStability;
unsigned char UserParam5; // Wert : 0-250
unsigned char UserParam6; // Wert : 0-250
unsigned char UserParam7; // Wert : 0-250
unsigned char UserParam8; // Wert : 0-250
//---Output ---------------------------------------------
unsigned char J16Bitmask; // for the J16 Output
unsigned char J16Timing; // for the J16 Output
unsigned char J17Bitmask; // for the J17 Output
unsigned char J17Timing; // for the J17 Output
// seit version V0.75c
unsigned char WARN_J16_Bitmask; // for the J16 Output
unsigned char WARN_J17_Bitmask; // for the J17 Output
//---NaviCtrl---------------------------------------------
unsigned char NaviGpsModeControl; // Parameters for the Naviboard
unsigned char NaviGpsGain;
unsigned char NaviGpsP;
unsigned char NaviGpsI;
unsigned char NaviGpsD;
unsigned char NaviGpsPLimit;
unsigned char NaviGpsILimit;
unsigned char NaviGpsDLimit;
unsigned char NaviGpsACC;
unsigned char NaviGpsMinSat;
unsigned char NaviStickThreshold;
unsigned char NaviWindCorrection;
unsigned char NaviSpeedCompensation;
unsigned char NaviOperatingRadius;
unsigned char NaviAngleLimitation;
unsigned char NaviPH_LoginTime;
//---Ext.Ctrl---------------------------------------------
unsigned char ExternalControl; // for serial Control
//---CareFree---------------------------------------------
unsigned char OrientationAngle; // Where is the front-direction?
unsigned char OrientationModeControl; // switch for CareFree
//------------------------------------------------
unsigned char BitConfig; // (war Loop-Cfg) Bitcodiert: 0x01=oben, 0x02=unten, 0x04=links, 0x08=rechts / wird getrennt behandelt
unsigned char ServoCompInvert; // // 0x01 = Nick, 0x02 = Roll 0 oder 1 // WICHTIG!!! am Ende lassen
unsigned char ExtraConfig; // bitcodiert
char Name[12];
unsigned char crc; // must be the last byte!
} __attribute__((packed)) paramset_t;
 
typedef struct {
u8 SettingsIndex;
paramset_t param;
} __attribute__((packed)) paramset_serial;
 
#endif
/C-OSD/trunk/osd_fcmode_default.c
23,7 → 23,7
#include "osd_helpers.h"
#include "osd_fcmode_default.h"
 
#if !(ALLCHARSDEBUG|(WRITECHARS != -1))
#if (!(ALLCHARSDEBUG || (WRITECHARS != -1)) && FCONLY)
 
int osd_fcmode_default() {
if (COSD_FLAGS_MODES & COSD_FLAG_HUD) {
/C-OSD/trunk/osd_fcmode_jopl.c
26,7 → 26,7
#include "osd_helpers.h"
#include "osd_fcmode_default.h"
 
#if !(ALLCHARSDEBUG|(WRITECHARS != -1))
#if (!(ALLCHARSDEBUG || (WRITECHARS != -1)) && FCONLY)
 
// jopl Vario
static int16_t last_Altimeter = 0;
/C-OSD/trunk/osd_ncmode_default.c
23,7 → 23,7
#include "osd_helpers.h"
#include "osd_ncmode_default.h"
 
#if !(ALLCHARSDEBUG|(WRITECHARS != -1))
#if (!(ALLCHARSDEBUG || (WRITECHARS != -1)) && !FCONLY)
 
int osd_ncmode_default() {
uint8_t rc_signal = naviData.RC_RSSI ? naviData.RC_RSSI : naviData.RC_Quality; // if RSSI is present use it, else use Qality
139,8 → 139,8
}
 
// center
if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle
if (naviData.FCFlags & FCFLAG_MOTOR_RUN) { // should be engines running
if (!(old_MKFlags & FCFLAG_MOTOR_RUN)) { // motors just started, clear middle
clear();
// remember current heigth for gps offset
altimeter_offset = naviData.CurrentPosition.Altitude / 1000;
167,7 → 167,7
// motors are on, assume we were/are flying
COSD_FLAGS_RUNTIME |= COSD_WASFLYING;
} else {
if ((old_MKFlags & FLAG_MOTOR_RUN)) { // motors just stopped
if ((old_MKFlags & FCFLAG_MOTOR_RUN)) { // motors just stopped
clear(); // clear whole screen in case there is horizon stuff left
// update flags to paint display again if needed
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN;
286,7 → 286,7
//write_number_s(16, 5, setsReceived++);
 
// remember statistics (only when engines running)
if (naviData.FCFlags & FLAG_MOTOR_RUN) {
if (naviData.FCFlags & FCFLAG_MOTOR_RUN) {
if (COSD_FLAGS_CONFIG & COSD_FLAG_GPSHEIGHT) {
if (naviData.CurrentPosition.Altitude / 1000 - altimeter_offset > max_Altimeter) max_Altimeter = naviData.CurrentPosition.Altitude / 1000;
} else {
/C-OSD/trunk/osd_ncmode_default.h
21,6 → 21,8
#ifndef _OSD_NCMODE_DEFAULT_H
#define _OSD_NCMODE_DEFAULT_H
 
#if (!(ALLCHARSDEBUG || (WRITECHARS != -1)) && !FCONLY)
int osd_ncmode_default(void);
#endif
 
#endif
/C-OSD/trunk/osd_ncmode_minimal.c
23,7 → 23,7
#include "osd_helpers.h"
#include "osd_ncmode_default.h"
 
#if !(ALLCHARSDEBUG|(WRITECHARS != -1))
#if (!(ALLCHARSDEBUG || (WRITECHARS != -1)) && !FCONLY)
 
int osd_ncmode_minimal() {
 
62,8 → 62,8
 
 
// center
if (naviData.FCFlags & FLAG_MOTOR_RUN) { // should be engines running
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle
if (naviData.FCFlags & FCFLAG_MOTOR_RUN) { // should be engines running
if (!(old_MKFlags & FCFLAG_MOTOR_RUN)) { // motors just started, clear middle
clear();
// update flags to paint display again if needed
COSD_FLAGS_RUNTIME &= ~COSD_ICONS_WRITTEN;
149,7 → 149,7
}
 
// remember statistics (only when engines running)
if (naviData.FCFlags & FLAG_MOTOR_RUN) {
if (naviData.FCFlags & FCFLAG_MOTOR_RUN) {
if (naviData.Altimeter > max_Altimeter) max_Altimeter = naviData.Altimeter;
if (naviData.GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData.GroundSpeed;
if (naviData.HomePositionDeviation.Distance > max_Distance) {
/C-OSD/trunk/osd_ncmode_minimal.h
21,6 → 21,8
#ifndef _OSD_NCMODE_MINIMAL_H
#define _OSD_NCMODE_MINIMAL_H
 
#if (!(ALLCHARSDEBUG || (WRITECHARS != -1)) && !FCONLY)
int osd_ncmode_minimal(void);
#endif
 
#endif
/C-OSD/trunk/usart1.c
28,7 → 28,7
 
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 txd_buffer[TXD_BUFFER_LEN];
volatile uint8_t ReceivedBytes = 0;
volatile uint8_t *pRxData = 0;
volatile uint8_t RxDataLen = 0;
127,9 → 127,9
 
if ((c2 == '#') && (c1 == 'b' || c1 == 'c') &&
#if FCONLY
(c == 'V' || c == 'D')) { // version and debug
(c == 'V' || c == 'D' || c == 'Q')) { // version, debug, settings
#else
(c == 'V' || c == 'O')) { // version and OSD
(c == 'V' || c == 'O' || c == 'Q')) { // version, OSD, settings
#endif
usart_rx_ok = 1;
rxd_buffer[ptr_rxd_buffer++] = c2;
213,7 → 213,42
RxDataLen = ptrOut - 3;
}
 
 
/**
* Request Data through usart1 until a answer is received
*/
void usart1_request_blocking(unsigned char answer, const char* message) {
rxd_buffer[2] = answer + 1;
while (rxd_buffer[2] != answer) {
rxd_buffer_locked = 0;
usart1_EnableTXD();
usart1_puts_pgm(message);
usart1_DisableTXD();
static uint8_t wait = 0;
wait = 0;
while (rxd_buffer_locked == 0 && wait < 150) {
wait++;
_delay_ms(10);
}
}
Decode64();
}
 
/**
* Request UART Redirect from NC to itself
*/
void usart1_request_nc_uart(void) {
usart1_EnableTXD();
usart1_putc(0x1B);
usart1_putc(0x1B);
usart1_putc(0x55);
usart1_putc(0xAA);
usart1_putc(0x00);
usart1_DisableTXD();
}
 
 
/**
* request Data through USART in special MK format by adding checksum and
* encode data in modified Base64
* portions taken and adapted from
/C-OSD/trunk/usart1.h
23,18 → 23,26
 
#define baud 57600
 
#define RXD_BUFFER_LEN 150
#define RXD_BUFFER_LEN 160
#define TXD_BUFFER_LEN 20 // not so much needed
 
//#define REQUEST_OSD_DATA "#aoAm==EX\r"
#define REQUEST_OSD_DATA "#bo?]==EG\r"
#define REQUEST_DBG_DATA "#ad?]==D{\r"
#define REQUEST_DBG_DISABLE "#ad====DY\r"
 
#define REQUEST_FC_VERSION "#av====Dk\r"
#define REQUEST_NC_VERSION "#bv====Dl\r"
 
#define REQUEST_CURRENT_SETTING "#bq|nZBFy\r"
 
#define REQUEST_UART_TO_FC "#cu=IfREv\r"
 
 
 
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 txd_buffer[TXD_BUFFER_LEN];
extern volatile uint8_t ReceivedBytes;
extern volatile uint8_t *pRxData;
extern volatile uint8_t RxDataLen;
80,6 → 88,16
void Decode64(void);
 
/**
* Request Data through usart1 until a answer is received
*/
void usart1_request_blocking(unsigned char answer, const char* message);
 
/**
* Request UART Redirect from NC to itself
*/
void usart1_request_nc_uart(void);
 
/**
* request Data through USART in special MK format by adding checksum and
* encode data in modified Base64
* portions taken and adapted from