00001 00028 #ifndef PROXIMITY_SENSOR_CHANNEL_H 00029 #define PROXIMITY_SENSOR_CHANNEL_H 00030 00031 #include "abstractsensor.h" 00032 #include "proximitysensor_a.h" 00033 #include "dataemitter.h" 00034 #include "deviceadaptor.h" 00035 #include "datatypes/timedunsigned.h" 00036 #include "datatypes/unsigned.h" 00037 00038 class Bin; 00039 template <class TYPE> class BufferReader; 00040 00046 class ProximitySensorChannel : 00047 public AbstractSensorChannel, 00048 public DataEmitter<ProximityData> 00049 { 00050 Q_OBJECT; 00051 Q_PROPERTY(Unsigned proximity READ proximity); 00052 Q_PROPERTY(Proximity proximityReflectance READ proximityReflectance); 00053 00054 public: 00059 static AbstractSensorChannel* factoryMethod(const QString& id) 00060 { 00061 ProximitySensorChannel* sc = new ProximitySensorChannel(id); 00062 new ProximitySensorChannelAdaptor(sc); 00063 return sc; 00064 } 00065 00070 Unsigned proximity() const { return previousValue_; } 00071 00072 Proximity proximityReflectance() const { return previousValue_; } 00073 00074 public Q_SLOTS: 00075 bool start(); 00076 bool stop(); 00077 00078 signals: 00083 void dataAvailable(const Unsigned& data); 00084 00085 protected: 00086 ProximitySensorChannel(const QString& id); 00087 virtual ~ProximitySensorChannel(); 00088 00089 private: 00090 Bin* filterBin_; 00091 Bin* marshallingBin_; 00092 DeviceAdaptor* proximityAdaptor_; 00093 BufferReader<ProximityData>* proximityReader_; 00094 RingBuffer<ProximityData>* outputBuffer_; 00095 ProximityData previousValue_; 00096 00097 void emitData(const ProximityData& value); 00098 }; 00099 00100 #endif // PROXIMITY_SENSOR_CHANNEL_H