CLockObject lock(m_mutex);
if (m_communication)
{
- CLibCEC::AddLog(CEC_LOG_ERROR, "existing connection handler found");
- return bReturn;
+ CLibCEC::AddLog(CEC_LOG_WARNING, "existing connection handler found, deleting it");
+ m_communication->Close();
+ delete m_communication;
}
m_communication = new CUSBCECAdapterCommunication(this, strPort, iBaudRate);
uint64_t iNow = GetTimeMs();
uint64_t iTarget = iTimeoutMs > 0 ? iNow + iTimeoutMs : iNow + CEC_DEFAULT_TRANSMIT_WAIT;
- unsigned iConnectTry(0), iPingTry(0), iFwVersionTry(0);
- bool bConnected(false), bPinged(false);
+ unsigned iConnectTry(0), iPingTry(0), iFwVersionTry(0), iControlledTry(0);
+ bool bConnected(false), bPinged(false), bControlled(false);
/* open a new connection */
while (iNow < iTarget && (bConnected = m_communication->Open(iTimeoutMs)) == false)
iNow = GetTimeMs();
}
+ if (iFirmwareVersion >= 2)
+ {
+ /* try to set controlled mode */
+ while (bConnected && iNow < iTarget && (bControlled = m_communication->SetControlledMode(true)) == false)
+ {
+ CLibCEC::AddLog(CEC_LOG_ERROR, "the adapter did not respond correctly to setting controlled mode (try %d)", ++iControlledTry);
+ Sleep(500);
+ iNow = GetTimeMs();
+ }
+ }
+
if ((bReturn = iFirmwareVersion != CEC_FW_VERSION_UNKNOWN) == true)
CLibCEC::AddLog(CEC_LOG_NOTICE, "connected to the CEC adapter. firmware version = %d", iFirmwareVersion);
}
if (m_communication)
+ {
m_communication->Close();
+ delete m_communication;
+ m_communication = NULL;
+ }
return NULL;
}