00001
00052 #define _EXPORT_CCL_
00053
00054 #include "CigiEnvRgnCtrlV3.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 CigiEnvRgnCtrlV3::CigiEnvRgnCtrlV3()
00068 {
00069
00070 PacketID = CIGI_ENV_RGN_CTRL_PACKET_ID_V3;
00071 PacketSize = CIGI_ENV_RGN_CTRL_PACKET_SIZE_V3;
00072 Version = 3;
00073 MinorVersion = 0;
00074
00075 RegionID = 0;
00076 RgnState = Inactive;
00077 WeatherProp = UseLast;
00078 Aerosol = UseLast;
00079 MaritimeSurface = UseLast;
00080 TerrestrialSurface = UseLast;
00081 Lat = 0.0;
00082 Lon = 0.0;
00083 XSize = 0.0;
00084 YSize = 0.0;
00085 CornerRadius = 0.0;
00086 Rotation = 0.0;
00087 Transition = 0.0;
00088
00089 }
00090
00091
00092
00093
00094 CigiEnvRgnCtrlV3::~CigiEnvRgnCtrlV3()
00095 {
00096
00097 }
00098
00099
00100
00101
00102
00103
00104
00105
00106 int CigiEnvRgnCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00107 {
00108 PackPointer CDta;
00109
00110 CigiBaseEnvRgnCtrl * Data = ( CigiBaseEnvRgnCtrl *)Base;
00111
00112 CDta.c = Buff;
00113
00114 *CDta.c++ = PacketID;
00115 *CDta.c++ = PacketSize;
00116
00117 *CDta.s++ = Data->RegionID;
00118
00119 Cigi_uint8 MDta = Data->RgnState & 0x03;
00120 MDta |= (Data->WeatherProp << 2) & 0x04;
00121 MDta |= (Data->Aerosol << 3) & 0x08;
00122 MDta |= (Data->MaritimeSurface << 4) & 0x10;
00123 MDta |= (Data->TerrestrialSurface << 5) & 0x20;
00124 *CDta.c++ = MDta;
00125
00126 *CDta.c++ = 0;
00127 *CDta.s++ = 0;
00128
00129 *CDta.d++ = Data->Lat;
00130 *CDta.d++ = Data->Lon;
00131 *CDta.f++ = Data->XSize;
00132 *CDta.f++ = Data->YSize;
00133 *CDta.f++ = Data->CornerRadius;
00134 *CDta.f++ = Data->Rotation;
00135 *CDta.f++ = Data->Transition;
00136 *CDta.l++ = 0;
00137
00138 return(PacketSize);
00139
00140 }
00141
00142
00143
00144
00145 int CigiEnvRgnCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00146 {
00147 PackPointer CDta;
00148
00149 CDta.c = Buff;
00150
00151 CDta.c += 2;
00152
00153 if(!Swap)
00154 {
00155 RegionID = *CDta.s++;
00156
00157 Cigi_uint8 HDta = *CDta.c++;
00158 RgnState = (RgnStateGrp)(HDta & 0x03);
00159 WeatherProp = (MergeCtrlGrp)((HDta >> 2) & 0x01);
00160 Aerosol = (MergeCtrlGrp)((HDta >> 3) & 0x01);
00161 MaritimeSurface = (MergeCtrlGrp)((HDta >> 4) & 0x01);
00162 TerrestrialSurface = (MergeCtrlGrp)((HDta >> 5) & 0x01);
00163
00164 CDta.c += 3;
00165
00166 Lat = *CDta.d++;
00167 Lon = *CDta.d++;
00168 XSize = *CDta.f++;
00169 YSize = *CDta.f++;
00170 CornerRadius = *CDta.f++;
00171 Rotation = *CDta.f++;
00172 Transition = *CDta.f++;
00173 }
00174 else
00175 {
00176 CigiSwap2(&RegionID, CDta.s++);
00177
00178 Cigi_uint8 HDta = *CDta.c++;
00179 RgnState = (RgnStateGrp)(HDta & 0x03);
00180 WeatherProp = (MergeCtrlGrp)((HDta >> 2) & 0x01);
00181 Aerosol = (MergeCtrlGrp)((HDta >> 3) & 0x01);
00182 MaritimeSurface = (MergeCtrlGrp)((HDta >> 4) & 0x01);
00183 TerrestrialSurface = (MergeCtrlGrp)((HDta >> 5) & 0x01);
00184
00185 CDta.c += 3;
00186
00187 CigiSwap8(&Lat, CDta.d++);
00188 CigiSwap8(&Lon, CDta.d++);
00189 CigiSwap4(&XSize, CDta.f++);
00190 CigiSwap4(&YSize, CDta.f++);
00191 CigiSwap4(&CornerRadius, CDta.f++);
00192 CigiSwap4(&Rotation, CDta.f++);
00193 CigiSwap4(&Transition, CDta.f++);
00194 }
00195
00196 return(PacketSize);
00197
00198 }
00199
00200
00201
00202
00203
00204
00205
00206