cec: handle samsung remote command 'return'
[deb_libcec.git] / src / lib / CECProcessor.cpp
index af2224757541b5244bb3eb8947be8101e05f98d3..2e53d6b9271742e3cf41140adea44b99f4653743 100644 (file)
@@ -548,7 +548,34 @@ bool CCECProcessor::HandleANCommand(cec_command &command)
   {
     switch(command.opcode)
     {
-    // TODO
+    case CEC_OPCODE_VENDOR_REMOTE_BUTTON_DOWN:
+      if (command.parameters.size > 0)
+      {
+        m_controller->AddKey();
+
+        uint8_t iButton = 0;
+        switch (command.parameters[0])
+        {
+        case CEC_AN_USER_CONTROL_CODE_RETURN:
+          iButton = CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL;
+          break;
+        default:
+          break;
+        }
+
+        if (iButton > 0 && iButton <= CEC_USER_CONTROL_CODE_MAX)
+        {
+          CStdString strLog;
+          strLog.Format("key pressed: %1x", iButton);
+          m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str());
+
+          m_controller->SetCurrentButton((cec_user_control_code) command.parameters[0]);
+        }
+      }
+      break;
+    case CEC_OPCODE_VENDOR_REMOTE_BUTTON_UP:
+      m_controller->AddKey();
+      break;
     default:
       bHandled = false;
       break;
@@ -714,11 +741,8 @@ void CCECProcessor::ParseCommand(cec_command &command)
 {
   CStdString dataStr;
   dataStr.Format(">> received frame: %1x%1x:%02x", command.initiator, command.destination, command.opcode);
-  if (command.parameters.size > 1)
-  {
-    for (uint8_t iPtr = 0; iPtr < command.parameters.size; iPtr++)
-      dataStr.AppendFormat(":%02x", (unsigned int)command.parameters[iPtr]);
-  }
+  for (uint8_t iPtr = 0; iPtr < command.parameters.size; iPtr++)
+    dataStr.AppendFormat(":%02x", (unsigned int)command.parameters[iPtr]);
   m_controller->AddLog(CEC_LOG_DEBUG, dataStr.c_str());
 
   if (!m_bMonitor)