CigiCelestialCtrl.cpp

Go to the documentation of this file.
00001 
00055 #define _EXPORT_CCL_
00056 
00057 #include "CigiCelestialCtrl.h"
00058 #include "CigiSwapping.h"
00059 #include "CigiExceptions.h"
00060 
00061 
00062 // ====================================================================
00063 // Construction/Destruction
00064 // ====================================================================
00065 
00066 
00067 // ================================================
00068 // CigiCelestialCtrlV3
00069 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00070 CigiCelestialCtrlV3::CigiCelestialCtrlV3()
00071 {
00072 
00073    PacketID = CIGI_CELESTIAL_CTRL_PACKET_ID_V3;
00074    PacketSize = CIGI_CELESTIAL_CTRL_PACKET_SIZE_V3;
00075    Version = 3;
00076    MinorVersion = 0;
00077 
00078    Hour = 0;
00079    Minute = 0;
00080    Month = 1;
00081    Day = 1;
00082    Year = 2000;
00083    StarInt = 0.0;
00084    EphemerisEn = false;
00085    SunEn = false;
00086    MoonEn = false;
00087    StarEn = false;
00088    DateVld = false;
00089    AtmosEn = false;
00090    Aerosol = 0.0;
00091    Humidity = 30;
00092    AirTemp = 0.0;
00093    Visibility = 64373.76f;
00094    HorizWindSp = 0.0;
00095    VertWindSp = 0.0;
00096    WindDir = 0.0;
00097    BaroPress = 1013.25;
00098 
00099 
00100 }
00101 
00102 // ================================================
00103 // ~CigiCelestialCtrlV3
00104 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00105 CigiCelestialCtrlV3::~CigiCelestialCtrlV3()
00106 {
00107 
00108 }
00109 
00110 // ====================================================================
00111 // Pack and Unpack
00112 // ====================================================================
00113 
00114 // ================================================
00115 // Pack
00116 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00117 int CigiCelestialCtrlV3::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00118 {
00119    PackPointer CDta;
00120 
00121    CigiBaseEnvCtrl * Data;
00122    if(Spec == NULL)
00123       Data = ( CigiBaseEnvCtrl *)Base;
00124    else
00125       Data = ( CigiBaseEnvCtrl *)Spec;
00126 
00127 
00128    CDta.c = Buff;
00129 
00130    *CDta.c++ = PacketID;
00131    *CDta.c++ = PacketSize;
00132 
00133    *CDta.c++ = Data->Hour;
00134    *CDta.c++ = Data->Minute;
00135 
00136    Cigi_uint8 HDta = (Data->EphemerisEn) ? 0x01 : 0;
00137    HDta |= (Data->SunEn) ? 0x02 : 0;
00138    HDta |= (Data->MoonEn) ? 0x04 : 0;
00139    HDta |= (Data->StarEn) ? 0x08 : 0;
00140    HDta |= (Data->DateVld) ? 0x10 : 0;
00141    *CDta.c++ = HDta;
00142 
00143    *CDta.c++ = 0;
00144    *CDta.s++ = 0;
00145 
00146    // Determine date
00147    Cigi_uint32 date = ((Cigi_uint32)Data->Month * 1000000) +
00148                         ((Cigi_uint32)Data->Day   *   10000) + (Cigi_uint32)Data->Year;
00149    *CDta.l++ = date;
00150 
00151    *CDta.f++ = Data->StarInt;
00152 
00153 
00154    return(PacketSize);
00155 
00156 }
00157 
00158 // ================================================
00159 // Unpack
00160 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00161 int CigiCelestialCtrlV3::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00162 {
00163    PackPointer CDta;
00164 
00165    Cigi_uint32 date;
00166 
00167    CDta.c = Buff;
00168 
00169    CDta.c += 2;  // Step over packet id and size
00170 
00171    if(!Swap)
00172    {
00173       Hour = *CDta.c++;
00174       Minute = *CDta.c++;
00175 
00176       Cigi_uint8 HDta = *CDta.c++;
00177       EphemerisEn = ((HDta & 0x01) != 0);
00178       SunEn = ((HDta & 0x02) != 0);
00179       MoonEn = ((HDta & 0x04) != 0);
00180       StarEn = ((HDta & 0x08) != 0);
00181       DateVld = ((HDta & 0x10) != 0);
00182 
00183       CDta.c += 3;
00184 
00185       date = *CDta.l++;
00186 
00187       StarInt = *CDta.f++;
00188    }
00189    else
00190    {
00191       Hour = *CDta.c++;
00192       Minute = *CDta.c++;
00193 
00194       Cigi_uint8 HDta = *CDta.c++;
00195       EphemerisEn = ((HDta & 0x01) != 0);
00196       SunEn = ((HDta & 0x02) != 0);
00197       MoonEn = ((HDta & 0x04) != 0);
00198       StarEn = ((HDta & 0x08) != 0);
00199       DateVld = ((HDta & 0x10) != 0);
00200 
00201       CDta.c += 3;
00202 
00203       CigiSwap4(&date, CDta.l++);
00204       CigiSwap4(&StarInt, CDta.f++);
00205    }
00206 
00207    // Determine date
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 
00218    if(Spec != NULL)
00219    {
00220 
00221       CigiBaseEnvCtrl * Data = (CigiBaseEnvCtrl *)Spec;
00222 
00223       Data->Hour = Hour;
00224       Data->Minute = Minute;
00225 
00226       Data->EphemerisEn = EphemerisEn;
00227       Data->SunEn = SunEn;
00228       Data->MoonEn = MoonEn;
00229       Data->StarEn = StarEn;
00230       Data->DateVld = DateVld;
00231 
00232       Data->StarInt = StarInt;
00233 
00234       Data->Month = Month;
00235       Data->Day = Day;
00236       Data->Year = Year;
00237 
00238    }
00239 
00240 
00241 
00242    return(PacketSize);
00243 
00244 }
00245 
00246 
00247 
00248 // ====================================================================
00249 // Filling the Hold object
00250 // ====================================================================
00251 
00252 // ================================================
00253 // FillHold
00254 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00255 void CigiCelestialCtrlV3::FillHold(CigiBaseEnvCtrl * Hold) const
00256 {
00257    Hold->Hour = Hour;
00258    Hold->Minute = Minute;
00259    Hold->EphemerisEn = EphemerisEn;
00260    Hold->SunEn = SunEn;
00261    Hold->MoonEn = MoonEn;
00262    Hold->StarEn = StarEn;
00263    Hold->DateVld = DateVld;
00264    Hold->Month = Month;
00265    Hold->Day = Day;
00266    Hold->Year = Year;
00267    Hold->StarInt = StarInt;
00268 }
00269 
00270 
00271 
00272 
00273 // ====================================================================
00274 // Accessors
00275 // ====================================================================
00276 
00277 
00278 // ================================================
00279 // Hour
00280 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00281 int CigiCelestialCtrlV3::SetHour(const Cigi_uint8 HourIn, bool bndchk)
00282 {
00283 
00284 #ifndef CIGI_NO_BND_CHK
00285    if(bndchk && ((HourIn < 0)||(HourIn > 23)))
00286    {
00287 #ifndef CIGI_NO_EXCEPT
00288       throw CigiValueOutOfRangeException("Hour",(Cigi_uint8)HourIn,0,23);
00289 #endif
00290       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00291    }
00292 #endif
00293 
00294    Hour = HourIn;
00295    return(CIGI_SUCCESS);
00296 
00297 }
00298 
00299 
00300 // ================================================
00301 // Minute
00302 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00303 int CigiCelestialCtrlV3::SetMinute(const Cigi_uint8 MinuteIn, bool bndchk)
00304 {
00305 
00306 #ifndef CIGI_NO_BND_CHK
00307    if(bndchk && ((MinuteIn < 0)||(MinuteIn > 59)))
00308    {
00309 #ifndef CIGI_NO_EXCEPT
00310       throw CigiValueOutOfRangeException("Minute",(Cigi_uint8)MinuteIn,0,59);
00311 #endif
00312       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00313    }
00314 #endif
00315 
00316    Minute = MinuteIn;
00317    return(CIGI_SUCCESS);
00318 
00319 }
00320 
00321 
00322 // ================================================
00323 // Month
00324 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00325 int CigiCelestialCtrlV3::SetMonth(const Cigi_uint8 MonthIn, bool bndchk)
00326 {
00327 
00328 #ifndef CIGI_NO_BND_CHK
00329    if(bndchk && ((MonthIn < 1)||(MonthIn > 12)))
00330    {
00331 #ifndef CIGI_NO_EXCEPT
00332       throw CigiValueOutOfRangeException("Month",(Cigi_uint8)MonthIn,1,12);
00333 #endif
00334       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00335    }
00336 #endif
00337 
00338    Month = MonthIn;
00339    return(CIGI_SUCCESS);
00340 
00341 }
00342 
00343 
00344 // ================================================
00345 // Day
00346 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00347 int CigiCelestialCtrlV3::SetDay(const Cigi_uint8 DayIn, bool bndchk)
00348 {
00349 
00350 #ifndef CIGI_NO_BND_CHK
00351    if(bndchk && ((DayIn < 1)||(DayIn > 31)))
00352    {
00353 #ifndef CIGI_NO_EXCEPT
00354       throw CigiValueOutOfRangeException("Day",(Cigi_uint8)DayIn,1,31);
00355 #endif
00356       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00357    }
00358 #endif
00359 
00360    Day = DayIn;
00361    return(CIGI_SUCCESS);
00362 
00363 }
00364 
00365 
00366 
00367 // ================================================
00368 // Star Field Intensity
00369 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00370 int CigiCelestialCtrlV3::SetStarInt(const float StarIntIn, bool bndchk)
00371 {
00372 
00373 #ifndef CIGI_NO_BND_CHK
00374    if(bndchk && ((StarIntIn < 0.0)||(StarIntIn > 100.0)))
00375    {
00376 #ifndef CIGI_NO_EXCEPT
00377       throw CigiValueOutOfRangeException("StarInt",StarIntIn,0.0,100.0);
00378 #endif
00379       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00380    }
00381 #endif
00382 
00383    StarInt = StarIntIn;
00384    return(CIGI_SUCCESS);
00385 
00386 }
00387 

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