+ /// <summary>
+ /// Change the deck info, if this adapter is a playback or recording device.
+ /// </summary>
+ /// <param name="info">The new deck info.</param>
+ /// <param name="sendUpdate">True to send the new status over the CEC line.</param>
+ /// <returns>True if set, false otherwise.</returns>
+ bool SetDeckInfo(CecDeckInfo info, bool sendUpdate)
+ {
+ return m_libCec->SetDeckInfo((cec_deck_info) info, sendUpdate);
+ }
+
+ /// <summary>
+ /// Broadcast a message that notifies connected CEC capable devices that this device is no longer the active source.
+ /// </summary>
+ /// <returns>True when the command was sent succesfully, false otherwise.</returns>
+ bool SetInactiveView(void)
+ {
+ return m_libCec->SetInactiveView();
+ }
+
+ /// <summary>
+ /// Change the menu state. This value is already changed by libCEC automatically if a device is (de)activated.
+ /// </summary>
+ /// <param name="state">The new state.</param>
+ /// <param name="sendUpdate">True to send the new status over the CEC line.</param>
+ /// <returns>True if set, false otherwise.</returns>
+ bool SetMenuState(CecMenuState state, bool sendUpdate)
+ {
+ return m_libCec->SetMenuState((cec_menu_state) state, sendUpdate);
+ }
+
+ /// <summary>
+ /// Display a message on the device with the given logical address. Not supported by most TVs.
+ /// </summary>
+ /// <param name="logicalAddress">The logical address of the device to display the message on.</param>
+ /// <param name="duration">The duration of the message</param>
+ /// <param name="message">The message to display.</param>
+ /// <returns>True when the command was sent, false otherwise.</returns>
+ bool SetOSDString(CecLogicalAddress logicalAddress, CecDisplayControl duration, String ^ message)
+ {
+ marshal_context ^ context = gcnew marshal_context();
+ const char* strMessageC = context->marshal_as<const char*>(message);
+
+ bool bReturn = m_libCec->SetOSDString((cec_logical_address) logicalAddress, (cec_display_control) duration, strMessageC);
+
+ delete context;
+ return bReturn;
+ }
+
+ /// <summary>
+ /// Enable or disable monitoring mode, for debugging purposes. If monitoring mode is enabled, libCEC won't respond to any command, but only log incoming data.
+ /// </summary>
+ /// <param name="enable">True to enable, false to disable.</param>
+ /// <returns>True when switched successfully, false otherwise.</returns>
+ bool SwitchMonitoring(bool enable)
+ {
+ return m_libCec->SwitchMonitoring(enable);
+ }
+
+ /// <summary>
+ /// Get the CEC version of the device with the given logical address
+ /// </summary>
+ /// <param name="logicalAddress">The logical address of the device to get the CEC version for.</param>
+ /// <returns>The version or CEC_VERSION_UNKNOWN when the version couldn't be fetched.</returns>
+ CecVersion GetDeviceCecVersion(CecLogicalAddress logicalAddress)
+ {
+ return (CecVersion) m_libCec->GetDeviceCecVersion((cec_logical_address) logicalAddress);
+ }
+
+ /// <summary>
+ /// Get the menu language of the device with the given logical address
+ /// </summary>
+ /// <param name="logicalAddress">The logical address of the device to get the menu language for.</param>
+ /// <returns>The requested menu language.</returns>
+ String ^ GetDeviceMenuLanguage(CecLogicalAddress logicalAddress)
+ {
+ cec_menu_language lang;
+ if (m_libCec->GetDeviceMenuLanguage((cec_logical_address) logicalAddress, &lang))
+ {
+ return gcnew String(lang.language);
+ }
+
+ return gcnew String("");
+ }
+
+ /// <summary>
+ /// Get the vendor ID of the device with the given logical address.
+ /// </summary>
+ /// <param name="logicalAddress">The logical address of the device to get the vendor ID for.</param>
+ /// <returns>The vendor ID or 0 if it wasn't found.</returns>
+ CecVendorId GetDeviceVendorId(CecLogicalAddress logicalAddress)
+ {
+ return (CecVendorId)m_libCec->GetDeviceVendorId((cec_logical_address) logicalAddress);
+ }
+
+ /// <summary>
+ /// Get the power status of the device with the given logical address.
+ /// </summary>
+ /// <param name="logicalAddress">The logical address of the device to get the power status for.</param>
+ /// <returns>The power status or CEC_POWER_STATUS_UNKNOWN if it wasn't found.</returns>
+ CecPowerStatus GetDevicePowerStatus(CecLogicalAddress logicalAddress)
+ {
+ return (CecPowerStatus) m_libCec->GetDevicePowerStatus((cec_logical_address) logicalAddress);
+ }
+
+ /// <summary>
+ /// Tell libCEC to poll for active devices on the bus.
+ /// </summary>
+ void RescanActiveDevices(void)
+ {
+ m_libCec->RescanActiveDevices();
+ }
+
+ /// <summary>
+ /// Get the logical addresses of the devices that are active on the bus, including those handled by libCEC.
+ /// </summary>
+ /// <returns>The logical addresses of the active devices</returns>
+ CecLogicalAddresses ^ GetActiveDevices(void)
+ {
+ CecLogicalAddresses ^ retVal = gcnew CecLogicalAddresses();
+ unsigned int iDevices = 0;
+
+ cec_logical_addresses activeDevices = m_libCec->GetActiveDevices();
+
+ for (uint8_t iPtr = 0; iPtr < 16; iPtr++)
+ if (activeDevices[iPtr])
+ retVal->Addresses[iDevices++] = (CecLogicalAddress)iPtr;
+
+ return retVal;
+ }
+
+ /// <summary>
+ /// Check whether a device is active on the bus.
+ /// </summary>
+ /// <param name="logicalAddress">The address to check.</param>
+ /// <returns>True when active, false otherwise.</returns>
+ bool IsActiveDevice(CecLogicalAddress logicalAddress)
+ {
+ return m_libCec->IsActiveDevice((cec_logical_address)logicalAddress);
+ }
+
+ /// <summary>
+ /// Check whether a device of the given type is active on the bus.
+ /// </summary>
+ /// <param name="type">The type to check.</param>
+ /// <returns>True when active, false otherwise.</returns>
+ bool IsActiveDeviceType(CecDeviceType type)
+ {
+ return m_libCec->IsActiveDeviceType((cec_device_type)type);
+ }
+
+ /// <summary>
+ /// Changes the active HDMI port.
+ /// </summary>
+ /// <param name="address">The device to which this libCEC is connected.</param>
+ /// <param name="port">The new port number.</param>
+ /// <returns>True when changed, false otherwise.</returns>
+ bool SetHDMIPort(CecLogicalAddress address, uint8_t port)
+ {
+ return m_libCec->SetHDMIPort((cec_logical_address)address, port);
+ }
+
+ /// <summary>
+ /// Sends a volume up keypress to an audiosystem if it's present.
+ /// </summary>
+ /// <param name="sendRelease">Send a key release after the keypress.</param>
+ /// <returns>The new audio status.</returns>
+ uint8_t VolumeUp(bool sendRelease)
+ {
+ return m_libCec->VolumeUp(sendRelease);
+ }
+
+ /// <summary>
+ /// Sends a volume down keypress to an audiosystem if it's present.
+ /// </summary>
+ /// <param name="sendRelease">Send a key release after the keypress.</param>
+ /// <returns>The new audio status.</returns>
+ uint8_t VolumeDown(bool sendRelease)
+ {
+ return m_libCec->VolumeDown(sendRelease);
+ }
+
+ /// <summary>
+ /// Sends a mute keypress to an audiosystem if it's present.
+ /// </summary>
+ /// <param name="sendRelease">Send a key release after the keypress.</param>
+ /// <returns>The new audio status.</returns>
+ uint8_t MuteAudio(bool sendRelease)
+ {
+ return m_libCec->MuteAudio(sendRelease);
+ }
+
+ /// <summary>
+ /// Send a keypress to a device on the CEC bus.
+ /// </summary>
+ /// <param name="destination">The logical address of the device to send the message to.</param>
+ /// <param name="key">The key to send.</param>
+ /// <param name="wait">True to wait for a response, false otherwise.</param>
+ /// <returns>True when the keypress was acked, false otherwise.</returns>
+ bool SendKeypress(CecLogicalAddress destination, CecUserControlCode key, bool wait)
+ {
+ return m_libCec->SendKeypress((cec_logical_address)destination, (cec_user_control_code)key, wait);
+ }
+
+ /// <summary>
+ /// Send a key release to a device on the CEC bus.
+ /// </summary>
+ /// <param name="destination">The logical address of the device to send the message to.</param>
+ /// <param name="wait">True to wait for a response, false otherwise.</param>
+ /// <returns>True when the key release was acked, false otherwise.</returns>
+ bool SendKeyRelease(CecLogicalAddress destination, bool wait)
+ {
+ return m_libCec->SendKeyRelease((cec_logical_address)destination, wait);
+ }
+
+ /// <summary>
+ /// Get the OSD name of a device on the CEC bus.
+ /// </summary>
+ /// <param name="logicalAddress">The logical address of the device to get the OSD name for.</param>
+ /// <returns>The OSD name.</returns>
+ String ^ GetDeviceOSDName(CecLogicalAddress logicalAddress)
+ {
+ cec_osd_name osd = m_libCec->GetDeviceOSDName((cec_logical_address) logicalAddress);
+ return gcnew String(osd.name);
+ }
+
+ /// <summary>
+ /// Get the logical address of the device that is currently the active source on the CEC bus.
+ /// </summary>
+ /// <returns>The active source or CECDEVICE_UNKNOWN when unknown.</returns>
+ CecLogicalAddress GetActiveSource()
+ {
+ return (CecLogicalAddress)m_libCec->GetActiveSource();
+ }
+
+ /// <summary>
+ /// Check whether a device is currently the active source on the CEC bus.
+ /// </summary>
+ /// <param name="logicalAddress">The logical address of the device to check.</param>
+ /// <returns>True when it is the active source, false otherwise.</returns>
+ bool IsActiveSource(CecLogicalAddress logicalAddress)
+ {
+ return m_libCec->IsActiveSource((cec_logical_address)logicalAddress);
+ }
+
+ /// <summary>
+ /// Get the physical address of the device with the given logical address.
+ /// </summary>
+ /// <param name="address">The logical address of the device to get the physical address for.</param>
+ /// <returns>The physical address or 0 if it wasn't found.</returns>
+ uint16_t GetDevicePhysicalAddress(CecLogicalAddress address)
+ {
+ return m_libCec->GetDevicePhysicalAddress((cec_logical_address)address);
+ }
+
+ /// <summary>
+ /// Sets the stream path to the device on the given logical address.
+ /// </summary>
+ /// <param name="address">The address to activate.</param>
+ /// <returns>True when the command was sent, false otherwise.</returns>
+ bool SetStreamPath(CecLogicalAddress address)
+ {
+ return m_libCec->SetStreamPath((cec_logical_address)address);
+ }
+
+ /// <summary>
+ /// Sets the stream path to the device on the given physical address.
+ /// </summary>
+ /// <param name="physicalAddress">The address to activate.</param>
+ /// <returns>True when the command was sent, false otherwise.</returns>
+ bool SetStreamPath(uint16_t physicalAddress)
+ {
+ return m_libCec->SetStreamPath(physicalAddress);
+ }
+
+ /// <summary>
+ /// Get the list of logical addresses that libCEC is controlling
+ /// </summary>
+ /// <returns>The list of logical addresses that libCEC is controlling</returns>
+ CecLogicalAddresses ^GetLogicalAddresses(void)
+ {
+ CecLogicalAddresses ^addr = gcnew CecLogicalAddresses();
+ cec_logical_addresses libAddr = m_libCec->GetLogicalAddresses();
+ for (unsigned int iPtr = 0; iPtr < 16; iPtr++)
+ addr->Addresses[iPtr] = (CecLogicalAddress)libAddr.addresses[iPtr];
+ addr->Primary = (CecLogicalAddress)libAddr.primary;
+ return addr;
+ }
+
+ /// <summary>
+ /// Get libCEC's current configuration.
+ /// </summary>
+ /// <param name="configuration">The configuration.</param>
+ /// <returns>True when the configuration was updated, false otherwise.</returns>
+ bool GetCurrentConfiguration(LibCECConfiguration ^configuration)
+ {
+ libcec_configuration config;
+ config.Clear();
+
+ if (m_libCec->GetCurrentConfiguration(&config))
+ {
+ configuration->Update(config);
+ return true;
+ }
+ return false;
+ }
+
+ /// <summary>
+ /// Check whether the CEC adapter can persist a configuration.
+ /// </summary>
+ /// <returns>True when this CEC adapter can persist the user configuration, false otherwise.</returns>