repositories
/
deb_libcec.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cec: abi fixes (binary compat with v1.2)
[deb_libcec.git]
/
src
/
lib
/
CECProcessor.cpp
diff --git
a/src/lib/CECProcessor.cpp
b/src/lib/CECProcessor.cpp
index 11076ecb78d191dfabdb80341a0a124af90be085..4d4abba2ac93cca0fc6c2ee9bebb1cd531fc93ca 100644
(file)
--- a/
src/lib/CECProcessor.cpp
+++ b/
src/lib/CECProcessor.cpp
@@
-51,6
+51,7
@@
using namespace std;
using namespace PLATFORM;
#define CEC_PROCESSOR_SIGNAL_WAIT_TIME 1000
using namespace PLATFORM;
#define CEC_PROCESSOR_SIGNAL_WAIT_TIME 1000
+#define ACTIVE_SOURCE_CHECK_INTERVAL 500
#define ToString(x) CCECTypeUtils::ToString(x)
#define ToString(x) CCECTypeUtils::ToString(x)
@@
-147,9
+148,6
@@
bool CCECProcessor::OpenConnection(const char *strPort, uint16_t iBaudRate, uint
m_libcec->AddLog(CEC_LOG_NOTICE, "connection opened");
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);
// mark as initialised
SetCECInitialised(true);
@@
-209,7
+207,8
@@
void *CCECProcessor::Process(void)
{
m_libcec->AddLog(CEC_LOG_DEBUG, "processor thread started");
{
m_libcec->AddLog(CEC_LOG_DEBUG, "processor thread started");
- cec_command command;
+ cec_command command; command.Clear();
+ CTimeout activeSourceCheck(ACTIVE_SOURCE_CHECK_INTERVAL);
// as long as we're not being stopped and the connection is open
while (!IsStopped() && m_communication->IsOpen())
// as long as we're not being stopped and the connection is open
while (!IsStopped() && m_communication->IsOpen())
@@
-225,6
+224,14
@@
void *CCECProcessor::Process(void)
// check if we need to replace handlers
ReplaceHandlers();
// check if we need to replace handlers
ReplaceHandlers();
+
+ // check whether we need to activate a source, if it failed before
+ if (activeSourceCheck.TimeLeft() == 0)
+ {
+ if (CECInitialised())
+ TransmitPendingActiveSourceCommands();
+ activeSourceCheck.Init(ACTIVE_SOURCE_CHECK_INTERVAL);
+ }
}
}
}
}
@@
-394,6
+401,7
@@
bool CCECProcessor::Transmit(const cec_command &data)
m_iLastTransmission = GetTimeMs();
// set the number of tries
iMaxTries = initiator->GetHandler()->GetTransmitRetries() + 1;
m_iLastTransmission = GetTimeMs();
// set the number of tries
iMaxTries = initiator->GetHandler()->GetTransmitRetries() + 1;
+ initiator->MarkHandlerReady();
}
// and try to send the command
}
// and try to send the command
@@
-546,7
+554,9
@@
bool CCECProcessor::HandleReceiveFailed(cec_logical_address initiator)
bool CCECProcessor::SetStreamPath(uint16_t iPhysicalAddress)
{
// stream path changes are sent by the TV
bool CCECProcessor::SetStreamPath(uint16_t iPhysicalAddress)
{
// stream path changes are sent by the TV
- return GetTV()->GetHandler()->TransmitSetStreamPath(iPhysicalAddress);
+ bool bReturn = GetTV()->GetHandler()->TransmitSetStreamPath(iPhysicalAddress);
+ GetTV()->MarkHandlerReady();
+ return bReturn;
}
bool CCECProcessor::CanPersistConfiguration(void)
}
bool CCECProcessor::CanPersistConfiguration(void)
@@
-626,6
+636,9
@@
bool CCECProcessor::RegisterClient(CCECClient *client)
return false;
}
return false;
}
+ // ensure that we know the vendor id of the TV
+ GetTV()->GetVendorId(CECDEVICE_UNREGISTERED);
+
// unregister the client first if it's already been marked as registered
if (client->IsRegistered())
UnregisterClient(client);
// unregister the client first if it's already been marked as registered
if (client->IsRegistered())
UnregisterClient(client);
@@
-653,6
+666,10
@@
bool CCECProcessor::RegisterClient(CCECClient *client)
m_busDevices->GetByLogicalAddresses(devices, configuration.logicalAddresses);
for (CECDEVICEVEC::const_iterator it = devices.begin(); it != devices.end(); it++)
{
m_busDevices->GetByLogicalAddresses(devices, configuration.logicalAddresses);
for (CECDEVICEVEC::const_iterator it = devices.begin(); it != devices.end(); it++)
{
+ // set the physical address of the device at this LA
+ if (CLibCEC::IsValidPhysicalAddress(configuration.iPhysicalAddress))
+ (*it)->SetPhysicalAddress(configuration.iPhysicalAddress);
+
// replace a previous client
CLockObject lock(m_mutex);
m_clients.erase((*it)->GetLogicalAddress());
// replace a previous client
CLockObject lock(m_mutex);
m_clients.erase((*it)->GetLogicalAddress());
@@
-662,7
+679,7
@@
bool CCECProcessor::RegisterClient(CCECClient *client)
// get the settings from the rom
if (configuration.bGetSettingsFromROM == 1)
{
// get the settings from the rom
if (configuration.bGetSettingsFromROM == 1)
{
- libcec_configuration config;
+ libcec_configuration config;
config.Clear();
m_communication->GetConfiguration(config);
CLockObject lock(m_mutex);
m_communication->GetConfiguration(config);
CLockObject lock(m_mutex);
@@
-701,6
+718,15
@@
bool CCECProcessor::RegisterClient(CCECClient *client)
client->Alert(CEC_ALERT_SERVICE_DEVICE, param);
}
client->Alert(CEC_ALERT_SERVICE_DEVICE, param);
}
+ // ensure that the command handler for the TV is initialised
+ if (bReturn)
+ {
+ CCECCommandHandler *handler = GetTV()->GetHandler();
+ if (handler)
+ handler->InitHandler();
+ GetTV()->MarkHandlerReady();
+ }
+
return bReturn;
}
return bReturn;
}