cec: fixed setting the ackmask. deprecated SetAckMask()/cec_set_ack_mask(). use SetLo...
authorLars Op den Kamp <lars@opdenkamp.eu>
Thu, 29 Sep 2011 15:44:15 +0000 (17:44 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Thu, 29 Sep 2011 15:44:15 +0000 (17:44 +0200)
include/CECExports.h
include/CECExportsC.h
include/CECExportsCpp.h
src/lib/CECParser.cpp
src/lib/CECParser.h
src/lib/CECParserC.cpp
src/testclient/main.cpp

index c25757052c4715e6d278cd5317d3a3f8343ff770..ad1eb969fb4225c84468edebb8f437f65c0c2812 100644 (file)
@@ -55,7 +55,7 @@
 extern "C" {
 namespace CEC {
 #endif
-  #define CEC_MIN_VERSION      1
+  #define CEC_MIN_VERSION      2
   #define CEC_LIB_VERSION      2
   #define CEC_SETTLE_DOWN_TIME 1000
 
index 79409b7fed9a4990b3aa459a06a9bf074400bdb8..6fa4dbeebc6115f991a65040a4770d68d56c9bbf 100644 (file)
@@ -159,11 +159,23 @@ extern DECLSPEC bool cec_transmit(const cec_frame &data, bool bWaitForAck = true
 #endif
 
 /*!
- * @brief Set the ack mask for the CEC adapter.
- * @param ackmask The new ack mask.
+ * @brief Set the logical address of the CEC adapter.
+ * @param iLogicalAddress The cec adapter's logical address.
+ * @return True when the logical address was set succesfully, false otherwise.
+ */
+#ifdef __cplusplus
+extern DECLSPEC bool cec_set_logical_address(CEC::cec_logical_address iLogicalAddress);
+#else
+extern DECLSPEC bool cec_set_logical_address(cec_logical_address myAddress, cec_logical_address targetAddress);
+#endif
+
+/*!
+ * @deprecated Use cec_set_logical_address() instead.
+ * @brief Set the ack mask of the CEC adapter.
+ * @param iMask The cec adapter's ack mask.
  * @return True when the ack mask was sent succesfully, false otherwise.
  */
-extern DECLSPEC bool cec_set_ack_mask(uint16_t ackmask);
+extern DECLSPEC bool cec_set_ack_mask(uint16_t iMask);
 
 /*!
  * @return Get the minimal version of libcec that this version of libcec can interface with.
index b49b1abdce050b02f7e52f8b93b4a0f34895018d..996ec7fe3e479bc8a7dd769c896fc3307765f0f4 100644 (file)
@@ -97,9 +97,14 @@ namespace CEC
     virtual bool Transmit(const cec_frame &data, bool bWaitForAck = true, int64_t iTimeout = (int64_t) 5000) = 0;
 
     /*!
-     * @see cec_set_ack_mask
+     * @see cec_set_logical_address
      */
-    virtual bool SetAckMask(cec_logical_address ackmask) = 0;
+    virtual bool SetLogicalAddress(cec_logical_address iLogicalAddress) = 0;
+
+    /*!
+     * @deprecated use SetLogicalAddress() instead
+     */
+    virtual bool SetAckMask(uint16_t iMask) = 0;
 
     /*!
      * @see cec_get_min_version
index af86abe0d83ab98b4a6eaa2802ab0f8bb3f9825d..8b89aa634b5e510aae599b4e71e688eb8ad95381 100644 (file)
@@ -90,7 +90,7 @@ bool CCECParser::Open(const char *strPort, int iTimeoutMs /* = 10000 */)
   m_serialport->Read(buff, sizeof(buff), CEC_SETTLE_DOWN_TIME);
 
   if (bReturn)
-    bReturn = SetAckMask(m_iLogicalAddress);
+    bReturn = SetLogicalAddress(m_iLogicalAddress);
 
   if (!bReturn)
   {
@@ -796,27 +796,34 @@ void CCECParser::CheckKeypressTimeout(int64_t now)
   }
 }
 
-bool CCECParser::SetAckMask(cec_logical_address ackmask)
+bool CCECParser::SetLogicalAddress(cec_logical_address iLogicalAddress)
 {
   CStdString strLog;
-  strLog.Format("setting ackmask to %d", (uint16_t) ackmask);
+  strLog.Format("setting logical address to %d", iLogicalAddress);
   AddLog(CEC_LOG_NOTICE, strLog.c_str());
 
+  m_iLogicalAddress = iLogicalAddress;
+  return SetAckMask(0x1 << (uint8_t)m_iLogicalAddress);
+}
+
+bool CCECParser::SetAckMask(uint16_t iMask)
+{
+  CStdString strLog;
+  strLog.Format("setting ackmask to %2x", iMask);
+  AddLog(CEC_LOG_DEBUG, strLog.c_str());
+
   cec_frame output;
-  m_iLogicalAddress = ackmask;
-  output.push_back(MSGSTART);
 
+  output.push_back(MSGSTART);
   PushEscaped(output, MSGCODE_SET_ACK_MASK);
-  PushEscaped(output, (uint8_t) ackmask >> 8);
-  PushEscaped(output, (uint8_t) ackmask << 2);
-
+  PushEscaped(output, iMask >> 8);
+  PushEscaped(output, iMask);
   output.push_back(MSGEND);
 
   if (m_serialport->Write(output) == -1)
   {
-    CStdString strDebug;
-    strDebug.Format("error writing to serial port: %s", m_serialport->GetError().c_str());
-    AddLog(CEC_LOG_ERROR, strDebug);
+    strLog.Format("error writing to serial port: %s", m_serialport->GetError().c_str());
+    AddLog(CEC_LOG_ERROR, strLog);
     return false;
   }
 
index 6f0caa4ff3c03da3ea498d4a11a6ebdea36396cc..f257fe1c02b967fd8add0760a49dbf812bb5cae8 100644 (file)
@@ -63,7 +63,8 @@ namespace CEC
       virtual bool GetNextLogMessage(cec_log_message *message);
       virtual bool GetNextKeypress(cec_keypress *key);
       virtual bool Transmit(const cec_frame &data, bool bWaitForAck = true, int64_t iTimeout = (int64_t) 5000);
-      virtual bool SetAckMask(cec_logical_address ackmask);
+      virtual bool SetLogicalAddress(cec_logical_address iLogicalAddress);
+      virtual bool SetAckMask(uint16_t iMask);
       virtual int  GetMinVersion(void);
       virtual int  GetLibVersion(void);
     //@}
index 1aae849a7815f47550ee9784d726b0afeb1c32ba..4b6a1efa7bb5414f7df00b64016c5c137284ccfb 100644 (file)
@@ -131,10 +131,17 @@ bool cec_transmit(const CEC::cec_frame &data, bool bWaitForAck /* = true */, int
   return false;
 }
 
-bool cec_set_ack_mask(uint16_t ackmask)
+bool cec_set_logical_address(cec_logical_address iLogicalAddress)
 {
   if (cec_parser)
-    return cec_parser->SetAckMask((cec_logical_address) ackmask);
+    return cec_parser->SetLogicalAddress(iLogicalAddress);
+  return false;
+}
+
+bool cec_set_ack_mask(uint16_t iMask)
+{
+  if (cec_parser)
+    return cec_parser->SetAckMask(iMask);
   return false;
 }
 
index 0edf5cd9bb8fbde6b8e538e04e24b44c4befd58f..bfbec5e7aada7061c2d370c99cf72135d38e5faf 100644 (file)
@@ -42,7 +42,7 @@
 using namespace CEC;
 using namespace std;
 
-#define CEC_TEST_CLIENT_VERSION 1
+#define CEC_TEST_CLIENT_VERSION 2
 
 void flush_log(ICECDevice *cecParser)
 {
@@ -203,10 +203,18 @@ int main (int argc, char *argv[])
         {
           string strvalue;
           int    ackmask;
-          vector<uint8_t> bytes;
           if (GetWord(input, strvalue) && HexStrToInt(strvalue, ackmask))
           {
-            parser->SetAckMask((cec_logical_address) ackmask);
+            parser->SetAckMask(ackmask);
+          }
+        }
+        else if (command == "la")
+        {
+          string strvalue;
+          int    iLogicalAddress;
+          if (GetWord(input, strvalue))
+          {
+            parser->SetLogicalAddress((cec_logical_address) atoi(strvalue.c_str()));
           }
         }
         else if (command == "ping")