- uint8_t initiator = m_currentframe.data[0] >> 4;
- uint8_t destination = m_currentframe.data[0] & 0xF;
+ if (data.size < 3)
+ {
+ m_controller->AddLog(CEC_LOG_WARNING, "invalid vendor ID received");
+ return;
+ }
+
+ uint64_t iVendorId = ((uint64_t)data.data[0] << 3) +
+ ((uint64_t)data.data[1] << 2) +
+ (uint64_t)data.data[2];
+
+ m_vendorIds[(uint8_t)device] = iVendorId;
+ m_vendorClasses[(uint8_t)device] = data.size >= 4 ? data.data[3] : 0;
+
+ CStdString strLog;
+ strLog.Format("device %d: vendor = %s (%lld) class = %2x", (uint8_t)device, CECVendorIdToString(m_vendorIds[(uint8_t)device]), iVendorId, m_vendorClasses[(uint8_t)device]);
+ m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str());
+}
+
+void CCECProcessor::ParseCurrentFrame(cec_frame &frame)
+{
+ uint8_t initiator = frame.data[0] >> 4;
+ uint8_t destination = frame.data[0] & 0xF;