00001 00052 #define _EXPORT_CCL_ 00053 00054 #include "CigiTerrestrialSurfaceCtrlV3.h" 00055 #include "CigiSwapping.h" 00056 #include "CigiExceptions.h" 00057 00058 00059 // ==================================================================== 00060 // Construction/Destruction 00061 // ==================================================================== 00062 00063 00064 // ================================================ 00065 // CigiTerrestrialSurfaceCtrlV3 00066 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00067 CigiTerrestrialSurfaceCtrlV3::CigiTerrestrialSurfaceCtrlV3() 00068 { 00069 00070 PacketID = CIGI_TERRESTRIAL_SURFACE_CTRL_PACKET_ID_V3; 00071 PacketSize = CIGI_TERRESTRIAL_SURFACE_CTRL_PACKET_SIZE_V3; 00072 Version = 3; 00073 MinorVersion = 0; 00074 00075 EntityRgnID = 0; 00076 SurfaceCondID = 0; 00077 SurfaceCondEn = false; 00078 Scope = Global; 00079 Severity = 0; 00080 Coverage = 0; 00081 00082 } 00083 00084 // ================================================ 00085 // ~CigiTerrestrialSurfaceCtrlV3 00086 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00087 CigiTerrestrialSurfaceCtrlV3::~CigiTerrestrialSurfaceCtrlV3() 00088 { 00089 00090 } 00091 00092 // ==================================================================== 00093 // Pack and Unpack 00094 // ==================================================================== 00095 00096 // ================================================ 00097 // Pack 00098 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00099 int CigiTerrestrialSurfaceCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const 00100 { 00101 PackPointer CDta; 00102 00103 CigiBaseTerrestrialSurfaceCtrl * Data = ( CigiBaseTerrestrialSurfaceCtrl *)Base; 00104 00105 CDta.c = Buff; 00106 00107 *CDta.c++ = PacketID; 00108 *CDta.c++ = PacketSize; 00109 00110 *CDta.s++ = Data->EntityRgnID; 00111 *CDta.s++ = Data->SurfaceCondID; 00112 00113 Cigi_uint8 HDta = (Data->SurfaceCondEn) ? 0x01 : 0; 00114 HDta |= (Data->Scope << 1) & 0x06; 00115 HDta |= (Data->Severity << 3) & 0xf8; 00116 *CDta.c++ = HDta; 00117 00118 *CDta.c++ = Data->Coverage; 00119 00120 return(PacketSize); 00121 00122 } 00123 00124 // ================================================ 00125 // Unpack 00126 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv 00127 int CigiTerrestrialSurfaceCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec) 00128 { 00129 PackPointer CDta; 00130 00131 CDta.c = Buff; 00132 00133 CDta.c += 2; // Step over packet id and size 00134 00135 if(!Swap) 00136 { 00137 EntityRgnID = *CDta.s++; 00138 SurfaceCondID = *CDta.s++; 00139 00140 Cigi_uint8 HDta = *CDta.c++; 00141 SurfaceCondEn = ((HDta & 0x01) != 0); 00142 Scope = (ScopeGrp)((HDta >> 1) & 0x03); 00143 Severity = (HDta >> 3) & 0x1f; 00144 00145 Coverage = *CDta.c++; 00146 } 00147 else 00148 { 00149 CigiSwap2(&EntityRgnID, CDta.s++); 00150 CigiSwap2(&SurfaceCondID, CDta.s++); 00151 00152 Cigi_uint8 HDta = *CDta.c++; 00153 SurfaceCondEn = ((HDta & 0x01) != 0); 00154 Scope = (ScopeGrp)((HDta >> 1) & 0x03); 00155 Severity = (HDta >> 3) & 0x1f; 00156 00157 Coverage = *CDta.c++; 00158 } 00159 00160 return(PacketSize); 00161 00162 } 00163 00164 00165 00166 // ==================================================================== 00167 // Accessors 00168 // ==================================================================== 00169 00170