#include "LibCEC.h"
#include "CECClient.h"
#include "platform/util/timeutils.h"
+#include "platform/util/util.h"
using namespace CEC;
using namespace std;
CCECProcessor::~CCECProcessor(void)
{
Close();
- delete m_busDevices;
+ DELETE_AND_NULL(m_busDevices);
}
bool CCECProcessor::Start(const char *strPort, uint16_t iBaudRate /* = CEC_SERIAL_DEFAULT_BAUDRATE */, uint32_t iTimeoutMs /* = CEC_DEFAULT_CONNECT_TIMEOUT */)
}
}
- // mark as initialised
- SetCECInitialised(true);
-
return true;
}
StopThread();
// close the connection
- if (m_communication)
- {
- delete m_communication;
- m_communication = NULL;
- }
+ DELETE_AND_NULL(m_communication);
}
void CCECProcessor::ResetMembers(void)
{
// close the connection
- if (m_communication)
- {
- delete m_communication;
- m_communication = NULL;
- }
+ DELETE_AND_NULL(m_communication);
// reset the other members to the initial state
m_iStandardLineTimeout = 3;
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;
}
if (comm->IsOpen())
{
bReturn = comm->StartBootloader();
- delete comm;
+ DELETE_AND_NULL(comm);
}
return bReturn;
}
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