X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FSLCommandHandler.cpp;h=181e6fcf02a1cc8ade153ba738e72034db9f0d0a;hb=e54fd7d2a2bdb442b5913de9de213518198f92b6;hp=144cfc92d933bd033f4d7ac79908f30eef03770e;hpb=c23380e74349bd4bae7718b66a78a07a51a6f0fe;p=deb_libcec.git diff --git a/src/lib/implementations/SLCommandHandler.cpp b/src/lib/implementations/SLCommandHandler.cpp index 144cfc9..181e6fc 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] == 0xA0) + { + /* enable SL */ + cec_command response; + cec_command::Format(response, m_busDevice->GetLogicalAddress(), 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; +}