コード例 #1
0
ファイル: Parser.cpp プロジェクト: rkalman/LK8000
BOOL NMEAParser::VTG(TCHAR *String, TCHAR **params, size_t nparams, NMEA_INFO *pGPS)
{
  // GPSCONNECT = TRUE; // 121127  NO! VTG gives no position fix
  if (RMCAvailable) return FALSE;
  double speed=0;

  // if no valid fix, we dont get speed either!
  if (gpsValid)
  {
	speed = StrToDouble(params[4], NULL);

	pGPS->Speed = KNOTSTOMETRESSECONDS * speed;
  
	if (ISCAR)
	if (pGPS->Speed>trackbearingminspeed) {
		pGPS->TrackBearing = AngleLimit360(StrToDouble(params[0], NULL));
	}
  }

  // if we are here, no RMC is available but if no GGA also, we are in troubles: to check!
  if (!GGAAvailable) {
	TriggerGPSUpdate();
  }

  return TRUE;

} // END VTG
コード例 #2
0
ファイル: devFlymasterF1.cpp プロジェクト: AlphaLima/LK8000
static BOOL VARIO(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *pGPS)
{
  // $VARIO,fPressure,fVario,Bat1Volts,Bat2Volts,BatBank,TempSensor1,TempSensor2*CS

  TCHAR ctemp[80];
  NMEAParser::ExtractParameter(String,ctemp,0);
  double ps = StrToDouble(ctemp,NULL);
  UpdateBaroSource( pGPS, 0,d,  	 (1 - pow(fabs(ps / QNH), 0.190284)) * 44307.69);

  NMEAParser::ExtractParameter(String,ctemp,1);
  pGPS->Vario = StrToDouble(ctemp,NULL)/10.0;
  // JMW vario is in dm/s

  NMEAParser::ExtractParameter(String,ctemp,2);
  pGPS->ExtBatt1_Voltage = StrToDouble(ctemp,NULL);
  NMEAParser::ExtractParameter(String,ctemp,3);
  pGPS->ExtBatt2_Voltage = StrToDouble(ctemp,NULL);
  NMEAParser::ExtractParameter(String,ctemp,4);
  pGPS->ExtBatt_Bank = (int)StrToDouble(ctemp,NULL);

/*
  StartupStore(_T("++++++ BATTBANK: "));
  StartupStore(ctemp);
  StartupStore(_T("\n"));
*/

  pGPS->VarioAvailable = TRUE;

  TriggerVarioUpdate();

  return TRUE;
}
コード例 #3
0
ファイル: devZander.cpp プロジェクト: IvanSantanna/LK8000
static BOOL PZAN2(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *apGPS)
{
  TCHAR ctemp[80];
  double vtas, wnet, vias;

  NMEAParser::ExtractParameter(String,ctemp,0);
  vtas = StrToDouble(ctemp,NULL)/3.6;
  
  NMEAParser::ExtractParameter(String,ctemp,1);
  wnet = (StrToDouble(ctemp,NULL)-10000)/100; // cm/s
  apGPS->Vario = wnet;


  if (apGPS->BaroAltitudeAvailable)
  {
    vias = vtas/AirDensityRatio(AltitudeToQNEAltitude(apGPS->BaroAltitude));

  } else {
    vias = 0.0;
  }

  apGPS->AirspeedAvailable = TRUE;
  apGPS->TrueAirspeed = vtas;
  apGPS->IndicatedAirspeed = vias;
  apGPS->VarioAvailable = TRUE;

  TriggerVarioUpdate();

  return TRUE;
}
コード例 #4
0
ファイル: DynamicBody.cpp プロジェクト: Philbywhizz/pioneer
void DynamicBody::LoadFromJson(const Json::Value &jsonObj, Space *space)
{
	ModelBody::LoadFromJson(jsonObj, space);

	if (!jsonObj.isMember("dynamic_body")) throw SavedGameCorruptException();
	Json::Value dynamicBodyObj = jsonObj["dynamic_body"];

	if (!dynamicBodyObj.isMember("force")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("torque")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("vel")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("ang_vel")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("mass")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("mass_radius")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("ang_inertia")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("is_moving")) throw SavedGameCorruptException();

	JsonToVector(&m_force, dynamicBodyObj, "force");
	JsonToVector(&m_torque, dynamicBodyObj, "torque");
	JsonToVector(&m_vel, dynamicBodyObj, "vel");
	JsonToVector(&m_angVel, dynamicBodyObj, "ang_vel");
	m_mass = StrToDouble(dynamicBodyObj["mass"].asString());
	m_massRadius = StrToDouble(dynamicBodyObj["mass_radius"].asString());
	m_angInertia = StrToDouble(dynamicBodyObj["ang_inertia"].asString());
	m_isMoving = dynamicBodyObj["is_moving"].asBool();

	m_aiMessage = AIError::AIERROR_NONE;
	m_decelerating = false;
	for ( int i=0; i < Feature::MAX_FEATURE; i++ ) m_features[i] = false;
}
コード例 #5
0
void DynamicBody::LoadFromJson(const Json::Value &jsonObj, Space *space)
{
	ModelBody::LoadFromJson(jsonObj, space);

	if (!jsonObj.isMember("dynamic_body")) throw SavedGameCorruptException();
	Json::Value dynamicBodyObj = jsonObj["dynamic_body"];

	if (!dynamicBodyObj.isMember("force")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("torque")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("vel")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("ang_vel")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("mass")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("mass_radius")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("ang_inertia")) throw SavedGameCorruptException();
	if (!dynamicBodyObj.isMember("is_moving")) throw SavedGameCorruptException();

	JsonToVector(&m_force, dynamicBodyObj, "force");
	JsonToVector(&m_torque, dynamicBodyObj, "torque");
	JsonToVector(&m_vel, dynamicBodyObj, "vel");
	JsonToVector(&m_angVel, dynamicBodyObj, "ang_vel");
	m_mass = StrToDouble(dynamicBodyObj["mass"].asString());
	m_massRadius = StrToDouble(dynamicBodyObj["mass_radius"].asString());
	m_angInertia = StrToDouble(dynamicBodyObj["ang_inertia"].asString());
	m_isMoving = dynamicBodyObj["is_moving"].asBool();
}
コード例 #6
0
ファイル: Parser.cpp プロジェクト: miza/LK8000
// we need to parse GLL as well because it can mark the start of a new quantum data
// followed by values with no data, ex. altitude, vario, etc.
BOOL NMEAParser::GLL(TCHAR *String, TCHAR **params, size_t nparams, NMEA_INFO *GPS_INFO)
{

  gpsValid = !NAVWarn(params[5][0]);

  if (!activeGPS) return TRUE;

  if (ReplayLogger::IsEnabled()) {
    // block actual GPS signal
	InterfaceTimeoutReset();
	return TRUE;
  }
  
  GPS_INFO->NAVWarning = !gpsValid;
  
  // use valid time with invalid fix
  double glltime = StrToDouble(params[4],NULL);
  if (glltime>0) {
	#ifdef NEWTRIGGERGPS
	double ThisTime = TimeConvert(glltime, GPS_INFO); // 091208
	#else
	double ThisTime = TimeModify(glltime, GPS_INFO);
	#endif

	#ifndef NEWTRIGGERGPS
	if (!TimeHasAdvanced(ThisTime, GPS_INFO)) return FALSE; // 091208
	#endif

	#ifdef NEWTRIGGERGPS
	// is time advanced to a new quantum?
	if (ThisTime >NmeaTime) {
		// yes so lets trigger the gps event
		TriggerGPSUpdate();
		Sleep(50); // 091208
		NmeaTime=ThisTime;
		TimeSet(GPS_INFO); // 091208
		TimeHasAdvanced(ThisTime,GPS_INFO); // 091208
		//StartupStore(_T(".............. trigger from GLL\n"));
	}
	#endif
  }
  if (!gpsValid) return FALSE;  // 091108 addon BUGFIX GLL time with no valid signal
  
  double tmplat;
  double tmplon;
  
  tmplat = MixedFormatToDegrees(StrToDouble(params[0], NULL));
  tmplat = NorthOrSouth(tmplat, params[1][0]);
  
  tmplon = MixedFormatToDegrees(StrToDouble(params[2], NULL));
  tmplon = EastOrWest(tmplon,params[3][0]);
  
  if (!((tmplat == 0.0) && (tmplon == 0.0))) {
	GPS_INFO->Latitude = tmplat;
	GPS_INFO->Longitude = tmplon;
  } else {
    
  }
  return TRUE;
}
コード例 #7
0
ファイル: devWesterboer.cpp プロジェクト: AlphaLima/LK8000
static BOOL PWES2(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *pGPS)
{
//	$PWES2: Datenausgabe, Geräteparameter
//	$PWES2,DD,SSSS,YY,FFFF*CS<CR><LF>
//	Symbol Inhalt Einheit Wertebereich Beispiel
//	DD Device 20=VW1000,
//	21=VW1010,
//	22=VW1020,
//	23=VW1030,
//	60=VW1150
//	22 für VW1020
//	SSSS Seriennummer 0 .. 9999
//	YY Baujahr 0 .. 99 10 = 2010
//	FFFF Firmware * 100 100 .. 9999 101 = 1.01
//	$PWES2,60,1234,12,3210*22
#ifdef DEVICE_SERIAL
TCHAR ctemp[180];
static int NoMsg=0;

if(_tcslen(String) < 180)
  if(((pGPS->SerialNumber == 0) || (oldSerial	!= SerialNumber)) && (NoMsg < 5))
  {
	NoMsg++ ;
    NMEAParser::ExtractParameter(String,ctemp,0);
    pGPS->HardwareId= (int)StrToDouble(ctemp,NULL);
    switch (pGPS->HardwareId)
    {
      case 21:  _tcscpy(d->Name, TEXT("VW1010")); break;
      case 22:  _tcscpy(d->Name, TEXT("VW1020")); break;
      case 23:  _tcscpy(d->Name, TEXT("VW1030")); break;
      case 60:  _tcscpy(d->Name, TEXT("VW1150")); break;
      default:  _tcscpy(d->Name, TEXT("Westerboer")); break;
    }


	NMEAParser::ExtractParameter(String,ctemp,1);
	pGPS->SerialNumber= (int)StrToDouble(ctemp,NULL);
	SerialNumber = pGPS->SerialNumber;

	NMEAParser::ExtractParameter(String,ctemp,2);
	int Year = (int)(StrToDouble(ctemp,NULL));

	NMEAParser::ExtractParameter(String,ctemp,3);
	pGPS->SoftwareVer= StrToDouble(ctemp,NULL)/100.0;



    _stprintf(ctemp, _T("%s (#%i) DETECTED"), d->Name, pGPS->SerialNumber);
    DoStatusMessage(ctemp);
	StartupStore(_T(". %s\n"),ctemp);
    _stprintf(ctemp, _T("SW Ver:%3.2f  HW Ver:%i "),  pGPS->SoftwareVer, Year);
    DoStatusMessage(ctemp);
	StartupStore(_T(". %s\n"),ctemp);
	oldSerial	=SerialNumber;
  }
  // nothing to do
#endif
  return(true);
} // PWES2()
コード例 #8
0
ファイル: devLKext1.cpp プロジェクト: Mazuk/LK8000
static BOOL LK8EX1(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *GPS_INFO)
{

  TCHAR ctemp[80];
  bool havebaro=false;

  // HPA from the pressure sensor
  NMEAParser::ExtractParameter(String,ctemp,0);
  double ps = StrToDouble(ctemp,NULL);
  if (ps!=999999) {
	ps/=100;
	if (d == pDevPrimaryBaroSource) {
	    UpdateBaroSource( GPS_INFO, LK_EXT1, (1 - pow(fabs(ps / QNH),  0.190284)) * 44307.69);
	}
  }

  // QNE
  if (!havebaro) {
	NMEAParser::ExtractParameter(String,ctemp,1);
	double ba = StrToDouble(ctemp,NULL);
	if (ba!=99999) {
		if (d == pDevPrimaryBaroSource) {
		    UpdateBaroSource( GPS_INFO, LK_EXT1,  AltitudeToQNHAltitude(ba));
		}
	}
  }


  // VARIO
  NMEAParser::ExtractParameter(String,ctemp,2);
  double va = StrToDouble(ctemp,NULL);
  if (va != 9999) {
	GPS_INFO->Vario = va/100;
	GPS_INFO->VarioAvailable = TRUE;
  } else
	GPS_INFO->VarioAvailable = FALSE;

  // OAT
  NMEAParser::ExtractParameter(String,ctemp,3);
  double ta = StrToDouble(ctemp,NULL);
  if (ta != 99) {
	GPS_INFO->OutsideAirTemperature = ta;
	GPS_INFO->TemperatureAvailable=TRUE;
  }

  // BATTERY PERCENTAGES
  NMEAParser::ExtractParameter(String,ctemp,4);
  double voa = StrToDouble(ctemp,NULL);
  if (voa!=999) {
	GPS_INFO->ExtBatt1_Voltage = voa;
  }



  // currently unused in LK, but ready for next future
  TriggerVarioUpdate();

  return TRUE;
}
コード例 #9
0
ファイル: devCompeo.cpp プロジェクト: JanezKolar/LK8000
static BOOL VMVABD(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *GPS_INFO)
{
/*
	$VMVABD,  
	0000.0 gps altitude,		0
	M,				1
	0000.0 bari altitude,		2
	M,				3
	-0.0 vario ms,,,		4
	MS,				7
	0.0 ias or tas,			8
	KH,				9
	22.4 temp,			10
	C*nn

	091129
	The Brauniger Compeo can send TAS if a pitot is connected (delta hang gliders) or IAS is rotary device for para.
	Since rotary is seldom used, we assume TAS is received. No indication from NMEA about IAS or TAS selected.
	100114 IAS or TAS???
*/

  TCHAR ctemp[80];
  double vtas, vias;

  NMEAParser::ExtractParameter(String,ctemp,0);
  GPS_INFO->Altitude = StrToDouble(ctemp,NULL);

  NMEAParser::ExtractParameter(String,ctemp,2);
  if (d == pDevPrimaryBaroSource) {
	  GPS_INFO->BaroAltitude = AltitudeToQNHAltitude(StrToDouble(ctemp,NULL));
	  GPS_INFO->BaroAltitudeAvailable = TRUE;
  }

  NMEAParser::ExtractParameter(String,ctemp,4);
  GPS_INFO->Vario = StrToDouble(ctemp,NULL);
  GPS_INFO->VarioAvailable = TRUE;

  NMEAParser::ExtractParameter(String,ctemp,8);
  if (ctemp[0] != '\0') { // 100209
	// we store m/s  , so we convert it from kmh
	vias = StrToDouble(ctemp,NULL)/3.6;
	GPS_INFO->IndicatedAirspeed = vias;
	// Check if zero?
	vtas = vias*AirDensityRatio(GPS_INFO->BaroAltitude);
	GPS_INFO->TrueAirspeed = vtas;

	if (GPS_INFO->IndicatedAirspeed >0) 
		GPS_INFO->AirspeedAvailable = TRUE;
	else 
		GPS_INFO->AirspeedAvailable = FALSE;
  } else
		GPS_INFO->AirspeedAvailable = FALSE;


  TriggerVarioUpdate();

  return TRUE;
}
コード例 #10
0
ファイル: devLKext1.cpp プロジェクト: brunotl/LK8000
static BOOL LK8EX1(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *pGPS)
{

    TCHAR ctemp[80];
    bool havebaro=false;

    // HPA from the pressure sensor
    NMEAParser::ExtractParameter(String,ctemp,0);
    double ps = StrToDouble(ctemp,NULL);
    if (ps!=999999) {
        UpdateBaroSource( pGPS, 0,d, StaticPressureToAltitude(ps));
        havebaro = true;
    }

    // QNE
    if (!havebaro) {
        NMEAParser::ExtractParameter(String,ctemp,1);
        double ba = StrToDouble(ctemp,NULL);
        if (ba!=99999) {
            UpdateBaroSource( pGPS, 0,d,  AltitudeToQNHAltitude(ba));
        }
    }


    // VARIO
    NMEAParser::ExtractParameter(String,ctemp,2);
    double va = StrToDouble(ctemp,NULL);
    if (va != 9999) {
        pGPS->Vario = va/100;
        pGPS->VarioAvailable = TRUE;
    } else
        pGPS->VarioAvailable = FALSE;

    // OAT
    NMEAParser::ExtractParameter(String,ctemp,3);
    double ta = StrToDouble(ctemp,NULL);
    if (ta != 99) {
        pGPS->OutsideAirTemperature = ta;
        pGPS->TemperatureAvailable=TRUE;
    }

    // BATTERY PERCENTAGES
    NMEAParser::ExtractParameter(String,ctemp,4);
    double voa = StrToDouble(ctemp,NULL);
    if (voa!=999) {
        pGPS->ExtBatt1_Voltage = voa;
    }



    // currently unused in LK, but ready for next future
    TriggerVarioUpdate();

    return TRUE;
}
コード例 #11
0
ファイル: strproc.c プロジェクト: w1121/battle
/***************************************************************************
 * Function : StrCompareSmart
 *
 * Description: compares numbers as strings or strings
 *
 * Returns: -1/0/1
 *
 * Notes: None
 *
 **************************************************************************/
int StrCompareSmart( char * s1, char * s2 )
{
    /*if (!s1 ||!s2) return -2; */
    if ( StrIsAnyNumber( s1 ) && StrIsAnyNumber( s2 ) )
    {
        double                  z;

        z = StrToDouble( s1 ) - StrToDouble( s2 );
        return ( ( z > 0 ) ? 1 : ( ( z < 0 ) ? -1 : 0 ) );
    };

    return strcmp( s1, s2 );
}
コード例 #12
0
ファイル: devLX16xx.cpp プロジェクト: LK8000/LK8000
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/// Parses LXWP1 sentence.
///
/// @param d         device descriptor
/// @param sentence  received NMEA sentence
/// @param info      GPS info to be updated
///
/// @retval true if the sentence has been parsed
///
//static
bool DevLX16xx::LXWP1(PDeviceDescriptor_t d, const TCHAR* String, NMEA_INFO* pGPS)
{
  // $LXWP1,serial number,instrument ID, software version, hardware
  //   version,license string,NU*SC<CR><LF>
  //
  // instrument ID ID of LX1600
  // serial number unsigned serial number
  // software version float sw version
  // hardware version float hw version
  // license string (option to store a license of PDA SW into LX1600)
 // ParToDouble(sentence, 1, &MACCREADY);
//	$LXWP1,LX5000IGC-2,15862,11.1 ,2.0*4A
#ifdef DEVICE_SERIAL
TCHAR ctemp[180];
static int NoMsg=0;
static int oldSerial=0;
if(_tcslen(String) < 180)
  if((( pGPS->SerialNumber == 0)  || ( pGPS->SerialNumber != oldSerial)) && (NoMsg < 5))
  {
	NoMsg++ ;
    NMEAParser::ExtractParameter(String,ctemp,0);
    if(_tcslen(ctemp) < DEVNAMESIZE)
	  _stprintf(d->Name, _T("%s"),ctemp);

    StartupStore(_T(". %s\n"),ctemp);

	NMEAParser::ExtractParameter(String,ctemp,1);
	pGPS->SerialNumber= (int)StrToDouble(ctemp,NULL);
	oldSerial = pGPS->SerialNumber;
	_stprintf(ctemp, _T("%s Serial Number %i"), d->Name, pGPS->SerialNumber);
	StartupStore(_T(". %s\n"),ctemp);

	NMEAParser::ExtractParameter(String,ctemp,2);
	pGPS->SoftwareVer= StrToDouble(ctemp,NULL);
	_stprintf(ctemp, _T("%s Software Vers.: %3.2f"), d->Name, pGPS->SoftwareVer);
	StartupStore(_T(". %s\n"),ctemp);

	NMEAParser::ExtractParameter(String,ctemp,3);
    pGPS->HardwareId= (int)(StrToDouble(ctemp,NULL)*10);
	_stprintf(ctemp, _T("%s Hardware Vers.: %3.2f"), d->Name, (double)(pGPS->HardwareId)/10.0);
	StartupStore(_T(". %s\n"),ctemp);
    _stprintf(ctemp, _T("%s (#%i) DETECTED"), d->Name, pGPS->SerialNumber);
    DoStatusMessage(ctemp);
    _stprintf(ctemp, _T("SW Ver: %3.2f HW Ver: %3.2f "),  pGPS->SoftwareVer, (double)(pGPS->HardwareId)/10.0);
    DoStatusMessage(ctemp);
  }
  // nothing to do
#endif
  return(true);

} // LXWP1()
コード例 #13
0
ファイル: devZander.cpp プロジェクト: IvanSantanna/LK8000
static BOOL PZAN3(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *apGPS)
{
  //$PZAN3,+,026,A,321,035,V*cc
  //Windkomponente (+=Rückenwind, -=Gegenwind)
  //A=active (Messung Windkomponente ok) / V=void (Messung nicht verwendbar)
  //Windrichtung (true, Wind aus dieser Richtung))
  //Windstärke (km/h)
  //A=active (Windmessung ok) / V=void (Windmessung nicht verwendbar)
  //Windmessung im Geradeausflug: mit ZS1-Kompass A,A, ohne Kompass A,V
  //Windmessung im Kreisflug: V,A
    
  TCHAR ctemp[80];
  double wspeed, wfrom;
  char wind_usable;
   
  NMEAParser::ExtractParameter(String,ctemp,3);
  wfrom=StrToDouble(ctemp,NULL);
  
  NMEAParser::ExtractParameter(String,ctemp,4);
  wspeed=StrToDouble(ctemp,NULL);
  
  NMEAParser::ExtractParameter(String,ctemp,5);
  wind_usable=ctemp[0]; 
  

  if (wind_usable == 'A') {

	wspeed/=3.6;

	#if 1 // 120424 fix correct wind setting

	apGPS->ExternalWindAvailable = TRUE;
	apGPS->ExternalWindSpeed = wspeed;
	apGPS->ExternalWindDirection = wfrom;

	#else

	// do not update if it has not changed
	if ( (wspeed!=CALCULATED_INFO.WindSpeed) || (wfrom != CALCULATED_INFO.WindBearing) ) {

		SetWindEstimate(wspeed, wfrom,9);
		CALCULATED_INFO.WindSpeed=wspeed;
		CALCULATED_INFO.WindBearing=wfrom;

	}
	#endif
  }
    
  return true;
}
コード例 #14
0
void CDialogLinTran::OnBnClickedButton1()
{
	CString strFa;
	CString strFb;

	m_edtFa.GetWindowText(strFa);
	m_edtFb.GetWindowText(strFb);

	double dFa = StrToDouble(strFa);
	double dFb = StrToDouble(strFb);

	CMainFrame* mf = (CMainFrame*)AfxGetMainWnd();
	mf->biDoc.LinTran(dFa,dFb);
	mf->GetActiveView()->Invalidate();
}
コード例 #15
0
double ReadLength(TCHAR *temp)
{
  TCHAR *stop=temp;
  double len;
  len = StrToDouble(temp, &stop);
  if (temp == stop) {		// error at begin
	len=-9999;
	return len;
  }
  if (stop != NULL){	// number converted endpointer is set

	if ( *stop == 'n' ) {
		len = len / TONAUTICALMILES;
		return len;
	}
	if ( (*stop == 'm') && (*(stop+1) == 'l') ) {
		len = len / TOMILES;
		return len;
	}
	if ( (*stop == 'f') || (*stop == 'F') ) {
		len = len / TOFEET;
		return len;
	}
	if ( (*stop == 'm') || (*stop == '\0') ) {
		return len;
	}
  }
  len = -9999;
  return len;
}
コード例 #16
0
int SearchStation(double Freq)
{
int i;
TCHAR	szFreq[8] ;
_stprintf(szFreq,  _T("%7.3f"),Freq);
	double minDist =9999999;
	int minIdx=0;
  //  LKASSERT(numvalidwp<=NumberOfWayPoints);
	double fDist, fBear;
	for (i=0; i<(int)WayPointList.size(); i++)
	{
                      LKASSERT(ValidWayPointFast(i));
	 //   LKASSERT(numvalidwp<=NumberOfWayPoints);

	    if (WayPointList[i].Latitude!=RESWP_INVALIDNUMBER)
	    {

	      DistanceBearing(GPS_INFO.Latitude,
	                      GPS_INFO.Longitude,
	                      WayPointList[i].Latitude,
	                      WayPointList[i].Longitude,
	                      &fDist,
	                      &fBear);
	      if(fabs(Freq -   StrToDouble(WayPointList[i].Freq,NULL)) < 0.001)
	        if(fDist < minDist)
	        {
	    	  minDist = fDist;
	    	  minIdx =i;
	        }
	    }
	}

	return minIdx;
}
コード例 #17
0
ファイル: ReadAltitude.cpp プロジェクト: LK8000/LK8000
double ReadAltitude(TCHAR *temp)
{
  TCHAR *Stop=temp;
  double Altitude=-9999;
  Altitude = StrToDouble(temp, &Stop);

  if (temp == Stop)		// error at begin
	Altitude=-9999;
  else {
	if (Stop != NULL){	// number converted endpointer is set
		switch(*Stop){
			case 'M':				// meter's nothing to do
			case 'm':
			case '\0':
				break;
			case 'F':				// feet, convert to meter
			case 'f':
				Altitude = Altitude / TOFEET;
				break;
			default:				// anything else is a syntax error
				Altitude = -9999;
				break;
		}
	}
  }
  return Altitude;
}
コード例 #18
0
ファイル: mscevent.c プロジェクト: w1121/battle
/***************************************************************************
 * Function : MSC_Str2Dbl
 *
 * Description: Convert string to number
 *
 * Returns: 
 *
 * Notes: None
 *
 **************************************************************************/
MSC_TIME_VALUE MSC_Str2Dbl( const char * x )
{
    if ( !stricmp( x, STR_INF ) )
        return MSC_INFINITY_CONST;

    return StrToDouble( x );
}
コード例 #19
0
static void OnPassiveFreq(WndButton* pWnd){
TCHAR	szFreq[8] ;
_stprintf(szFreq,  _T("%7.3f"),RadioPara.PassiveFrequency);
TCHAR	Name[20] = _T("  ???   ");
   dlgNumEntryShowModal(szFreq,8,false);

   double Frequency = StrToDouble(szFreq,NULL);
   while(Frequency > 1000)
	   Frequency /=10;

   if(ValidFrequency(Frequency))
   {
     _stprintf( RadioPara.PassiveName,_T(" "));
      int iIdx = SearchStation(Frequency);
      if(iIdx != 0)
      {
    	_stprintf(Name,_T("%s"),WayPointList[iIdx].Name);
    	_stprintf( RadioPara.PassiveName,_T("%s"),WayPointList[iIdx].Name);
	PassiveRadioIndex = iIdx;
      }
     devPutFreqStandby(devA(), Frequency,Name);
     devPutFreqStandby(devB(), Frequency,Name);
    RadioPara.PassiveFrequency = Frequency;
  //  _stprintf( RadioPara.PassiveName,_T(""));
    RadioPara.Changed =TRUE;
  // OnRemoteUpdate();

   }
   OnUpdate();
}
コード例 #20
0
static void OnPassiveButton(WndButton* pWnd){
  if (HoldOff ==0)
  {
   int res = dlgWayPointSelect(0, 90.0, 1,3);
//   LKASSERT(res>=0);
//   LKASSERT(ValidWayPointFast(res));
   if(res > RESWP_END )
     if(ValidWayPoint(res)) 
    {
      double Frequency = StrToDouble(WayPointList[res].Freq,NULL);
      if(Frequency < 100.0)
      {
     //    DoStatusMessage(_T("No valid Frequency!") );
        return;
      }
      devPutFreqStandby(devA(), Frequency, WayPointList[res].Name);
      devPutFreqStandby(devB(), Frequency, WayPointList[res].Name);

      _stprintf(RadioPara.PassiveName,_T("%s"), WayPointList[res].Name);
      RadioPara.PassiveFrequency = Frequency;
      PassiveRadioIndex = res;
    }
    OnUpdate();
    HoldOff = HOLDOFF_TIME;
  }
}
コード例 #21
0
ファイル: strio.c プロジェクト: CESNET/glite-lb
/*************************************************************************
 * StrToFloat
 */
float StrToFloat(const char *source, const char **endp)
{
#if defined(TRIO_C99)
  return strtof(source, endp);
#else
  return (float)StrToDouble(source, endp);
#endif
}
コード例 #22
0
ファイル: devZander.cpp プロジェクト: IvanSantanna/LK8000
static BOOL PZAN1(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *apGPS)
{
  double palt=0;
  TCHAR ctemp[80];
  NMEAParser::ExtractParameter(String,ctemp,0);
  palt=StrToDouble(ctemp,NULL);
  UpdateBaroSource( apGPS, 0,d, AltitudeToQNHAltitude(palt));
  return TRUE;
}
コード例 #23
0
ファイル: UtilsParser.cpp プロジェクト: AlphaLima/LK8000
double NMEAParser::ParseAltitude(TCHAR *value, const TCHAR *format)
{
  double alt = StrToDouble(value, NULL);

  if (format[0] == _T('f') || format[0] == _T('F'))
    alt /= TOFEET;

  return alt;
}
コード例 #24
0
ファイル: devCondor.cpp プロジェクト: AlphaLima/LK8000
static BOOL cLXWP2(PDeviceDescriptor_t d, TCHAR *String, NMEA_INFO *pGPS)
{
  TCHAR ctemp[80];
  (void)pGPS;

  NMEAParser::ExtractParameter(String,ctemp,0);
  MACCREADY = StrToDouble(ctemp,NULL);
  return TRUE;
}
コード例 #25
0
/*************************************
 * ToDouble
 *************************************/
double SHVStringUTF8C::ToDouble(SHVChar** endChar) const
{
SHVChar* charBuf = Buffer;
	if (IsNull())
		return 0;
	if (endChar == NULL)
		endChar = &charBuf;
	return StrToDouble(Buffer,endChar);
}
コード例 #26
0
ファイル: devCondor.cpp プロジェクト: scottp/xcsoar
static BOOL cLXWP0(PDeviceDescriptor_t d, const TCHAR *String,
                   NMEA_INFO *GPS_INFO) {
  TCHAR ctemp[80];

  /*
  $LXWP0,Y,222.3,1665.5,1.71,,,,,,239,174,10.1

   0 loger_stored (Y/N)
   1 IAS (kph) ----> Condor uses TAS!
   2 baroaltitude (m)
   3 vario (m/s)
   4-8 unknown
   9 heading of plane
  10 windcourse (deg)
  11 windspeed (kph)

  */
  double alt, airspeed;

  NMEAParser::ExtractParameter(String,ctemp,1);
  airspeed = StrToDouble(ctemp,NULL)/TOKPH;

  NMEAParser::ExtractParameter(String,ctemp,2);
  alt = StrToDouble(ctemp,NULL);

  GPS_INFO->IndicatedAirspeed = airspeed/AirDensityRatio(alt);
  GPS_INFO->TrueAirspeed = airspeed;

  if (d == pDevPrimaryBaroSource){
    GPS_INFO->BaroAltitudeAvailable = TRUE;
    GPS_INFO->BaroAltitude = alt;    // ToDo check if QNH correction is needed!
  }

  NMEAParser::ExtractParameter(String,ctemp,3);
  GPS_INFO->Vario = StrToDouble(ctemp,NULL);

  GPS_INFO->AirspeedAvailable = TRUE;
  GPS_INFO->VarioAvailable = TRUE;

  TriggerVarioUpdate();

  return TRUE;
}
コード例 #27
0
ファイル: devCondor.cpp プロジェクト: scottp/xcsoar
static BOOL cLXWP2(PDeviceDescriptor_t d, const TCHAR *String,
                   NMEA_INFO *GPS_INFO)
{
  TCHAR ctemp[80];
  (void)GPS_INFO;

  NMEAParser::ExtractParameter(String,ctemp,0);
  GlidePolar::SetMacCready(StrToDouble(ctemp,NULL));
  return TRUE;
}
コード例 #28
0
ファイル: Parser.cpp プロジェクト: rkalman/LK8000
// TASMAN instruments support for Tasman Flight Pack model Fp10
BOOL NMEAParser::PTAS1(TCHAR *String, TCHAR **params, size_t nparams, NMEA_INFO *pGPS)
{
  double wnet,baralt,vtas;

  wnet = (StrToDouble(params[0],NULL)-200)/(10*TOKNOTS);
  baralt = max(0.0, (StrToDouble(params[2],NULL)-2000)/TOFEET);
  vtas = StrToDouble(params[3],NULL)/TOKNOTS;
  
  pGPS->AirspeedAvailable = TRUE;
  pGPS->TrueAirspeed = vtas;
  pGPS->VarioAvailable = TRUE;
  pGPS->Vario = wnet;
  UpdateBaroSource(pGPS, BARO__TASMAN, NULL,  AltitudeToQNHAltitude(baralt));
  pGPS->IndicatedAirspeed = vtas/AirDensityRatio(baralt);
 
  TASAvailable = true; // 100411 
  TriggerVarioUpdate();

  return FALSE;
}
コード例 #29
0
ファイル: Parser.cpp プロジェクト: acasadoalonso/LK8000
BOOL NMEAParser::HCHDG(TCHAR *String, TCHAR **params, size_t nparams, NMEA_INFO *pGPS)
{
  (void)pGPS;
  double mag=0;
  mag=StrToDouble(params[0],NULL);
  if (mag>=0 && mag<=360) {
      pGPS->MagneticHeading=mag;
      pGPS->MagneticHeadingAvailable=TRUE;
  }
  return FALSE;
}
コード例 #30
0
ファイル: Frame.cpp プロジェクト: Philbywhizz/pioneer
Frame *Frame::FromJson(const Json::Value &jsonObj, Space *space, Frame *parent, double at_time)
{
	Frame *f = new Frame();
	f->m_parent = parent;

	if (!jsonObj.isMember("frame")) throw SavedGameCorruptException();
	Json::Value frameObj = jsonObj["frame"];

	if (!frameObj.isMember("flags")) throw SavedGameCorruptException();
	if (!frameObj.isMember("radius")) throw SavedGameCorruptException();
	if (!frameObj.isMember("label")) throw SavedGameCorruptException();
	if (!frameObj.isMember("pos")) throw SavedGameCorruptException();
	if (!frameObj.isMember("ang_speed")) throw SavedGameCorruptException();
	if (!frameObj.isMember("init_orient")) throw SavedGameCorruptException();
	if (!frameObj.isMember("index_for_system_body")) throw SavedGameCorruptException();
	if (!frameObj.isMember("index_for_astro_body")) throw SavedGameCorruptException();

	f->m_flags = frameObj["flags"].asInt();
	f->m_radius = StrToDouble(frameObj["radius"].asString());
	f->m_label = frameObj["label"].asString();
	JsonToVector(&(f->m_pos), frameObj, "pos");
	f->m_angSpeed = StrToDouble(frameObj["ang_speed"].asString());
	matrix3x3d orient;
	JsonToMatrix(&orient, frameObj, "init_orient");
	f->SetInitialOrient(orient, at_time);
	f->m_sbody = space->GetSystemBodyByIndex(frameObj["index_for_system_body"].asUInt());
	f->m_astroBodyIndex = frameObj["index_for_astro_body"].asUInt();
	f->m_vel = vector3d(0.0); // m_vel is set to zero.

	if (!frameObj.isMember("child_frames")) throw SavedGameCorruptException();
	Json::Value childFrameArray = frameObj["child_frames"];
	if (!childFrameArray.isArray()) throw SavedGameCorruptException();
	for (unsigned int i = 0; i < childFrameArray.size(); ++i) {
		f->m_children.push_back(FromJson(childFrameArray[i], space, f, at_time));
	}
	SfxManager::FromJson(frameObj, f);

	f->ClearMovement();
	return f;
}