X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=333b71b1ab12817d6927ff1ffbc4eae252717fd2;hb=a24c27d3704d6934f4ea68d093453e68246a9de0;hp=a23ba660ff79c6d0fd397bec5da2ce90a435650f;hpb=907bd60fcc86277c286ec43f694a19798754d413;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index a23ba66..333b71b 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -129,14 +129,24 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) case CEC_OPCODE_REPORT_PHYSICAL_ADDRESS: HandleReportPhysicalAddress(command); break; + case CEC_OPCODE_REPORT_AUDIO_STATUS: + HandleReportAudioStatus(command); + break; + case CEC_OPCODE_SYSTEM_AUDIO_MODE_STATUS: + HandleSystemAudioStatus(command); + break; + case CEC_OPCODE_SET_OSD_NAME: + HandleSetOSDName(command); + break; default: UnhandledCommand(command); - if (command.destination == CECDEVICE_BROADCAST || m_busDevice->MyLogicalAddressContains(command.destination)) - m_busDevice->GetProcessor()->AddCommand(command); bHandled = false; break; } + if (command.destination == CECDEVICE_BROADCAST || m_busDevice->MyLogicalAddressContains(command.destination)) + m_busDevice->GetProcessor()->AddCommand(command); + return bHandled; } @@ -144,8 +154,6 @@ bool CCECCommandHandler::HandleActiveSource(const cec_command &command) { if (command.parameters.size == 2) { - m_busDevice->GetProcessor()->AddCommand(command); - uint16_t iAddress = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]); return m_busDevice->GetProcessor()->SetStreamPath(iAddress); } @@ -158,8 +166,6 @@ bool CCECCommandHandler::HandleDeckControl(const cec_command &command) CCECBusDevice *device = GetDevice(command.destination); if (device && (device->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE || device->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE) && command.parameters.size > 0) { - m_busDevice->GetProcessor()->AddCommand(command); - ((CCECPlaybackDevice *) device)->SetDeckControlMode((cec_deck_control_mode) command.parameters[0]); return true; } @@ -181,8 +187,6 @@ bool CCECCommandHandler::HandleDeviceCecVersion(const cec_command &command) bool CCECCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &command) { - SetVendorId(command); - if (m_busDevice->MyLogicalAddressContains(command.destination)) m_busDevice->GetProcessor()->TransmitAbort(command.initiator, command.opcode, CEC_ABORT_REASON_REFUSED); @@ -289,23 +293,34 @@ bool CCECCommandHandler::HandleMenuRequest(const cec_command &command) if (device) return device->TransmitMenuState(command.initiator); } - else + } + + return false; +} + +bool CCECCommandHandler::HandleReportAudioStatus(const cec_command &command) +{ + if (command.parameters.size == 1) + { + CCECBusDevice *device = GetDevice(command.initiator); + if (device && device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM) { - m_busDevice->GetProcessor()->AddCommand(command); + ((CCECAudioSystem *)device)->SetAudioStatus(command.parameters[0]); + return true; } } - return false; } bool CCECCommandHandler::HandleReportPhysicalAddress(const cec_command &command) { - if (command.parameters.size == 2) + if (command.parameters.size == 3) { uint16_t iNewAddress = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]); + cec_device_type type = (cec_device_type)command.parameters[2]; CCECBusDevice *device = GetDevice(command.initiator); - if (device) + if (device && device->GetType() == type) device->SetPhysicalAddress(iNewAddress); } return true; @@ -357,8 +372,13 @@ bool CCECCommandHandler::HandleRoutingInformation(const cec_command &command) CCECBusDevice *device = GetDevice(command.initiator); if (device) + { device->SetPhysicalAddress(iNewAddress); + return true; + } } + + return false; } bool CCECCommandHandler::HandleSetMenuLanguage(const cec_command &command) @@ -374,12 +394,31 @@ bool CCECCommandHandler::HandleSetMenuLanguage(const cec_command &command) language.language[iPtr] = command.parameters[iPtr]; language.language[3] = 0; device->SetMenuLanguage(language); + return true; + } + } + return false; +} - if (m_busDevice->MyLogicalAddressContains(command.destination)) - m_busDevice->GetProcessor()->AddCommand(command); +bool CCECCommandHandler::HandleSetOSDName(const cec_command &command) +{ + if (command.parameters.size > 0) + { + CCECBusDevice *device = GetDevice(command.initiator); + if (device) + { + char buf[1024]; + for (uint8_t iPtr = 0; iPtr < command.parameters.size; iPtr++) + buf[iPtr] = (char)command.parameters[iPtr]; + buf[command.parameters.size] = 0; + + CStdString strName(buf); + device->SetOSDName(strName); + + return true; } } - return true; + return false; } bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) @@ -400,9 +439,8 @@ bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) device->TransmitMenuState(command.initiator); } } - return false; } - return true; + return false; } bool CCECCommandHandler::HandleSetSystemAudioModeRequest(const cec_command &command) @@ -422,11 +460,21 @@ bool CCECCommandHandler::HandleStandby(const cec_command &command) if (device) device->SetPowerStatus(CEC_POWER_STATUS_STANDBY); - m_busDevice->GetProcessor()->AddCommand(command); - return true; } +bool CCECCommandHandler::HandleSystemAudioStatus(const cec_command &command) +{ + CCECBusDevice *device = GetDevice(command.initiator); + if (device && device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM) + { + ((CCECAudioSystem *)device)->SetSystemAudioMode(command); + return true; + } + + return false; +} + bool CCECCommandHandler::HandleGiveSystemAudioModeStatus(const cec_command &command) { if (m_busDevice->MyLogicalAddressContains(command.destination)) @@ -460,9 +508,10 @@ bool CCECCommandHandler::HandleUserControlPressed(const cec_command &command) } m_busDevice->GetProcessor()->SetCurrentButton((cec_user_control_code) command.parameters[0]); + return true; } } - return true; + return false; } bool CCECCommandHandler::HandleUserControlRelease(const cec_command &command)