X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2FLibCecSharp%2FCecSharpTypes.h;h=9be7ab5b87b64285b63e5bde5290a3e51f86e4ba;hb=dbad810a5713fdd10c3aece6f3bedf39c83be826;hp=cc888c79ad320646b1bb9139b3d6803736d62bdf;hpb=6e919697bd058e0549f34b4fdb74bd5924a7db75;p=deb_libcec.git diff --git a/src/LibCecSharp/CecSharpTypes.h b/src/LibCecSharp/CecSharpTypes.h index cc888c7..9be7ab5 100644 --- a/src/LibCecSharp/CecSharpTypes.h +++ b/src/LibCecSharp/CecSharpTypes.h @@ -247,6 +247,7 @@ namespace CecSharp F5 = 0x75, Data = 0x76, Max = 0x76, + SamsungReturn = 0x91, Unknown }; @@ -350,20 +351,28 @@ namespace CecSharp { VersionPre1_5 = 0, Version1_5_0 = 0x1500, - Version1_5_1 = 0x1501, - Version1_5_2 = 0x1502, - Version1_5_3 = 0x1503, - Version1_6_0 = 0x1600 + Version1_5_1 = 0x1501, + Version1_5_2 = 0x1502, + Version1_5_3 = 0x1503, + Version1_6_0 = 0x1600, + Version1_6_1 = 0x1601, + Version1_6_2 = 0x1602, + Version1_6_3 = 0x1603, + Version1_7_0 = 0x1700 }; - public enum class CecServerVersion + public enum class CecServerVersion { VersionPre1_5 = 0, Version1_5_0 = 0x1500, - Version1_5_1 = 0x1501, - Version1_5_2 = 0x1502, - Version1_5_3 = 0x1503, - Version1_6_0 = 0x1600 + Version1_5_1 = 0x1501, + Version1_5_2 = 0x1502, + Version1_5_3 = 0x1503, + Version1_6_0 = 0x1600, + Version1_6_1 = 0x1601, + Version1_6_2 = 0x1602, + Version1_6_3 = 0x1603, + Version1_7_0 = 0x1700 }; public ref class CecAdapter @@ -504,7 +513,7 @@ namespace CecSharp public ref class CecKeypress { public: - CecKeypress(int iKeycode, unsigned int iDuration) + CecKeypress(CecUserControlCode iKeycode, unsigned int iDuration) { Keycode = iKeycode; Duration = iDuration; @@ -513,14 +522,14 @@ namespace CecSharp CecKeypress(void) { - Keycode = 0; + Keycode = CecUserControlCode::Unknown; Duration = 0; Empty = true; } - property bool Empty; - property int Keycode; - property unsigned int Duration; + property bool Empty; + property CecUserControlCode Keycode; + property unsigned int Duration; }; public ref class CecLogMessage @@ -578,10 +587,13 @@ 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; - LogicalAddresses = gcnew CecLogicalAddresses(); - FirmwareVersion = 1; - PowerOffDevicesOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_DEVICES_STANDBY == 1; + + SendInactiveSource = CEC_DEFAULT_SETTING_SEND_INACTIVE_SOURCE == 1; + LogicalAddresses = gcnew CecLogicalAddresses(); + FirmwareVersion = 1; + PowerOffDevicesOnStandby = CEC_DEFAULT_SETTING_POWER_OFF_DEVICES_STANDBY == 1; + ShutdownOnStandby = CEC_DEFAULT_SETTING_SHUTDOWN_ON_STANDBY == 1; + DeviceLanguage = ""; } void SetCallbacks(CecCallbackMethods ^callbacks) @@ -622,22 +634,29 @@ namespace CecSharp PowerOffScreensaver = config.bPowerOffScreensaver == 1; PowerOffOnStandby = config.bPowerOffOnStandby == 1; - if (ServerVersion >= CecServerVersion::Version1_5_1) - SendInactiveSource = config.bSendInactiveSource == 1; + if (ServerVersion >= CecServerVersion::Version1_5_1) + SendInactiveSource = config.bSendInactiveSource == 1; - if (ServerVersion >= CecServerVersion::Version1_5_3) - { - LogicalAddresses->Clear(); - for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) - if (config.logicalAddresses[iPtr]) - LogicalAddresses->Set((CecLogicalAddress)iPtr); - } + if (ServerVersion >= CecServerVersion::Version1_5_3) + { + LogicalAddresses->Clear(); + for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) + if (config.logicalAddresses[iPtr]) + LogicalAddresses->Set((CecLogicalAddress)iPtr); + } - if (ServerVersion >= CecServerVersion::Version1_6_0) - { - FirmwareVersion = config.iFirmwareVersion; - PowerOffDevicesOnStandby = config.bPowerOffDevicesOnStandby == 1; - } + if (ServerVersion >= CecServerVersion::Version1_6_0) + { + FirmwareVersion = config.iFirmwareVersion; + PowerOffDevicesOnStandby = config.bPowerOffDevicesOnStandby == 1; + ShutdownOnStandby = config.bShutdownOnStandby == 1; + } + + if (ServerVersion >= CecServerVersion::Version1_6_2) + DeviceLanguage = gcnew System::String(config.strDeviceLanguage); + + if (ServerVersion >= CecServerVersion::Version1_6_3) + MonitorOnlyClient = config.bMonitorOnly == 1; } property System::String ^ DeviceName; @@ -658,11 +677,13 @@ namespace CecSharp property CecLogicalAddresses ^PowerOffDevices; property bool PowerOffScreensaver; property bool PowerOffOnStandby; - property bool SendInactiveSource; - property CecLogicalAddresses ^LogicalAddresses; - property uint16_t FirmwareVersion; - property bool PowerOffDevicesOnStandby; - + property bool SendInactiveSource; + property CecLogicalAddresses ^LogicalAddresses; + property uint16_t FirmwareVersion; + property bool PowerOffDevicesOnStandby; + property bool ShutdownOnStandby; + property bool MonitorOnlyClient; + property System::String ^ DeviceLanguage; property CecCallbackMethods ^ Callbacks; }; @@ -674,12 +695,14 @@ namespace CecSharp typedef int (__stdcall *COMMANDCB)(const CEC::cec_command &command); typedef int (__stdcall *CONFIGCB) (const CEC::libcec_configuration &config); typedef int (__stdcall *ALERTCB) (const CEC::libcec_alert, const CEC::libcec_parameter &data); + typedef int (__stdcall *MENUCB) (const CEC::cec_menu_state newVal); static LOGCB g_logCB; static KEYCB g_keyCB; static COMMANDCB g_commandCB; static CONFIGCB g_configCB; static ALERTCB g_alertCB; + static MENUCB g_menuCB; static CEC::ICECCallbacks g_cecCallbacks; int CecLogMessageCB(void *cbParam, const CEC::cec_log_message &message) @@ -717,6 +740,13 @@ namespace CecSharp return 0; } + int CecMenuCB(void *cbParam, const CEC::cec_menu_state newVal) + { + if (g_menuCB) + return g_menuCB(newVal); + return 0; + } + #pragma managed // delegates for the unmanaged callback methods public delegate int CecLogMessageManagedDelegate(const CEC::cec_log_message &); @@ -724,6 +754,7 @@ namespace CecSharp public delegate int CecCommandManagedDelegate(const CEC::cec_command &); public delegate int CecConfigManagedDelegate(const CEC::libcec_configuration &); public delegate int CecAlertManagedDelegate(const CEC::libcec_alert, const CEC::libcec_parameter &); + public delegate int CecMenuManagedDelegate(const CEC::cec_menu_state newVal); // callback method interface public ref class CecCallbackMethods @@ -790,6 +821,11 @@ namespace CecSharp return 0; } + virtual int ReceiveMenuStateChange(CecMenuState newVal) + { + return 0; + } + protected: // managed callback methods int CecLogMessageManaged(const CEC::cec_log_message &message) @@ -804,7 +840,7 @@ namespace CecSharp { int iReturn(0); if (m_bHasCallbacks) - iReturn = m_callbacks->ReceiveKeypress(gcnew CecKeypress(key.keycode, key.duration)); + iReturn = m_callbacks->ReceiveKeypress(gcnew CecKeypress((CecUserControlCode)key.keycode, key.duration)); return iReturn; } @@ -849,6 +885,16 @@ namespace CecSharp return iReturn; } + int CecMenuManaged(const CEC::cec_menu_state newVal) + { + int iReturn(0); + if (m_bHasCallbacks) + { + iReturn = m_callbacks->ReceiveMenuStateChange((CecMenuState)newVal); + } + return iReturn; + } + void DestroyDelegates() { m_bHasCallbacks = false; @@ -858,6 +904,8 @@ namespace CecSharp m_logMessageGCHandle.Free(); m_keypressGCHandle.Free(); m_commandGCHandle.Free(); + m_alertGCHandle.Free(); + m_menuGCHandle.Free(); } } @@ -899,6 +947,12 @@ namespace CecSharp g_alertCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_alertDelegate).ToPointer()); g_cecCallbacks.CBCecAlert = CecAlertCB; + // create the delegate method for the menu callback + m_menuDelegate = gcnew CecMenuManagedDelegate(this, &CecCallbackMethods::CecMenuManaged); + m_menuGCHandle = System::Runtime::InteropServices::GCHandle::Alloc(m_menuDelegate); + g_menuCB = static_cast(System::Runtime::InteropServices::Marshal::GetFunctionPointerForDelegate(m_menuDelegate).ToPointer()); + g_cecCallbacks.CBCecMenuStateChanged = CecMenuCB; + delete context; m_bDelegatesCreated = true; } @@ -924,6 +978,10 @@ namespace CecSharp static System::Runtime::InteropServices::GCHandle m_alertGCHandle; CONFIGCB m_alertCallback; + CecMenuManagedDelegate ^ m_menuDelegate; + static System::Runtime::InteropServices::GCHandle m_menuGCHandle; + MENUCB m_menuCallback; + CecCallbackMethods ^ m_callbacks; bool m_bHasCallbacks; bool m_bDelegatesCreated;