cec: added GetLogicalAddresses()/cec_get_logical_addresses() to the interface, that...
authorLars Op den Kamp <lars@opdenkamp.eu>
Mon, 6 Feb 2012 15:05:25 +0000 (16:05 +0100)
committerLars Op den Kamp <lars@opdenkamp.eu>
Mon, 6 Feb 2012 15:05:25 +0000 (16:05 +0100)
include/cec.h
include/cecc.h
src/lib/LibCEC.cpp
src/lib/LibCEC.h
src/lib/LibCECC.cpp
src/testclient/main.cpp

index 97e75a46f8e778b7d05471c9ea1e3f58afa81c97..5916ffdeee18ccbed5d5accf82fe92b1ee260bf7 100644 (file)
@@ -364,6 +364,11 @@ namespace CEC
      */
     virtual bool SetStreamPath(uint16_t iPhysicalAddress) = 0;
 
+    /*!
+     * @return The list of addresses that libCEC is controlling
+     */
+    virtual cec_logical_addresses GetLogicalAddresses(void) = 0;
+
     virtual const char *ToString(const cec_menu_state state) = 0;
     virtual const char *ToString(const cec_version version) = 0;
     virtual const char *ToString(const cec_power_status status) = 0;
index dc4b7953e0484c4b773cef9951f5af5bdd3bd250..e1ef0e33434212196435acbfbc0238a4e0448d8f 100644 (file)
@@ -267,6 +267,12 @@ extern DECLSPEC int cec_set_stream_path_logical(cec_logical_address iAddress);
 
 extern DECLSPEC int cec_set_stream_path_physical(uint16_t iPhysicalAddress);
 
+#ifdef __cplusplus
+extern DECLSPEC CEC::cec_logical_addresses cec_get_logical_addresses(void);
+#else
+extern DECLSPEC cec_logical_addresses cec_get_logical_addresses(void);
+#endif
+
 #ifdef __cplusplus
 };
 #endif
index 7022def6242c824ea837af4cc3ddfcb77bd36eb1..9c169cc4854602e5d9ad550b913206ed401c3ee2 100644 (file)
@@ -448,6 +448,12 @@ bool CLibCEC::SetStreamPath(uint16_t iPhysicalAddress)
   return m_cec->SetStreamPath(iPhysicalAddress);
 }
 
+cec_logical_addresses CLibCEC::GetLogicalAddresses(void)
+{
+  cec_logical_addresses addr = m_cec->GetLogicalAddresses();
+  return addr;
+}
+
 static CLibCEC *g_libCEC_instance(NULL);
 CLibCEC *CLibCEC::GetInstance(void)
 {
index 6cc2514d561b0df852ad9626c11733b39ab7b653..b5cf2bfd46fa0bc22e6cd5f25c1113c66c974f34 100644 (file)
@@ -101,6 +101,7 @@ namespace CEC
       virtual bool IsActiveSource(cec_logical_address iAddress);
       virtual bool SetStreamPath(cec_logical_address iAddress);
       virtual bool SetStreamPath(uint16_t iPhysicalAddress);
+      virtual cec_logical_addresses GetLogicalAddresses(void);
 
       const char *ToString(const cec_menu_state state);
       const char *ToString(const cec_version version);
index 3711686e3685e56f907699e1c974f14fde0bf177..e2ae7f5d21b4fc4e544bc9ffd4059fd528249ba8 100644 (file)
@@ -381,4 +381,13 @@ int cec_set_stream_path_physical(uint16_t iPhysicalAddress)
   return cec_parser ? (cec_parser->SetStreamPath(iPhysicalAddress) ? 1 : 0) : -1;
 }
 
+cec_logical_addresses cec_get_logical_addresses(void)
+{
+  cec_logical_addresses addr;
+  addr.Clear();
+  if (cec_parser)
+    addr = cec_parser->GetLogicalAddresses();
+  return addr;
+}
+
 //@}
index c8e6819f091ba6741d06e9e685ee41fd5e7d406f..b987ff9ac37d7e3b8994d5107dac0087b6ba2bd0 100644 (file)
@@ -278,6 +278,7 @@ void ShowHelpConsole(void)
   "[volup]                   send a volume up command to the amp if present" << endl <<
   "[voldown]                 send a volume down command to the amp if present" << endl <<
   "[mute]                    send a mute/unmute command to the amp if present" << endl <<
+  "[self]                    show the list of addresses controlled by libCEC" << endl <<
   "[scan]                    scan the CEC bus and display device info" << endl <<
   "[mon] {1|0}               enable or disable CEC bus monitoring." << endl <<
   "[log] {1 - 31}            change the log level. see cectypes.h for values." << endl <<
@@ -291,6 +292,28 @@ void ShowHelpConsole(void)
   "================================================================================" << endl;
 }
 
+bool ProcessCommandSELF(ICECAdapter *parser, const string &command, string & UNUSED(arguments))
+{
+  if (command == "self")
+  {
+    cec_logical_addresses addr = parser->GetLogicalAddresses();
+    CStdString strOut = "Addresses controlled by libCEC: ";
+    bool bFirst(true);
+    for (uint8_t iPtr = 0; iPtr <= 15; iPtr++)
+    {
+      if (addr[iPtr])
+      {
+        strOut.AppendFormat((bFirst ? "%d%s" : ", %d%s"), iPtr, parser->IsActiveSource((cec_logical_address)iPtr) ? "*" : "");
+        bFirst = false;
+      }
+    }
+    PrintToStdOut(strOut.c_str());
+    return true;
+  }
+
+  return false;
+}
+
 bool ProcessCommandSP(ICECAdapter *parser, const string &command, string &arguments)
 {
   if (command == "sp")
@@ -868,7 +891,8 @@ bool ProcessConsoleCommand(ICECAdapter *parser, string &input)
       ProcessCommandLOG(parser, command, input) ||
       ProcessCommandSCAN(parser, command, input) ||
       ProcessCommandSP(parser, command, input) ||
-      ProcessCommandSPL(parser, command, input);
+      ProcessCommandSPL(parser, command, input) ||
+      ProcessCommandSELF(parser, command, input);
     }
   }
   return true;