X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fimplementations%2FCECCommandHandler.cpp;h=7be147d8ab49f1775b10b87538bb8d361cc7bcb2;hb=ded7e7cea9571381bef47bb2f2fb0e5266671914;hp=d407e40221df6aad75f61c354ee5d8ddca96a455;hpb=f00ff009cfc5dfefdf09ca241b9560e74575b3f5;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.cpp b/src/lib/implementations/CECCommandHandler.cpp index d407e40..7be147d 100644 --- a/src/lib/implementations/CECCommandHandler.cpp +++ b/src/lib/implementations/CECCommandHandler.cpp @@ -1,7 +1,7 @@ /* * This file is part of the libCEC(R) library. * - * libCEC(R) is Copyright (C) 2011 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved. * libCEC(R) is an original work, containing original code. * * libCEC(R) is a trademark of Pulse-Eight Limited. @@ -35,6 +35,7 @@ #include "../devices/CECAudioSystem.h" #include "../devices/CECPlaybackDevice.h" #include "../CECProcessor.h" +#include "../LibCEC.h" using namespace CEC; using namespace std; @@ -66,11 +67,7 @@ bool CCECCommandHandler::HandleCommand(const cec_command &command) bool bHandled(true); MarkBusy(); - CStdString strLog; - strLog.Format(">> %s (%X) -> %s (%X): %s (%2X)", m_processor->ToString(command.initiator), command.initiator, m_processor->ToString(command.destination), command.destination, m_processor->ToString(command.opcode), command.opcode); - m_busDevice->AddLog(CEC_LOG_NOTICE, strLog); - - m_processor->AddCommand(command); + CLibCEC::AddCommand(command); switch(command.opcode) { @@ -242,7 +239,7 @@ bool CCECCommandHandler::HandleDeviceCecVersion(const cec_command &command) bool CCECCommandHandler::HandleDeviceVendorCommandWithId(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) m_processor->TransmitAbort(command.initiator, command.opcode, CEC_ABORT_REASON_REFUSED); return true; @@ -264,7 +261,7 @@ bool CCECCommandHandler::HandleFeatureAbort(const cec_command &command) bool CCECCommandHandler::HandleGetCecVersion(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device) @@ -276,7 +273,7 @@ bool CCECCommandHandler::HandleGetCecVersion(const cec_command &command) bool CCECCommandHandler::HandleGiveAudioStatus(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device && device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM) @@ -288,7 +285,7 @@ bool CCECCommandHandler::HandleGiveAudioStatus(const cec_command &command) bool CCECCommandHandler::HandleGiveDeckStatus(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device && (device->GetType() == CEC_DEVICE_TYPE_PLAYBACK_DEVICE || device->GetType() == CEC_DEVICE_TYPE_RECORDING_DEVICE)) @@ -300,7 +297,7 @@ bool CCECCommandHandler::HandleGiveDeckStatus(const cec_command &command) bool CCECCommandHandler::HandleGiveDevicePowerStatus(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device) @@ -312,7 +309,7 @@ bool CCECCommandHandler::HandleGiveDevicePowerStatus(const cec_command &command) bool CCECCommandHandler::HandleGiveDeviceVendorId(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device) @@ -324,7 +321,7 @@ bool CCECCommandHandler::HandleGiveDeviceVendorId(const cec_command &command) bool CCECCommandHandler::HandleGiveOSDName(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device) @@ -336,7 +333,7 @@ bool CCECCommandHandler::HandleGiveOSDName(const cec_command &command) bool CCECCommandHandler::HandleGivePhysicalAddress(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device) @@ -352,7 +349,7 @@ bool CCECCommandHandler::HandleGivePhysicalAddress(const cec_command &command) bool CCECCommandHandler::HandleGiveSystemAudioModeStatus(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device && device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM) @@ -370,7 +367,7 @@ bool CCECCommandHandler::HandleImageViewOn(const cec_command &command) bool CCECCommandHandler::HandleMenuRequest(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { if (command.parameters[0] == CEC_MENU_REQUEST_TYPE_QUERY) { @@ -420,11 +417,9 @@ bool CCECCommandHandler::HandleReportPowerStatus(const cec_command &command) bool CCECCommandHandler::HandleRequestActiveSource(const cec_command &command) { - if (m_processor->IsStarted()) + if (m_processor->IsRunning()) { - CStdString strLog; - strLog.Format(">> %i requests active source", (uint8_t) command.initiator); - m_busDevice->AddLog(CEC_LOG_DEBUG, strLog.c_str()); + CLibCEC::AddLog(CEC_LOG_DEBUG, ">> %i requests active source", (uint8_t) command.initiator); vector devices; for (size_t iDevicePtr = 0; iDevicePtr < GetMyDevices(devices); iDevicePtr++) @@ -502,12 +497,10 @@ bool CCECCommandHandler::HandleSetOSDName(const cec_command &command) bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) { - if (m_processor->IsStarted() && command.parameters.size >= 2) + if (m_processor->IsRunning() && command.parameters.size >= 2) { uint16_t iStreamAddress = ((uint16_t)command.parameters[0] << 8) | ((uint16_t)command.parameters[1]); - CStdString strLog; - strLog.Format(">> %i sets stream path to physical address %04x", command.initiator, iStreamAddress); - m_busDevice->AddLog(CEC_LOG_DEBUG, strLog.c_str()); + CLibCEC::AddLog(CEC_LOG_DEBUG, ">> %i sets stream path to physical address %04x", command.initiator, iStreamAddress); /* one of the device handled by libCEC has been made active */ CCECBusDevice *device = GetDeviceByPhysicalAddress(iStreamAddress); @@ -515,6 +508,9 @@ bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) { device->SetActiveSource(); device->TransmitActiveSource(); + + device->SetMenuState(CEC_MENU_STATE_ACTIVATED); + device->TransmitMenuState(command.initiator); } } return false; @@ -522,7 +518,7 @@ bool CCECCommandHandler::HandleSetStreamPath(const cec_command &command) bool CCECCommandHandler::HandleSystemAudioModeRequest(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) { CCECBusDevice *device = GetDevice(command.destination); if (device && device->GetType() == CEC_DEVICE_TYPE_AUDIO_SYSTEM) @@ -594,16 +590,12 @@ bool CCECCommandHandler::HandleTextViewOn(const cec_command &command) bool CCECCommandHandler::HandleUserControlPressed(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination) && command.parameters.size > 0) + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination) && command.parameters.size > 0) { - m_processor->AddKey(); + CLibCEC::AddKey(); if (command.parameters[0] <= CEC_USER_CONTROL_CODE_MAX) { - CStdString strLog; - strLog.Format("key pressed: %x", command.parameters[0]); - m_busDevice->AddLog(CEC_LOG_DEBUG, strLog.c_str()); - if (command.parameters[0] == CEC_USER_CONTROL_CODE_POWER || command.parameters[0] == CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION) { @@ -624,7 +616,7 @@ bool CCECCommandHandler::HandleUserControlPressed(const cec_command &command) } else { - m_processor->SetCurrentButton((cec_user_control_code) command.parameters[0]); + CLibCEC::SetCurrentButton((cec_user_control_code) command.parameters[0]); } return true; } @@ -634,8 +626,8 @@ bool CCECCommandHandler::HandleUserControlPressed(const cec_command &command) bool CCECCommandHandler::HandleUserControlRelease(const cec_command &command) { - if (m_processor->IsStarted() && m_busDevice->MyLogicalAddressContains(command.destination)) - m_processor->AddKey(); + if (m_processor->IsRunning() && m_busDevice->MyLogicalAddressContains(command.destination)) + CLibCEC::AddKey(); return true; } @@ -647,9 +639,7 @@ bool CCECCommandHandler::HandleVendorCommand(const cec_command & UNUSED(command) void CCECCommandHandler::UnhandledCommand(const cec_command &command) { - CStdString strLog; - strLog.Format("unhandled command with opcode %02x from address %d", command.opcode, command.initiator); - m_busDevice->AddLog(CEC_LOG_DEBUG, strLog); + CLibCEC::AddLog(CEC_LOG_DEBUG, "unhandled command with opcode %02x from address %d", command.opcode, command.initiator); } size_t CCECCommandHandler::GetMyDevices(vector &devices) const @@ -694,7 +684,7 @@ bool CCECCommandHandler::SetVendorId(const cec_command &command) bool bChanged(false); if (command.parameters.size < 3) { - m_busDevice->AddLog(CEC_LOG_WARNING, "invalid vendor ID received"); + CLibCEC::AddLog(CEC_LOG_WARNING, "invalid vendor ID received"); return bChanged; } @@ -724,19 +714,6 @@ void CCECCommandHandler::SetPhysicalAddress(cec_logical_address iAddress, uint16 } } -void CCECCommandHandler::HandlePoll(const cec_logical_address iInitiator, const cec_logical_address iDestination) -{ - CStdString strLog; - strLog.Format("<< POLL: %s (%x) -> %s (%x)", m_processor->ToString(iInitiator), iInitiator, m_processor->ToString(iDestination), iDestination); - m_processor->AddLog(CEC_LOG_DEBUG, strLog); -} - -bool CCECCommandHandler::HandleReceiveFailed(void) -{ - /* default = error */ - return true; -} - bool CCECCommandHandler::TransmitImageViewOn(const cec_logical_address iInitiator, const cec_logical_address iDestination) { cec_command command; @@ -971,12 +948,11 @@ bool CCECCommandHandler::Transmit(cec_command &command, bool bExpectResponse /* while (!bReturn && ++iTries <= iMaxTries) { m_expectedResponse = expectedResponse; - if (m_processor->Transmit(command)) + if ((bReturn = m_processor->Transmit(command)) == true) { - m_processor->AddLog(CEC_LOG_DEBUG, "command transmitted"); - bReturn = bExpectResponse ? - m_condition.Wait(m_receiveMutex, m_iTransmitWait) : - true; + CLibCEC::AddLog(CEC_LOG_DEBUG, "command transmitted"); + if (bExpectResponse) + bReturn = m_condition.Wait(m_receiveMutex, m_iTransmitWait); } } --m_iUseCounter;