00001 00052 #define _EXPORT_CCL_ 00053 00054 #include "CigiPositionReqV3.h" 00055 #include "CigiSwapping.h" 00056 #include "CigiExceptions.h" 00057 00058 00059 // ==================================================================== 00060 // Construction/Destruction 00061 // ==================================================================== 00062 00063 00064 // ================================================ 00065 // CigiPositionReqV3 00066 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00067 CigiPositionReqV3::CigiPositionReqV3() 00068 { 00069 00070 PacketID = CIGI_POSITION_REQ_PACKET_ID_V3; 00071 PacketSize = CIGI_POSITION_REQ_PACKET_SIZE_V3; 00072 Version = 3; 00073 MinorVersion = 0; 00074 00075 ObjectID = 0; 00076 ArtPartID = 0; 00077 UpdateMode = OneShot; 00078 ObjectClass = Entity; 00079 CoordSys = Geodetic; 00080 00081 } 00082 00083 // ================================================ 00084 // ~CigiPositionReqV3 00085 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00086 CigiPositionReqV3::~CigiPositionReqV3() 00087 { 00088 00089 } 00090 00091 // ==================================================================== 00092 // Pack and Unpack 00093 // ==================================================================== 00094 00095 // ================================================ 00096 // Pack 00097 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00098 int CigiPositionReqV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00099 { 00100 PackPointer CDta; 00101 00102 CigiBasePositionReq * Data = ( CigiBasePositionReq *)Base; 00103 00104 CDta.c = Buff; 00105 00106 *CDta.c++ = PacketID; 00107 *CDta.c++ = PacketSize; 00108 00109 *CDta.s++ = Data->ObjectID; 00110 *CDta.c++ = Data->ArtPartID; 00111 00112 Cigi_uint8 HDta = Data->UpdateMode & 0x01; 00113 HDta |= (Data->ObjectClass << 1) & 0x0e; 00114 HDta |= (Data->CoordSys << 4) & 0x30; 00115 *CDta.c++ = HDta; 00116 00117 *CDta.s++ = 0; 00118 00119 return(PacketSize); 00120 00121 } 00122 00123 // ================================================ 00124 // Unpack 00125 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00126 int CigiPositionReqV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00127 { 00128 PackPointer CDta; 00129 00130 CDta.c = Buff; 00131 00132 CDta.c += 2; // Step over packet id and size 00133 00134 if(!Swap) 00135 ObjectID = *CDta.s++; 00136 else 00137 CigiSwap2(&ObjectID, CDta.s++); 00138 00139 ArtPartID = *CDta.c++; 00140 00141 Cigi_uint8 HDta = *CDta.c++; 00142 UpdateMode = (UpdateModeGrp)(HDta & 0x01); 00143 ObjectClass = (ObjectClassGrp)((HDta >> 1) & 0x07); 00144 CoordSys = (CoordSysGrp)((HDta >> 4) & 0x03); 00145 00146 00147 return(PacketSize); 00148 00149 } 00150 00151 00152 00153 // ==================================================================== 00154 // Accessors 00155 // ==================================================================== 00156 00157