repositories
/
deb_libcec.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
win32: don't include the .pdb in the installer. only include include/cec*
[deb_libcec.git]
/
src
/
lib
/
CECProcessor.cpp
diff --git
a/src/lib/CECProcessor.cpp
b/src/lib/CECProcessor.cpp
index 38eb5cdce7cd55631c2e44f7ef7487ae344b1e2a..e3f75173f7ca619e184582e11bb6f9fe0792d3c2 100644
(file)
--- a/
src/lib/CECProcessor.cpp
+++ b/
src/lib/CECProcessor.cpp
@@
-42,11
+42,12
@@
using namespace CEC;
using namespace std;
CCECProcessor::CCECProcessor(CLibCEC *controller, CAdapterCommunication *serComm, const char *strDeviceName, cec_logical_address iLogicalAddress /* = CECDEVICE_PLAYBACKDEVICE1 */, uint16_t iPhysicalAddress /* = CEC_DEFAULT_PHYSICAL_ADDRESS*/) :
using namespace std;
CCECProcessor::CCECProcessor(CLibCEC *controller, CAdapterCommunication *serComm, const char *strDeviceName, cec_logical_address iLogicalAddress /* = CECDEVICE_PLAYBACKDEVICE1 */, uint16_t iPhysicalAddress /* = CEC_DEFAULT_PHYSICAL_ADDRESS*/) :
- m_iLogicalAddress(
CECDEVICE_UNKNOWN
),
+ m_iLogicalAddress(
iLogicalAddress
),
m_strDeviceName(strDeviceName),
m_communication(serComm),
m_controller(controller),
m_strDeviceName(strDeviceName),
m_communication(serComm),
m_controller(controller),
- m_bMonitor(false)
+ m_bMonitor(false),
+ m_bLogicalAddressSet(false)
{
for (int iPtr = 0; iPtr < 16; iPtr++)
m_busDevices[iPtr] = new CCECBusDevice(this, (cec_logical_address) iPtr, iPtr == iLogicalAddress ? iPhysicalAddress : 0);
{
for (int iPtr = 0; iPtr < 16; iPtr++)
m_busDevices[iPtr] = new CCECBusDevice(this, (cec_logical_address) iPtr, iPtr == iLogicalAddress ? iPhysicalAddress : 0);
@@
-147,7
+148,9
@@
bool CCECProcessor::SetActiveView(void)
if (!IsRunning())
return false;
if (!IsRunning())
return false;
- return m_busDevices[m_iLogicalAddress]->BroadcastActiveView();
+ if (m_iLogicalAddress != CECDEVICE_UNKNOWN && m_busDevices[m_iLogicalAddress])
+ return m_busDevices[m_iLogicalAddress]->BroadcastActiveView();
+ return false;
}
bool CCECProcessor::SetInactiveView(void)
}
bool CCECProcessor::SetInactiveView(void)
@@
-155,7
+158,9
@@
bool CCECProcessor::SetInactiveView(void)
if (!IsRunning())
return false;
if (!IsRunning())
return false;
- return m_busDevices[m_iLogicalAddress]->BroadcastInactiveView();
+ if (m_iLogicalAddress != CECDEVICE_UNKNOWN && m_busDevices[m_iLogicalAddress])
+ return m_busDevices[m_iLogicalAddress]->BroadcastInactiveView();
+ return false;
}
void CCECProcessor::LogOutput(const cec_command &data)
}
void CCECProcessor::LogOutput(const cec_command &data)
@@
-168,25
+173,31
@@
void CCECProcessor::LogOutput(const cec_command &data)
m_controller->AddLog(CEC_LOG_TRAFFIC, strTx.c_str());
}
m_controller->AddLog(CEC_LOG_TRAFFIC, strTx.c_str());
}
-bool CCECProcessor::SetLogicalAddress(cec_logical_address iLogicalAddress)
+bool CCECProcessor::SetLogicalAddress(cec_logical_address iLogicalAddress
/* = CECDEVICE_UNKNOWN */
)
{
{
- if (
m_iLogicalAddress != iLogicalAddress
)
+ if (
iLogicalAddress != CECDEVICE_UNKNOWN
)
{
CStdString strLog;
strLog.Format("<< setting logical address to %1x", iLogicalAddress);
m_controller->AddLog(CEC_LOG_NOTICE, strLog.c_str());
{
CStdString strLog;
strLog.Format("<< setting logical address to %1x", iLogicalAddress);
m_controller->AddLog(CEC_LOG_NOTICE, strLog.c_str());
-
m_iLogicalAddress = iLogicalAddress;
m_iLogicalAddress = iLogicalAddress;
-
return m_communication && m_communication->SetAckMask(0x1 << (uint8_t)m_iLogicalAddress)
;
+
m_bLogicalAddressSet = false
;
}
}
- return true;
+ if (!m_bLogicalAddressSet && m_iLogicalAddress != CECDEVICE_UNKNOWN)
+ m_bLogicalAddressSet = m_communication && m_communication->SetAckMask(0x1 << (uint8_t)m_iLogicalAddress);
+
+ return m_bLogicalAddressSet;
}
bool CCECProcessor::SetPhysicalAddress(uint16_t iPhysicalAddress)
{
}
bool CCECProcessor::SetPhysicalAddress(uint16_t iPhysicalAddress)
{
- m_busDevices[m_iLogicalAddress]->SetPhysicalAddress(iPhysicalAddress);
- return m_busDevices[m_iLogicalAddress]->BroadcastActiveView();
+ if (m_iLogicalAddress != CECDEVICE_UNKNOWN && m_busDevices[m_iLogicalAddress])
+ {
+ m_busDevices[m_iLogicalAddress]->SetPhysicalAddress(iPhysicalAddress);
+ return m_busDevices[m_iLogicalAddress]->BroadcastActiveView();
+ }
+ return false;
}
bool CCECProcessor::SwitchMonitoring(bool bEnable)
}
bool CCECProcessor::SwitchMonitoring(bool bEnable)
@@
-209,22
+220,32
@@
cec_version CCECProcessor::GetDeviceCecVersion(cec_logical_address iAddress)
bool CCECProcessor::GetDeviceMenuLanguage(cec_logical_address iAddress, cec_menu_language *language)
{
bool CCECProcessor::GetDeviceMenuLanguage(cec_logical_address iAddress, cec_menu_language *language)
{
- *language = m_busDevices[iAddress]->GetMenuLanguage();
- return (strcmp(language->language, "???"));
+ if (m_busDevices[iAddress])
+ {
+ *language = m_busDevices[iAddress]->GetMenuLanguage();
+ return (strcmp(language->language, "???") == 0);
+ }
+ return false;
}
uint64_t CCECProcessor::GetDeviceVendorId(cec_logical_address iAddress)
{
}
uint64_t CCECProcessor::GetDeviceVendorId(cec_logical_address iAddress)
{
- return m_busDevices[iAddress]->GetVendorId();
+ if (m_busDevices[iAddress])
+ return m_busDevices[iAddress]->GetVendorId();
+ return false;
}
cec_power_status CCECProcessor::GetDevicePowerStatus(cec_logical_address iAddress)
{
}
cec_power_status CCECProcessor::GetDevicePowerStatus(cec_logical_address iAddress)
{
- return m_busDevices[iAddress]->GetPowerStatus();
+ if (m_busDevices[iAddress])
+ return m_busDevices[iAddress]->GetPowerStatus();
+ return CEC_POWER_STATUS_UNKNOWN;
}
bool CCECProcessor::Transmit(const cec_command &data)
{
}
bool CCECProcessor::Transmit(const cec_command &data)
{
+ SetLogicalAddress();
+
bool bReturn(false);
LogOutput(data);
bool bReturn(false);
LogOutput(data);
@@
-237,7
+258,7
@@
bool CCECProcessor::Transmit(const cec_command &data)
return bReturn;
else
{
return bReturn;
else
{
- output->condition.Wait(&output->mutex);
+ output->condition.Wait(&output->mutex
, 1000
);
if (output->state != ADAPTER_MESSAGE_STATE_SENT)
{
m_controller->AddLog(CEC_LOG_ERROR, "command was not sent");
if (output->state != ADAPTER_MESSAGE_STATE_SENT)
{
m_controller->AddLog(CEC_LOG_ERROR, "command was not sent");
@@
-465,7
+486,9
@@
void CCECProcessor::ParseCommand(cec_command &command)
uint16_t CCECProcessor::GetPhysicalAddress(void) const
{
uint16_t CCECProcessor::GetPhysicalAddress(void) const
{
- return m_busDevices[m_iLogicalAddress]->GetPhysicalAddress();
+ if (m_iLogicalAddress != CECDEVICE_UNKNOWN && m_busDevices[m_iLogicalAddress])
+ return m_busDevices[m_iLogicalAddress]->GetPhysicalAddress();
+ return false;
}
void CCECProcessor::SetCurrentButton(cec_user_control_code iButtonCode)
}
void CCECProcessor::SetCurrentButton(cec_user_control_code iButtonCode)