X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Flibr2c2%2Farducontrol.cpp;h=e5d94ef9d5d180e0bf3f7f5a5cfdcd847f48ae77;hb=daecd71f20c275fb6df128a3aaa4cfdda24b6886;hp=e940a2aed14527ed676a6cbb4af1786762411420;hpb=ebd56306e951e751883e9f173e1b6235846e78bf;p=r2c2.git diff --git a/source/libr2c2/arducontrol.cpp b/source/libr2c2/arducontrol.cpp index e940a2a..e5d94ef 100644 --- a/source/libr2c2/arducontrol.cpp +++ b/source/libr2c2/arducontrol.cpp @@ -24,6 +24,10 @@ ArduControl::ArduControl(const string &dev): n_s88_octets(0), thread(*this) { + QueuedCommand cmd; + cmd.command[0] = READ_POWER_STATE; + cmd.length = 1; + push_command(cmd); } ArduControl::~ArduControl() @@ -33,17 +37,14 @@ ArduControl::~ArduControl() void ArduControl::set_power(bool p) { - if(p==power.pending) - return; - - power.pending = p; - ++power.serial; - - QueuedCommand cmd(POWER); - cmd.tag.serial = power.serial; - cmd.command[0] = (p ? POWER_ON : POWER_OFF); - cmd.length = 1; - push_command(cmd); + if(power.set(p)) + { + QueuedCommand cmd(POWER); + cmd.tag.serial = power.serial; + cmd.command[0] = (p ? POWER_ON : POWER_OFF); + cmd.length = 1; + push_command(cmd); + } } void ArduControl::halt(bool) @@ -662,6 +663,16 @@ void ArduControl::ControlThread::main() else if(tag && !repeat_count) control.push_completed_tag(tag); } + else if(type==POWER_STATE && rlength==2) + { + control.power.set(reply[1]); + + Tag ptag; + ptag.type = Tag::GENERAL; + ptag.command = POWER; + ptag.serial = control.power.serial; + control.push_completed_tag(ptag); + } else if(type==S88_DATA && rlength>2) { unsigned offset = static_cast(reply[1]);