+void CSLCommandHandler::HandleVendorCommandSLConnect(const cec_command &command)
+{
+ m_bSLEnabled = true;
+ SetLGDeckStatus();
+
+ CCECBusDevice *primary = m_processor->GetPrimaryDevice();
+
+ primary->SetActiveSource();
+ TransmitImageViewOn(primary->GetLogicalAddress(), command.initiator);
+ TransmitVendorCommand05(primary->GetLogicalAddress(), command.initiator);
+}
+
+void CSLCommandHandler::TransmitVendorCommand05(const cec_logical_address iSource, const cec_logical_address iDestination)
+{
+ cec_command response;
+ cec_command::Format(response, iSource, iDestination, CEC_OPCODE_VENDOR_COMMAND);
+ response.PushBack(SL_COMMAND_CONNECT_ACCEPT);
+ response.PushBack((uint8_t)iSource);
+ Transmit(response, false);
+}
+
+void CSLCommandHandler::SetLGDeckStatus(void)
+{
+ /* LG TVs only route keypresses when the deck status is set to 0x20 */
+ CCECBusDevice *device = m_processor->GetDeviceByType(CEC_DEVICE_TYPE_PLAYBACK_DEVICE);
+ if (device)
+ ((CCECPlaybackDevice *)device)->SetDeckStatus(CEC_DECK_INFO_OTHER_STATUS_LG);
+
+ device = m_processor->GetDeviceByType(CEC_DEVICE_TYPE_RECORDING_DEVICE);
+ if (device)
+ ((CCECPlaybackDevice *)device)->SetDeckStatus(CEC_DECK_INFO_OTHER_STATUS_LG);