X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FSLCommandHandler.cpp;h=40c0066ad3d400f0467a8ac956f32b43e5b17cc3;hb=9f332fe262328ff230ae4ea69004f8f2e9f61e6f;hp=144cfc92d933bd033f4d7ac79908f30eef03770e;hpb=722869e27e6f6ef9db09fa9114994e167b7e8894;p=deb_libcec.git diff --git a/src/lib/implementations/SLCommandHandler.cpp b/src/lib/implementations/SLCommandHandler.cpp index 144cfc9..40c0066 100644 --- a/src/lib/implementations/SLCommandHandler.cpp +++ b/src/lib/implementations/SLCommandHandler.cpp @@ -31,6 +31,8 @@ */ #include "SLCommandHandler.h" +#include "../devices/CECBusDevice.h" +#include "../CECProcessor.h" using namespace CEC; @@ -38,3 +40,51 @@ CSLCommandHandler::CSLCommandHandler(CCECBusDevice *busDevice) : CCECCommandHandler(busDevice) { } + +bool CSLCommandHandler::HandleVendorCommand(const cec_command &command) +{ + if (command.parameters.size == 1 && + command.parameters[0] == 0x01) + { + /* enable SL */ + cec_command response; + cec_command::Format(response, command.destination, command.initiator, CEC_OPCODE_VENDOR_COMMAND); + response.PushBack(0x02); + response.PushBack(0x05); + + return m_busDevice->GetProcessor()->Transmit(response); + } + + return false; +} + +bool CSLCommandHandler::HandleGiveDeviceVendorId(const cec_command &command) +{ + /* imitate LG devices */ + CCECBusDevice *device = GetDevice(command.destination); + if (device) + device->SetVendorId(CEC_VENDOR_LG); + + return CCECCommandHandler::HandleGiveDeviceVendorId(command); +} + +bool CSLCommandHandler::HandleCommand(const cec_command &command) +{ + bool bHandled(false); + if (m_busDevice->MyLogicalAddressContains(command.destination)) + { + switch(command.opcode) + { + case CEC_OPCODE_VENDOR_COMMAND: + bHandled = HandleVendorCommand(command); + break; + default: + break; + } + } + + if (!bHandled) + bHandled = CCECCommandHandler::HandleCommand(command); + + return bHandled; +}