X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fimplementations%2FCECCommandHandler.h;h=70ba3096703e88891d044e5673700df46729379f;hb=aa4c0d341117a7e3b75b665fbc61f3bb40be5d79;hp=fe9a3f1be191aa9b1de930f91bcdde9d76537604;hpb=b78b4e339dd201d11c5e6dbfec36534d6bc5fd69;p=deb_libcec.git diff --git a/src/lib/implementations/CECCommandHandler.h b/src/lib/implementations/CECCommandHandler.h index fe9a3f1..70ba309 100644 --- a/src/lib/implementations/CECCommandHandler.h +++ b/src/lib/implementations/CECCommandHandler.h @@ -39,6 +39,8 @@ namespace CEC { + #define COMMAND_HANDLED 0xFF + class CCECProcessor; class CCECBusDevice; @@ -77,7 +79,7 @@ namespace CEC m_waitingFor.clear(); } - bool Wait(cec_opcode opcode, uint32_t iTimeout = 2000) + bool Wait(cec_opcode opcode, uint32_t iTimeout = CEC_DEFAULT_TRANSMIT_WAIT) { CResponse *response = GetEvent(opcode); return response ? response->Wait(iTimeout) : false; @@ -126,12 +128,13 @@ namespace CEC static bool HasSpecificHandler(cec_vendor_id vendorId) { return vendorId == CEC_VENDOR_LG || vendorId == CEC_VENDOR_SAMSUNG || vendorId == CEC_VENDOR_PANASONIC;} virtual bool InitHandler(void) { return true; } - virtual bool ActivateSource(void); + virtual bool ActivateSource(bool bTransmitDelayedCommandsOnly = false); virtual uint8_t GetTransmitRetries(void) const { return m_iTransmitRetries; } virtual bool PowerOn(const cec_logical_address iInitiator, const cec_logical_address iDestination); virtual bool TransmitImageViewOn(const cec_logical_address iInitiator, const cec_logical_address iDestination); virtual bool TransmitStandby(const cec_logical_address iInitiator, const cec_logical_address iDestination); + virtual bool TransmitRequestActiveSource(const cec_logical_address iInitiator, bool bWaitForResponse = true); virtual bool TransmitRequestCecVersion(const cec_logical_address iInitiator, const cec_logical_address iDestination, bool bWaitForResponse = true); virtual bool TransmitRequestMenuLanguage(const cec_logical_address iInitiator, const cec_logical_address iDestination, bool bWaitForResponse = true); virtual bool TransmitRequestOSDName(const cec_logical_address iInitiator, const cec_logical_address iDestination, bool bWaitForResponse = true); @@ -157,55 +160,62 @@ namespace CEC virtual bool TransmitKeyRelease(const cec_logical_address iInitiator, const cec_logical_address iDestination, bool bWait = true); virtual bool TransmitSetStreamPath(uint16_t iStreamPath); virtual bool SendDeckStatusUpdateOnActiveSource(void) const { return m_bOPTSendDeckStatusUpdateOnActiveSource; }; - virtual bool TransmitPendingActiveSourceCommands(void) { return true; } + + virtual void SignalOpcode(cec_opcode opcode); + + virtual bool SupportsDeviceType(const cec_device_type UNUSED(type)) const { return true; }; + virtual cec_device_type GetReplacementDeviceType(const cec_device_type type) const { return type; } protected: - virtual bool HandleActiveSource(const cec_command &command); - virtual bool HandleDeckControl(const cec_command &command); - virtual bool HandleDeviceCecVersion(const cec_command &command); - virtual bool HandleDeviceVendorCommandWithId(const cec_command &command); - virtual bool HandleDeviceVendorId(const cec_command &command); - virtual bool HandleFeatureAbort(const cec_command &command); - virtual bool HandleGetCecVersion(const cec_command &command); - virtual bool HandleGiveAudioStatus(const cec_command &command); - virtual bool HandleGiveDeckStatus(const cec_command &command); - virtual bool HandleGiveDevicePowerStatus(const cec_command &command); - virtual bool HandleGiveDeviceVendorId(const cec_command &command); - virtual bool HandleGiveOSDName(const cec_command &command); - virtual bool HandleGivePhysicalAddress(const cec_command &command); - virtual bool HandleGiveMenuLanguage(const cec_command &command); - virtual bool HandleGiveSystemAudioModeStatus(const cec_command &command); - virtual bool HandleImageViewOn(const cec_command &command); - virtual bool HandleMenuRequest(const cec_command &command); + virtual int HandleActiveSource(const cec_command &command); + virtual int HandleDeckControl(const cec_command &command); + virtual int HandleDeviceCecVersion(const cec_command &command); + virtual int HandleDeviceVendorCommandWithId(const cec_command &command); + virtual int HandleDeviceVendorId(const cec_command &command); + virtual int HandleFeatureAbort(const cec_command &command); + virtual int HandleGetCecVersion(const cec_command &command); + virtual int HandleGiveAudioStatus(const cec_command &command); + virtual int HandleGiveDeckStatus(const cec_command &command); + virtual int HandleGiveDevicePowerStatus(const cec_command &command); + virtual int HandleGiveDeviceVendorId(const cec_command &command); + virtual int HandleGiveOSDName(const cec_command &command); + virtual int HandleGivePhysicalAddress(const cec_command &command); + virtual int HandleGiveMenuLanguage(const cec_command &command); + virtual int HandleGiveSystemAudioModeStatus(const cec_command &command); + virtual int HandleImageViewOn(const cec_command &command); + virtual int HandleMenuRequest(const cec_command &command); virtual bool HandlePoll(const cec_command &command); - virtual bool HandleReportAudioStatus(const cec_command &command); - virtual bool HandleReportPhysicalAddress(const cec_command &command); - virtual bool HandleReportPowerStatus(const cec_command &command); - virtual bool HandleRequestActiveSource(const cec_command &command); - virtual bool HandleRoutingChange(const cec_command &command); - virtual bool HandleRoutingInformation(const cec_command &command); - virtual bool HandleSetMenuLanguage(const cec_command &command); - virtual bool HandleSetOSDName(const cec_command &command); - virtual bool HandleSetStreamPath(const cec_command &command); - virtual bool HandleSystemAudioModeRequest(const cec_command &command); - virtual bool HandleStandby(const cec_command &command); - virtual bool HandleSystemAudioModeStatus(const cec_command &command); - virtual bool HandleSetSystemAudioMode(const cec_command &command); - virtual bool HandleTextViewOn(const cec_command &command); - virtual bool HandleUserControlPressed(const cec_command &command); - virtual bool HandleUserControlRelease(const cec_command &command); - virtual bool HandleVendorCommand(const cec_command &command); - virtual void UnhandledCommand(const cec_command &command); + virtual int HandleReportAudioStatus(const cec_command &command); + virtual int HandleReportPhysicalAddress(const cec_command &command); + virtual int HandleReportPowerStatus(const cec_command &command); + virtual int HandleRequestActiveSource(const cec_command &command); + virtual int HandleRoutingChange(const cec_command &command); + virtual int HandleRoutingInformation(const cec_command &command); + virtual int HandleSetMenuLanguage(const cec_command &command); + virtual int HandleSetOSDName(const cec_command &command); + virtual int HandleSetStreamPath(const cec_command &command); + virtual int HandleSystemAudioModeRequest(const cec_command &command); + virtual int HandleStandby(const cec_command &command); + virtual int HandleSystemAudioModeStatus(const cec_command &command); + virtual int HandleSetSystemAudioMode(const cec_command &command); + virtual int HandleTextViewOn(const cec_command &command); + virtual int HandleUserControlPressed(const cec_command &command); + virtual int HandleUserControlRelease(const cec_command &command); + virtual int HandleVendorCommand(const cec_command &command); + virtual int HandleVendorRemoteButtonDown(const cec_command & UNUSED(command)) { return CEC_ABORT_REASON_REFUSED; } + virtual int HandleVendorRemoteButtonUp(const cec_command & UNUSED(command)) { return CEC_ABORT_REASON_REFUSED; } + virtual void UnhandledCommand(const cec_command &command, const cec_abort_reason reason); virtual size_t GetMyDevices(std::vector &devices) const; virtual CCECBusDevice *GetDevice(cec_logical_address iLogicalAddress) const; virtual CCECBusDevice *GetDeviceByPhysicalAddress(uint16_t iPhysicalAddress) const; - virtual CCECBusDevice *GetDeviceByType(cec_device_type type) const; virtual bool SetVendorId(const cec_command &command); virtual void SetPhysicalAddress(cec_logical_address iAddress, uint16_t iNewAddress); - virtual bool Transmit(cec_command &command, bool bExpectResponse = true, cec_opcode expectedResponse = CEC_OPCODE_NONE); + virtual bool Transmit(cec_command &command, bool bSuppressWait = false); + + virtual bool SourceSwitchAllowed(void) { return true; } CCECBusDevice * m_busDevice; CCECProcessor * m_processor; @@ -216,5 +226,7 @@ namespace CEC bool m_bOPTSendDeckStatusUpdateOnActiveSource; cec_vendor_id m_vendorId; CWaitForResponse *m_waitForResponse; + int m_iActiveSourcePending; + PLATFORM::CMutex m_mutex; }; };