/*
* This file is part of the libCEC(R) library.
*
- * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved.
+ * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved.
* libCEC(R) is an original work, containing original code.
*
* libCEC(R) is a trademark of Pulse-Eight Limited.
*/
#include <string>
-#include "../../include/cectypes.h"
#include "platform/threads/threads.h"
#include "platform/util/buffer.h"
class CCECTuner;
class CCECTV;
class CCECClient;
+ class CCECProcessor;
+ class CCECStandbyProtection;
+
+ class CCECAllocateLogicalAddress : public PLATFORM::CThread
+ {
+ public:
+ CCECAllocateLogicalAddress(CCECProcessor* processor, CCECClient* client);
+ void* Process(void);
+
+ private:
+ CCECProcessor* m_processor;
+ CCECClient* m_client;
+ };
class CCECProcessor : public PLATFORM::CThread, public IAdapterCommunicationCallback
{
bool RegisterClient(CCECClient *client);
bool UnregisterClient(CCECClient *client);
void UnregisterClients(void);
+ uint16_t GetPhysicalAddressFromEeprom(void);
CCECClient *GetPrimaryClient(void);
CCECClient *GetClient(const cec_logical_address address);
bool OnCommandReceived(const cec_command &command);
+ void HandleLogicalAddressLost(cec_logical_address oldAddress);
+ void HandlePhysicalAddressChanged(uint16_t iNewAddress);
CCECBusDevice * GetDevice(cec_logical_address address) const;
CCECAudioSystem * GetAudioSystem(void) const;
cec_logical_address GetActiveSource(bool bRequestActiveSource = true);
bool IsActiveSource(cec_logical_address iAddress);
bool CECInitialised(void);
- bool SetStreamPath(uint16_t iPhysicalAddress);
bool StandbyDevices(const cec_logical_address initiator, const CECDEVICEVEC &devices);
bool StandbyDevice(const cec_logical_address initiator, cec_logical_address address);
bool SetDeckInfo(cec_deck_info info, bool bSendUpdate = true);
bool ActivateSource(uint16_t iStreamPath);
+ void SetActiveSource(bool bSetTo, bool bClientUnregistered);
bool PollDevice(cec_logical_address iAddress);
void SetStandardLineTimeout(uint8_t iTimeout);
uint8_t GetStandardLineTimeout(void);
bool SetLineTimeout(uint8_t iTimeout);
- bool Transmit(const cec_command &data);
+ bool Transmit(const cec_command &data, bool bIsReply);
void TransmitAbort(cec_logical_address source, cec_logical_address destination, cec_opcode opcode, cec_abort_reason reason = CEC_ABORT_REASON_UNRECOGNIZED_OPCODE);
bool StartBootloader(const char *strPort = NULL);
bool IsHandledByLibCEC(const cec_logical_address address) const;
- bool TryLogicalAddress(cec_logical_address address);
+ bool TryLogicalAddress(cec_logical_address address, cec_version libCECSpecVersion = CEC_VERSION_1_4);
bool IsRunningLatestFirmware(void);
- private:
+ void SwitchMonitoring(bool bSwitchTo);
+
+ bool AllocateLogicalAddresses(CCECClient* client);
+
+ uint16_t GetAdapterVendorId(void) const;
+ uint16_t GetAdapterProductId(void) const;
+ private:
bool OpenConnection(const char *strPort, uint16_t iBaudRate, uint32_t iTimeoutMs, bool bStartListening = true);
void SetCECInitialised(bool bSetTo = true);
void ReplaceHandlers(void);
bool PhysicalAddressInUse(uint16_t iPhysicalAddress);
- bool SetAckMask(uint16_t iMask);
+
+ bool ClearLogicalAddresses(void);
+ bool SetLogicalAddresses(const cec_logical_addresses &addresses);
void LogOutput(const cec_command &data);
void ProcessCommand(const cec_command &command);
CCECInputBuffer m_inBuffer;
CCECDeviceMap * m_busDevices;
std::map<cec_logical_address, CCECClient *> m_clients;
+ bool m_bMonitor;
+ CCECAllocateLogicalAddress* m_addrAllocator;
+ bool m_bStallCommunication;
+ CCECStandbyProtection* m_connCheck;
+ };
+
+ class CCECStandbyProtection : public PLATFORM::CThread
+ {
+ public:
+ CCECStandbyProtection(CCECProcessor* processor);
+ virtual ~CCECStandbyProtection(void);
+ void* Process(void);
+
+ private:
+ CCECProcessor* m_processor;
};
};