1 #pragma once
2 /*
3  * This file is part of the libCEC(R) library.
4  *
5  * libCEC(R) is Copyright (C) 2011-2015 Pulse-Eight Limited.  All rights reserved.
6  * libCEC(R) is an original work, containing original code.
7  *
8  * libCEC(R) is a trademark of Pulse-Eight Limited.
9  *
10  * This program is dual-licensed; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
23  * 02110-1301  USA
24  *
25  *
26  * Alternatively, you can license this library under a commercial license,
27  * please contact Pulse-Eight Licensing for more information.
28  *
29  * For more information contact:
30  * Pulse-Eight Licensing       <license@pulse-eight.com>
31  *     http://www.pulse-eight.com/
32  *     http://www.pulse-eight.net/
33  */
34 
35 #include "env.h"
36 #include "CECCommandHandler.h"
37 
38 namespace CEC
39 {
40   class CSLCommandHandler : public CCECCommandHandler
41   {
42   public:
43     CSLCommandHandler(CCECBusDevice *busDevice,
44                       int32_t iTransmitTimeout = CEC_DEFAULT_TRANSMIT_TIMEOUT,
45                       int32_t iTransmitWait = CEC_DEFAULT_TRANSMIT_WAIT,
46                       int8_t iTransmitRetries = CEC_DEFAULT_TRANSMIT_RETRIES,
47                       int64_t iActiveSourcePending = 0);
~CSLCommandHandler(void)48     virtual ~CSLCommandHandler(void) {};
49 
50     bool InitHandler(void);
51     bool ActivateSource(bool bTransmitDelayedCommandsOnly = false);
52 
53   protected:
54     int HandleVendorCommand(const cec_command &command);
55 
56     void HandleVendorCommandSLInit(const cec_command &command);
57     void TransmitVendorCommandSLAckInit(const cec_logical_address iSource, const cec_logical_address iDestination);
58 
59     void HandleVendorCommandPowerOn(const cec_command &command, bool activateSource);
60     void HandleVendorCommandPowerOnStatus(const cec_command &command);
61 
62     void HandleVendorCommandSLConnect(const cec_command &command);
63     void TransmitVendorCommandSetDeviceMode(const cec_logical_address iSource, const cec_logical_address iDestination, const cec_device_type type);
64 
65     int HandleGiveDevicePowerStatus(const cec_command &command);
66     int HandleGiveDeckStatus(const cec_command &command);
67     int HandleRequestActiveSource(const cec_command &command);
68     int HandleFeatureAbort(const cec_command &command);
69     int HandleStandby(const cec_command &command);
TransmitMenuState(const cec_logical_address UNUSED (iInitiator),const cec_logical_address UNUSED (iDestination),cec_menu_state UNUSED (menuState),bool UNUSED (bIsReply))70     bool TransmitMenuState(const cec_logical_address UNUSED(iInitiator), const cec_logical_address UNUSED(iDestination), cec_menu_state UNUSED(menuState), bool UNUSED(bIsReply)) { return true; }
71     bool PowerOn(const cec_logical_address iInitiator, const cec_logical_address iDestination);
72 
73     void ResetSLState(void);
74     bool SLInitialised(void);
75     void SetSLInitialised(void);
76 
77     bool                 m_bSLEnabled;
78     P8PLATFORM::CTimeout m_resetPowerState;
79     P8PLATFORM::CMutex   m_SLMutex;
80   };
81 };
82