コード例 #1
0
// 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);
}
コード例 #2
0
ファイル: devLXV7_EXP.cpp プロジェクト: acasadoalonso/LK8000
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);
}