CigiSensorCtrlV2.cpp

Go to the documentation of this file.
00001 
00055 #define _EXPORT_CCL_
00056 
00057 #include "CigiSensorCtrlV2.h"
00058 #include "CigiSwapping.h"
00059 #include "CigiExceptions.h"
00060 
00061 #include <memory.h>
00062 
00063 
00064 #ifdef CIGI_LITTLE_ENDIAN
00065    #define CIGI_SCOPY2 CigiSwap2
00066    #define CIGI_SCOPY4 CigiSwap4
00067    #define CIGI_SCOPY8 CigiSwap8
00068 #else
00069    #define CIGI_SCOPY2 CigiCopy2
00070    #define CIGI_SCOPY4 CigiCopy4
00071    #define CIGI_SCOPY8 CigiCopy8
00072 #endif
00073 
00074 
00075 
00076 
00077 // ====================================================================
00078 // Construction/Destruction
00079 // ====================================================================
00080 
00081 
00082 // ================================================
00083 // CigiSensorCtrlV2
00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00085 CigiSensorCtrlV2::CigiSensorCtrlV2()
00086 {
00087 
00088    PacketID = CIGI_SENSOR_CTRL_PACKET_ID_V2;
00089    PacketSize = CIGI_SENSOR_CTRL_PACKET_SIZE_V2;
00090    Version = 2;
00091    MinorVersion = 0;
00092 
00093    ViewID = 0;
00094    SensorID = 0;
00095    SensorOn = false;
00096    Polarity = WhiteHot;
00097    LineDropEn = false;
00098    TrackMode = TrackOff;
00099    AutoGainEn = false;
00100    TrackPolarity = TrackWhite;
00101    ResponseType = GatePos;
00102    Gain = 0.0;
00103    Level = 0.0;
00104    ACCoupling = 0.0;
00105    Noise = 0.0;
00106 
00107 }
00108 
00109 // ================================================
00110 // ~CigiSensorCtrlV2
00111 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00112 CigiSensorCtrlV2::~CigiSensorCtrlV2()
00113 {
00114 
00115 }
00116 
00117 // ====================================================================
00118 // Pack and Unpack
00119 // ====================================================================
00120 
00121 // ================================================
00122 // Pack
00123 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00124 int CigiSensorCtrlV2::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00125 {
00126    double DBuf[6];
00127    Cigi_uint16 tViewID;
00128 
00129    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00130 
00131    PackPointer CDta;
00132 
00133    CigiBaseSensorCtrl * Data = ( CigiBaseSensorCtrl *)Base;
00134 
00135    CDta.d = DBuf;
00136 
00137    *CDta.c++ = PacketID;
00138    *CDta.c++ = PacketSize;
00139 
00140    tViewID = Data->ViewID;
00141 
00142    if(tViewID > 31)
00143       tViewID = 31;
00144 
00145    Cigi_uint8 HDta = (Cigi_uint8)tViewID << 3;
00146 
00147    if(Data->SensorOn)
00148       HDta |= 0x04;
00149 
00150    if(Data->Polarity == BlackHot)
00151       HDta |= 0x02;
00152 
00153    if(Data->LineDropEn)
00154       HDta |= 0x01;
00155 
00156    *CDta.c++ = HDta;
00157 
00158    *CDta.c++ = Data->SensorID;
00159 
00160    HDta = (Cigi_uint8)(Data->TrackMode << 4);
00161 
00162    if(Data->AutoGainEn)
00163       HDta |= 0x08;
00164 
00165    if(Data->TrackPolarity == TrackBlack)
00166       HDta |= 0x04;
00167 
00168    *CDta.c++ = HDta;
00169 
00170    *CDta.c++ = 0;
00171    *CDta.s++ = 0;
00172 
00173    CIGI_SCOPY4(CDta.f++, &Data->Gain);
00174    CIGI_SCOPY4(CDta.f++, &Data->Level);
00175    CIGI_SCOPY4(CDta.f++, &Data->ACCoupling);
00176    CIGI_SCOPY4(CDta.f++, &Data->Noise);
00177 
00178    memcpy(Buff,tBuf,CIGI_SENSOR_CTRL_PACKET_SIZE_V2);
00179 
00180    return(PacketSize);
00181 
00182 }
00183 
00184 // ================================================
00185 // Unpack
00186 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00187 int CigiSensorCtrlV2::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00188 {
00189    double DBuf[6];
00190 
00191    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00192 
00193    PackPointer CDta;
00194 
00195    memcpy(tBuf,Buff,CIGI_SENSOR_CTRL_PACKET_SIZE_V2);
00196 
00197    CDta.d = DBuf;
00198 
00199    CDta.c += 2;  // Step over packet id and size
00200 
00201    Cigi_uint8 HDta = *CDta.c++;
00202 
00203    ViewID = (Cigi_uint8)((HDta >> 3) & 0x1f);
00204    SensorOn = ((HDta & 0x04) != 0);
00205    Polarity = (PolarityGrp)((HDta >> 1) & 0x01);
00206    LineDropEn = ((HDta & 0x01) != 0);
00207 
00208    SensorID = *CDta.c++;
00209 
00210    HDta = *CDta.c++;
00211    TrackMode = (TrackModeGrp)((HDta >> 4) & 0x0f);
00212    AutoGainEn = ((HDta & 0x08) != 0);
00213    TrackPolarity = (TrackPolarityGrp)((HDta >> 2) & 0x01);
00214 
00215    CDta.c += 3;
00216 
00217    CIGI_SCOPY4(&Gain, CDta.f++);
00218 
00219    CIGI_SCOPY4(&Level, CDta.f++);
00220    CIGI_SCOPY4(&ACCoupling, CDta.f++);
00221    CIGI_SCOPY4(&Noise, CDta.f++);
00222 
00223    ResponseType = GatePos;
00224 
00225    return(PacketSize);
00226 
00227 }
00228 
00229 
00230 
00231 // ====================================================================
00232 // Accessors
00233 // ====================================================================
00234 
00235 
00236 // ================================================
00237 // SetViewID
00238 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00239 int CigiSensorCtrlV2::SetViewID(const Cigi_uint16 ViewIDIn, bool bndchk)
00240 {
00241 
00242 #ifndef CIGI_NO_BND_CHK
00243    if(bndchk && ((ViewIDIn < 0)||(ViewIDIn > 31)))
00244    {
00245 #ifndef CIGI_NO_EXCEPT
00246       throw CigiValueOutOfRangeException("ViewID",(Cigi_uint16)ViewIDIn,0,31);
00247 #endif
00248       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00249    }
00250 #endif
00251 
00252    ViewID = ViewIDIn;
00253    return(CIGI_SUCCESS);
00254 
00255 }
00256 
00257 
00258 // ================================================
00259 // Gain
00260 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00261 int CigiSensorCtrlV2::SetGain(const float GainIn, bool bndchk)
00262 {
00263 
00264 #ifndef CIGI_NO_BND_CHK
00265    if(bndchk && ((GainIn < 0.0)||(GainIn > 1.0)))
00266    {
00267 #ifndef CIGI_NO_EXCEPT
00268       throw CigiValueOutOfRangeException("Gain",(float)GainIn,0.0,1.0);
00269 #endif
00270       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00271    }
00272 #endif
00273 
00274    Gain = GainIn;
00275    return(CIGI_SUCCESS);
00276 
00277 }
00278 
00279 

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