+ return SetAckMask(m_logicalAddresses.AckMask());
+}
+
+bool CCECProcessor::PollDevice(cec_logical_address iAddress)
+{
+ if (iAddress != CECDEVICE_UNKNOWN && m_busDevices[iAddress])
+ {
+ return m_logicalAddresses.primary == CECDEVICE_UNKNOWN ?
+ m_busDevices[iAddress]->TransmitPoll(iAddress) :
+ m_busDevices[m_logicalAddresses.primary]->TransmitPoll(iAddress);
+ }
+ return false;
+}
+
+uint8_t CCECProcessor::VolumeUp(bool bWait /* = true */)
+{
+ uint8_t status = 0;
+ if (IsActiveDevice(CECDEVICE_AUDIOSYSTEM))
+ status = ((CCECAudioSystem *)m_busDevices[CECDEVICE_AUDIOSYSTEM])->VolumeUp(bWait);
+
+ return status;
+}
+
+uint8_t CCECProcessor::VolumeDown(bool bWait /* = true */)
+{
+ uint8_t status = 0;
+ if (IsActiveDevice(CECDEVICE_AUDIOSYSTEM))
+ status = ((CCECAudioSystem *)m_busDevices[CECDEVICE_AUDIOSYSTEM])->VolumeDown(bWait);
+
+ return status;
+}
+
+uint8_t CCECProcessor::MuteAudio(bool bWait /* = true */)
+{
+ uint8_t status = 0;
+ if (IsActiveDevice(CECDEVICE_AUDIOSYSTEM))
+ status = ((CCECAudioSystem *)m_busDevices[CECDEVICE_AUDIOSYSTEM])->MuteAudio(bWait);
+
+ return status;
+}
+
+CCECBusDevice *CCECProcessor::GetDeviceByPhysicalAddress(uint16_t iPhysicalAddress, bool bRefresh /* = false */) const
+{
+ if (m_busDevices[m_logicalAddresses.primary]->GetPhysicalAddress(false) == iPhysicalAddress)
+ return m_busDevices[m_logicalAddresses.primary];
+
+ CCECBusDevice *device = NULL;
+ for (unsigned int iPtr = 0; iPtr < 16; iPtr++)
+ {
+ if (m_busDevices[iPtr]->GetPhysicalAddress(bRefresh) == iPhysicalAddress)
+ {
+ device = m_busDevices[iPtr];
+ break;
+ }
+ }
+
+ return device;
+}
+
+CCECBusDevice *CCECProcessor::GetDeviceByType(cec_device_type type) const
+{
+ CCECBusDevice *device = NULL;
+
+ for (unsigned int iPtr = 0; iPtr < 16; iPtr++)
+ {
+ if (m_busDevices[iPtr]->m_type == type)
+ {
+ device = m_busDevices[iPtr];
+ break;
+ }
+ }
+
+ return device;
+}
+
+cec_version CCECProcessor::GetDeviceCecVersion(cec_logical_address iAddress)
+{
+ return m_busDevices[iAddress]->GetCecVersion();
+}
+
+cec_osd_name CCECProcessor::GetDeviceOSDName(cec_logical_address iAddress)
+{
+ CStdString strOSDName = m_busDevices[iAddress]->GetOSDName();
+ cec_osd_name retVal;
+
+ snprintf(retVal.name, sizeof(retVal.name), "%s", strOSDName.c_str());
+ retVal.device = iAddress;
+
+ return retVal;
+}
+
+bool CCECProcessor::GetDeviceMenuLanguage(cec_logical_address iAddress, cec_menu_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)
+{
+ if (m_busDevices[iAddress])
+ return m_busDevices[iAddress]->GetVendorId();
+ return false;
+}
+
+cec_power_status CCECProcessor::GetDevicePowerStatus(cec_logical_address iAddress)
+{
+ if (m_busDevices[iAddress])
+ return m_busDevices[iAddress]->GetPowerStatus();
+ return CEC_POWER_STATUS_UNKNOWN;