CigiMaritimeSurfaceCtrlV3.cpp

Go to the documentation of this file.
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 

Generated on Wed Apr 29 08:59:59 2009 for CCL by  doxygen 1.4.7