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