CigiEnvCtrlV1.cpp

Go to the documentation of this file.
00001 
00060 #define _EXPORT_CCL_
00061 
00062 #include "CigiEnvCtrlV1.h"
00063 #include "CigiSwapping.h"
00064 #include "CigiExceptions.h"
00065 
00066 #include <memory.h>
00067 
00068 
00069 #ifdef CIGI_LITTLE_ENDIAN
00070    #define CIGI_SCOPY2 CigiSwap2
00071    #define CIGI_SCOPY4 CigiSwap4
00072    #define CIGI_SCOPY8 CigiSwap8
00073 #else
00074    #define CIGI_SCOPY2 CigiCopy2
00075    #define CIGI_SCOPY4 CigiCopy4
00076    #define CIGI_SCOPY8 CigiCopy8
00077 #endif
00078 
00079 
00080 
00081 
00082 // ====================================================================
00083 // Construction/Destruction
00084 // ====================================================================
00085 
00086 
00087 // ================================================
00088 // CigiEnvCtrlV1
00089 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00090 CigiEnvCtrlV1::CigiEnvCtrlV1()
00091 {
00092 
00093    PacketID = CIGI_ENV_CTRL_PACKET_ID_V1;
00094    PacketSize = CIGI_ENV_CTRL_PACKET_SIZE_V1;
00095    Version = 1;
00096    MinorVersion = 0;
00097 
00098    Hour = 0;
00099    Minute = 0;
00100    Month = 1;
00101    Day = 1;
00102    Year = 2000;
00103    StarInt = 0.0;
00104    EphemerisEn = false;
00105    SunEn = false;
00106    MoonEn = false;
00107    StarEn = false;
00108    DateVld = true;
00109    AtmosEn = false;
00110    Aerosol = 0.0;
00111    Humidity = 30;
00112    AirTemp = 0.0;
00113    Visibility = 64373.76f;
00114    HorizWindSp = 0.0;
00115    VertWindSp = 0.0;
00116    WindDir = 0.0;
00117    BaroPress = 1013.25;
00118 
00119 }
00120 
00121 // ================================================
00122 // ~CigiEnvCtrlV1
00123 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00124 CigiEnvCtrlV1::~CigiEnvCtrlV1()
00125 {
00126 
00127 }
00128 
00129 // ====================================================================
00130 // Pack and Unpack
00131 // ====================================================================
00132 
00133 // ================================================
00134 // Pack
00135 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00136 int CigiEnvCtrlV1::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00137 {
00138    double DBuf[6];
00139 
00140    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00141 
00142    PackPointer CDta;
00143 
00144    CigiBaseEnvCtrl * Data = ( CigiBaseEnvCtrl *)Base;
00145 
00146    CDta.d = DBuf;
00147 
00148    *CDta.c++ = PacketID;
00149    *CDta.c++ = PacketSize;
00150 
00151    *CDta.c++ = Data->Hour;
00152    *CDta.c++ = Data->Minute;
00153 
00154    *CDta.c++ = ((Data->Humidity) & 0x7f) | ((Data->EphemerisEn) ? 0x80 : 0);
00155 
00156    *CDta.c++ = 0;
00157    *CDta.s++ = 0;
00158 
00159    // Determine date
00160    Cigi_uint32 date = ((Cigi_uint32)Data->Month * 1000000) +
00161                         ((Cigi_uint32)Data->Day   *   10000) + (Cigi_uint32)Data->Year;
00162    CIGI_SCOPY4(CDta.l++, &date);
00163 
00164    CIGI_SCOPY4(CDta.f++, &Data->AirTemp);
00165    CIGI_SCOPY4(CDta.f++, &Data->Visibility);
00166    CIGI_SCOPY4(CDta.f++, &Data->HorizWindSp);
00167    CIGI_SCOPY4(CDta.f++, &Data->WindDir);
00168 
00169 
00170    memcpy(Buff,tBuf,CIGI_ENV_CTRL_PACKET_SIZE_V1);
00171 
00172    return(PacketSize);
00173 
00174 }
00175 
00176 // ================================================
00177 // Unpack
00178 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00179 int CigiEnvCtrlV1::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00180 {
00181    double DBuf[6];
00182 
00183    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00184 
00185    PackPointer CDta;
00186 
00187    memcpy(tBuf,Buff,CIGI_ENV_CTRL_PACKET_SIZE_V1);
00188 
00189    CDta.d = DBuf;
00190 
00191    CDta.c += 2;  // Step over packet id and size
00192 
00193    Hour = *CDta.c++;
00194    Minute = *CDta.c++;
00195 
00196    Cigi_uint8 HDta = *CDta.c++;
00197    EphemerisEn = ((HDta & 0x80) != 0);
00198    Humidity = HDta & 0x7f;
00199 
00200    SunEn = MoonEn = StarEn = DateVld = EphemerisEn;
00201 
00202    CDta.c += 3;
00203 
00204    // Determine date
00205    Cigi_uint32 date;
00206    CIGI_SCOPY4(&date, CDta.l++);
00207 
00208    Month = (Cigi_uint8)(date / 1000000);
00209    date -= ((Cigi_uint32)Month * 1000000);
00210 
00211    Day = (Cigi_uint8)(date / 10000);
00212    date -= ((Cigi_uint32)Day * 10000);
00213 
00214    Year = (Cigi_uint16)date;
00215 
00216 
00217    CIGI_SCOPY4(&AirTemp, CDta.f++);
00218    CIGI_SCOPY4(&Visibility, CDta.f++);
00219    CIGI_SCOPY4(&HorizWindSp, CDta.f++);
00220    CIGI_SCOPY4(&WindDir, CDta.f++);
00221 
00222 
00223 
00224    return(PacketSize);
00225 
00226 }
00227 
00228 
00229 
00230 // ====================================================================
00231 // Filling the Hold object
00232 // ====================================================================
00233 
00234 // ================================================
00235 // FillHold
00236 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00237 void CigiEnvCtrlV1::FillHold(CigiBaseEnvCtrl * Hold) const
00238 {
00239    Hold->Hour = Hour;
00240    Hold->Minute = Minute;
00241    Hold->EphemerisEn = EphemerisEn;
00242    Hold->SunEn = SunEn;
00243    Hold->MoonEn = MoonEn;
00244    Hold->StarEn = StarEn;
00245    Hold->DateVld = DateVld;
00246    Hold->AtmosEn = AtmosEn;
00247    Hold->Humidity = Humidity;
00248    Hold->Month = Month;
00249    Hold->Day = Day;
00250    Hold->Year = Year;
00251    Hold->AirTemp = AirTemp;
00252    Hold->Visibility = Visibility;
00253    Hold->HorizWindSp = HorizWindSp;
00254    Hold->WindDir = WindDir;
00255    Hold->BaroPress = BaroPress;
00256    Hold->Aerosol = Aerosol;
00257 }
00258 
00259 
00260 
00261 // ====================================================================
00262 // Accessors
00263 // ====================================================================
00264 
00265 
00266 // ================================================
00267 // Hour
00268 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00269 int CigiEnvCtrlV1::SetHour(const Cigi_uint8 HourIn, bool bndchk)
00270 {
00271 
00272 #ifndef CIGI_NO_BND_CHK
00273    if(bndchk && ((HourIn < 0)||(HourIn > 23)))
00274    {
00275 #ifndef CIGI_NO_EXCEPT
00276       throw CigiValueOutOfRangeException("Hour",(Cigi_uint8)HourIn,0,23);
00277 #endif
00278       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00279    }
00280 #endif
00281 
00282    Hour = HourIn;
00283    return(CIGI_SUCCESS);
00284 
00285 }
00286 
00287 
00288 // ================================================
00289 // Minute
00290 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00291 int CigiEnvCtrlV1::SetMinute(const Cigi_uint8 MinuteIn, bool bndchk)
00292 {
00293 
00294 #ifndef CIGI_NO_BND_CHK
00295    if(bndchk && ((MinuteIn < 0)||(MinuteIn > 59)))
00296    {
00297 #ifndef CIGI_NO_EXCEPT
00298       throw CigiValueOutOfRangeException("Minute",(Cigi_uint8)MinuteIn,0,59);
00299 #endif
00300       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00301    }
00302 #endif
00303 
00304    Minute = MinuteIn;
00305    return(CIGI_SUCCESS);
00306 
00307 }
00308 
00309 
00310 // ================================================
00311 // Humidity
00312 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00313 int CigiEnvCtrlV1::SetHumidity(const Cigi_uint8 HumidityIn, bool bndchk)
00314 {
00315 
00316 #ifndef CIGI_NO_BND_CHK
00317    if(bndchk && ((HumidityIn < 0)||(HumidityIn > 100)))
00318    {
00319 #ifndef CIGI_NO_EXCEPT
00320       throw CigiValueOutOfRangeException("Humidity",(Cigi_uint8)HumidityIn,0,100);
00321 #endif
00322       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00323    }
00324 #endif
00325 
00326    Humidity = HumidityIn;
00327    return(CIGI_SUCCESS);
00328 
00329 }
00330 
00331 
00332 // ================================================
00333 // Month
00334 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00335 int CigiEnvCtrlV1::SetMonth(const Cigi_uint8 MonthIn, bool bndchk)
00336 {
00337 
00338 #ifndef CIGI_NO_BND_CHK
00339    if(bndchk && ((MonthIn < 1)||(MonthIn > 12)))
00340    {
00341 #ifndef CIGI_NO_EXCEPT
00342       throw CigiValueOutOfRangeException("Month",(Cigi_uint8)MonthIn,1,12);
00343 #endif
00344       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00345    }
00346 #endif
00347 
00348    Month = MonthIn;
00349    return(CIGI_SUCCESS);
00350 
00351 }
00352 
00353 
00354 // ================================================
00355 // Day
00356 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00357 int CigiEnvCtrlV1::SetDay(const Cigi_uint8 DayIn, bool bndchk)
00358 {
00359 
00360 #ifndef CIGI_NO_BND_CHK
00361    if(bndchk && ((DayIn < 1)||(DayIn > 31)))
00362    {
00363 #ifndef CIGI_NO_EXCEPT
00364       throw CigiValueOutOfRangeException("Day",(Cigi_uint8)DayIn,1,31);
00365 #endif
00366       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00367    }
00368 #endif
00369 
00370    Day = DayIn;
00371    return(CIGI_SUCCESS);
00372 
00373 }
00374 
00375 
00376 // ================================================
00377 // Visibility
00378 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00379 int CigiEnvCtrlV1::SetVisibility(const float VisibilityIn, bool bndchk)
00380 {
00381 
00382 #ifndef CIGI_NO_BND_CHK
00383    if(bndchk && (VisibilityIn < 0.0))
00384    {
00385 #ifndef CIGI_NO_EXCEPT
00386       throw CigiValueOutOfRangeException("Visibility",(float)VisibilityIn,">",0.0);
00387 #endif
00388       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00389    }
00390 #endif
00391 
00392    Visibility = VisibilityIn;
00393    return(CIGI_SUCCESS);
00394 
00395 }
00396 
00397 
00398 // ================================================
00399 // HorizWindSp
00400 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00401 int CigiEnvCtrlV1::SetHorizWindSp(const float HorizWindSpIn, bool bndchk)
00402 {
00403 
00404 #ifndef CIGI_NO_BND_CHK
00405    if(bndchk && (HorizWindSpIn < 0.0))
00406    {
00407 #ifndef CIGI_NO_EXCEPT
00408       throw CigiValueOutOfRangeException("HorizWindSp",(float)HorizWindSpIn,">",0.0);
00409 #endif
00410       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00411    }
00412 #endif
00413 
00414    HorizWindSp = HorizWindSpIn;
00415    return(CIGI_SUCCESS);
00416 
00417 }
00418 
00419 
00420 // ================================================
00421 // WindDir
00422 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00423 int CigiEnvCtrlV1::SetWindDir(const float WindDirIn, bool bndchk)
00424 {
00425 
00426 #ifndef CIGI_NO_BND_CHK
00427    if(bndchk && ((WindDirIn < 0.0)||(WindDirIn > 360.0)))
00428    {
00429 #ifndef CIGI_NO_EXCEPT
00430       throw CigiValueOutOfRangeException("WindDir",(float)WindDirIn,0.0,360.0);
00431 #endif
00432       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00433    }
00434 #endif
00435 
00436    WindDir = WindDirIn;
00437    return(CIGI_SUCCESS);
00438 
00439 }
00440 
00441 

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