bool CECStartBootloader(void) { bool bReturn(false); cec_adapter deviceList[1]; if (CAdapterFactory(NULL).FindAdapters(deviceList, 1, 0) > 0) { CAdapterFactory factory(NULL); IAdapterCommunication *comm = factory.GetInstance(deviceList[0].comm); if (comm) { CTimeout timeout(CEC_DEFAULT_CONNECT_TIMEOUT); while (timeout.TimeLeft() > 0 && (bReturn = comm->Open(timeout.TimeLeft() / CEC_CONNECT_TRIES, true)) == false) { comm->Close(); CEvent::Sleep(500); } if (comm->IsOpen()) bReturn = comm->StartBootloader(); delete comm; } } return bReturn; }
bool CCECProcessor::StartBootloader(const char *strPort /* = NULL */) { bool bReturn(false); // open a connection if no connection has been opened if (!m_communication && strPort) { CAdapterFactory factory(this->m_libcec); IAdapterCommunication *comm = factory.GetInstance(strPort); CTimeout timeout(CEC_DEFAULT_CONNECT_TIMEOUT); int iConnectTry(0); while (timeout.TimeLeft() > 0 && (bReturn = comm->Open(timeout.TimeLeft() / CEC_CONNECT_TRIES, true)) == false) { m_libcec->AddLog(CEC_LOG_ERROR, "could not open a connection (try %d)", ++iConnectTry); comm->Close(); Sleep(CEC_DEFAULT_TRANSMIT_RETRY_WAIT); } if (comm->IsOpen()) { bReturn = comm->StartBootloader(); DELETE_AND_NULL(comm); } return bReturn; } else { m_communication->StartBootloader(); Close(); bReturn = true; } return bReturn; }