00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00034
00035
00036
00038
00039 #ifndef _GADGET_ANALOGPROXY_H_
00040 #define _GADGET_ANALOGPROXY_H_
00041
00042 #include <gadget/gadgetConfig.h>
00043 #include <gadget/Type/Analog.h>
00044 #include <gadget/Type/Proxy.h>
00045 #include <gadget/Type/AnalogData.h>
00046
00047 namespace gadget
00048 {
00049
00061 class GADGET_CLASS_API AnalogProxy : public TypedProxy<Analog>
00062 {
00063
00064 public:
00066 AnalogProxy()
00067 : mUnitNum(-1)
00068 , mData(-1.0f)
00069 {;}
00070
00071 virtual ~AnalogProxy()
00072 {;}
00073
00075 virtual void updateData()
00076 {
00077 if(!isStupefied())
00078 {
00079
00080 getProxiedInputDevice()->updateDataIfNeeded();
00081 mData = mTypedDevice->getAnalogData(mUnitNum);
00082 }
00083 }
00084
00086 virtual vpr::Interval getTimeStamp() const
00087 {
00088 return mData.getTime();
00089 }
00090
00095 float getData() const
00096 {
00097 const float analogDefault(0.0f);
00098 if(isStupefied())
00099 {
00100 return analogDefault;
00101 }
00102 else
00103 {
00104 return mData.getAnalog();
00105 }
00106 }
00107
00109 Analog* getAnalogPtr()
00110 {
00111 if(isStupefied())
00112 {
00113 return NULL;
00114 }
00115 else
00116 {
00117 return mTypedDevice;
00118 }
00119 }
00120
00125 int getUnit() const
00126 {
00127 return mUnitNum;
00128 }
00129
00130 static std::string getElementType();
00131
00132 bool config(jccl::ConfigElementPtr element);
00133
00134 virtual Input* getProxiedInputDevice()
00135 {
00136 if((NULL == mTypedDevice) || (mStupefied))
00137 {
00138 return NULL;
00139 }
00140
00141 Input* ret_val = dynamic_cast<Input*>(mTypedDevice);
00142 vprASSERT((ret_val != NULL) && "Cross-cast in AnalogProxy failed");
00143 return ret_val;
00144 }
00145
00146 private:
00147 int mUnitNum;
00148 AnalogData mData;
00149 };
00150
00151 }
00152
00153 #endif