00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiPositionRespV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 CigiPositionRespV3::CigiPositionRespV3()
00068 {
00069
00070 PacketID = CIGI_POSITION_RESP_PACKET_ID_V3;
00071 PacketSize = CIGI_POSITION_RESP_PACKET_SIZE_V3;
00072 Version = 3;
00073 MinorVersion = 0;
00074
00075 ObjectID = 0;
00076 ArtPartID = 0;
00077 ObjectClass = Entity;
00078 CoordSys = Geodetic;
00079 LatOrXoff = 0.0;
00080 LonOrYoff = 0.0;
00081 AltOrZoff = 0.0;
00082 Roll = 0.0;
00083 Pitch = 0.0;
00084 Yaw = 0.0;
00085
00086 }
00087
00088
00089
00090
00091 CigiPositionRespV3::~CigiPositionRespV3()
00092 {
00093
00094 }
00095
00096
00097
00098
00099
00100
00101
00102
00103 int CigiPositionRespV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00104 {
00105 PackPointer CDta;
00106
00107 CigiBasePositionResp * Data = ( CigiBasePositionResp *)Base;
00108
00109 CDta.c = Buff;
00110
00111 *CDta.c++ = PacketID;
00112 *CDta.c++ = PacketSize;
00113
00114 *CDta.s++ = Data->ObjectID;
00115 *CDta.c++ = Data->ArtPartID;
00116
00117 Cigi_uint8 HDta = Data->ObjectClass & 0x07;
00118 HDta |= (Data->CoordSys << 3) & 0x18;
00119 *CDta.c++ = HDta;
00120
00121 *CDta.s++ = 0;
00122
00123 *CDta.d++ = Data->LatOrXoff;
00124 *CDta.d++ = Data->LonOrYoff;
00125 *CDta.d++ = Data->AltOrZoff;
00126 *CDta.f++ = Data->Roll;
00127 *CDta.f++ = Data->Pitch;
00128 *CDta.f++ = Data->Yaw;
00129
00130 *CDta.l++ = 0;
00131
00132 return(PacketSize);
00133
00134 }
00135
00136
00137
00138
00139 int CigiPositionRespV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00140 {
00141 PackPointer CDta;
00142
00143 CDta.c = Buff;
00144
00145 CDta.c += 2;
00146
00147 if(!Swap)
00148 {
00149 ObjectID = *CDta.s++;
00150 ArtPartID = *CDta.c++;
00151
00152 Cigi_uint8 HDta = *CDta.c++;
00153 ObjectClass = (ObjectClassGrp)(HDta & 0x07);
00154 CoordSys = (CoordSysGrp)((HDta >> 3) & 0x03);
00155
00156 CDta.s++;
00157
00158 LatOrXoff = *CDta.d++;
00159 LonOrYoff = *CDta.d++;
00160 AltOrZoff = *CDta.d++;
00161 Roll = *CDta.f++;
00162 Pitch = *CDta.f++;
00163 Yaw = *CDta.f++;
00164 }
00165 else
00166 {
00167 CigiSwap2(&ObjectID, CDta.s++);
00168 ArtPartID = *CDta.c++;
00169
00170 Cigi_uint8 HDta = *CDta.c++;
00171 ObjectClass = (ObjectClassGrp)(HDta & 0x07);
00172 CoordSys = (CoordSysGrp)((HDta >> 3) & 0x03);
00173
00174 CDta.s++;
00175
00176 CigiSwap8(&LatOrXoff, CDta.d++);
00177 CigiSwap8(&LonOrYoff, CDta.d++);
00178 CigiSwap8(&AltOrZoff, CDta.d++);
00179 CigiSwap4(&Roll, CDta.f++);
00180 CigiSwap4(&Pitch, CDta.f++);
00181 CigiSwap4(&Yaw, CDta.f++);
00182 }
00183
00184 return(PacketSize);
00185
00186 }
00187
00188
00189
00190
00191
00192
00193
00194