00001 00062 #define _EXPORT_CCL_ 00063 00064 #include "CigiLosRespV3.h" 00065 #include "CigiSwapping.h" 00066 #include "CigiExceptions.h" 00067 00068 00069 // ==================================================================== 00070 // Construction/Destruction 00071 // ==================================================================== 00072 00073 00074 // ================================================ 00075 // CigiLosRespV3 00076 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00077 CigiLosRespV3::CigiLosRespV3() 00078 { 00079 00080 PacketID = CIGI_LOS_RESP_PACKET_ID_V3; 00081 PacketSize = CIGI_LOS_RESP_PACKET_SIZE_V3; 00082 Version = 3; 00083 MinorVersion = 0; 00084 00085 LosID = 0; 00086 Valid = false; 00087 EntityIDValid = false; 00088 RangeValid = false; 00089 Visible = false; 00090 IntersectionCoordSys = Geodetic; 00091 HostFrame = 0; 00092 RespCount = 0; 00093 EntityID = 0; 00094 Range = 0.0; 00095 LatOrXoff = 0.0; 00096 LonOrYoff = 0.0; 00097 AltOrZoff = 0.0; 00098 Red = 0; 00099 Green = 0; 00100 Blue = 0; 00101 Alpha = 0; 00102 Material = 0; 00103 NormalAz = 0.0; 00104 NormalEl = 0.0; 00105 ValidV1or2 = false; 00106 00107 } 00108 00109 // ================================================ 00110 // ~CigiLosRespV3 00111 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00112 CigiLosRespV3::~CigiLosRespV3() 00113 { 00114 00115 } 00116 00117 // ==================================================================== 00118 // Pack and Unpack 00119 // ==================================================================== 00120 00121 // ================================================ 00122 // Pack 00123 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00124 int CigiLosRespV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00125 { 00126 PackPointer CDta; 00127 00128 CigiBaseLosResp * Data = ( CigiBaseLosResp *)Base; 00129 00130 CDta.c = Buff; 00131 00132 *CDta.c++ = PacketID; 00133 *CDta.c++ = PacketSize; 00134 00135 *CDta.s++ = Data->LosID; 00136 00137 Cigi_uint8 HDta = (Data->Valid) ? 0x01 : 0x00; 00138 HDta |= (Data->EntityIDValid) ? 0x02 : 0x00; 00139 HDta |= (Data->Visible) ? 0x04 : 0x00; 00140 *CDta.c++ = HDta; 00141 00142 *CDta.c++ = Data->RespCount; 00143 *CDta.s++ = Data->EntityID; 00144 *CDta.d++ = Data->Range; 00145 00146 return(PacketSize); 00147 00148 } 00149 00150 // ================================================ 00151 // Unpack 00152 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00153 int CigiLosRespV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00154 { 00155 PackPointer CDta; 00156 00157 CDta.c = Buff; 00158 00159 CDta.c += 2; // Step over packet id and size 00160 00161 if(!Swap) 00162 { 00163 LosID = *CDta.s++; 00164 00165 Cigi_uint8 HDta = *CDta.c++; 00166 Valid = ((HDta & 0x01) != 0); 00167 EntityIDValid = ((HDta & 0x02) != 0); 00168 Visible = ((HDta & 0x04) != 0); 00169 00170 RespCount = *CDta.c++; 00171 EntityID = *CDta.s++; 00172 Range = *CDta.d++; 00173 00174 } 00175 else 00176 { 00177 CigiSwap2(&LosID, CDta.s++); 00178 00179 Cigi_uint8 HDta = *CDta.c++; 00180 Valid = ((HDta & 0x01) != 0); 00181 EntityIDValid = ((HDta & 0x02) != 0); 00182 Visible = ((HDta & 0x04) != 0); 00183 00184 RespCount = *CDta.c++; 00185 CigiSwap2(&EntityID, CDta.s++); 00186 CigiSwap8(&Range, CDta.d++); 00187 00188 } 00189 00190 00191 HostFrame = 0; 00192 LatOrXoff = 0.0; 00193 LonOrYoff = 0.0; 00194 AltOrZoff = 0.0; 00195 Material = 0; 00196 00197 ValidV1or2 = false; 00198 00199 return(PacketSize); 00200 00201 } 00202 00203 00204 // ================================================ 00205 // GetCnvt 00206 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00207 int CigiLosRespV3::GetCnvt(CigiVersionID &CnvtVersion, 00208 CigiCnvtInfoType::Type &CnvtInfo) 00209 { 00210 CnvtInfo.ProcID = CigiProcessType::ProcStd; 00211 00212 // Note: 00213 // CIGI_LOS_RESP_PACKET_ID_V1 & 00214 // CIGI_LOS_RESP_PACKET_ID_V2 are the same 00215 // CIGI_LOS_RESP_PACKET_ID_V3 & 00216 // CIGI_LOS_RESP_PACKET_ID_V3_2 are the same 00217 if(CnvtVersion.CigiMajorVersion < 3) 00218 CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V2; 00219 else 00220 CnvtInfo.CnvtPacketID = CIGI_LOS_RESP_PACKET_ID_V3; 00221 00222 return(CIGI_SUCCESS); 00223 } 00224 00225 00226 00227 // ==================================================================== 00228 // Accessors 00229 // ==================================================================== 00230 00231 00232