From 5e822b09216e0d3c070d01b83015265129cc8c89 Mon Sep 17 00:00:00 2001 From: Lars Op den Kamp Date: Thu, 10 Nov 2011 18:30:00 +0100 Subject: [PATCH] cec: improved logging. fixed GetVendorId() --- src/lib/CECProcessor.cpp | 1 + src/lib/devices/CECBusDevice.cpp | 31 ++-- src/lib/implementations/CECCommandHandler.cpp | 137 ++++++++++++++++++ src/lib/implementations/CECCommandHandler.h | 2 + 4 files changed, 161 insertions(+), 10 deletions(-) diff --git a/src/lib/CECProcessor.cpp b/src/lib/CECProcessor.cpp index 30a8acc..f4a6da0 100644 --- a/src/lib/CECProcessor.cpp +++ b/src/lib/CECProcessor.cpp @@ -152,6 +152,7 @@ bool CCECProcessor::TryLogicalAddress(cec_logical_address address, const char *s if (m_logicalAddresses.empty()) m_busDevices[address]->m_strDeviceName = m_strDeviceName; m_busDevices[address]->m_powerStatus = CEC_POWER_STATUS_ON; + m_busDevices[address]->m_cecVersion = CEC_VERSION_1_3A; m_logicalAddresses.set(address); // TODO diff --git a/src/lib/devices/CECBusDevice.cpp b/src/lib/devices/CECBusDevice.cpp index a7ec1ec..c2595c3 100644 --- a/src/lib/devices/CECBusDevice.cpp +++ b/src/lib/devices/CECBusDevice.cpp @@ -49,7 +49,7 @@ CCECBusDevice::CCECBusDevice(CCECProcessor *processor, cec_logical_address iLogi m_bMenuActive(true), m_iVendorClass(CEC_VENDOR_UNKNOWN), m_iLastActive(0), - m_cecVersion(CEC_VERSION_1_3A) + m_cecVersion(CEC_VERSION_UNKNOWN) { m_handler = new CCECCommandHandler(this); @@ -91,6 +91,9 @@ void CCECBusDevice::PollVendorId(void) GetTimeMs() - m_iLastActive > 5000 && !m_processor->IsMonitoring()) { + CStdString strLog; + strLog.Format("<< requesting vendor ID of device %x", m_iLogicalAddress); + AddLog(CEC_LOG_NOTICE, strLog); m_iLastActive = GetTimeMs(); cec_command command; @@ -132,7 +135,9 @@ cec_version CCECBusDevice::GetCecVersion(void) { if (!MyLogicalAddressContains(m_iLogicalAddress)) { - AddLog(CEC_LOG_NOTICE, "<< requesting CEC version"); + CStdString strLog; + strLog.Format("<< requesting CEC version of device %x", m_iLogicalAddress); + AddLog(CEC_LOG_NOTICE, strLog); cec_command command; cec_command::format(command, GetMyLogicalAddress(), m_iLogicalAddress, CEC_OPCODE_GET_CEC_VERSION); CLockObject lock(&m_mutex); @@ -150,7 +155,9 @@ cec_menu_language &CCECBusDevice::GetMenuLanguage(void) { if (!MyLogicalAddressContains(m_iLogicalAddress)) { - AddLog(CEC_LOG_NOTICE, "<< requesting menu language"); + CStdString strLog; + strLog.Format("<< requesting menu language of device %x", m_iLogicalAddress); + AddLog(CEC_LOG_NOTICE, strLog); cec_command command; cec_command::format(command, GetMyLogicalAddress(), m_iLogicalAddress, CEC_OPCODE_GET_MENU_LANGUAGE); CLockObject lock(&m_mutex); @@ -178,7 +185,9 @@ cec_power_status CCECBusDevice::GetPowerStatus(void) { if (!MyLogicalAddressContains(m_iLogicalAddress)) { - AddLog(CEC_LOG_NOTICE, "<< requesting power status"); + CStdString strLog; + strLog.Format("<< requesting power status of device %x", m_iLogicalAddress); + AddLog(CEC_LOG_NOTICE, strLog); cec_command command; cec_command::format(command, GetMyLogicalAddress(), m_iLogicalAddress, CEC_OPCODE_GIVE_DEVICE_POWER_STATUS); CLockObject lock(&m_mutex); @@ -196,7 +205,9 @@ const cec_vendor &CCECBusDevice::GetVendor(void) { if (!MyLogicalAddressContains(m_iLogicalAddress)) { - AddLog(CEC_LOG_NOTICE, "<< requesting vendor ID"); + CStdString strLog; + strLog.Format("<< requesting vendor ID of device %x", m_iLogicalAddress); + AddLog(CEC_LOG_NOTICE, strLog); cec_command command; cec_command::format(command, GetMyLogicalAddress(), m_iLogicalAddress, CEC_OPCODE_GIVE_DEVICE_VENDOR_ID); CLockObject lock(&m_mutex); @@ -226,19 +237,19 @@ void CCECBusDevice::SetCecVersion(const cec_version newVersion) switch (newVersion) { case CEC_VERSION_1_2: - strLog.Format("device %d reports CEC version 1.2", m_iLogicalAddress); + strLog.Format("device %d: CEC version 1.2", m_iLogicalAddress); break; case CEC_VERSION_1_2A: - strLog.Format("device %d reports CEC version 1.2a", m_iLogicalAddress); + strLog.Format("device %d: CEC version 1.2a", m_iLogicalAddress); break; case CEC_VERSION_1_3: - strLog.Format("device %d reports CEC version 1.3", m_iLogicalAddress); + strLog.Format("device %d: CEC version 1.3", m_iLogicalAddress); break; case CEC_VERSION_1_3A: - strLog.Format("device %d reports CEC version 1.3a", m_iLogicalAddress); + strLog.Format("device %d: CEC version 1.3a", m_iLogicalAddress); break; default: - strLog.Format("device %d reports an unknown CEC version", m_iLogicalAddress); + strLog.Format("device %d: unknown CEC version", m_iLogicalAddress); m_cecVersion = CEC_VERSION_UNKNOWN; break; } diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index 65ec3e5..fd7d003 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -46,6 +46,10 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) { bool bHandled(true); + CStdString strLog; + strLog.Format(">> %x -> %x: %s (%2x)", command.initiator, command.destination, ToString(command.opcode), command.opcode); + m_busDevice->AddLog(CEC_LOG_NOTICE, strLog); + if (m_busDevice->MyLogicalAddressContains(command.destination)) { switch(command.opcode) @@ -413,3 +417,136 @@ void CCECCommandHandler::SetVendorId(const cec_command &command) if (device) device->SetVendorId(iVendorId, command.parameters.size > 3 ? command.parameters[3] : 0); } + +const char *CCECCommandHandler::ToString(const cec_opcode opcode) +{ + switch (opcode) + { + case CEC_OPCODE_ACTIVE_SOURCE: + return "active source"; + case CEC_OPCODE_IMAGE_VIEW_ON: + return "image view on"; + case CEC_OPCODE_TEXT_VIEW_ON: + return "text view on"; + case CEC_OPCODE_INACTIVE_SOURCE: + return "inactive source"; + case CEC_OPCODE_REQUEST_ACTIVE_SOURCE: + return "request active source"; + case CEC_OPCODE_ROUTING_CHANGE: + return "routing change"; + case CEC_OPCODE_ROUTING_INFORMATION: + return "routing information"; + case CEC_OPCODE_SET_STREAM_PATH: + return "set stream path"; + case CEC_OPCODE_STANDBY: + return "standby"; + case CEC_OPCODE_RECORD_OFF: + return "record off"; + case CEC_OPCODE_RECORD_ON: + return "record on"; + case CEC_OPCODE_RECORD_STATUS: + return "record status"; + case CEC_OPCODE_RECORD_TV_SCREEN: + return "record tv screen"; + case CEC_OPCODE_CLEAR_ANALOGUE_TIMER: + return "clear analogue timer"; + case CEC_OPCODE_CLEAR_DIGITAL_TIMER: + return "clear digital timer"; + case CEC_OPCODE_CLEAR_EXTERNAL_TIMER: + return "clear external timer"; + case CEC_OPCODE_SET_ANALOGUE_TIMER: + return "set analogue timer"; + case CEC_OPCODE_SET_DIGITAL_TIMER: + return "set digital timer"; + case CEC_OPCODE_SET_EXTERNAL_TIMER: + return "set external timer"; + case CEC_OPCODE_SET_TIMER_PROGRAM_TITLE: + return "set timer program title"; + case CEC_OPCODE_TIMER_CLEARED_STATUS: + return "timer cleared status"; + case CEC_OPCODE_TIMER_STATUS: + return "timer status"; + case CEC_OPCODE_CEC_VERSION: + return "cec version"; + case CEC_OPCODE_GET_CEC_VERSION: + return "get cec version"; + case CEC_OPCODE_GIVE_PHYSICAL_ADDRESS: + return "give physical address"; + case CEC_OPCODE_GET_MENU_LANGUAGE: + return "get menu language"; + case CEC_OPCODE_REPORT_PHYSICAL_ADDRESS: + return "report physical address"; + case CEC_OPCODE_SET_MENU_LANGUAGE: + return "set menu language"; + case CEC_OPCODE_DECK_CONTROL: + return "deck control"; + case CEC_OPCODE_DECK_STATUS: + return "deck status"; + case CEC_OPCODE_GIVE_DECK_STATUS: + return "give deck status"; + case CEC_OPCODE_PLAY: + return "play"; + case CEC_OPCODE_GIVE_TUNER_DEVICE_STATUS: + return "give tuner status"; + case CEC_OPCODE_SELECT_ANALOGUE_SERVICE: + return "select analogue service"; + case CEC_OPCODE_SELECT_DIGITAL_SERVICE: + return "set digital service"; + case CEC_OPCODE_TUNER_DEVICE_STATUS: + return "tuner device status"; + case CEC_OPCODE_TUNER_STEP_DECREMENT: + return "tuner step decrement"; + case CEC_OPCODE_TUNER_STEP_INCREMENT: + return "tuner step increment"; + case CEC_OPCODE_DEVICE_VENDOR_ID: + return "device vendor id"; + case CEC_OPCODE_GIVE_DEVICE_VENDOR_ID: + return "give device vendor id"; + case CEC_OPCODE_VENDOR_COMMAND: + return "vendor command"; + case CEC_OPCODE_VENDOR_COMMAND_WITH_ID: + return "vendor command with id"; + case CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN: + return "vendor remote button down"; + case CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP: + return "vendor remote button up"; + case CEC_OPCODE_SET_OSD_STRING: + return "set osd string"; + case CEC_OPCODE_GIVE_OSD_NAME: + return "give osd name"; + case CEC_OPCODE_SET_OSD_NAME: + return "set osd name"; + case CEC_OPCODE_MENU_REQUEST: + return "menu request"; + case CEC_OPCODE_MENU_STATUS: + return "menu status"; + case CEC_OPCODE_USER_CONTROL_PRESSED: + return "user control pressed"; + case CEC_OPCODE_USER_CONTROL_RELEASE: + return "user control release"; + case CEC_OPCODE_GIVE_DEVICE_POWER_STATUS: + return "give device power status"; + case CEC_OPCODE_REPORT_POWER_STATUS: + return "report power status"; + case CEC_OPCODE_FEATURE_ABORT: + return "feature abort"; + case CEC_OPCODE_ABORT: + return "abort"; + case CEC_OPCODE_GIVE_AUDIO_STATUS: + return "give audio status"; + case CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS: + return "give audio mode status"; + case CEC_OPCODE_REPORT_AUDIO_STATUS: + return "report audio status"; + case CEC_OPCODE_SET_SYSTEM_AUDIO_MODE: + return "set system audio mode"; + case CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST: + return "system audio mode request"; + case CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS: + return "system audio mode status"; + case CEC_OPCODE_SET_AUDIO_RATE: + return "set audio rate"; + default: + return "UNKNOWN"; + } +} diff --git a/src/lib/implementations/CECCommandHandler.h b/src/lib/implementations/CECCommandHandler.h index 9ef20ae..3a80f46 100644 --- a/src/lib/implementations/CECCommandHandler.h +++ b/src/lib/implementations/CECCommandHandler.h @@ -72,6 +72,8 @@ namespace CEC virtual CCECBusDevice *GetDevice(cec_logical_address iLogicalAddress) const; virtual CCECBusDevice *GetDeviceByPhysicalAddress(uint16_t iPhysicalAddress) const; + static const char* ToString(const cec_opcode opcode); + virtual void SetVendorId(const cec_command &command); CCECBusDevice *m_busDevice; }; -- 2.34.1