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