From: Mikko Rasa Date: Tue, 1 Apr 2014 18:25:15 +0000 (+0300) Subject: Add voltage and current monitoring task to ArduControl X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=1e655686513ef60e1972fc9ca9bcf7b434a09e40;p=r2c2.git Add voltage and current monitoring task to ArduControl It's not used for anything yet, bit will be soon. --- diff --git a/source/libr2c2/arducontrol.cpp b/source/libr2c2/arducontrol.cpp index 3d2d39b..dbe3013 100644 --- a/source/libr2c2/arducontrol.cpp +++ b/source/libr2c2/arducontrol.cpp @@ -906,10 +906,58 @@ bool ArduControl::MfxSearchTask::pop_info(MfxInfo &info) } +ArduControl::MonitorTask::MonitorTask(): + voltage(0), + current(0), + base_level(0), + peak_level(0), + next_type(0) +{ } + +bool ArduControl::MonitorTask::get_work(PendingCommand &cmd) +{ + Time::TimeStamp t = Time::now(); + if(t(reply[1])<<8) | static_cast(reply[2]))/1000.0f; + else if(type==TRACK_CURRENT && length==5) + { + current = ((static_cast(reply[1])<<8) | static_cast(reply[2]))/1000.0f; + float peak = ((static_cast(reply[3])<<8) | static_cast(reply[4]))/1000.0f; + peak_level = max(peak_level, peak); + base_level = min(base_level, current); + } +} + +void ArduControl::MonitorTask::reset_peak() +{ + base_level = current; + peak_level = current; +} + + ArduControl::ControlThread::ControlThread(ArduControl &c): control(c), done(false) { + tasks.push_back(&control.monitor); tasks.push_back(&control.mfx_announce); tasks.push_back(&control.mfx_search); tasks.push_back(&control.s88); diff --git a/source/libr2c2/arducontrol.h b/source/libr2c2/arducontrol.h index 75b9dc8..5552809 100644 --- a/source/libr2c2/arducontrol.h +++ b/source/libr2c2/arducontrol.h @@ -317,6 +317,28 @@ private: bool pop_info(MfxInfo &); }; + class MonitorTask: public Task + { + private: + float voltage; + float current; + float base_level; + float peak_level; + Msp::Time::TimeStamp next_poll; + unsigned next_type; + + public: + MonitorTask(); + + virtual bool get_work(PendingCommand &); + virtual void process_reply(const char *, unsigned); + + float get_voltage() const { return voltage; } + float get_current() const { return current; } + void reset_peak(); + float get_peak() const { return peak_level-base_level; } + }; + class ControlThread: public Msp::Thread { private: @@ -365,6 +387,7 @@ private: S88Task s88; MfxAnnounceTask mfx_announce; MfxSearchTask mfx_search; + MonitorTask monitor; ControlThread thread; static ProtocolInfo protocol_info[2];