X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fadapter%2FUSBCECAdapterCommunication.h;h=03c348761638cf1a30b6c3659654e603ccd6abeb;hb=c9c282a414c59bc86989920ac3d9692e5a36a175;hp=081568206f175946872809029f6f09ca0b64d44e;hpb=4c9b9776fafa21f6c4195068fff5ce60b5827572;p=deb_libcec.git diff --git a/src/lib/adapter/USBCECAdapterCommunication.h b/src/lib/adapter/USBCECAdapterCommunication.h index 0815682..03c3487 100644 --- a/src/lib/adapter/USBCECAdapterCommunication.h +++ b/src/lib/adapter/USBCECAdapterCommunication.h @@ -46,13 +46,30 @@ namespace CEC { class CCECProcessor; + class CUSBCECAdapterProcessor: public PLATFORM::CThread + { + public: + CUSBCECAdapterProcessor(IAdapterCommunicationCallback *cb) : + m_callback(cb) {}; + virtual ~CUSBCECAdapterProcessor(void) + { + StopThread(); + } + + void *Process(void); + void AddCommand(cec_command command); + private: + IAdapterCommunicationCallback * m_callback; + PLATFORM::SyncedBuffer m_inBuffer; + }; + class CUSBCECAdapterCommunication : public IAdapterCommunication, private PLATFORM::CThread { public: CUSBCECAdapterCommunication(CCECProcessor *processor, const char *strPort, uint16_t iBaudRate = 38400); virtual ~CUSBCECAdapterCommunication(); - virtual bool Open(IAdapterCommunicationCallback *cb, uint32_t iTimeoutMs = 10000); + virtual bool Open(IAdapterCommunicationCallback *cb, uint32_t iTimeoutMs = 10000, bool bSkipChecks = false); virtual void Close(void); virtual bool IsOpen(void); virtual CStdString GetError(void) const; @@ -66,9 +83,25 @@ namespace CEC virtual bool PingAdapter(void); virtual uint16_t GetFirmwareVersion(void); virtual bool SetControlledMode(bool controlled); + virtual bool PersistConfiguration(libcec_configuration *configuration); + virtual CStdString GetPortName(void); + virtual uint16_t GetPhysicalAddress(void) { return 0; } void *Process(void); private: + bool SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage ¶ms); + + bool SetAutoEnabled(bool enabled); + bool SetDeviceType(cec_device_type type); + bool SetDefaultLogicalAddress(cec_logical_address address); + bool SetLogicalAddressMask(uint16_t iMask); + bool SetPhysicalAddress(uint16_t iPhysicalAddress); + bool SetCECVersion(cec_version version); + bool SetOSDName(const char *strOSDName); + bool WriteEEPROM(void); + + bool SetAckMaskInternal(uint16_t iMask, bool bWriteDirectly = false); + bool CheckAdapter(uint32_t iTimeoutMs = 10000); bool Write(CCECAdapterMessage *data); bool Read(CCECAdapterMessage &msg, uint32_t iTimeout = 1000); @@ -84,7 +117,8 @@ namespace CEC PLATFORM::SyncedBuffer m_inBuffer; PLATFORM::SyncedBuffer m_outBuffer; PLATFORM::CMutex m_mutex; - PLATFORM::CCondition m_rcvCondition; + PLATFORM::CCondition m_rcvCondition; + volatile bool m_bHasData; uint8_t m_iLineTimeout; uint16_t m_iFirmwareVersion; cec_command m_currentframe; @@ -93,5 +127,7 @@ namespace CEC bool m_bNextIsEscaped; bool m_bGotStart; IAdapterCommunicationCallback * m_callback; + CUSBCECAdapterProcessor * m_messageProcessor; + bool m_bInitialised; }; };