cec: added a callback to handle menu state changes. if the callback method returns...
[deb_libcec.git] / src / lib / LibCEC.cpp
index 3230e684d9779aaa21e068932b9fb2be0ec0d274..9b200a6556316a31aa803bc712dc22cacf44b90b 100644 (file)
@@ -60,7 +60,7 @@ CLibCEC::CLibCEC(libcec_configuration *configuration) :
     m_callbacks(configuration->callbacks),
     m_cbParam(configuration->callbackParam)
 {
-  configuration->serverVersion = CEC_SERVER_VERSION_1_6_0;
+  configuration->serverVersion = CEC_SERVER_VERSION_1_6_1;
   m_cec = new CCECProcessor(this, configuration);
 }
 
@@ -456,6 +456,28 @@ void CLibCEC::CheckKeypressTimeout(void)
   }
 }
 
+int CLibCEC::MenuStateChanged(const cec_menu_state newState)
+{
+  int iReturn(0);
+
+  CLibCEC *instance = CLibCEC::GetInstance();
+  if (!instance)
+    return iReturn;
+  CLockObject lock(instance->m_mutex);
+
+  AddLog(CEC_LOG_NOTICE, ">> %s: %s", instance->m_cec->ToString(CEC_OPCODE_MENU_REQUEST), instance->m_cec->ToString(newState));
+
+  libcec_configuration config;
+  instance->GetCurrentConfiguration(&config);
+
+  if (instance->m_callbacks &&
+      config.clientVersion >= CEC_CLIENT_VERSION_1_6_2 &&
+      instance->m_callbacks->CBMenuStatusChanged)
+    iReturn = instance->m_callbacks->CBMenuStatusChanged(instance->m_cbParam, newState);
+
+  return iReturn;
+}
+
 bool CLibCEC::SetStreamPath(cec_logical_address iAddress)
 {
   uint16_t iPhysicalAddress = GetDevicePhysicalAddress(iAddress);