cec: handle samsung remote command 'return'
authorLars Op den Kamp <lars@opdenkamp.eu>
Tue, 25 Oct 2011 23:26:52 +0000 (01:26 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Tue, 25 Oct 2011 23:26:52 +0000 (01:26 +0200)
include/cectypes.h
src/lib/CECProcessor.cpp

index 5298258050530a61c1000f2a8fe1383198bf33db..941b5427bcdfaaa5adc68805beb6304c6920096d 100644 (file)
@@ -434,6 +434,11 @@ typedef enum cec_user_control_code
   CEC_USER_CONTROL_CODE_UNKNOWN
 } cec_user_control_code;
 
+typedef enum cec_an_user_control_code
+{
+  CEC_AN_USER_CONTROL_CODE_RETURN = 0x91
+} cec_an_user_control_code;
+
 typedef enum cec_logical_address
 {
   CECDEVICE_UNKNOWN = -1, //not a valid logical address
index f13644ed42131ff6287320caaab0f74e39d2cee9..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;