00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiWaveCtrlV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 CigiWaveCtrlV3::CigiWaveCtrlV3()
00068 {
00069
00070 PacketID = CIGI_WAVE_CTRL_PACKET_ID_V3;
00071 PacketSize = CIGI_WAVE_CTRL_PACKET_SIZE_V3;
00072 Version = 3;
00073 MinorVersion = 0;
00074
00075 EntityRgnID = 0;
00076 WaveID = 0;
00077 WaveEn = false;
00078 Scope = Global;
00079 Breaker = Plunging;
00080 WaveHt = 0.0;
00081 WaveLen = 0.0;
00082 Period = 0.0;
00083 Direction = 0.0;
00084 PhaseOff = 0.0;
00085 Leading = 0.0;
00086
00087 }
00088
00089
00090
00091
00092 CigiWaveCtrlV3::~CigiWaveCtrlV3()
00093 {
00094
00095 }
00096
00097
00098
00099
00100
00101
00102
00103
00104 int CigiWaveCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00105 {
00106 PackPointer CDta;
00107
00108 CigiBaseWaveCtrl * Data = ( CigiBaseWaveCtrl *)Base;
00109
00110 CDta.c = Buff;
00111
00112 *CDta.c++ = PacketID;
00113 *CDta.c++ = PacketSize;
00114
00115 *CDta.s++ = Data->EntityRgnID;
00116 *CDta.c++ = Data->WaveID;
00117
00118 Cigi_uint8 HDta = (Data->WaveEn) ? 0x01 : 0;
00119 HDta |= (Data->Scope<< 1) & 0x06;
00120 HDta |= (Data->Breaker << 3) & 0x18;
00121 *CDta.c++ = HDta;
00122
00123 *CDta.s++ = 0;
00124
00125 *CDta.f++ = Data->WaveHt;
00126 *CDta.f++ = Data->WaveLen;
00127 *CDta.f++ = Data->Period;
00128 *CDta.f++ = Data->Direction;
00129 *CDta.f++ = Data->PhaseOff;
00130 *CDta.f++ = Data->Leading;
00131
00132 return(PacketSize);
00133
00134 }
00135
00136
00137
00138
00139 int CigiWaveCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00140 {
00141 PackPointer CDta;
00142
00143 CDta.c = Buff;
00144
00145 CDta.c += 2;
00146
00147 if(!Swap)
00148 {
00149 EntityRgnID = *CDta.s++;
00150 WaveID = *CDta.c++;
00151
00152 Cigi_uint8 HDta = *CDta.c++;
00153 WaveEn = ((HDta & 0x01) != 0);
00154 Scope = (ScopeGrp)((HDta >> 1) & 0x03);
00155 Breaker = (BreakerGrp)((HDta >> 3) & 0x03);
00156
00157 CDta.s++;
00158
00159 WaveHt = *CDta.f++;
00160 WaveLen = *CDta.f++;
00161 Period = *CDta.f++;
00162 Direction = *CDta.f++;
00163 PhaseOff = *CDta.f++;
00164 Leading = *CDta.f++;
00165 }
00166 else
00167 {
00168 CigiSwap2(&EntityRgnID, CDta.s++);
00169 WaveID = *CDta.c++;
00170
00171 Cigi_uint8 HDta = *CDta.c++;
00172 WaveEn = ((HDta & 0x01) != 0);
00173 Scope = (ScopeGrp)((HDta >> 1) & 0x03);
00174 Breaker = (BreakerGrp)((HDta >> 3) & 0x03);
00175
00176 CDta.s++;
00177
00178 CigiSwap4(&WaveHt, CDta.f++);
00179 CigiSwap4(&WaveLen, CDta.f++);
00180 CigiSwap4(&Period, CDta.f++);
00181 CigiSwap4(&Direction, CDta.f++);
00182 CigiSwap4(&PhaseOff, CDta.f++);
00183 CigiSwap4(&Leading, CDta.f++);
00184 }
00185
00186 return(PacketSize);
00187
00188 }
00189
00190
00191
00192
00193
00194
00195
00196