Add a default menu language to libcec_configuration. bugzid: 699
[deb_libcec.git] / src / lib / CECProcessor.cpp
index c7d586e79cce42ab39e061a69b419ebbf786d3f6..3f91fbf4fbac1d723016353f3f206686866891d2 100644 (file)
@@ -59,7 +59,7 @@ CCECProcessor::CCECProcessor(CLibCEC *controller, libcec_configuration *configur
 {
   CreateBusDevices();
   m_configuration.Clear();
-  m_configuration.serverVersion = CEC_SERVER_VERSION_1_6_0;
+  m_configuration.serverVersion = CEC_SERVER_VERSION_1_6_1;
   SetConfiguration(configuration);
 
   if (m_configuration.tvVendor != CEC_VENDOR_UNKNOWN)
@@ -77,7 +77,7 @@ CCECProcessor::CCECProcessor(CLibCEC *controller, const char *strDeviceName, con
     m_iLastTransmission(0)
 {
   m_configuration.Clear();
-  m_configuration.serverVersion    = CEC_SERVER_VERSION_1_6_0;
+  m_configuration.serverVersion    = CEC_SERVER_VERSION_1_6_1;
 
   // client version < 1.5.0
   m_configuration.clientVersion    = (uint32_t)CEC_CLIENT_VERSION_PRE_1_5;
@@ -240,6 +240,21 @@ bool CCECProcessor::Initialise(void)
     /* make the primary device the active source if the option is set */
     if (m_configuration.bActivateSource == 1)
       m_busDevices[m_configuration.logicalAddresses.primary]->m_bActiveSource = true;
+
+    /* set the default menu language for devices we control */
+    cec_menu_language language;
+    language.device = m_configuration.logicalAddresses.primary;
+    memcpy(language.language, m_configuration.strDeviceLanguage, 3);
+    language.language[3] = 0;
+
+    for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
+    {
+      if (m_configuration.logicalAddresses[iPtr])
+      {
+        language.device = (cec_logical_address) iPtr;
+        m_busDevices[iPtr]->SetMenuLanguage(language);
+      }
+    }
   }
 
   /* get the vendor id from the TV, so we are using the correct handler */
@@ -377,12 +392,6 @@ bool CCECProcessor::ChangeDeviceType(cec_device_type from, cec_device_type to)
       previousDevice->SetCecVersion(CEC_VERSION_UNKNOWN);
 
       newDevice->SetMenuLanguage(previousDevice->GetMenuLanguage(false));
-      cec_menu_language lang;
-      lang.device = previousDevice->GetLogicalAddress();
-      for (unsigned int iPtr = 0; iPtr < 4; iPtr++)
-        lang.language[iPtr] = '?';
-      lang.language[3] = 0;
-      previousDevice->SetMenuLanguage(lang);
 
       newDevice->SetMenuState(previousDevice->GetMenuState());
       previousDevice->SetMenuState(CEC_MENU_STATE_DEACTIVATED);
@@ -1414,6 +1423,8 @@ const char *CCECProcessor::ToString(const cec_client_version version)
     return "1.5.3";
   case CEC_CLIENT_VERSION_1_6_0:
     return "1.6.0";
+  case CEC_CLIENT_VERSION_1_6_1:
+    return "1.6.1";
   default:
     return "Unknown";
   }
@@ -1435,6 +1446,8 @@ const char *CCECProcessor::ToString(const cec_server_version version)
     return "1.5.3";
   case CEC_SERVER_VERSION_1_6_0:
     return "1.6.0";
+  case CEC_SERVER_VERSION_1_6_1:
+    return "1.6.1";
   default:
     return "Unknown";
   }
@@ -1650,6 +1663,12 @@ bool CCECProcessor::SetConfiguration(const libcec_configuration *configuration)
     m_configuration.bShutdownOnStandby        = configuration->bShutdownOnStandby;
   }
 
+  // client version 1.6.2
+  if (configuration->clientVersion >= CEC_CLIENT_VERSION_1_6_2)
+  {
+    snprintf(m_configuration.strDeviceLanguage, 3, "%s", configuration->strDeviceLanguage);
+  }
+
   // ensure that there is at least 1 device type set
   if (m_configuration.deviceTypes.IsEmpty())
     m_configuration.deviceTypes.Add(CEC_DEVICE_TYPE_RECORDING_DEVICE);