515,7 → 515,7 |
|
while (1) { |
// write icons at init or after menu/mode-switch |
if (!(COSD_FLAGS & COSD_ICONS_WRITTEN)) { |
if (!(COSD_FLAGS & COSD_ICONS_WRITTEN) && !(COSD_FLAGS & COSD_FLAG_NOOSD)) { |
write_char_xy(5, top_line, 203); // km/h |
write_char_xy(10, top_line, 202); // RC-transmitter |
write_char_xy(16, top_line, 208); // degree symbol |
528,131 → 528,140 |
COSD_FLAGS |= COSD_ICONS_WRITTEN; |
} |
if (rxd_buffer_locked) { |
if (rxd_buffer[2] == 'D') { // FC Data |
/*Decode64(); |
debugData = *((DebugOut_t*) pRxData); |
write_number_s(12, 2, RxDataLen); |
write_number_s(20, 2, setsReceived++); |
write_number_s(12, 3, debugData.Analog[0]); // AngleNick |
write_number_s(12, 4, debugData.Analog[1]); // AngleRoll |
write_number_s(12, 5, debugData.Analog[5]); // Height |
write_number_s(12, 6, debugData.Analog[9]); // Voltage |
write_number_s(12, 7, debugData.Analog[10]);// RC Signal |
write_number_s(12, 8, debugData.Analog[11]);// Gyro compass*/ |
} else if (rxd_buffer[2] == 'O') { // NC OSD Data |
Decode64(); |
naviData = *((NaviData_t*) pRxData); |
if (!(COSD_FLAGS & COSD_FLAG_NOOSD)) { |
if (rxd_buffer[2] == 'D') { // FC Data |
/*Decode64(); |
debugData = *((DebugOut_t*) pRxData); |
write_number_s(12, 2, RxDataLen); |
write_number_s(20, 2, setsReceived++); |
write_number_s(12, 3, debugData.Analog[0]); // AngleNick |
write_number_s(12, 4, debugData.Analog[1]); // AngleRoll |
write_number_s(12, 5, debugData.Analog[5]); // Height |
write_number_s(12, 6, debugData.Analog[9]); // Voltage |
write_number_s(12, 7, debugData.Analog[10]);// RC Signal |
write_number_s(12, 8, debugData.Analog[11]);// Gyro compass*/ |
} else if (rxd_buffer[2] == 'O') { // NC OSD Data |
Decode64(); |
naviData = *((NaviData_t*) pRxData); |
|
// first line |
write_3digit_number_u(2, top_line, (uint16_t)(((uint32_t)naviData.GroundSpeed*36)/1000)); |
// first line |
write_3digit_number_u(2, top_line, (uint16_t)(((uint32_t)naviData.GroundSpeed*36)/1000)); |
|
write_3digit_number_u(7, top_line, naviData.RC_Quality); |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (naviData.RC_Quality > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
last_RC_Quality = naviData.RC_Quality; |
write_3digit_number_u(7, top_line, naviData.RC_Quality); |
if (naviData.RC_Quality <= RCLVL_WRN && last_RC_Quality > RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, BLINK); |
} else if (naviData.RC_Quality > RCLVL_WRN && last_RC_Quality <= RCLVL_WRN) { |
for (uint8_t x = 0; x < 4; x++) |
write_char_att_xy(7 + x, top_line, 0); |
} |
last_RC_Quality = naviData.RC_Quality; |
|
write_3digit_number_u(13, top_line, naviData.CompassHeading); |
write_3digit_number_u(13, top_line, naviData.CompassHeading); |
|
write_ascii_string(17, top_line, directions[heading_conv(naviData.CompassHeading)]); |
write_ascii_string(17, top_line, directions[heading_conv(naviData.CompassHeading)]); |
|
if (naviData.Variometer == 0) { |
write_char_xy(20, top_line, 206); // plain line |
} else if (naviData.Variometer > 0 && naviData.Variometer <= 10) { |
write_char_xy(20, top_line, 234); // small arrow up |
} else if (naviData.Variometer > 10) { |
write_char_xy(20, top_line, 235); // big arrow up |
} else if (naviData.Variometer < 0 && naviData.Variometer >= -10) { |
write_char_xy(20, top_line, 232); // small arrow down |
} else { |
write_char_xy(20, top_line, 233); //big arrow down |
} |
if (naviData.Variometer == 0) { |
write_char_xy(20, top_line, 206); // plain line |
} else if (naviData.Variometer > 0 && naviData.Variometer <= 10) { |
write_char_xy(20, top_line, 234); // small arrow up |
} else if (naviData.Variometer > 10) { |
write_char_xy(20, top_line, 235); // big arrow up |
} else if (naviData.Variometer < 0 && naviData.Variometer >= -10) { |
write_char_xy(20, top_line, 232); // small arrow down |
} else { |
write_char_xy(20, top_line, 233); //big arrow down |
} |
|
// TODO: is this really dm? |
//note:lephisto:according to several sources it's /30 |
write_number_s(22, top_line, naviData.Altimeter/30); |
// TODO: is this really dm? |
//note:lephisto:according to several sources it's /30 |
//write_number_s(22, top_line, naviData.Altimeter/30); |
if (naviData.Altimeter > 300) { |
// above 10m only write full meters |
write_number_s(22, top_line, naviData.Altimeter/30); |
} else { |
// up to 10m write meters.dm |
write_number_u_10th(21, top_line, naviData.Altimeter/3); |
} |
|
// seccond line |
draw_compass(11, top_line + 1, naviData.CompassHeading); |
// seccond line |
draw_compass(11, top_line + 1, naviData.CompassHeading); |
|
// TODO: verify correctness |
uint16_t heading_home = (naviData.HomePositionDeviation.Bearing + 360 - naviData.CompassHeading) % 360; |
write_char_xy(27, top_line + 1, arrowdir[heading_conv(heading_home)]); |
// TODO: verify correctness |
uint16_t heading_home = (naviData.HomePositionDeviation.Bearing + 360 - naviData.CompassHeading) % 360; |
write_char_xy(27, top_line + 1, arrowdir[heading_conv(heading_home)]); |
|
|
write_number_s(22, top_line + 1, naviData.HomePositionDeviation.Distance/100); |
write_number_s(22, top_line + 1, naviData.HomePositionDeviation.Distance/100); |
|
// center |
if (naviData.MKFlags & FLAG_MOTOR_RUN) { // should be engines running |
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
clear(); |
// update flags to paint display again if needed |
COSD_FLAGS &= ~COSD_ICONS_WRITTEN; |
// center |
if (naviData.MKFlags & FLAG_MOTOR_RUN) { // should be engines running |
if (!(old_MKFlags & FLAG_MOTOR_RUN)) { // motors just started, clear middle |
clear(); |
// update flags to paint display again if needed |
COSD_FLAGS &= ~COSD_ICONS_WRITTEN; |
} |
if (COSD_FLAGS & COSD_FLAG_ARTHORIZON) { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
} |
if (COSD_FLAGS & COSD_FLAG_ARTHORIZON) { |
draw_artificial_horizon(top_line + 2, bottom_line - 1, naviData.AngleNick, naviData.AngleRoll); |
} |
} else { |
// stats |
write_ascii_string(2, 5, "max Altitude:"); |
write_number_s(17, 5, max_Altimeter/10); |
write_char_xy(22, 5, 204); // small meters m |
write_ascii_string(2, 6, "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_number_s(17, 7, max_Distance/100); |
write_char_xy(22, 7, 204); // small meters m |
write_ascii_string(2, 8, "min voltage :"); |
//write_number_s(17, 8, min_UBat/10); |
write_number_u_10th(16, 8, min_UBat); |
write_ascii_string(22, 8, "V"); // voltage |
write_ascii_string(2, 9, "max time :"); |
write_time(16, 9, max_FlyingTime); |
write_char_xy(22, 9, 210); // fly clock |
} |
} else { |
// stats |
write_ascii_string(2, 5, "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_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_number_s(17, 7, max_Distance/100); |
write_char_xy(22, 7, 204); // small meters m |
write_ascii_string(2, 8, "min voltage :"); |
//write_number_s(17, 8, min_UBat/10); |
write_number_u_10th(16, 8, min_UBat); |
write_ascii_string(22, 8, "V"); // voltage |
write_ascii_string(2, 9, "max time :"); |
write_time(16, 9, max_FlyingTime); |
write_char_xy(22, 9, 210); // fly clock |
} |
|
// bottom line |
write_number_u_10th(0, bottom_line, naviData.UBat); |
if (naviData.UBat <= UBAT_WRN && last_UBat > UBAT_WRN) { |
for (uint8_t x = 0; x < 7; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else { |
for (uint8_t x = 0; x < 7; x++) |
write_char_att_xy(x, bottom_line, 0); |
} |
// bottom line |
write_number_u_10th(0, bottom_line, naviData.UBat); |
if (naviData.UBat <= UBAT_WRN && last_UBat > UBAT_WRN) { |
for (uint8_t x = 0; x < 7; x++) |
write_char_att_xy(x, bottom_line, BLINK); |
} else { |
for (uint8_t x = 0; x < 7; x++) |
write_char_att_xy(x, bottom_line, 0); |
} |
|
write_time(8, bottom_line, uptime); |
write_time(16, bottom_line, naviData.FlyingTime); |
write_time(8, bottom_line, uptime); |
write_time(16, bottom_line, naviData.FlyingTime); |
|
write_3digit_number_u(23, bottom_line, naviData.SatsInUse); |
write_3digit_number_u(23, bottom_line, naviData.SatsInUse); |
|
if (naviData.NCFlags & NC_FLAG_CH) { |
write_char_xy(27, bottom_line, 231); // gps ch |
} else if (naviData.NCFlags & NC_FLAG_PH) { |
write_char_xy(27, bottom_line, 230); // gps ph |
} else { // (naviData.NCFlags & NC_FLAG_FREE) |
write_char_xy(27, bottom_line, 201); // sat2 (free) |
} |
if (naviData.NCFlags & NC_FLAG_CH) { |
write_char_xy(27, bottom_line, 231); // gps ch |
} else if (naviData.NCFlags & NC_FLAG_PH) { |
write_char_xy(27, bottom_line, 230); // gps ph |
} else { // (naviData.NCFlags & NC_FLAG_FREE) |
write_char_xy(27, bottom_line, 201); // sat2 (free) |
} |
|
//write_number_s(8, 5, RxDataLen); |
//write_number_s(16, 5, setsReceived++); |
//write_number_s(8, 5, RxDataLen); |
//write_number_s(16, 5, setsReceived++); |
|
// remember statistics |
if (naviData.Altimeter > max_Altimeter) max_Altimeter = naviData.Altimeter; |
if (naviData.GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData.GroundSpeed; |
if (naviData.HomePositionDeviation.Distance > max_Distance) { |
max_Distance = naviData.HomePositionDeviation.Distance; |
} |
if (naviData.UBat < min_UBat) min_UBat = naviData.UBat; |
if (naviData.FlyingTime > max_FlyingTime) max_FlyingTime = naviData.FlyingTime; |
// remember statistics |
if (naviData.Altimeter > max_Altimeter) max_Altimeter = naviData.Altimeter; |
if (naviData.GroundSpeed > max_GroundSpeed) max_GroundSpeed = naviData.GroundSpeed; |
if (naviData.HomePositionDeviation.Distance > max_Distance) { |
max_Distance = naviData.HomePositionDeviation.Distance; |
} |
if (naviData.UBat < min_UBat) min_UBat = naviData.UBat; |
if (naviData.FlyingTime > max_FlyingTime) max_FlyingTime = naviData.FlyingTime; |
|
old_MKFlags = naviData.MKFlags; |
} |
old_MKFlags = naviData.MKFlags; |
} // (!(COSD_FLAGS & COSD_FLAG_NOOSD)) |
} |
seconds_since_last_data = 0; |
rxd_buffer_locked = 0; |
} |