diff --git a/xpcPlugin/DataManager.cpp b/xpcPlugin/DataManager.cpp index 45a4919..23a07b5 100644 --- a/xpcPlugin/DataManager.cpp +++ b/xpcPlugin/DataManager.cpp @@ -626,7 +626,7 @@ namespace XPC Log::FormatLine(LOG_INFO, "DMAN", "Setting gear (value:%f, immediate:%i) for aircraft %i", gear, immediate, aircraft); - if ((gear < -8.5 && gear > -9.5) || (gear < -997.9 && gear > -999.1)) + if ((gear < -8.5 && gear > -9.5) || IsDefault(gear)) { return; } @@ -666,15 +666,15 @@ namespace XPC return; } - if (pos[0] < -997.9 && pos[0] > -999.1) + if (IsDefault(pos[0])) { pos[0] = (float)GetDouble(DREF_Latitude, aircraft); } - if (pos[1] < -997.9 && pos[1] > -999.1) + if (IsDefault(pos[1])) { pos[1] = (float)GetDouble(DREF_Longitude, aircraft); } - if (pos[2] < -997.9 && pos[2] > -999.1) + if (IsDefault(pos[2])) { pos[2] = (float)GetDouble(DREF_Elevation, aircraft); } @@ -702,15 +702,15 @@ namespace XPC return; } - if (orient[0] < -997.9 && orient[0] > -999.1) + if (IsDefault(orient[0])) { orient[0] = GetFloat(DREF_Pitch, aircraft); } - if (orient[1] < -997.9 && orient[1] > -999.1) + if (IsDefault(orient[1])) { orient[1] = GetFloat(DREF_Roll, aircraft); } - if (orient[2] < -997.9 && orient[2] > -999.1) + if (IsDefault(orient[2])) { orient[2] = GetFloat(DREF_HeadingTrue, aircraft); } @@ -752,7 +752,7 @@ namespace XPC Log::WriteLine(LOG_ERROR, "DMAN", "ERROR: Flap value must be a number (NaN received)"); return; } - if (value < -997.9 && value > -999.1) + if (IsDefault(value)) { return; } @@ -763,4 +763,14 @@ namespace XPC Set(DREF_FlapSetting, value); Set(DREF_FlapActual, value); } + + float DataManager::GetDefaultValue() + { + return -998.0F; + } + + bool DataManager::IsDefault(float value) + { + return value < -997.9 && value > -999.1; + } } diff --git a/xpcPlugin/DataManager.h b/xpcPlugin/DataManager.h index e5e5a50..cc38619 100644 --- a/xpcPlugin/DataManager.h +++ b/xpcPlugin/DataManager.h @@ -145,7 +145,7 @@ namespace XPC /// \version 1.1 /// \since 1.0.0 /// \date Intial Version: 2015-04-13 - /// \date Last Updated: 2015-05-11 + /// \date Last Updated: 2015-05-14 class DataManager { public: @@ -409,6 +409,15 @@ namespace XPC /// /// \param value The flaps settings. Should be between 0.0 (no flaps) and 1.0 (full flaps). static void SetFlaps(float value); + + /// Gets a default value that indicates that a dataref should not be changed. + static float GetDefaultValue(); + + /// Checks whether the given value should be treated as a default value. + /// + /// \param value The value to check. + /// \returns true if value is a default value; otherwise false. + static bool IsDefault(float value); }; } #endif diff --git a/xpcPlugin/MessageHandlers.cpp b/xpcPlugin/MessageHandlers.cpp index 1688505..4f7c3d3 100644 --- a/xpcPlugin/MessageHandlers.cpp +++ b/xpcPlugin/MessageHandlers.cpp @@ -195,26 +195,26 @@ namespace XPC { aircraftNumber = buffer[26]; } - float spdbrk = -998; + float spdbrk = DataManager::GetDefaultValue(); if (size >= 31) { spdbrk = *((float*)(buffer + 27)); } - if (pitch < -999.5 || pitch > -997.5) + if (!DataManager::IsDefault(pitch)) { DataManager::Set(DREF_YokePitch, pitch, aircraftNumber); } - if (roll < -999.5 || roll > -997.5) + if (!DataManager::IsDefault(roll)) { DataManager::Set(DREF_YokeRoll, roll, aircraftNumber); } - if (yaw < -999.5 || yaw > -997.5) + if (!DataManager::IsDefault(yaw)) { DataManager::Set(DREF_YokeHeading, yaw, aircraftNumber); } - if (throttle < -999.5 || throttle > -997.5) + if (!DataManager::IsDefault(throttle)) { float throttleArray[8]; @@ -233,11 +233,11 @@ namespace XPC { DataManager::SetGear(gear, false, aircraftNumber); } - if (flaps < -999.5 || flaps > -997.5) + if (!DataManager::IsDefault(flaps)) { DataManager::Set(DREF_FlapSetting, flaps, aircraftNumber); } - if (spdbrk < -999.5 || spdbrk > -997.5) + if (!DataManager::IsDefault(spdbrk)) { DataManager::Set(DREF_SpeedBrakeSet, spdbrk, aircraftNumber); } @@ -274,8 +274,8 @@ namespace XPC // Update log - float savedAlpha = -998; - float savedHPath = -998; + float savedAlpha = DataManager::GetDefaultValue(); + float savedHPath = DataManager::GetDefaultValue(); for (int i = 0; i < numCols; ++i) { unsigned char dataRef = (unsigned char)values[i][0]; @@ -291,8 +291,8 @@ namespace XPC case 3: // Velocity { float theta = DataManager::GetFloat(DREF_Pitch); - float alpha = savedAlpha != -998 ? savedAlpha : DataManager::GetFloat(DREF_AngleOfAttack); - float hpath = savedHPath != -998 ? savedHPath : DataManager::GetFloat(DREF_HPath); + float alpha = DataManager::IsDefault(savedAlpha) ? savedAlpha : DataManager::GetFloat(DREF_AngleOfAttack); + float hpath = DataManager::IsDefault(savedHPath) ? savedHPath : DataManager::GetFloat(DREF_HPath); if (alpha != alpha || hpath != hpath) { Log::WriteLine(LOG_ERROR, "DATA", "ERROR: Value must be a number (NaN received)"); @@ -303,7 +303,7 @@ namespace XPC for (int j = 0; j < 3; ++j) { float v = values[i][ind[j]]; - if (v != -998) + if (!DataManager::IsDefault(v)) { DataManager::Set(DREF_LocalVX, v*cos((theta - alpha)*deg2rad)*sin(hpath*deg2rad)); DataManager::Set(DREF_LocalVY, v*sin((theta - alpha)*deg2rad)); @@ -328,11 +328,11 @@ namespace XPC Log::WriteLine(LOG_ERROR, "DATA", "ERROR: Value must be a number (NaN received)"); break; } - if (values[i][1] != -998) + if (!DataManager::IsDefault(values[i][1])) { savedAlpha = values[i][1]; } - if (values[i][3] != -998) + if (DataManager::IsDefault(values[i][3])) { savedHPath = values[i][3]; }