CigiSensorCtrlV1.cpp

Go to the documentation of this file.
00001 
00055 #define _EXPORT_CCL_
00056 
00057 #include "CigiSensorCtrlV1.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 // CigiSensorCtrlV1
00084 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00085 CigiSensorCtrlV1::CigiSensorCtrlV1()
00086 {
00087 
00088    PacketID = CIGI_SENSOR_CTRL_PACKET_ID_V1;
00089    PacketSize = CIGI_SENSOR_CTRL_PACKET_SIZE_V1;
00090    Version = 1;
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 // ~CigiSensorCtrlV1
00111 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00112 CigiSensorCtrlV1::~CigiSensorCtrlV1()
00113 {
00114 
00115 }
00116 
00117 // ====================================================================
00118 // Pack and Unpack
00119 // ====================================================================
00120 
00121 // ================================================
00122 // Pack
00123 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00124 int CigiSensorCtrlV1::Pack(CigiBasePacket * Base, Cigi_uint8 * Buff, void *Spec) const
00125 {
00126    double DBuf[6];
00127    Cigi_uint16 tViewID;
00128    float tGain;
00129 
00130    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00131 
00132    PackPointer CDta;
00133 
00134    CigiBaseSensorCtrl * Data = ( CigiBaseSensorCtrl *)Base;
00135 
00136    CDta.d = DBuf;
00137 
00138    *CDta.c++ = PacketID;
00139    *CDta.c++ = PacketSize;
00140 
00141    tViewID = Data->ViewID;
00142 
00143    if(tViewID > 31)
00144       tViewID = 31;
00145 
00146    Cigi_uint8 HDta = (Cigi_uint8)tViewID << 3;
00147 
00148    if(Data->SensorOn)
00149       HDta |= 0x04;
00150 
00151    if(Data->Polarity == BlackHot)
00152       HDta |= 0x02;
00153 
00154    if(Data->LineDropEn)
00155       HDta |= 0x01;
00156 
00157    *CDta.c++ = HDta;
00158 
00159    *CDta.c++ = Data->SensorID;
00160 
00161    HDta = (Cigi_uint8)(Data->TrackMode << 4);
00162 
00163    if(Data->AutoGainEn)
00164       HDta |= 0x08;
00165 
00166    if(Data->TrackPolarity == TrackBlack)
00167       HDta |= 0x04;
00168 
00169    *CDta.c++ = HDta;
00170 
00171    *CDta.c++ = 0;
00172    *CDta.s++ = 0;
00173 
00174    tGain = 100.0f * Data->Gain;  // convert from std gain to CIGI 1 gain.
00175    CIGI_SCOPY4(CDta.f++, &tGain);
00176    CIGI_SCOPY4(CDta.f++, &Data->Level);
00177    CIGI_SCOPY4(CDta.f++, &Data->ACCoupling);
00178    CIGI_SCOPY4(CDta.f++, &Data->Noise);
00179 
00180    memcpy(Buff,tBuf,CIGI_SENSOR_CTRL_PACKET_SIZE_V1);
00181 
00182    return(PacketSize);
00183 
00184 }
00185 
00186 // ================================================
00187 // Unpack
00188 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00189 int CigiSensorCtrlV1::Unpack(Cigi_uint8 * Buff, bool Swap, void *Spec)
00190 {
00191    double DBuf[6];
00192    float tGain;
00193 
00194    Cigi_uint8 *tBuf = (Cigi_uint8 *)DBuf;
00195 
00196    PackPointer CDta;
00197 
00198    memcpy(tBuf,Buff,CIGI_SENSOR_CTRL_PACKET_SIZE_V1);
00199 
00200    CDta.d = DBuf;
00201 
00202    CDta.c += 2;  // Step over packet id and size
00203 
00204    Cigi_uint8 HDta = *CDta.c++;
00205 
00206    ViewID = (Cigi_uint8)((HDta >> 3) & 0x1f);
00207    SensorOn = ((HDta & 0x04) != 0);
00208    Polarity = (PolarityGrp)((HDta >> 1) & 0x01);
00209    LineDropEn = ((HDta & 0x01) != 0);
00210 
00211    SensorID = *CDta.c++;
00212 
00213    HDta = *CDta.c++;
00214    TrackMode = (TrackModeGrp)((HDta >> 4) & 0x0f);
00215    AutoGainEn = ((HDta & 0x08) != 0);
00216    TrackPolarity = (TrackPolarityGrp)((HDta >> 2) & 0x01);
00217 
00218    CDta.c += 3;
00219 
00220    CIGI_SCOPY4(&tGain, CDta.f++);
00221    Gain = tGain / 100.0f; // convert from CIGI 1 gain to standard gain.
00222 
00223    CIGI_SCOPY4(&Level, CDta.f++);
00224    CIGI_SCOPY4(&ACCoupling, CDta.f++);
00225    CIGI_SCOPY4(&Noise, CDta.f++);
00226 
00227    ResponseType = GatePos;
00228 
00229    return(PacketSize);
00230 
00231 }
00232 
00233 
00234 
00235 // ====================================================================
00236 // Accessors
00237 // ====================================================================
00238 
00239 
00240 // ================================================
00241 // SetViewID
00242 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00243 int CigiSensorCtrlV1::SetViewID(const Cigi_uint16 ViewIDIn, bool bndchk)
00244 {
00245 
00246 #ifndef CIGI_NO_BND_CHK
00247    if(bndchk && ((ViewIDIn < 0)||(ViewIDIn > 31)))
00248    {
00249 #ifndef CIGI_NO_EXCEPT
00250       throw CigiValueOutOfRangeException("ViewID",(Cigi_uint16)ViewIDIn,0,31);
00251 #endif
00252       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00253    }
00254 #endif
00255 
00256    ViewID = ViewIDIn;
00257    return(CIGI_SUCCESS);
00258 
00259 }
00260 
00261 
00262 // ================================================
00263 // Gain
00264 // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
00265 int CigiSensorCtrlV1::SetGain(const float GainIn, bool bndchk)
00266 {
00267 
00268 #ifndef CIGI_NO_BND_CHK
00269    if(bndchk && ((GainIn < 0.0)||(GainIn > 100.0)))
00270    {
00271 #ifndef CIGI_NO_EXCEPT
00272       throw CigiValueOutOfRangeException("Gain",(float)GainIn,0.0,100.0);
00273 #endif
00274       return(CIGI_ERROR_VALUE_OUT_OF_RANGE);
00275    }
00276 #endif
00277 
00278    // convert CIGI 1 gain to standard gain
00279    Gain = GainIn / 100.0f;
00280 
00281    return(CIGI_SUCCESS);
00282 
00283 }
00284 
00285 

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