+
+CCECBusDevice *CCECCommandHandler::GetDeviceByPhysicalAddress(uint16_t iPhysicalAddress) const
+{
+ CCECBusDevice *device = NULL;
+
+ for (unsigned int iPtr = 0; iPtr < 16; iPtr++)
+ {
+ if (m_busDevice->GetProcessor()->m_busDevices[iPtr]->GetPhysicalAddress() == iPhysicalAddress)
+ {
+ device = m_busDevice->GetProcessor()->m_busDevices[iPtr];
+ break;
+ }
+ }
+
+ return device;
+}
+
+
+void CCECCommandHandler::SetVendorId(const cec_command &command)
+{
+ if (command.parameters.size < 3)
+ {
+ m_busDevice->AddLog(CEC_LOG_WARNING, "invalid vendor ID received");
+ return;
+ }
+
+ uint64_t iVendorId = ((uint64_t)command.parameters[0] << 3) +
+ ((uint64_t)command.parameters[1] << 2) +
+ (uint64_t)command.parameters[2];
+
+ CCECBusDevice *device = GetDevice((cec_logical_address) command.initiator);
+ if (device)
+ device->SetVendorId(iVendorId, iVendorId);
+}