Merge pull request #182 from nasa/posi-defaults

POSI fixes
This commit is contained in:
Christopher Teubert
2019-10-26 09:41:46 -07:00
committed by GitHub
3 changed files with 67 additions and 38 deletions

View File

@@ -668,6 +668,11 @@ namespace XPC
return; return;
} }
if (IsDefault(pos[0]) && IsDefault(pos[1]) && IsDefault(pos[2]))
{
Log::WriteLine(LOG_INFO, "DMAN", "Skipped SetPosition. All values were default");
return;
}
if (IsDefault(pos[0])) if (IsDefault(pos[0]))
{ {
pos[0] = GetDouble(DREF_Latitude, aircraft); pos[0] = GetDouble(DREF_Latitude, aircraft);
@@ -718,6 +723,12 @@ namespace XPC
return; return;
} }
if (IsDefault(orient[0]) && IsDefault(orient[1]) && IsDefault(orient[2]))
{
Log::WriteLine(LOG_INFO, "DMAN", "Skipped SetPosition. All values were default");
return;
}
if (IsDefault(orient[0])) if (IsDefault(orient[0]))
{ {
orient[0] = GetFloat(DREF_Pitch, aircraft); orient[0] = GetFloat(DREF_Pitch, aircraft);

View File

@@ -141,11 +141,25 @@ namespace XPC
else if (head == "POSI") else if (head == "POSI")
{ {
char aircraft = buffer[5]; char aircraft = buffer[5];
float gear = *((float*)(buffer + 30)); float gear;
float pos[3]; double pos[3];
float orient[3]; float orient[3];
memcpy(pos, buffer + 6, 12); if (size == 34) /* lat/lon/h as 32-bit float */
memcpy(orient, buffer + 18, 12); {
float posd_32[3];
memcpy(posd_32, buffer + 6, 12);
pos[0] = posd_32[0];
pos[1] = posd_32[1];
pos[2] = posd_32[2];
memcpy(orient, buffer + 18, 12);
memcpy(&gear, buffer + 30, 4);
}
else if (size == 46) /* lat/lon/h as 64-bit double */
{
memcpy(pos, buffer + 6, 24);
memcpy(orient, buffer + 30, 12);
memcpy(&gear, buffer + 42, 4);
}
ss << " AC:" << (int)aircraft; ss << " AC:" << (int)aircraft;
ss << " Pos:(" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << ") Orient:("; ss << " Pos:(" << pos[0] << ' ' << pos[1] << ' ' << pos[2] << ") Orient:(";
ss << orient[0] << ' ' << orient[1] << ' ' << orient[2] << ") Gear:"; ss << orient[0] << ' ' << orient[1] << ' ' << orient[2] << ") Gear:";

View File

@@ -580,21 +580,25 @@ namespace XPC
const std::size_t size = msg.GetSize(); const std::size_t size = msg.GetSize();
char aircraftNumber = buffer[5]; char aircraftNumber = buffer[5];
float gear = *((float*)(buffer + 42)); float gear;
double posd[3]; double posd[3];
float orient[3]; float orient[3];
if (size == 34) /* lat/lon/h as 32-bit float */ if (size == 34) /* lat/lon/h as 32-bit float */
{ {
posd[0] = *((float*)&buffer[6]); float posd_32[3];
posd[1] = *((float*)&buffer[10]); memcpy(posd_32, buffer + 6, 12);
posd[2] = *((float*)&buffer[14]); posd[0] = posd_32[0];
posd[1] = posd_32[1];
posd[2] = posd_32[2];
memcpy(orient, buffer + 18, 12); memcpy(orient, buffer + 18, 12);
memcpy(&gear, buffer + 30, 4);
} }
else if (size == 46) /* lat/lon/h as 64-bit double */ else if (size == 46) /* lat/lon/h as 64-bit double */
{ {
memcpy(posd, buffer + 6, 3*8); memcpy(posd, buffer + 6, 24);
memcpy(orient, buffer + 30, 12); memcpy(orient, buffer + 30, 12);
memcpy(&gear, buffer + 42, 4);
} }
else else
{ {