// return current overtarget waypoint name with leading identifier, even if empty // exception for TEAM MATE: always report OWN CODE if available void GetOvertargetName(TCHAR *overtargetname) { int index; if (OvertargetMode == OVT_MATE) { if (ValidWayPoint(TeamCodeRefWaypoint)) { if (TeammateCodeValid) _stprintf(overtargetname,_T("%s> %s"), GetOvertargetHeader(),CALCULATED_INFO.OwnTeamCode); else _stprintf(overtargetname,_T("%s: %s"), GetOvertargetHeader(),CALCULATED_INFO.OwnTeamCode); } else _stprintf(overtargetname,_T("%s ---"),GetOvertargetHeader()); return; } index=GetOvertargetIndex(); if (index<0) _stprintf(overtargetname,_T("%s ---"),GetOvertargetHeader()); else _stprintf(overtargetname,_T("%s%s"), GetOvertargetHeader(),WayPointList[index].Name); }
bool DevLXV7_EXP::PutGPRMB(PDeviceDescriptor_t d) { //RMB - The recommended minimum navigation sentence is sent whenever a route or a goto is active. // On some systems it is sent all of the time with null data. // The Arrival alarm flag is similar to the arrival alarm inside the unit and can be decoded to // drive an external alarm. // Note: the use of leading zeros in this message to preserve the character spacing. // This is done, I believe, because some autopilots may depend on exact character spacing. // // $GPRMB,A,0.66,L,003,004,4917.24,N,12309.57,W,001.3,052.5,000.5,V*20 //where: // RMB Recommended minimum navigation information // A Data status A = OK, V = Void (warning) // 0.66,L Cross-track error (nautical miles, 9.99 max), // steer Left to correct (or R = right) // 003 Origin waypoint ID // 004 Destination waypoint ID // 4917.24,N Destination waypoint latitude 49 deg. 17.24 min. N // 12309.57,W Destination waypoint longitude 123 deg. 09.57 min. W // 001.3 Range to destination, nautical miles (999.9 max) // 052.5 True bearing to destination // 000.5 Velocity towards destination, knots // V Arrival alarm A = arrived, V = not arrived // *20 checksum static int old_overindex = -99; static int old_overmode = -99; int overindex = GetOvertargetIndex(); int overmode = OvertargetMode; bool bTaskpresent = false; //ValidTaskPoint(0); if(bTaskpresent) if(ValidTaskPoint(ActiveWayPoint)) overindex = Task[ActiveWayPoint].Index; #define SEND_ON_CHANGE_ONLY #ifdef SEND_ON_CHANGE_ONLY if(overindex < 0) /* vaslid waypoint */ return -1; if(overindex == old_overindex) /* same as before */ if(overmode == old_overmode) /* and same mode */ return 0; #endif old_overindex = overindex; old_overmode = overmode; TCHAR szTmp[512]; int DegLat, DegLon; double MinLat, MinLon; char NoS, EoW; if (!ValidWayPoint(overindex)) return TRUE; DegLat = (int)WayPointList[overindex].Latitude; MinLat = WayPointList[overindex].Latitude - DegLat; NoS = 'N'; if((MinLat<0) || ((MinLat-DegLat==0) && (DegLat<0))) { NoS = 'S'; DegLat *= -1; MinLat *= -1; } MinLat *= 60; DegLon = (int)WayPointList[overindex].Longitude ; MinLon = WayPointList[overindex].Longitude - DegLon; EoW = 'E'; if((MinLon<0) || ((MinLon-DegLon==0) && (DegLon<0))) { EoW = 'W'; DegLon *= -1; MinLon *= -1; } MinLon *=60; #define SET_VALUES_BY_RMB #ifdef SET_VALUES_BY_RMB if(bTaskpresent) { #ifdef NO_RMB_BUT_PLXVTARG // $GPRMB,A,0.66,L,003,004 ,4917.24 ,N ,12309.57 ,W ,01.3,52.5,00.5,V*20 _stprintf( szTmp, TEXT("$GPRMB,A,0.00,R,XXX,%s%s,%02d%05.2f,%c,%03d%05.2f,%c,%.1f,%.1f,%.1f,V"), gettext(TEXT("_@M1323_")), // LKTOKEN _@M1323_ "T>" WayPointList[overindex].Name, DegLat, MinLat, NoS, DegLon, MinLon, EoW, WayPointCalc[overindex].Distance * TONAUTICALMILES, WayPointCalc[overindex].Bearing, WayPointCalc[overindex].VGR * TOKNOTS ); LXV7_EXPNMEAddCheckSumStrg(szTmp); d->Com->WriteString(szTmp); #if TESTBENCH StartupStore(TEXT("V7: %s"),szTmp); #endif #else _stprintf( szTmp, TEXT("$PLXVTARG,%s%s,%02d%05.2f,%c,%03d%05.2f,%c,%i "), gettext(TEXT("_@M1323_")), // LKTOKEN _@M1323_ "T>" WayPointList[overindex].Name, DegLat, MinLat, NoS, DegLon, MinLon, EoW, (int) (WayPointList[overindex].Altitude +0.5) ); LXV7_EXPNMEAddCheckSumStrg(szTmp); d->Com->WriteString(szTmp); #endif #if TESTBENCH StartupStore(TEXT("V7: %s"),szTmp); #endif } else { // $GPRMB,A,0.66,L,003,004 ,4917.24 ,N ,12309.57 ,W ,01.3,52.5,00.5,V*20 #ifdef NO_RMB_BUT_PLXVTARG _stprintf( szTmp, TEXT("$GPRMB,A,0.00,R,XXX,%s%s,%02d%05.2f,%c,%03d%05.2f,%c,%.1f,%.1f,%.1f,V"), GetOvertargetHeader(), WayPointList[overindex].Name, DegLat, MinLat, NoS, DegLon, MinLon, EoW, WayPointCalc[overindex].Distance * TONAUTICALMILES, WayPointCalc[overindex].Bearing, WayPointCalc[overindex].VGR * TOKNOTS ); LXV7_EXPNMEAddCheckSumStrg(szTmp); d->Com->WriteString(szTmp); #if TESTBENCH StartupStore(TEXT("V7: %s"),szTmp); #endif #else _stprintf( szTmp, TEXT("$PLXVTARG,%s%s,%02d%05.2f,%c,%03d%05.2f,%c,%i "), GetOvertargetHeader(), WayPointList[overindex].Name, DegLat, MinLat, NoS, DegLon, MinLon, EoW, (int)(WayPointList[overindex].Altitude +0.5) ); LXV7_EXPNMEAddCheckSumStrg(szTmp); d->Com->WriteString(szTmp); #endif #if TESTBENCH StartupStore(TEXT("V7: %s"),szTmp); #endif } #else /**************** * SYm style ****************/ _stprintf( szTmp, TEXT("$PFLX4,,,,%.f,%.f,,,,0,"), WayPointCalc[overindex].Distance, -WayPointCalc[overindex].AltReqd[AltArrivMode]*TOFEET ); LXV7_EXPNMEAddCheckSumStrg(szTmp); d->Com->WriteString(szTmp); #if TESTBENCH StartupStore(TEXT("V7: %s"),szTmp); #endif #endif return(true); }