+void CCECProcessor::LogOutput(const cec_command &data)
+{
+ CStdString strTx;
+
+ // initiator and destination
+ strTx.Format("<< %02x", ((uint8_t)data.initiator << 4) + (uint8_t)data.destination);
+
+ // append the opcode
+ if (data.opcode_set)
+ strTx.AppendFormat(":%02x", (uint8_t)data.opcode);
+
+ // append the parameters
+ for (uint8_t iPtr = 0; iPtr < data.parameters.size; iPtr++)
+ strTx.AppendFormat(":%02x", data.parameters[iPtr]);
+
+ // and log it
+ m_libcec->AddLog(CEC_LOG_TRAFFIC, strTx.c_str());
+}
+
+bool CCECProcessor::PollDevice(cec_logical_address iAddress)
+{
+ // try to find the primary device
+ CCECBusDevice *primary = GetPrimaryDevice();
+ // poll the destination, with the primary as source
+ if (primary)
+ return primary->TransmitPoll(iAddress, true);
+
+ CCECBusDevice *device = m_busDevices->At(CECDEVICE_UNREGISTERED);
+ if (device)
+ return device->TransmitPoll(iAddress, true);
+
+ return false;
+}
+
+CCECBusDevice *CCECProcessor::GetDeviceByPhysicalAddress(uint16_t iPhysicalAddress, bool bSuppressUpdate /* = true */)
+{
+ return m_busDevices ?
+ m_busDevices->GetDeviceByPhysicalAddress(iPhysicalAddress, bSuppressUpdate) :
+ NULL;
+}
+
+CCECBusDevice *CCECProcessor::GetDevice(cec_logical_address address) const
+{
+ return m_busDevices ?
+ m_busDevices->At(address) :
+ NULL;
+}
+
+cec_logical_address CCECProcessor::GetActiveSource(bool bRequestActiveSource /* = true */)