X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2FLibCecSharp%2FLibCecSharp.cpp;h=680ccfba6f2ffa51b549e145c202c1c78cb3a97f;hb=466925f5c43536e5fd96632615810da783b78096;hp=4bf39f06354378f82ab4d0fc4f9b13d5b707f33b;hpb=8670c97085f27ad5d7f3fc218247f32332462b1d;p=deb_libcec.git diff --git a/src/LibCecSharp/LibCecSharp.cpp b/src/LibCecSharp/LibCecSharp.cpp index 4bf39f0..680ccfb 100644 --- a/src/LibCecSharp/LibCecSharp.cpp +++ b/src/LibCecSharp/LibCecSharp.cpp @@ -45,13 +45,15 @@ namespace CecSharp public: LibCecSharp(LibCECConfiguration ^config) { - CecCallbackMethods::EnableCallbacks(config->Callbacks); + m_callbacks = config->Callbacks; + CecCallbackMethods::EnableCallbacks(m_callbacks); if (!InitialiseLibCec(config)) throw gcnew Exception("Could not initialise LibCecSharp"); } LibCecSharp(String ^ strDeviceName, CecDeviceTypeList ^ deviceTypes) { + m_callbacks = gcnew CecCallbackMethods(); LibCECConfiguration ^config = gcnew LibCECConfiguration(); config->SetCallbacks(this); config->DeviceName = strDeviceName; @@ -115,6 +117,19 @@ namespace CecSharp } config.bPowerOffScreensaver = netConfig->PowerOffScreensaver ? 1 : 0; config.bPowerOffOnStandby = netConfig->PowerOffOnStandby ? 1 : 0; + + if (netConfig->ServerVersion >= CecServerVersion::Version1_5_1) + config.bSendInactiveSource = netConfig->SendInactiveSource ? 1 : 0; + + if (netConfig->ServerVersion >= CecServerVersion::Version1_6_0) + { + config.bPowerOffDevicesOnStandby = netConfig->PowerOffDevicesOnStandby ? 1 : 0; + config.bShutdownOnStandby = netConfig->ShutdownOnStandby ? 1 : 0; + } + + if (netConfig->ServerVersion >= CecServerVersion::Version1_6_2) + _snprintf_s(config.strDeviceLanguage, 3, context->marshal_as(netConfig->DeviceLanguage)); + config.callbacks = &g_cecCallbacks; } @@ -139,6 +154,8 @@ namespace CecSharp bool Open(String ^ strPort, int iTimeoutMs) { + CecCallbackMethods::EnableCallbacks(m_callbacks); + EnableCallbacks(m_callbacks); marshal_context ^ context = gcnew marshal_context(); const char* strPortC = context->marshal_as(strPort); bool bReturn = m_libCec->Open(strPortC, iTimeoutMs); @@ -334,6 +351,11 @@ namespace CecSharp return (CecPowerStatus) m_libCec->GetDevicePowerStatus((cec_logical_address) logicalAddress); } + void RescanActiveDevices(void) + { + m_libCec->RescanActiveDevices(); + } + CecLogicalAddresses ^ GetActiveDevices(void) { CecLogicalAddresses ^ retVal = gcnew CecLogicalAddresses(); @@ -436,29 +458,7 @@ namespace CecSharp if (m_libCec->GetCurrentConfiguration(&config)) { - configuration->AutodetectAddress = config.bAutodetectAddress == 1; - configuration->BaseDevice = (CecLogicalAddress)config.baseDevice; - configuration->DeviceName = gcnew String(config.strDeviceName); - configuration->HDMIPort = config.iHDMIPort; - configuration->PhysicalAddress = config.iPhysicalAddress; - configuration->PowerOffOnStandby = config.bPowerOffOnStandby == 1; - configuration->PowerOffScreensaver = config.bPowerOffScreensaver == 1; - configuration->ActivateSource = config.bActivateSource == 1; - configuration->TvVendor = (CecVendorId)config.tvVendor; - - configuration->WakeDevices->Clear(); - for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) - if (config.wakeDevices[iPtr]) - configuration->WakeDevices->Set((CecLogicalAddress)iPtr); - - configuration->PowerOffDevices->Clear(); - for (uint8_t iPtr = 0; iPtr <= 16; iPtr++) - if (config.powerOffDevices[iPtr]) - configuration->PowerOffDevices->Set((CecLogicalAddress)iPtr); - - configuration->UseTVMenuLanguage = config.bUseTVMenuLanguage == 1; - for (unsigned int iPtr = 0; iPtr < 5; iPtr++) - configuration->DeviceTypes->Types[iPtr] = (CecDeviceType)config.deviceTypes.types[iPtr]; + configuration->Update(config); return true; } return false; @@ -493,6 +493,31 @@ namespace CecSharp return bReturn; } + bool IsLibCECActiveSource() + { + return m_libCec->IsLibCECActiveSource(); + } + + bool GetDeviceInformation(String ^ port, LibCECConfiguration ^configuration, uint32_t timeoutMs) + { + bool bReturn(false); + marshal_context ^ context = gcnew marshal_context(); + + libcec_configuration config; + config.Clear(); + + const char* strPortC = port->Length > 0 ? context->marshal_as(port) : NULL; + + if (m_libCec->GetDeviceInformation(strPortC, &config, timeoutMs)) + { + configuration->Update(config); + bReturn = true; + } + + delete context; + return bReturn; + } + String ^ ToString(CecLogicalAddress iAddress) { const char *retVal = m_libCec->ToString((cec_logical_address)iAddress); @@ -553,7 +578,20 @@ namespace CecSharp return gcnew String(retVal); } + String ^ ToString(CecClientVersion version) + { + const char *retVal = m_libCec->ToString((cec_client_version)version); + return gcnew String(retVal); + } + + String ^ ToString(CecServerVersion version) + { + const char *retVal = m_libCec->ToString((cec_server_version)version); + return gcnew String(retVal); + } + private: ICECAdapter * m_libCec; + CecCallbackMethods ^ m_callbacks; }; }