Merge PR #32
[deb_libcec.git] / src / lib / CECTypeUtils.h
index afbbf9cd096e9c32a4ce9533fdcbd77f14f0edc5..0eccdcc6f5a28379f493fe0aaf2a798474ab1af8 100644 (file)
@@ -2,7 +2,7 @@
 /*
  * This file is part of the libCEC(R) library.
  *
- * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited.  All rights reserved.
+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited.  All rights reserved.
  * libCEC(R) is an original work, containing original code.
  *
  * libCEC(R) is a trademark of Pulse-Eight Limited.
@@ -31,7 +31,7 @@
  *     http://www.pulse-eight.net/
  */
 
-#include "../../include/cectypes.h"
+#include "lib/platform/util/StdString.h"
 
 namespace CEC
 {
@@ -493,7 +493,37 @@ namespace CEC
       case CEC_VENDOR_SONY:
         return "Sony";
       case CEC_VENDOR_TOSHIBA:
+      case CEC_VENDOR_TOSHIBA2:
         return "Toshiba";
+      case CEC_VENDOR_AKAI:
+        return "Akai";
+      case CEC_VENDOR_AOC:
+        return "AOC";
+      case CEC_VENDOR_BENQ:
+        return "Benq";
+      case CEC_VENDOR_DAEWOO:
+        return "Daewoo";
+      case CEC_VENDOR_GRUNDIG:
+        return "Grundig";
+      case CEC_VENDOR_MEDION:
+        return "Medion";
+      case CEC_VENDOR_SHARP:
+        return "Sharp";
+      case CEC_VENDOR_VIZIO:
+        return "Vizio";
+      case CEC_VENDOR_BROADCOM:
+        return "Broadcom";
+      case CEC_VENDOR_LOEWE:
+        return "Loewe";
+      case CEC_VENDOR_DENON:
+        return "Denon";
+      case CEC_VENDOR_MARANTZ:
+        return "Marantz";
+      case CEC_VENDOR_HARMAN_KARDON:
+      case CEC_VENDOR_HARMAN_KARDON2:
+        return "Harman/Kardon";
+      case CEC_VENDOR_PULSE_EIGHT:
+        return "Pulse Eight";
       default:
         return "Unknown";
       }
@@ -521,6 +551,44 @@ namespace CEC
         return "1.6.2";
       case CEC_CLIENT_VERSION_1_6_3:
         return "1.6.3";
+      case CEC_CLIENT_VERSION_1_7_0:
+        return "1.7.0";
+      case CEC_CLIENT_VERSION_1_7_1:
+        return "1.7.1";
+      case CEC_CLIENT_VERSION_1_7_2:
+        return "1.7.2";
+      case CEC_CLIENT_VERSION_1_8_0:
+        return "1.8.0";
+      case CEC_CLIENT_VERSION_1_8_1:
+        return "1.8.1";
+      case CEC_CLIENT_VERSION_1_8_2:
+        return "1.8.2";
+      case CEC_CLIENT_VERSION_1_9_0:
+        return "1.9.0";
+      case CEC_CLIENT_VERSION_1_99_0:
+        return "2.0.0-pre";
+      case CEC_CLIENT_VERSION_2_0_0:
+        return "2.0.0";
+      case CEC_CLIENT_VERSION_2_0_1:
+        return "2.0.1";
+      case CEC_CLIENT_VERSION_2_0_2:
+        return "2.0.2";
+      case CEC_CLIENT_VERSION_2_0_3:
+        return "2.0.3";
+      case CEC_CLIENT_VERSION_2_0_4:
+        return "2.0.4";
+      case CEC_CLIENT_VERSION_2_0_5:
+        return "2.0.5";
+      case CEC_CLIENT_VERSION_2_1_0:
+        return "2.1.0";
+      case CEC_CLIENT_VERSION_2_1_1:
+        return "2.1.1";
+      case CEC_CLIENT_VERSION_2_1_2:
+        return "2.1.2";
+      case CEC_CLIENT_VERSION_2_1_3:
+        return "2.1.3";
+      case CEC_CLIENT_VERSION_2_1_4:
+        return "2.1.4";
       default:
         return "Unknown";
       }
@@ -548,9 +616,288 @@ namespace CEC
         return "1.6.2";
       case CEC_SERVER_VERSION_1_6_3:
         return "1.6.3";
+      case CEC_SERVER_VERSION_1_7_0:
+        return "1.7.0";
+      case CEC_SERVER_VERSION_1_7_1:
+        return "1.7.1";
+      case CEC_SERVER_VERSION_1_7_2:
+        return "1.7.2";
+      case CEC_SERVER_VERSION_1_8_0:
+        return "1.8.0";
+      case CEC_SERVER_VERSION_1_8_1:
+        return "1.8.1";
+      case CEC_SERVER_VERSION_1_8_2:
+        return "1.8.2";
+      case CEC_SERVER_VERSION_1_9_0:
+        return "1.9.0";
+      case CEC_SERVER_VERSION_1_99_0:
+        return "2.0.0-pre";
+      case CEC_SERVER_VERSION_2_0_0:
+        return "2.0.0";
+      case CEC_SERVER_VERSION_2_0_1:
+        return "2.0.1";
+      case CEC_SERVER_VERSION_2_0_2:
+        return "2.0.2";
+      case CEC_SERVER_VERSION_2_0_3:
+        return "2.0.3";
+      case CEC_SERVER_VERSION_2_0_4:
+        return "2.0.4";
+      case CEC_SERVER_VERSION_2_0_5:
+        return "2.0.5";
+      case CEC_SERVER_VERSION_2_1_0:
+        return "2.1.0";
+      case CEC_SERVER_VERSION_2_1_1:
+        return "2.1.1";
+      case CEC_SERVER_VERSION_2_1_2:
+        return "2.1.2";
+      case CEC_SERVER_VERSION_2_1_3:
+        return "2.1.3";
+      case CEC_SERVER_VERSION_2_1_4:
+        return "2.1.4";
       default:
         return "Unknown";
       }
     }
+
+    static const char *ToString(const cec_abort_reason reason)
+    {
+      switch(reason)
+      {
+      case CEC_ABORT_REASON_UNRECOGNIZED_OPCODE:
+        return "unrecognised opcode";
+      case CEC_ABORT_REASON_NOT_IN_CORRECT_MODE_TO_RESPOND:
+        return "not in correct mode to respond";
+      case CEC_ABORT_REASON_CANNOT_PROVIDE_SOURCE:
+        return "cannot provide source";
+      case CEC_ABORT_REASON_INVALID_OPERAND:
+        return "invalid operand";
+      case CEC_ABORT_REASON_REFUSED:
+        return "refused";
+      default:
+        return "unknown";
+      }
+    }
+
+    static const char *ToString(const cec_user_control_code key)
+    {
+      switch (key)
+      {
+      case CEC_USER_CONTROL_CODE_SELECT:
+        return "select";
+      case CEC_USER_CONTROL_CODE_UP:
+        return "up";
+      case CEC_USER_CONTROL_CODE_DOWN:
+          return "down";
+      case CEC_USER_CONTROL_CODE_LEFT:
+        return "left";
+      case CEC_USER_CONTROL_CODE_RIGHT:
+        return "right";
+      case CEC_USER_CONTROL_CODE_RIGHT_UP:
+        return "right+up";
+      case CEC_USER_CONTROL_CODE_RIGHT_DOWN:
+        return "right+down";
+      case CEC_USER_CONTROL_CODE_LEFT_UP:
+        return "left+up";
+      case CEC_USER_CONTROL_CODE_LEFT_DOWN:
+        return "left+down";
+      case CEC_USER_CONTROL_CODE_ROOT_MENU:
+        return "root menu";
+      case CEC_USER_CONTROL_CODE_SETUP_MENU:
+        return "setup menu";
+      case CEC_USER_CONTROL_CODE_CONTENTS_MENU:
+        return "contents menu";
+      case CEC_USER_CONTROL_CODE_FAVORITE_MENU:
+        return "favourite menu";
+      case CEC_USER_CONTROL_CODE_EXIT:
+        return "exit";
+      case CEC_USER_CONTROL_CODE_TOP_MENU:
+        return "top menu";
+      case CEC_USER_CONTROL_CODE_DVD_MENU:
+        return "dvd menu";
+      case CEC_USER_CONTROL_CODE_NUMBER_ENTRY_MODE:
+        return "number entry mode";
+      case CEC_USER_CONTROL_CODE_NUMBER11:
+        return "11";
+      case CEC_USER_CONTROL_CODE_NUMBER12:
+        return "12";
+      case CEC_USER_CONTROL_CODE_NUMBER0:
+        return "0";
+      case CEC_USER_CONTROL_CODE_NUMBER1:
+        return "1";
+      case CEC_USER_CONTROL_CODE_NUMBER2:
+        return "2";
+      case CEC_USER_CONTROL_CODE_NUMBER3:
+        return "3";
+      case CEC_USER_CONTROL_CODE_NUMBER4:
+        return "4";
+      case CEC_USER_CONTROL_CODE_NUMBER5:
+        return "5";
+      case CEC_USER_CONTROL_CODE_NUMBER6:
+        return "6";
+      case CEC_USER_CONTROL_CODE_NUMBER7:
+        return "7";
+      case CEC_USER_CONTROL_CODE_NUMBER8:
+        return "8";
+      case CEC_USER_CONTROL_CODE_NUMBER9:
+        return "9";
+      case CEC_USER_CONTROL_CODE_DOT:
+        return ".";
+      case CEC_USER_CONTROL_CODE_ENTER:
+        return "enter";
+      case CEC_USER_CONTROL_CODE_CLEAR:
+        return "clear";
+      case CEC_USER_CONTROL_CODE_NEXT_FAVORITE:
+        return "next favourite";
+      case CEC_USER_CONTROL_CODE_CHANNEL_UP:
+        return "channel up";
+      case CEC_USER_CONTROL_CODE_CHANNEL_DOWN:
+        return "channel down";
+      case CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL:
+        return "previous channel";
+      case CEC_USER_CONTROL_CODE_SOUND_SELECT:
+        return "sound select";
+      case CEC_USER_CONTROL_CODE_INPUT_SELECT:
+        return "input select";
+      case CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION:
+        return "display information";
+      case CEC_USER_CONTROL_CODE_HELP:
+        return "help";
+      case CEC_USER_CONTROL_CODE_PAGE_UP:
+        return "page up";
+      case CEC_USER_CONTROL_CODE_PAGE_DOWN:
+        return "page down";
+      case CEC_USER_CONTROL_CODE_POWER:
+        return "power";
+      case CEC_USER_CONTROL_CODE_VOLUME_UP:
+        return "volume up";
+      case CEC_USER_CONTROL_CODE_VOLUME_DOWN:
+        return "volume down";
+      case CEC_USER_CONTROL_CODE_MUTE:
+        return "mute";
+      case CEC_USER_CONTROL_CODE_PLAY:
+        return "play";
+      case CEC_USER_CONTROL_CODE_STOP:
+        return "stop";
+      case CEC_USER_CONTROL_CODE_PAUSE:
+        return "pause";
+      case CEC_USER_CONTROL_CODE_RECORD:
+        return "record";
+      case CEC_USER_CONTROL_CODE_REWIND:
+        return "rewind";
+      case CEC_USER_CONTROL_CODE_FAST_FORWARD:
+        return "Fast forward";
+      case CEC_USER_CONTROL_CODE_EJECT:
+        return "eject";
+      case CEC_USER_CONTROL_CODE_FORWARD:
+        return "forward";
+      case CEC_USER_CONTROL_CODE_BACKWARD:
+        return "backward";
+      case CEC_USER_CONTROL_CODE_STOP_RECORD:
+        return "stop record";
+      case CEC_USER_CONTROL_CODE_PAUSE_RECORD:
+        return "pause record";
+      case CEC_USER_CONTROL_CODE_ANGLE:
+        return "angle";
+      case CEC_USER_CONTROL_CODE_SUB_PICTURE:
+        return "sub picture";
+      case CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND:
+        return "video on demand";
+      case CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE:
+        return "electronic program guide";
+      case CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING:
+        return "timer programming";
+      case CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION:
+        return "initial configuration";
+      case CEC_USER_CONTROL_CODE_SELECT_BROADCAST_TYPE:
+        return "select broadcast type";
+      case CEC_USER_CONTROL_CODE_SELECT_SOUND_PRESENTATION:
+        return "select sound presentation";
+      case CEC_USER_CONTROL_CODE_PLAY_FUNCTION:
+        return "play (function)";
+      case CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION:
+        return "pause play (function)";
+      case CEC_USER_CONTROL_CODE_RECORD_FUNCTION:
+        return "record (function)";
+      case CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION:
+        return "pause record (function)";
+      case CEC_USER_CONTROL_CODE_STOP_FUNCTION:
+        return "stop (function)";
+      case CEC_USER_CONTROL_CODE_MUTE_FUNCTION:
+        return "mute (function)";
+      case CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION:
+        return "restore volume";
+      case CEC_USER_CONTROL_CODE_TUNE_FUNCTION:
+        return "tune";
+      case CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION:
+        return "select media";
+      case CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION:
+        return "select AV input";
+      case CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION:
+        return "select audio input";
+      case CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION:
+        return "power toggle";
+      case CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION:
+        return "power off";
+      case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION:
+        return "power on";
+      case CEC_USER_CONTROL_CODE_F1_BLUE:
+        return "F1 (blue)";
+      case CEC_USER_CONTROL_CODE_F2_RED:
+        return "F2 (red)";
+      case CEC_USER_CONTROL_CODE_F3_GREEN:
+        return "F3 (green)";
+      case CEC_USER_CONTROL_CODE_F4_YELLOW:
+        return "F4 (yellow)";
+      case CEC_USER_CONTROL_CODE_F5:
+        return "F5";
+      case CEC_USER_CONTROL_CODE_DATA:
+        return "data";
+      case CEC_USER_CONTROL_CODE_AN_RETURN:
+        return "return (Samsung)";
+      case CEC_USER_CONTROL_CODE_AN_CHANNELS_LIST:
+        return "channels list (Samsung)";
+      default:
+        return "unknown";
+      }
+    }
+
+    static const char *ToString(const cec_adapter_type type)
+    {
+      switch (type)
+      {
+      case ADAPTERTYPE_P8_EXTERNAL:
+        return "Pulse-Eight USB-CEC Adapter";
+      case ADAPTERTYPE_P8_DAUGHTERBOARD:
+        return "Pulse-Eight USB-CEC Daughterboard";
+      case ADAPTERTYPE_RPI:
+        return "Raspberry Pi";
+      case ADAPTERTYPE_TDA995x:
+        return "TDA995x";
+      default:
+        return "unknown";
+      }
+    }
+
+    static bool PhysicalAddressIsIncluded(uint16_t iParent, uint16_t iChild)
+    {
+      for (int iPtr = 3; iPtr >= 0; iPtr--)
+      {
+        if (((iParent >> 4*iPtr) & 0xF) > 0 &&
+            ((iParent >> 4*iPtr) & 0xF) != ((iChild >> 4*iPtr) & 0xF))
+          return false;
+      }
+      return true;
+    }
+
+    static CStdString ToString(const cec_command& command)
+    {
+      CStdString dataStr;
+      dataStr.Format(">> %1x%1x", command.initiator, command.destination);
+      if (command.opcode_set == 1)
+        dataStr.AppendFormat(":%02x", command.opcode);
+      for (uint8_t iPtr = 0; iPtr < command.parameters.size; iPtr++)
+        dataStr.AppendFormat(":%02x", (unsigned int)command.parameters[iPtr]);
+      return dataStr;
+    }
   };
 }