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
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; }
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; }
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; }
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(); }
// 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; }
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()
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; }
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; }
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; }
/*************************************************************************** * 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 ); }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /// 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()
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; }
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(); }
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; }
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; }
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; }
/*************************************************************************** * 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 ); }
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(); }
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; } }
/************************************************************************* * StrToFloat */ float StrToFloat(const char *source, const char **endp) { #if defined(TRIO_C99) return strtof(source, endp); #else return (float)StrToDouble(source, endp); #endif }
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; }
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; }
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; }
/************************************* * ToDouble *************************************/ double SHVStringUTF8C::ToDouble(SHVChar** endChar) const { SHVChar* charBuf = Buffer; if (IsNull()) return 0; if (endChar == NULL) endChar = &charBuf; return StrToDouble(Buffer,endChar); }
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; }
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; }
// 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; }
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; }
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; }