SetCECInitialised(false);
// stop the processor
+ StopThread(-1);
+ m_inBuffer.Broadcast();
StopThread();
// close the connection
if (m_inBuffer.Pop(command, CEC_PROCESSOR_SIGNAL_WAIT_TIME))
ProcessCommand(command);
- if (CECInitialised())
+ if (CECInitialised() && !IsStopped())
{
// check clients for keypress timeouts
m_libcec->CheckKeypressTimeout();
libcec_configuration &configuration = *client->GetConfiguration();
- if (configuration.clientVersion >= CEC_CLIENT_VERSION_1_6_3 && configuration.bMonitorOnly == 1)
+ if (configuration.clientVersion < CEC_CLIENT_VERSION_2_0_0)
+ {
+ m_libcec->AddLog(CEC_LOG_ERROR, "failed to register a new CEC client: client version %s is no longer supported", ToString((cec_client_version)configuration.clientVersion));
+ return false;
+ }
+
+ if (configuration.bMonitorOnly == 1)
return true;
if (!CECInitialised())
m_libcec->AddLog(CEC_LOG_NOTICE, "logical address %x was taken by another device, allocating a new address", oldAddress);
CCECClient* client = GetClient(oldAddress);
+ if (!client)
+ client = GetPrimaryClient();
if (client)
{
if (m_addrAllocator)