X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.cpp;h=dbe3013ddd9e5f057d1733e65f2340bc6ecb35c4;hb=1e655686513ef60e1972fc9ca9bcf7b434a09e40;hp=eb97d4914e1172a427542516832a20f7b4904a5e;hpb=196c1a0a2f5dd8141aa499dae7d01cad522ab028;p=r2c2.git diff --git a/source/libr2c2/arducontrol.cpp b/source/libr2c2/arducontrol.cpp index eb97d49..dbe3013 100644 --- a/source/libr2c2/arducontrol.cpp +++ b/source/libr2c2/arducontrol.cpp @@ -18,9 +18,9 @@ ArduControl::ProtocolInfo ArduControl::protocol_info[2] = { 0x3FFF, 126, 15 } // MFX }; -ArduControl::ArduControl(const string &dev): - serial(dev), - debug(1), +ArduControl::ArduControl(const Options &opts): + serial(opts.get(string(), "ttyUSB0")), + debug(opts.get("debug")), state_file("arducontrol.state"), power(false), active_accessory(0), @@ -401,6 +401,7 @@ void ArduControl::tick() unsigned lowest_bit = changes&~(changes-1); unsigned i; for(i=0; (lowest_bit>>i)>1; ++i) ; + active_index = i; acc.state.set(acc.state^lowest_bit); PendingCommand cmd(acc, Accessory::ACTIVATE, i); command_queue.push(cmd); @@ -415,7 +416,7 @@ void ArduControl::tick() if(t>off_timeout) { off_timeout = Time::TimeStamp(); - PendingCommand cmd(*active_accessory, Accessory::DEACTIVATE); + PendingCommand cmd(*active_accessory, Accessory::DEACTIVATE, active_index); command_queue.push(cmd); } } @@ -905,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); @@ -967,6 +1016,8 @@ void ArduControl::ControlThread::init_baud_rate() if(!rate) { + if(control.debug>=1) + IO::print("ArduControl detection failed\n"); done = true; return; }