CommandStatus CommandResponder :: HandleControl(const BinaryOutput& aControl, size_t aIndex) { CommandStatus cs = CS_TOO_MANY_OPS; if ( mLinkStatuses && (aControl.GetCode() == CC_LATCH_ON || aControl.GetCode() == CC_LATCH_OFF)) { try { Transaction t(mpObs); bool val = aControl.GetCode() == CC_LATCH_ON ? true : false; mpObs->Update(ControlStatus(val, ControlStatus::ONLINE), aIndex); cs = CS_SUCCESS; LOG_BLOCK(LEV_INFO, "Updated ControlStatus " << aIndex << " with " << val << "." ); } catch (Exception& ex) { LOG_BLOCK(LEV_WARNING, "Failure trying to update point in response to control. " << ex.GetErrorString()); cs = CS_FORMAT_ERROR; } } else { cs = GetResponseCode(true, aIndex); } LOG_BLOCK(LEV_INFO, "[" << aIndex << "] - " << aControl.ToString() << " returning " << ToString(cs)); return cs; }
// same as for the setpoint CommandStatus SlaveDemoApp::HandleControl(BinaryOutput& aControl, size_t aIndex) { LOG_BLOCK(LEV_EVENT, "Received BINARY " << aControl.ToString() << " on index: " << aIndex); // set the binary to ON if the command code was LATCH_ON, otherwise set it off (LATCH_OFF) apl::Binary b(aControl.GetCode() == CC_LATCH_ON, BQ_ONLINE); b.SetToNow(); // count how many BinaryOutput commands we recieve apl::Counter c(++mCountBinaryOutput, CQ_ONLINE); c.SetToNow(); Transaction t(mpObserver); mpObserver->Update(b, aIndex); mpObserver->Update(c, 1); return CS_SUCCESS; }