X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=inline;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=122c4be1c51e2eaedbc681b9c5b2a163992e67c2;hb=181b347542a6ed9dc1f9ea7bca2051c72b49a9df;hp=d2c6020dd12361f97f3352c4b668202432acfefb;hpb=cf0ecd850f25db418c1127bab8927f0021abb017;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index d2c6020..122c4be 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -99,6 +99,9 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) case CEC_OPCODE_GIVE_SYSTEM_AUDIO_MODE_STATUS: HandleGiveSystemAudioModeStatus(command); break; + case CEC_OPCODE_SYSTEM_AUDIO_MODE_REQUEST: + HandleSetSystemAudioModeRequest(command); + break; default: UnhandledCommand(command); m_busDevice->GetProcessor()->AddCommand(command); @@ -164,19 +167,13 @@ bool CCECCommandHandler::HandleDeviceCecVersion(const cec_command &command) bool CCECCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &command) { - CCECBusDevice *device = GetDevice(command.initiator); - if (device) - device->SetVendorId(command.parameters); - + SetVendorId(command); return true; } bool CCECCommandHandler::HandleDeviceVendorId(const cec_command &command) { - CCECBusDevice *device = GetDevice(command.initiator); - if (device) - device->SetVendorId(command.parameters); - + SetVendorId(command); return true; } @@ -285,7 +282,7 @@ bool CCECCommandHandler::HandleRoutingChange(const cec_command &command) CCECBusDevice *device = GetDevice(command.initiator); if (device) - device->SetPhysicalAddress(iNewAddress, iOldAddress); + device->SetStreamPath(iNewAddress, iOldAddress); } return true; } @@ -323,6 +320,17 @@ bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) return true; } +bool CCECCommandHandler::HandleSetSystemAudioModeRequest(const cec_command &command) +{ + if (command.parameters.size >= 1) + { + CCECBusDevice *device = GetDevice(command.destination); + if (device&& device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM) + return ((CCECAudioSystem *) device)->SetSystemAudioMode(command); + } + return true; +} + bool CCECCommandHandler::HandleGiveSystemAudioModeStatus(const cec_command &command) { CCECBusDevice *device = GetDevice(command.destination); @@ -388,3 +396,21 @@ CCECBusDevice *CCECCommandHandler::GetDeviceByPhysicalAddress(uint16_t iPhysical return device; } + + +void CCECCommandHandler::SetVendorId(const cec_command &command) +{ + if (command.parameters.size < 3) + { + m_busDevice->AddLog(CEC_LOG_WARNING, "invalid vendor ID received"); + return; + } + + uint64_t iVendorId = ((uint64_t)command.parameters[0] << 3) + + ((uint64_t)command.parameters[1] << 2) + + (uint64_t)command.parameters[2]; + + CCECBusDevice *device = GetDevice((cec_logical_address) command.initiator); + if (device) + device->SetVendorId(iVendorId, iVendorId); +}