return bReturn;
}
+ uint64_t iNow = GetTimeMs();
+ uint64_t iTarget = iTimeoutMs > 0 ? iNow + iTimeoutMs : iNow + CEC_DEFAULT_TRANSMIT_WAIT;
+
/* open a new connection */
if ((bReturn = m_communication->Open(strPort, iBaudRate, iTimeoutMs)) == false)
CLibCEC::AddLog(CEC_LOG_ERROR, "could not open a connection");
/* try to ping the adapter */
- if ((bReturn = m_communication->PingAdapter()) == false)
- CLibCEC::AddLog(CEC_LOG_ERROR, "the adapter does not respond correctly");
-
- if (bReturn)
+ bool bPingOk(false);
+ unsigned iPingTry(0), iFwVersionTry(0);
+ uint16_t iFirmwareVersion(CEC_FW_VERSION_UNKNOWN);
+ while ((!bPingOk || iFirmwareVersion == CEC_FW_VERSION_UNKNOWN) && iTarget > iNow)
{
- uint16_t iFirmwareVersion = m_communication->GetFirmwareVersion();
- if ((bReturn = (iFirmwareVersion != CEC_FW_VERSION_UNKNOWN)) == false)
- m_controller->AddLog(CEC_LOG_ERROR, "the adapter is running an unknown firmware version");
+ if (!bPingOk)
+ {
+ if ((bPingOk = m_communication->PingAdapter()) == false)
+ {
+ CLibCEC::AddLog(CEC_LOG_ERROR, "the adapter did not respond correctly to a ping (try %d)", ++iPingTry);
+ Sleep(500);
+ }
+ }
+
+ if (bPingOk)
+ {
+ if ((iFirmwareVersion = m_communication->GetFirmwareVersion()) == CEC_FW_VERSION_UNKNOWN)
+ {
+ CLibCEC::AddLog(CEC_LOG_ERROR, "the adapter did not respond with a correct firmware version (try %d)", ++iFwVersionTry);
+ Sleep(500);
+ }
+ else
+ {
+ CLibCEC::AddLog(CEC_LOG_NOTICE, "CEC Adapter firmware version: %d", iFirmwareVersion);
+ bReturn = true;
+ }
+ }
- CLibCEC::AddLog(CEC_LOG_NOTICE, "CEC Adapter firmware version: %d", iFirmwareVersion);
+ iNow = GetTimeMs();
}
return bReturn;