X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2FLibCecSharp%2FCecSharpTypes.h;h=8cdaa89a0e9e797f2931fedb936534c3009a2bd2;hb=00a02d1d839c2155ee8abc3a37d10ab12b9881db;hp=135eecf98ec84f7eb78c416f816061d4e98303b8;hpb=8670c97085f27ad5d7f3fc218247f32332462b1d;p=deb_libcec.git diff --git a/src/LibCecSharp/CecSharpTypes.h b/src/LibCecSharp/CecSharpTypes.h index 135eecf..8cdaa89 100644 --- a/src/LibCecSharp/CecSharpTypes.h +++ b/src/LibCecSharp/CecSharpTypes.h @@ -326,7 +326,17 @@ namespace CecSharp public enum class CecClientVersion { VersionPre1_5 = 0, - Version1_5_0 = 0x1500 + Version1_5_0 = 0x1500, + Version1_5_1 = 0x1501, + Version1_5_2 = 0x1502 + }; + + public enum class CecServerVersion + { + VersionPre1_5 = 0, + Version1_5_0 = 0x1500, + Version1_5_1 = 0x1501, + Version1_5_2 = 0x1502 }; public ref class CecAdapter @@ -524,6 +534,7 @@ namespace CecSharp BaseDevice = (CecLogicalAddress)CEC_DEFAULT_BASE_DEVICE; HDMIPort = CEC_DEFAULT_HDMI_PORT; ClientVersion = CecClientVersion::VersionPre1_5; + ServerVersion = CecServerVersion::VersionPre1_5; TvVendor = CecVendorId::Unknown; GetSettingsFromROM = false; @@ -540,6 +551,7 @@ namespace CecSharp PowerOffScreensaver = CEC_DEFAULT_SETTING_POWER_OFF_SCREENSAVER == 1; PowerOffOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_ON_STANDBY == 1; + SendInactiveSource = CEC_DEFAULT_SETTING_SEND_INACTIVE_SOURCE == 1; } void SetCallbacks(CecCallbackMethods ^callbacks) @@ -547,6 +559,41 @@ namespace CecSharp Callbacks = callbacks; } + void Update(const CEC::libcec_configuration &config) + { + DeviceName = gcnew System::String(config.strDeviceName); + + for (unsigned int iPtr = 0; iPtr < 5; iPtr++) + DeviceTypes->Types[iPtr] = (CecDeviceType)config.deviceTypes.types[iPtr]; + + AutodetectAddress = config.bAutodetectAddress == 1; + PhysicalAddress = config.iPhysicalAddress; + BaseDevice = (CecLogicalAddress)config.baseDevice; + HDMIPort = config.iHDMIPort; + ClientVersion = (CecClientVersion)config.clientVersion; + ServerVersion = (CecServerVersion)config.serverVersion; + TvVendor = (CecVendorId)config.tvVendor; + + // player specific settings + GetSettingsFromROM = config.bGetSettingsFromROM == 1; + UseTVMenuLanguage = config.bUseTVMenuLanguage == 1; + ActivateSource = config.bActivateSource == 1; + + WakeDevices->Clear(); + for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) + if (config.wakeDevices[iPtr]) + WakeDevices->Set((CecLogicalAddress)iPtr); + + PowerOffDevices->Clear(); + for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) + if (config.powerOffDevices[iPtr]) + PowerOffDevices->Set((CecLogicalAddress)iPtr); + + PowerOffScreensaver = config.bPowerOffScreensaver == 1; + PowerOffOnStandby = config.bPowerOffOnStandby == 1; + SendInactiveSource = config.bSendInactiveSource == 1; + } + property System::String ^ DeviceName; property CecDeviceTypeList ^ DeviceTypes; property bool AutodetectAddress; @@ -554,6 +601,7 @@ namespace CecSharp property CecLogicalAddress BaseDevice; property uint8_t HDMIPort; property CecClientVersion ClientVersion; + property CecServerVersion ServerVersion; property CecVendorId TvVendor; // player specific settings @@ -564,6 +612,7 @@ namespace CecSharp property CecLogicalAddresses ^PowerOffDevices; property bool PowerOffScreensaver; property bool PowerOffOnStandby; + property bool SendInactiveSource; property CecCallbackMethods ^ Callbacks; }; @@ -621,37 +670,11 @@ namespace CecSharp public ref class CecCallbackMethods { public: - CecCallbackMethods(void) - { - m_bHasCallbacks = false; - msclr::interop::marshal_context ^ context = gcnew msclr::interop::marshal_context(); - - // create the delegate method for the log message callback - m_logMessageDelegate = gcnew CecLogMessageManagedDelegate(this, &CecCallbackMethods::CecLogMessageManaged); - m_logMessageGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_logMessageDelegate); - g_logCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_logMessageDelegate).ToPointer()); - g_cecCallbacks.CBCecLogMessage = CecLogMessageCB; - - // create the delegate method for the keypress callback - m_keypressDelegate = gcnew CecKeyPressManagedDelegate(this, &CecCallbackMethods::CecKeyPressManaged); - m_keypressGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_keypressDelegate); - g_keyCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_keypressDelegate).ToPointer()); - g_cecCallbacks.CBCecKeyPress = CecKeyPressCB; - - // create the delegate method for the command callback - m_commandDelegate = gcnew CecCommandManagedDelegate(this, &CecCallbackMethods::CecCommandManaged); - m_commandGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_commandDelegate); - g_commandCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_commandDelegate).ToPointer()); - g_cecCallbacks.CBCecCommand = CecCommandCB; - - // create the delegate method for the configuration change callback - m_configDelegate = gcnew CecConfigManagedDelegate(this, &CecCallbackMethods::CecConfigManaged); - m_configGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_configDelegate); - g_configCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_configDelegate).ToPointer()); - g_cecCallbacks.CBCecConfigurationChanged = CecConfigCB; - - delete context; - } + CecCallbackMethods(void) + { + m_bHasCallbacks = false; + m_bDelegatesCreated = false; + } ~CecCallbackMethods(void) { @@ -667,13 +690,12 @@ namespace CecSharp public: virtual void DisableCallbacks(void) { - if (m_bHasCallbacks) - delete m_callbacks; - m_bHasCallbacks = false; + DestroyDelegates(); } + virtual bool EnableCallbacks(CecCallbackMethods ^ callbacks) { - DisableCallbacks(); + CreateDelegates(); if (!m_bHasCallbacks) { m_bHasCallbacks = true; @@ -740,30 +762,7 @@ namespace CecSharp if (m_bHasCallbacks) { LibCECConfiguration ^netConfig = gcnew LibCECConfiguration(); - netConfig->DeviceName = gcnew System::String(config.strDeviceName); - for (unsigned int iPtr = 0; iPtr < 5; iPtr++) - netConfig->DeviceTypes->Types[iPtr] = (CecDeviceType)config.deviceTypes.types[iPtr]; - - netConfig->PhysicalAddress = config.iPhysicalAddress; - netConfig->BaseDevice = (CecLogicalAddress)config.baseDevice; - netConfig->HDMIPort = config.iHDMIPort; - netConfig->ClientVersion = (CecClientVersion)config.clientVersion; - netConfig->GetSettingsFromROM = config.bGetSettingsFromROM == 1; - netConfig->ActivateSource = config.bActivateSource == 1; - - netConfig->WakeDevices->Clear(); - for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) - if (config.wakeDevices[iPtr]) - netConfig->WakeDevices->Set((CecLogicalAddress)iPtr); - - netConfig->PowerOffDevices->Clear(); - for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) - if (config.powerOffDevices[iPtr]) - netConfig->PowerOffDevices->Set((CecLogicalAddress)iPtr); - - netConfig->PowerOffScreensaver = config.bPowerOffScreensaver == 1; - netConfig->PowerOffOnStandby = config.bPowerOffOnStandby == 1; - + netConfig->Update(config); iReturn = m_callbacks->ConfigurationChanged(netConfig); } return iReturn; @@ -771,16 +770,53 @@ namespace CecSharp void DestroyDelegates() { - if (m_bHasCallbacks) + m_bHasCallbacks = false; + if (m_bDelegatesCreated) { - m_bHasCallbacks = false; - delete m_callbacks; + m_bDelegatesCreated = false; m_logMessageGCHandle.Free(); m_keypressGCHandle.Free(); m_commandGCHandle.Free(); } } + void CreateDelegates() + { + DestroyDelegates(); + + if (!m_bDelegatesCreated) + { + msclr::interop::marshal_context ^ context = gcnew msclr::interop::marshal_context(); + + // create the delegate method for the log message callback + m_logMessageDelegate = gcnew CecLogMessageManagedDelegate(this, &CecCallbackMethods::CecLogMessageManaged); + m_logMessageGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_logMessageDelegate); + g_logCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_logMessageDelegate).ToPointer()); + g_cecCallbacks.CBCecLogMessage = CecLogMessageCB; + + // create the delegate method for the keypress callback + m_keypressDelegate = gcnew CecKeyPressManagedDelegate(this, &CecCallbackMethods::CecKeyPressManaged); + m_keypressGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_keypressDelegate); + g_keyCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_keypressDelegate).ToPointer()); + g_cecCallbacks.CBCecKeyPress = CecKeyPressCB; + + // create the delegate method for the command callback + m_commandDelegate = gcnew CecCommandManagedDelegate(this, &CecCallbackMethods::CecCommandManaged); + m_commandGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_commandDelegate); + g_commandCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_commandDelegate).ToPointer()); + g_cecCallbacks.CBCecCommand = CecCommandCB; + + // create the delegate method for the configuration change callback + m_configDelegate = gcnew CecConfigManagedDelegate(this, &CecCallbackMethods::CecConfigManaged); + m_configGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_configDelegate); + g_configCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_configDelegate).ToPointer()); + g_cecCallbacks.CBCecConfigurationChanged = CecConfigCB; + + delete context; + m_bDelegatesCreated = true; + } + } + CecLogMessageManagedDelegate ^ m_logMessageDelegate; static System::Runtime::InteropServices::GCHandle m_logMessageGCHandle; LOGCB m_logMessageCallback; @@ -799,5 +835,6 @@ namespace CecSharp CecCallbackMethods ^ m_callbacks; bool m_bHasCallbacks; + bool m_bDelegatesCreated; }; }