void InfoBoxContentNextETA::Update(InfoBoxWindow &infobox) { // use proper non-terminal next task stats if (!XCSoarInterface::Calculated().task_stats.task_valid || !XCSoarInterface::Calculated().task_stats.current_leg.achievable()) { infobox.SetInvalid(); return; } TCHAR tmp[32]; int dd = (int)(XCSoarInterface::Calculated().task_stats.current_leg. solution_remaining.TimeElapsed) + DetectCurrentTime(XCSoarInterface::Basic()); const BrokenTime t = BrokenTime::FromSecondOfDayChecked(abs(dd)); // Set Value _stprintf(tmp, _T("%02u:%02u"), t.hour, t.minute); infobox.SetValue(tmp); // Set Comment _stprintf(tmp, _T("%02u"), t.second); infobox.SetComment(tmp); }
void InfoBoxContentFinalETA::Update(InfoBoxWindow &infobox) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.achievable()) { infobox.SetInvalid(); return; } TCHAR tmp[32]; int dd = abs((int)(task_stats.total.solution_remaining.TimeElapsed + fixed(DetectCurrentTime(&XCSoarInterface::Basic())))) % (3600 * 24); int hours = (dd / 3600); int mins = (dd / 60 - hours * 60); int seconds = (dd - mins * 60 - hours * 3600); hours = hours % 24; // Set Value _stprintf(tmp, _T("%02d:%02d"), hours, mins); infobox.SetValue(tmp); // Set Comment _stprintf(tmp, _T("%02d"), seconds); infobox.SetComment(tmp); }
static void UpdateValuesTimes(void) { WndProperty *wp; TCHAR Temp[1000]; double sunsettime; int sunsethours; int sunsetmins; sunsettime = DoSunEphemeris(GPS_INFO.Longitude, GPS_INFO.Latitude); sunsethours = (int)sunsettime; sunsetmins = (int)((sunsettime-sunsethours)*60); wp = (WndProperty*)wf->FindByName(TEXT("prpSunset")); if (wp) { _stprintf(Temp, TEXT("%02d:%02d"), sunsethours,sunsetmins); wp->SetText(Temp); } wp = (WndProperty*)wf->FindByName(TEXT("prpLocalTime")); if (wp) { Units::TimeToText(Temp, (int)DetectCurrentTime()); wp->SetText(Temp); } wp = (WndProperty*)wf->FindByName(TEXT("prpTakeoffTime")); if (wp) { if (CALCULATED_INFO.FlightTime>0) { Units::TimeToText(Temp, (int)TimeLocal((long)CALCULATED_INFO.TakeOffTime)); wp->SetText(Temp); } else { wp->SetText(TEXT("")); } } wp = (WndProperty*)wf->FindByName(TEXT("prpLandingTime")); if (wp) { if (!CALCULATED_INFO.Flying) { Units::TimeToText(Temp, (int)TimeLocal((long)(CALCULATED_INFO.TakeOffTime +CALCULATED_INFO.FlightTime))); wp->SetText(Temp); } else { wp->SetText(TEXT("")); } } wp = (WndProperty*)wf->FindByName(TEXT("prpFlightTime")); if (wp) { if (CALCULATED_INFO.FlightTime > 0){ Units::TimeToText(Temp, (int)CALCULATED_INFO.FlightTime); wp->SetText(Temp); } else { wp->SetText(TEXT("")); } } }
bool CheckCondition(NMEA_INFO *Basic, DERIVED_INFO *Calculated) { if (!ValidTaskPoint(ActiveWayPoint) || !Calculated->Flying) { return false; } // THIS IS BUGGY IN NORTHERN EMISPHERE, TODO DISCOVER WHY double sunsettime = DoSunEphemeris( WayPointList[Task[ActiveWayPoint].Index].Longitude, WayPointList[Task[ActiveWayPoint].Index].Latitude); double d1 = (Calculated->TaskTimeToGo+DetectCurrentTime())/3600; double d0 = (DetectCurrentTime())/3600; bool past_sunset = (d1>sunsettime) && (d0<sunsettime); if (past_sunset && !devIsCondor(devA())) { // notify on change only return true; } else { return false; } };
void FormatterTime::AssignValue(int i) { switch (i) { case 9: SecsToDisplayTime((int)CALCULATED_INFO.LastThermalTime); break; case 36: SecsToDisplayTime((int)CALCULATED_INFO.FlightTime); break; case 39: SecsToDisplayTime(DetectCurrentTime()); break; case 40: SecsToDisplayTime((int)(GPS_INFO.Time)); break; case 46: SecsToDisplayTime((int)(CALCULATED_INFO.LegTimeToGo+DetectCurrentTime())); Valid = ValidTaskPoint(ActiveWayPoint) && (CALCULATED_INFO.LegTimeToGo< 0.9*ERROR_TIME); break; default: break; } }
void TimesStatusPanel::Refresh() { const NMEAInfo &basic = CommonInterface::Basic(); const DerivedInfo &calculated = CommonInterface::Calculated(); const FlyingState &flight = calculated.flight; TCHAR Temp[64]; fixed sunsettime; int sunsethours; int sunsetmins; sunsettime = XCSoarInterface::Calculated().sunset_time; sunsethours = (int)sunsettime; sunsetmins = (int)((sunsettime - fixed(sunsethours)) * 60); _stprintf(Temp, _T("%02d:%02d"), sunsethours, sunsetmins); SetFormValue(form, _T("prpSunset"), Temp); Units::TimeToTextHHMMSigned(Temp, DetectCurrentTime(basic)); SetFormValue(form, _T("prpLocalTime"), Temp); if (positive(flight.flight_time)) { Units::TimeToTextHHMMSigned(Temp, TimeLocal((long)flight.takeoff_time)); SetFormValue(form, _T("prpTakeoffTime"), Temp); } else { SetFormValue(form, _T("prpTakeoffTime"), _T("")); } if (!flight.flying && positive(flight.flight_time)) { Units::TimeToTextHHMMSigned(Temp, TimeLocal((long)(flight.takeoff_time + flight.flight_time))); SetFormValue(form, _T("prpLandingTime"), Temp); } else { SetFormValue(form, _T("prpLandingTime"), _T("")); } if (positive(flight.flight_time)) { Units::TimeToTextHHMMSigned(Temp, (int)flight.flight_time); SetFormValue(form, _T("prpFlightTime"), Temp); } else { SetFormValue(form, _T("prpFlightTime"), _T("")); } }
void InfoBoxContentFinalETA::Update(InfoBoxData &data) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.IsAchievable()) { data.SetInvalid(); return; } int dd = (int)task_stats.total.solution_remaining.time_elapsed + DetectCurrentTime(XCSoarInterface::Basic()); const BrokenTime t = BrokenTime::FromSecondOfDayChecked(abs(dd)); // Set Value data.UnsafeFormatValue(_T("%02u:%02u"), t.hour, t.minute); // Set Comment data.UnsafeFormatComment(_T("%02u"), t.second); }
void InfoBoxContentFinalETA::Update(InfoBoxWindow &infobox) { const TaskStats &task_stats = XCSoarInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.total.achievable()) { infobox.SetInvalid(); return; } TCHAR tmp[32]; int dd = (int)task_stats.total.solution_remaining.TimeElapsed + DetectCurrentTime(XCSoarInterface::Basic()); const BrokenTime t = BrokenTime::FromSecondOfDayChecked(abs(dd)); // Set Value _stprintf(tmp, _T("%02u:%02u"), t.hour, t.minute); infobox.SetValue(tmp); // Set Comment _stprintf(tmp, _T("%02u"), t.second); infobox.SetComment(tmp); }
void InfoBoxContentNextETA::Update(InfoBoxData &data) { // use proper non-terminal next task stats const NMEAInfo &basic = CommonInterface::Basic(); const TaskStats &task_stats = CommonInterface::Calculated().task_stats; if (!task_stats.task_valid || !task_stats.current_leg.IsAchievable()) { data.SetInvalid(); return; } int dd = (int)(task_stats.current_leg.solution_remaining.time_elapsed) + DetectCurrentTime(basic); const BrokenTime t = BrokenTime::FromSecondOfDayChecked(abs(dd)); // Set Value data.UnsafeFormatValue(_T("%02u:%02u"), t.hour, t.minute); // Set Comment data.UnsafeFormatComment(_T("%02u"), t.second); }
void FormatterAATTime::AssignValue(int i) { double dd; if (AATEnabled && ValidTaskPoint(ActiveWayPoint)) { dd = CALCULATED_INFO.TaskTimeToGo; if ((CALCULATED_INFO.TaskStartTime>0.0) && (CALCULATED_INFO.Flying) &&(ActiveWayPoint>0)) { dd += GPS_INFO.Time-CALCULATED_INFO.TaskStartTime; } dd= max(0,min(24.0*3600.0,dd))-AATTaskLength*60; if (dd<0) { status = 1; // red } else { if (CALCULATED_INFO.TaskTimeToGoTurningNow > (AATTaskLength+5)*60) { status = 2; // blue } else { status = 0; // black } } } else { dd = 0; status = 0; // black } switch (i) { case 27: SecsToDisplayTime((int)CALCULATED_INFO.AATTimeToGo); Valid = (ValidTaskPoint(ActiveWayPoint) && AATEnabled && (CALCULATED_INFO.AATTimeToGo< 0.9*ERROR_TIME)); break; case 41: #if (OLD_CALCULATIONS) SecsToDisplayTime((int)(CALCULATED_INFO.TaskTimeToGo)); Valid = ValidTaskPoint(ActiveWayPoint) && (CALCULATED_INFO.TaskTimeToGo< 0.9*ERROR_TIME); #else SecsToDisplayTime((int)(CALCULATED_INFO.LKTaskETE)); Valid = ValidTaskPoint(ActiveWayPoint) && (CALCULATED_INFO.LKTaskETE< 0.9*ERROR_TIME) && CALCULATED_INFO.LKTaskETE>0; /* This is crashing the old navboxes, somewhere in old navboxes we should fix the Valid true return values that is not considering a single goto as a task. This does not happen in lk mode so no problems if (!Valid) { if ( (WayPointCalc[Task[ActiveWayPoint].Index].NextETE > 0) && !ValidTaskPoint(1)) { SecsToDisplayTime((int)(WayPointCalc[Task[ActiveWayPoint].Index].NextETE)); Valid=true; } } */ #endif break; case 42: #if (OLD_CALCULATIONS) SecsToDisplayTime((int)(CALCULATED_INFO.LegTimeToGo)); Valid = ValidTaskPoint(ActiveWayPoint) && (CALCULATED_INFO.LegTimeToGo< 0.9*ERROR_TIME); #else if (ValidTaskPoint(ActiveWayPoint)) { SecsToDisplayTime((int)(WayPointCalc[Task[ActiveWayPoint].Index].NextETE)); Valid = (WayPointCalc[Task[ActiveWayPoint].Index].NextETE < 0.9*ERROR_TIME); } else Valid=false; #endif break; case 45: SecsToDisplayTime((int)(CALCULATED_INFO.TaskTimeToGo+DetectCurrentTime())); Valid = ValidTaskPoint(ActiveWayPoint) && (CALCULATED_INFO.TaskTimeToGo< 0.9*ERROR_TIME); break; case 62: if (AATEnabled && ValidTaskPoint(ActiveWayPoint)) { SecsToDisplayTime((int)dd); Valid = (dd< 0.9*ERROR_TIME); } else { SecsToDisplayTime(0); Valid = false; } break; default: break; } }
void TimesStatusPanel::Refresh() { const NMEAInfo &basic = CommonInterface::Basic(); const FlyingState &flight = CommonInterface::Calculated().flight; StaticString<64> temp; if (basic.location_available && basic.date_available) { SunEphemeris::Result sun = SunEphemeris::CalcSunTimes( basic.location, basic.date_time_utc, fixed(GetUTCOffset()) / 3600); const unsigned sunrisehours = (int)sun.time_of_sunrise; const unsigned sunrisemins = (int)((sun.time_of_sunrise - fixed(sunrisehours)) * 60); const unsigned sunsethours = (int)sun.time_of_sunset; const unsigned sunsetmins = (int)((sun.time_of_sunset - fixed(sunsethours)) * 60); temp.Format(_T("%02u:%02u - %02u:%02u"), sunrisehours, sunrisemins, sunsethours, sunsetmins); SetText(Daylight, temp); } else { SetText(Daylight, _T("")); } if (basic.time_available) { FormatSignedTimeHHMM(temp.buffer(), DetectCurrentTime(basic)); SetText(LocalTime, temp); FormatSignedTimeHHMM(temp.buffer(), (int) basic.time); SetText(UTCTime, temp); } else { SetText(LocalTime, _T("")); SetText(UTCTime, _T("")); } if (basic.date_available) { temp.Format(_T("%04d-%02d-%02d"), basic.date_time_utc.year, basic.date_time_utc.month, basic.date_time_utc.day); SetText(UTCDate, temp); } else { SetText(UTCDate, _T("")); } if (positive(flight.flight_time)) { FormatSignedTimeHHMM(temp.buffer(), TimeLocal((int)flight.takeoff_time)); SetText(TakeoffTime, temp); } else { SetText(TakeoffTime, _T("")); } if (!flight.flying && positive(flight.flight_time)) { FormatSignedTimeHHMM(temp.buffer(), TimeLocal((long)(flight.takeoff_time + flight.flight_time))); SetText(LandingTime, temp); } else { SetText(LandingTime, _T("")); } if (positive(flight.flight_time)) { FormatSignedTimeHHMM(temp.buffer(), (int)flight.flight_time); SetText(FlightTime, temp); } else { SetText(FlightTime, _T("")); } }