cec: clear the input buffer when parsing
authorLars Op den Kamp <lars@opdenkamp.eu>
Sat, 8 Oct 2011 00:54:11 +0000 (02:54 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Sat, 8 Oct 2011 00:54:11 +0000 (02:54 +0200)
src/lib/CECProcessor.cpp
src/testclient/main.cpp

index 44b2acb44dbcdae590f3646f11b618e7fedf8978..29daf532f27ca9b81fd6a566676baa5d71e4be59 100644 (file)
@@ -491,24 +491,27 @@ bool CCECProcessor::ParseMessage(cec_frame &msg)
 
 void CCECProcessor::ParseCurrentFrame(void)
 {
-  uint8_t initiator = m_currentframe.data[0] >> 4;
-  uint8_t destination = m_currentframe.data[0] & 0xF;
+  cec_frame frame = m_currentframe;
+  m_currentframe.clear();
+
+  uint8_t initiator = frame.data[0] >> 4;
+  uint8_t destination = frame.data[0] & 0xF;
 
   CStdString dataStr;
   dataStr.Format("received frame: initiator: %u destination: %u", initiator, destination);
 
-  if (m_currentframe.size > 1)
+  if (frame.size > 1)
   {
     dataStr += " data:";
-    for (unsigned int i = 1; i < m_currentframe.size; i++)
-      dataStr.AppendFormat(" %02x", m_currentframe.data[i]);
+    for (unsigned int i = 1; i < frame.size; i++)
+      dataStr.AppendFormat(" %02x", frame.data[i]);
   }
   m_controller->AddLog(CEC_LOG_DEBUG, dataStr.c_str());
 
-  if (m_currentframe.size <= 1)
+  if (frame.size <= 1)
     return;
 
-  cec_opcode opCode = (cec_opcode) m_currentframe.data[1];
+  cec_opcode opCode = (cec_opcode) frame.data[1];
   if (destination == (uint16_t) m_iLogicalAddress)
   {
     switch(opCode)
@@ -533,19 +536,19 @@ void CCECProcessor::ParseCurrentFrame(void)
       ReportCECVersion((cec_logical_address)initiator);
       break;
     case CEC_OPCODE_USER_CONTROL_PRESSED:
-      if (m_currentframe.size > 2)
+      if (frame.size > 2)
       {
         m_controller->AddKey();
 
-        if (m_currentframe.data[2] <= CEC_USER_CONTROL_CODE_MAX)
-          m_controller->SetCurrentButton((cec_user_control_code) m_currentframe.data[2]);
+        if (frame.data[2] <= CEC_USER_CONTROL_CODE_MAX)
+          m_controller->SetCurrentButton((cec_user_control_code) frame.data[2]);
       }
       break;
     case CEC_OPCODE_USER_CONTROL_RELEASE:
       m_controller->AddKey();
       break;
     default:
-      cec_frame params = m_currentframe;
+      cec_frame params = frame;
       params.shift(2);
       m_controller->AddCommand((cec_logical_address) initiator, (cec_logical_address) destination, opCode, &params);
       break;
@@ -562,9 +565,9 @@ void CCECProcessor::ParseCurrentFrame(void)
     }
     else if (opCode == CEC_OPCODE_SET_STREAM_PATH)
     {
-      if (m_currentframe.size >= 4)
+      if (frame.size >= 4)
       {
-        int streamaddr = ((int)m_currentframe.data[2] << 8) | ((int)m_currentframe.data[3]);
+        int streamaddr = ((int)frame.data[2] << 8) | ((int)frame.data[3]);
         strLog.Format("%i requests stream path from physical address %04x", initiator, streamaddr);
         m_controller->AddLog(CEC_LOG_DEBUG, strLog.c_str());
         if (streamaddr == m_physicaladdress)
@@ -573,7 +576,7 @@ void CCECProcessor::ParseCurrentFrame(void)
     }
     else
     {
-      cec_frame params = m_currentframe;
+      cec_frame params = frame;
       params.shift(2);
       m_controller->AddCommand((cec_logical_address) initiator, (cec_logical_address) destination, opCode, &params);
     }
index bec5c4d1655dd597ba03b39ad396df66c6f408ba..c239d3b1d802312d9369bb79118e742ac4e94951 100644 (file)
@@ -176,7 +176,7 @@ void show_console_help(void)
 
 int main (int argc, char *argv[])
 {
-  ICECAdapter *parser = LoadLibCec("CEC Tester");
+  ICECAdapter *parser = LoadLibCec("CECTester");
   if (!parser && parser->GetMinVersion() > CEC_TEST_CLIENT_VERSION)
   {
     cout << "Unable to create parser. Is libcec.dll present?" << endl;