replaced 2 more occurences of Close() by m_port->Close()
[deb_libcec.git] / src / lib / CECProcessor.cpp
index e90d5cb59038a62f8917bbb8cab61f52e24bc43e..3bfa061548c0e4b74d4811e7296790a6849b2630 100644 (file)
@@ -153,6 +153,9 @@ 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);
 
@@ -615,7 +618,15 @@ CCECTuner *CCECProcessor::GetTuner(cec_logical_address address) const
 
 bool CCECProcessor::RegisterClient(CCECClient *client)
 {
-  if (!client || !CECInitialised())
+  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;
@@ -626,7 +637,6 @@ bool CCECProcessor::RegisterClient(CCECClient *client)
     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