cec: improved logging. fixed GetVendorId()
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 10 Nov 2011 17:30:00 +0000 (18:30 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Thu, 10 Nov 2011 18:00:19 +0000 (19:00 +0100)
src/lib/CECProcessor.cpp
src/lib/devices/CECBusDevice.cpp
src/lib/implementations/CECCommandHandler.cpp
src/lib/implementations/CECCommandHandler.h

index 30a8acce8f9fdba27f2511960c6e18d5900dbc4d..f4a6da0a662b02de506097aa6b0f88b6deca4966 100644 (file)
@@ -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
index a7ec1ec98e5e596d84132999c71dcc26289975e2..c2595c3927aff0a07619d8921c9d191ebd6b5a86 100644 (file)
@@ -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;
   }
index 65ec3e5ce2073f161c07f67b6711cfd086cdfeea..fd7d003cd09cbc34bc6967cacc2ac41bc09f1fc1 100644 (file)
@@ -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";
+  }
+}
index 9ef20aee0bfd58e62ae6108ea2c6c9553f3c2dd7..3a80f463823ca1d3ab9d17240d4d5c4181b42375 100644 (file)
@@ -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;
   };