+bool CCECProcessor::TryLogicalAddress(cec_logical_address address, unsigned int iIndex)
+{
+ if (m_busDevices[address]->TryLogicalAddress())
+ {
+ /* only set our OSD name and active source for the primary device */
+ if (m_logicalAddresses.IsEmpty())
+ {
+ m_busDevices[address]->m_strDeviceName = m_strDeviceName;
+ m_busDevices[address]->m_bActiveSource = true;
+ }
+ m_logicalAddresses.Set(address);
+
+ // TODO
+ m_busDevices[address]->SetPhysicalAddress((uint16_t)CEC_DEFAULT_PHYSICAL_ADDRESS + ((uint16_t)iIndex * 0x100));
+
+ return true;
+ }
+
+ return false;
+}
+
+bool CCECProcessor::FindLogicalAddressRecordingDevice(unsigned int iIndex)
+{
+ AddLog(CEC_LOG_DEBUG, "detecting logical address for type 'recording device'");
+ return TryLogicalAddress(CECDEVICE_RECORDINGDEVICE1, iIndex) ||
+ TryLogicalAddress(CECDEVICE_RECORDINGDEVICE2, iIndex) ||
+ TryLogicalAddress(CECDEVICE_RECORDINGDEVICE3, iIndex);
+}
+
+bool CCECProcessor::FindLogicalAddressTuner(unsigned int iIndex)
+{
+ AddLog(CEC_LOG_DEBUG, "detecting logical address for type 'tuner'");
+ return TryLogicalAddress(CECDEVICE_TUNER1, iIndex) ||
+ TryLogicalAddress(CECDEVICE_TUNER2, iIndex) ||
+ TryLogicalAddress(CECDEVICE_TUNER3, iIndex) ||
+ TryLogicalAddress(CECDEVICE_TUNER4, iIndex);
+}
+
+bool CCECProcessor::FindLogicalAddressPlaybackDevice(unsigned int iIndex)
+{
+ AddLog(CEC_LOG_DEBUG, "detecting logical address for type 'playback device'");
+ return TryLogicalAddress(CECDEVICE_PLAYBACKDEVICE1, iIndex) ||
+ TryLogicalAddress(CECDEVICE_PLAYBACKDEVICE2, iIndex) ||
+ TryLogicalAddress(CECDEVICE_PLAYBACKDEVICE3, iIndex);
+}
+
+bool CCECProcessor::FindLogicalAddressAudioSystem(unsigned int iIndex)