/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; |
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)); |
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) { |
#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 { |
min_voltage = setting.param.UnterspannungsWarnung; |
cells = min_voltage / CELL_VOLT_MIN; |
} |
//write_ndigit_number_u(10, 13, setting.param.UnterspannungsWarnung, 3, 1); |
} else { |
cellnum = CELL_NUM; |
cells = CELL_NUM; |
min_voltage = cells * 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); |
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 |
442,7 → 451,7 |
// request data ever 100ms from FC; |
//usart1_request_mk_data(0, 'd', 100); |
usart1_puts_pgm(PSTR(REQUEST_DBG_DATA)); |
#else |
#else |
// request OSD Data from NC every 100ms |
//usart1_request_mk_data(1, 'o', 100); |
usart1_puts_pgm(PSTR(REQUEST_OSD_DATA)); |
/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,80 → 34,95 |
/* |
* 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; |
typedef struct { |
unsigned char Status[2]; |
signed int Analog[32]; // Debugwerte |
} __attribute__((packed)) str_DebugOut; |
typedef struct { |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char ProtoMinor; |
unsigned char SWPatch; |
unsigned char Reserved[5]; |
} str_VersionInfo; |
unsigned char SWMajor; |
unsigned char SWMinor; |
unsigned char ProtoMajor; |
unsigned char ProtoMinor; |
unsigned char SWPatch; |
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 |
s32 Latitude; // in 1E-7 deg |
s32 Altitude; // in mm |
u8 Status; // validity of data |
s32 Longitude; // in 1E-7 deg |
s32 Latitude; // in 1E-7 deg |
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 |
s16 Bearing; // course to target in deg |
u16 Distance; // distance to target in dm |
s16 Bearing; // course to target in deg |
} __attribute__((packed)) GPS_PosDev_t; |
typedef struct { |
u8 Version; // version of the data structure |
GPS_Pos_t CurrentPosition; // see ubx.h for details |
GPS_Pos_t TargetPosition; |
GPS_PosDev_t TargetPositionDeviation; |
GPS_Pos_t HomePosition; |
GPS_PosDev_t HomePositionDeviation; |
u8 WaypointIndex; // index of current waypoints running from 0 to WaypointNumber-1 |
u8 WaypointNumber; // number of stored waypoints |
u8 SatsInUse; // number of satellites used for position solution |
s16 Altimeter; // hight according to air pressure |
s16 Variometer; // climb(+) and sink(-) rate |
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� |
u8 RC_Quality; // RC_Quality |
u8 FCFlags; // Flags from FC |
u8 NCFlags; // Flags from NC |
u8 Errorcode; // 0 --> okay |
u8 OperatingRadius; // current operation radius around the Home Position in m |
s16 TopSpeed; // velocity in vertical direction in cm/s |
u8 TargetHoldTime; // time in s to stay at the given target, counts down to 0 if target has been reached |
u8 RC_RSSI; // Receiver signal strength (since version 2 added) |
s16 SetpointAltitude; // setpoint for altitude |
u8 Gas; // for future use |
u16 Current; // actual current in 0.1A steps |
u16 UsedCapacity; // used capacity in mAh |
u8 Version; // version of the data structure |
GPS_Pos_t CurrentPosition; // see ubx.h for details |
GPS_Pos_t TargetPosition; |
GPS_PosDev_t TargetPositionDeviation; |
GPS_Pos_t HomePosition; |
GPS_PosDev_t HomePositionDeviation; |
u8 WaypointIndex; // index of current waypoints running from 0 to WaypointNumber-1 |
u8 WaypointNumber; // number of stored waypoints |
u8 SatsInUse; // number of satellites used for position solution |
s16 Altimeter; // hight according to air pressure |
s16 Variometer; // climb(+) and sink(-) rate |
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° |
u8 RC_Quality; // RC_Quality |
u8 FCFlags; // Flags from FC |
u8 NCFlags; // Flags from NC |
u8 Errorcode; // 0 --> okay |
u8 OperatingRadius; // current operation radius around the Home Position in m |
s16 TopSpeed; // velocity in vertical direction in cm/s |
u8 TargetHoldTime; // time in s to stay at the given target, counts down to 0 if target has been reached |
u8 RC_RSSI; // Receiver signal strength (since version 2 added) |
s16 SetpointAltitude; // setpoint for altitude |
u8 Gas; // for future use |
u16 Current; // actual current in 0.1A steps |
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; |
211,7 → 211,42 |
} |
pRxData = &rxd_buffer[3]; |
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 |
/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; |
79,6 → 87,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 |