CigiAtmosCtrl.cpp

Go to the documentation of this file.
00001 
00052 #define _EXPORT_CCL_
00053 
00054 #include "CigiAtmosCtrl.h"
00055 #include "CigiSwapping.h"
00056 #include "CigiExceptions.h"
00057 
00058 
00059 // ====================================================================
00060 // Construction/Destruction
00061 // ====================================================================
00062 
00063 
00064 // ================================================
00065 // CigiAtmosCtrlV3
00066 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00067 CigiAtmosCtrlV3::CigiAtmosCtrlV3()
00068 {
00069 
00070    PacketID = CIGI_ATMOS_CTRL_PACKET_ID_V3;
00071    PacketSize = CIGI_ATMOS_CTRL_PACKET_SIZE_V3;
00072    Version = 3;
00073    MinorVersion = 0;
00074 
00075    Hour = 0;
00076    Minute = 0;
00077    Month = 1;
00078    Day = 1;
00079    Year = 2000;
00080    StarInt = 0.0;
00081    EphemerisEn = false;
00082    SunEn = false;
00083    MoonEn = false;
00084    StarEn = false;
00085    DateVld = false;
00086    AtmosEn = false;
00087    Aerosol = 0.0;
00088    Humidity = 30;
00089    AirTemp = 0.0;
00090    Visibility = 64373.76f;
00091    HorizWindSp = 0.0;
00092    VertWindSp = 0.0;
00093    WindDir = 0.0;
00094    BaroPress = 1013.25;
00095 
00096 
00097 }
00098 
00099 // ================================================
00100 // ~CigiAtmosCtrlV3
00101 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00102 CigiAtmosCtrlV3::~CigiAtmosCtrlV3()
00103 {
00104 
00105 }
00106 
00107 // ====================================================================
00108 // Pack and Unpack
00109 // ====================================================================
00110 
00111 // ================================================
00112 // Pack
00113 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00114 int CigiAtmosCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00115 {
00116    PackPointer CDta;
00117 
00118    CigiBaseEnvCtrl * Data;
00119    if(Spec == NULL)
00120       Data = ( CigiBaseEnvCtrl *)Base;
00121    else
00122       Data = ( CigiBaseEnvCtrl *)Spec;
00123 
00124    CDta.c = Buff;
00125 
00126    *CDta.c++ = PacketID;
00127    *CDta.c++ = PacketSize;
00128 
00129    *CDta.c++ = (Data->AtmosEn) ? 0x01 : 0;
00130 
00131    *CDta.c++ = Data->Humidity;
00132    *CDta.f++ = Data->AirTemp;
00133    *CDta.f++ = Data->Visibility;
00134    *CDta.f++ = Data->HorizWindSp;
00135    *CDta.f++ = Data->VertWindSp;
00136    *CDta.f++ = Data->WindDir;
00137    *CDta.f++ = Data->BaroPress;
00138    *CDta.l++ = 0;
00139 
00140    return(PacketSize);
00141 
00142 }
00143 
00144 // ================================================
00145 // Unpack
00146 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00147 int CigiAtmosCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00148 {
00149    PackPointer CDta;
00150 
00151    CDta.c = Buff;
00152 
00153    CDta.c += 2;  // Step over packet id and size
00154 
00155    if(!Swap)
00156    {
00157       AtmosEn = (*CDta.c++ != 0);
00158 
00159       Humidity = *CDta.c++;
00160       AirTemp = *CDta.f++;
00161       Visibility = *CDta.f++;
00162       HorizWindSp = *CDta.f++;
00163       VertWindSp = *CDta.f++;
00164       WindDir = *CDta.f++;
00165       BaroPress = *CDta.f++;
00166    }
00167    else
00168    {
00169       AtmosEn = (*CDta.c++ != 0);
00170 
00171       Humidity = *CDta.c++;
00172       CigiSwap4(&AirTemp, CDta.f++);
00173       CigiSwap4(&Visibility, CDta.f++);
00174       CigiSwap4(&HorizWindSp, CDta.f++);
00175       CigiSwap4(&VertWindSp, CDta.f++);
00176       CigiSwap4(&WindDir, CDta.f++);
00177       CigiSwap4(&BaroPress, CDta.f++);
00178    }
00179 
00180    if(Spec != NULL)
00181    {
00182 
00183       CigiBaseEnvCtrl * Data = (CigiBaseEnvCtrl *)Spec;
00184 
00185       Data->AtmosEn = AtmosEn;
00186 
00187       Data->Humidity = Humidity;
00188       Data->AirTemp = AirTemp;
00189       Data->Visibility = Visibility;
00190       Data->HorizWindSp = HorizWindSp;
00191       Data->VertWindSp = VertWindSp;
00192       Data->WindDir = WindDir;
00193       Data->BaroPress = BaroPress;
00194    }
00195 
00196    return(PacketSize);
00197 
00198 }
00199 
00200 
00201 
00202 // ====================================================================
00203 // Filling the Hold object
00204 // ====================================================================
00205 
00206 // ================================================
00207 // FillHold
00208 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00209 void CigiAtmosCtrlV3::FillHold(CigiBaseEnvCtrl * Hold) const
00210 {
00211    Hold->AtmosEn = AtmosEn;
00212    Hold->Humidity = Humidity;
00213    Hold->AirTemp = AirTemp;
00214    Hold->Visibility = Visibility;
00215    Hold->HorizWindSp = HorizWindSp;
00216    Hold->VertWindSp = VertWindSp;
00217    Hold->WindDir = WindDir;
00218    Hold->BaroPress = BaroPress;
00219 }
00220 
00221 
00222 
00223 
00224 // ====================================================================
00225 // Accessors
00226 // ====================================================================
00227 
00228 
00229 // ================================================
00230 // Humidity
00231 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00232 int CigiAtmosCtrlV3::SetHumidity(const Cigi_uint8 HumidityIn, bool bndchk)
00233 {
00234 
00235 #ifndef CIGI_NO_BND_CHK
00236    if(bndchk && ((HumidityIn < 0)||(HumidityIn > 100)))
00237    {
00238 #ifndef CIGI_NO_EXCEPT
00239       throw CigiValueOutOfRangeException("Humidity",(Cigi_uint8)HumidityIn,0,100);
00240 #endif
00241       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00242    }
00243 #endif
00244 
00245    Humidity = HumidityIn;
00246    return(CIGI_SUCCESS);
00247 
00248 }
00249 
00250 
00251 // ================================================
00252 // Visibility
00253 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00254 int CigiAtmosCtrlV3::SetVisibility(const float VisibilityIn, bool bndchk)
00255 {
00256 
00257 #ifndef CIGI_NO_BND_CHK
00258    if(bndchk && (VisibilityIn < 0.0))
00259    {
00260 #ifndef CIGI_NO_EXCEPT
00261       throw CigiValueOutOfRangeException("Visibility",(float)VisibilityIn,">",0.0);
00262 #endif
00263       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00264    }
00265 #endif
00266 
00267    Visibility = VisibilityIn;
00268    return(CIGI_SUCCESS);
00269 
00270 }
00271 
00272 
00273 // ================================================
00274 // HorizWindSp
00275 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00276 int CigiAtmosCtrlV3::SetHorizWindSp(const float HorizWindSpIn, bool bndchk)
00277 {
00278 
00279 #ifndef CIGI_NO_BND_CHK
00280    if(bndchk && (HorizWindSpIn < 0.0))
00281    {
00282 #ifndef CIGI_NO_EXCEPT
00283       throw CigiValueOutOfRangeException("HorizWindSp",(float)HorizWindSpIn,">",0.0);
00284 #endif
00285       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00286    }
00287 #endif
00288 
00289    HorizWindSp = HorizWindSpIn;
00290    return(CIGI_SUCCESS);
00291 
00292 }
00293 
00294 
00295 // ================================================
00296 // WindDir
00297 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00298 int CigiAtmosCtrlV3::SetWindDir(const float WindDirIn, bool bndchk)
00299 {
00300 
00301 #ifndef CIGI_NO_BND_CHK
00302    if(bndchk && ((WindDirIn < 0.0)||(WindDirIn > 360.0)))
00303    {
00304 #ifndef CIGI_NO_EXCEPT
00305       throw CigiValueOutOfRangeException("WindDir",(float)WindDirIn,0.0,360.0);
00306 #endif
00307       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00308    }
00309 #endif
00310 
00311    WindDir = WindDirIn;
00312    return(CIGI_SUCCESS);
00313 
00314 }
00315 
00316 
00317 // ================================================
00318 // BaroPress
00319 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00320 int CigiAtmosCtrlV3::SetBaroPress(const float BaroPressIn, bool bndchk)
00321 {
00322 
00323 #ifndef CIGI_NO_BND_CHK
00324    if(bndchk && (BaroPressIn < 0.0))
00325    {
00326 #ifndef CIGI_NO_EXCEPT
00327       throw CigiValueOutOfRangeException("BaroPress",(float)BaroPressIn,">",0.0);
00328 #endif
00329       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00330    }
00331 #endif
00332 
00333    BaroPress = BaroPressIn;
00334    return(CIGI_SUCCESS);
00335 
00336 }
00337 
00338 

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