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 00033 00034 00035 00036 00037 00038 00039 00040 00041 #ifndef __JAUS_MOBILITY_ACCELERATION_STATE_SENSOR__H 00042 #define __JAUS_MOBILITY_ACCELERATION_STATE_SENSOR__H 00043 00044 #include "jaus/core/sensor.h" 00045 #include "jaus/mobility/sensors/queryaccelerationstate.h" 00046 #include "jaus/mobility/sensors/reportaccelerationstate.h" 00047 00048 namespace JAUS 00049 { 00050 typedef JAUS::ReportAccelerationState AccelerationState; 00051 00065 class JAUS_MOBILITY_DLL AccelerationStateSensor : public Sensor, public Events::Child 00066 { 00067 public: 00068 const static std::string Name; 00069 AccelerationStateSensor(const double updateRate = 10); 00070 virtual ~AccelerationStateSensor(); 00071 // Called by the platform to update this sensor. 00072 void SetAccelerationState(const AccelerationState& state); 00073 // Sets maximum sensor update rate. 00074 bool SetSensorUpdateRate(const double rate); 00076 double GetSensorUpdateRate() const { return mMaxUpdateRate; } 00077 // Gets the velocity state stored by the sensor. 00078 AccelerationState GetAccelerationState() const; 00079 // Method called when an Event has been signaled, generates an Event message. 00080 virtual bool GenerateEvent(const Events::Subscription& info) const; 00081 // Method called to determine if an Event is supported by the service. 00082 virtual bool IsEventSupported(const Events::Type type, 00083 const double requestedPeriodicRate, 00084 const Message* queryMessage, 00085 double& confirmedPeriodicRate, 00086 std::string& errorMessage) const; 00088 virtual bool IsDiscoverable() const { return true; } 00089 // Method called whenver a message is received. 00090 virtual void Receive(const Message* message); 00091 // Prints status to console. 00092 virtual void PrintStatus() const; 00093 // Creates messages associated with this service. 00094 virtual Message* CreateMessage(const UShort messageCode) const; 00095 private: 00096 virtual void CheckServiceSynchronization(const unsigned int timeSinceLastCheckMs); 00097 // Creates a ReportAccelerationState from QueryAccelerationState. 00098 void CreateReportFromQuery(const QueryAccelerationState* query, AccelerationState& report) const; 00099 double mMaxUpdateRate; 00100 AccelerationState mAccelerationState; 00101 CxUtils::Mutex mAccelerationStateMutex; 00102 }; 00103 } 00104 00105 #endif 00106 /* End of File */