X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FCECProcessor.cpp;h=3bfa061548c0e4b74d4811e7296790a6849b2630;hb=6b567d1fa9db2009bbeaf6d355bdd0438a4eeca0;hp=7c2e08a0ac537ef7c3dca64513058c15c5698f47;hpb=4a01fcd6b9d7c922ea5400d9f01406e7ad9332b9;p=deb_libcec.git diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 7c2e08a..3bfa061 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -86,9 +86,6 @@ bool CCECProcessor::Start(const char *strPort, uint16_t iBaudRate /* = CEC_SERIA } } - // mark as initialised - SetCECInitialised(true); - return true; } @@ -156,6 +153,12 @@ bool CCECProcessor::OpenConnection(const char *strPort, uint16_t iBaudRate, uint m_libcec->AddLog(CEC_LOG_NOTICE, "connection opened"); + // always start by setting the ackmask to 0, to clear previous values + SetAckMask(0); + + // mark as initialised + SetCECInitialised(true); + return bReturn; } @@ -615,15 +618,25 @@ CCECTuner *CCECProcessor::GetTuner(cec_logical_address address) const bool CCECProcessor::RegisterClient(CCECClient *client) { - if (!client || !IsRunning()) + if (!client) return false; + libcec_configuration &configuration = *client->GetConfiguration(); + + if (configuration.clientVersion >= CEC_CLIENT_VERSION_1_6_3 && configuration.bMonitorOnly == 1) + return true; + + if (!CECInitialised()) + { + m_libcec->AddLog(CEC_LOG_ERROR, "failed to register a new CEC client: CEC processor is not initialised"); + return false; + } + // unregister the client first if it's already been marked as registered if (client->IsRegistered()) UnregisterClient(client); // get the configuration from the client - libcec_configuration &configuration = *client->GetConfiguration(); m_libcec->AddLog(CEC_LOG_NOTICE, "registering new CEC client - v%s", ToString((cec_client_version)configuration.clientVersion)); // mark as uninitialised and unregistered