From 9b175d9cb1ea10da543266765c1fbd64ae370ce4 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Thu, 15 Mar 2012 13:27:18 +0100 Subject: [PATCH] cec: set controlled mode and retry to send the previous command if it failed with MSGCODE_COMMAND_REJECTED --- src/lib/adapter/USBCECAdapterCommunication.cpp | 9 ++++++++- src/lib/adapter/USBCECAdapterCommunication.h | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/lib/adapter/USBCECAdapterCommunication.cpp b/src/lib/adapter/USBCECAdapterCommunication.cpp index 09a3bb2..72abd15 100644 --- a/src/lib/adapter/USBCECAdapterCommunication.cpp +++ b/src/lib/adapter/USBCECAdapterCommunication.cpp @@ -967,7 +967,7 @@ CStdString CUSBCECAdapterCommunication::GetPortName(void) return strName; } -bool CUSBCECAdapterCommunication::SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage ¶ms, bool bExpectAck /* = true */, bool bIsTransmission /* = false */, bool bSendDirectly /* = true */) +bool CUSBCECAdapterCommunication::SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage ¶ms, bool bExpectAck /* = true */, bool bIsTransmission /* = false */, bool bSendDirectly /* = true */, bool bIsRetry /* = false */) { CLockObject lock(m_mutex); @@ -990,6 +990,13 @@ bool CUSBCECAdapterCommunication::SendCommand(cec_adapter_messagecode msgCode, C { CLibCEC::AddLog(CEC_LOG_ERROR, "'%s' failed", CCECAdapterMessage::ToString(msgCode)); delete output; + + if (!bIsRetry && output->reply == MSGCODE_COMMAND_REJECTED && msgCode != MSGCODE_SET_CONTROLLED) + { + CLibCEC::AddLog(CEC_LOG_DEBUG, "setting controlled mode and retrying"); + if (SetControlledMode(true)) + return SendCommand(msgCode, params, bExpectAck, bIsTransmission, bSendDirectly, true); + } return false; } diff --git a/src/lib/adapter/USBCECAdapterCommunication.h b/src/lib/adapter/USBCECAdapterCommunication.h index dad543a..3e5066b 100644 --- a/src/lib/adapter/USBCECAdapterCommunication.h +++ b/src/lib/adapter/USBCECAdapterCommunication.h @@ -90,7 +90,7 @@ namespace CEC void *Process(void); private: - bool SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage ¶ms, bool bExpectAck = true, bool bIsTransmission = false, bool bSendDirectly = true); + bool SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage ¶ms, bool bExpectAck = true, bool bIsTransmission = false, bool bSendDirectly = true, bool bIsRetry = false); cec_datapacket GetSetting(cec_adapter_messagecode msgCode, uint8_t iResponseLength); bool SetSettingAutoEnabled(bool enabled); -- 2.34.1