X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=ac00ebf86ab18e9957ce66fcd1a5d9d09d6cb77a;hb=d4052f0befbe5b7f1867611c66a5fa5ee4ea7fbf;hp=e1d34f688acd8f62492a4700b9a0626addc1a6a3;hpb=09c10b66e7700acd20c62eb3a553fe2d36a6907e;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index e1d34f6..ac00ebf 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -49,6 +49,16 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) { switch(command.opcode) { + case CEC_OPCODE_REPORT_POWER_STATUS: + HandleReportPowerStatus(command); + break; + case CEC_OPCODE_CEC_VERSION: + HandleDeviceCecVersion(command); + break; + case CEC_OPCODE_SET_MENU_LANGUAGE: + HandleSetMenuLanguage(command); + m_busDevice->GetProcessor()->AddCommand(command); + break; case CEC_OPCODE_GIVE_PHYSICAL_ADDRESS: HandleGivePhysicalAddress(command); break; @@ -84,6 +94,7 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) break; default: UnhandledCommand(command); + m_busDevice->GetProcessor()->AddCommand(command); bHandled = false; break; } @@ -93,14 +104,20 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) CStdString strLog; switch (command.opcode) { + case CEC_OPCODE_SET_MENU_LANGUAGE: + HandleSetMenuLanguage(command); + m_busDevice->GetProcessor()->AddCommand(command); + break; case CEC_OPCODE_REQUEST_ACTIVE_SOURCE: HandleRequestActiveSource(command); break; case CEC_OPCODE_SET_STREAM_PATH: HandleSetStreamPath(command); + m_busDevice->GetProcessor()->AddCommand(command); break; case CEC_OPCODE_ROUTING_CHANGE: HandleRoutingChange(command); + m_busDevice->GetProcessor()->AddCommand(command); break; case CEC_OPCODE_DEVICE_VENDOR_ID: HandleDeviceVendorId(command); @@ -110,6 +127,7 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) break; default: UnhandledCommand(command); + m_busDevice->GetProcessor()->AddCommand(command); bHandled = false; break; } @@ -125,13 +143,25 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) return bHandled; } +bool CCECCommandHandler::HandleDeviceCecVersion(const cec_command &command) +{ + if (command.parameters.size == 1) + { + CCECBusDevice *device = GetDevice(command.initiator); + if (device) + device->SetCecVersion((cec_version) command.parameters[0]); + } + + return true; +} + bool CCECCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &command) { CCECBusDevice *device = GetDevice(command.initiator); if (device) device->SetVendorId(command.parameters); - return false; + return true; } bool CCECCommandHandler::HandleDeviceVendorId(const cec_command &command) @@ -140,7 +170,7 @@ bool CCECCommandHandler::HandleDeviceVendorId(const cec_command &command) if (device) device->SetVendorId(command.parameters); - return false; + return true; } bool CCECCommandHandler::HandleGetCecVersion(const cec_command &command) @@ -208,6 +238,17 @@ bool CCECCommandHandler::HandleMenuRequest(const cec_command &command) return false; } +bool CCECCommandHandler::HandleReportPowerStatus(const cec_command &command) +{ + if (command.parameters.size == 1) + { + CCECBusDevice *device = GetDevice(command.initiator); + if (device) + device->SetPowerStatus((cec_power_status) command.parameters[0]); + } + return true; +} + bool CCECCommandHandler::HandleRequestActiveSource(const cec_command &command) { CStdString strLog; @@ -233,6 +274,24 @@ bool CCECCommandHandler::HandleRoutingChange(const cec_command &command) return true; } +bool CCECCommandHandler::HandleSetMenuLanguage(const cec_command &command) +{ + if (command.parameters.size == 3) + { + CCECBusDevice *device = GetDevice(command.initiator); + if (device) + { + cec_menu_language language; + language.device = command.initiator; + for (uint8_t iPtr = 0; iPtr < 4; iPtr++) + language.language[iPtr] = command.parameters[iPtr]; + language.language[3] = 0; + device->SetMenuLanguage(language); + } + } + return true; +} + bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) { if (command.parameters.size >= 2) @@ -278,7 +337,9 @@ bool CCECCommandHandler::HandleUserControlRelease(const cec_command &command) void CCECCommandHandler::UnhandledCommand(const cec_command &command) { - m_busDevice->GetProcessor()->AddCommand(command); + CStdString strLog; + strLog.Format("unhandled command with opcode %02x from address %d", command.opcode, command.initiator); + m_busDevice->AddLog(CEC_LOG_DEBUG, strLog); } CCECBusDevice *CCECCommandHandler::GetDevice(cec_logical_address iLogicalAddress) const