- if (command.parameters[0] == CEC_USER_CONTROL_CODE_POWER ||
- command.parameters[0] == CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION)
- {
- CCECBusDevice *device = GetDevice(command.destination);
- if (device)
- {
- device->SetPowerStatus(CEC_POWER_STATUS_ON);
- if (device->MyLogicalAddressContains(device->GetLogicalAddress()))
- {
- device->SetActiveSource();
- device->TransmitImageViewOn();
- device->TransmitActiveSource();
-
- if (device->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE ||
- device->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE)
- ((CCECPlaybackDevice *)device)->TransmitDeckStatus(command.initiator);
- }
- }
- }
- else
- {
- CLibCEC::SetCurrentButton((cec_user_control_code) command.parameters[0]);
- }
- return true;
+ cec_power_status status = device->GetCurrentPowerStatus();
+ bPowerOn = !(status == CEC_POWER_STATUS_ON || status == CEC_POWER_STATUS_IN_TRANSITION_STANDBY_TO_ON);
+ }
+
+ if (bPowerOn)
+ {
+ device->ActivateSource();
+ }
+ else
+ {
+ device->MarkAsInactiveSource();
+ device->TransmitInactiveSource();
+ device->SetMenuState(CEC_MENU_STATE_DEACTIVATED);