Fix incorrect gear read in HandlePosi

This commit is contained in:
Jason Watkins
2019-10-17 15:22:03 -07:00
parent fb8940583e
commit 2ff4497de5
2 changed files with 56 additions and 38 deletions

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
{ {