{
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<cec_command> m_inBuffer;
- };
-
class CUSBCECAdapterCommunication : public IAdapterCommunication, private PLATFORM::CThread
{
public:
CUSBCECAdapterCommunication(CCECProcessor *processor, const char *strPort, uint16_t iBaudRate = 38400);
- virtual ~CUSBCECAdapterCommunication();
+ virtual ~CUSBCECAdapterCommunication() {};
- virtual bool Open(IAdapterCommunicationCallback *cb, uint32_t iTimeoutMs = 10000, bool bSkipChecks = false);
+ virtual bool Open(IAdapterCommunicationCallback *cb, uint32_t iTimeoutMs = 10000, bool bSkipChecks = false, bool bStartListening = true);
virtual void Close(void);
virtual bool IsOpen(void);
virtual CStdString GetError(void) const;
void *Process(void);
private:
- bool SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage ¶ms, bool bExpectAck = true, bool bIsTransmission = false, bool bSendDirectly = true);
+ bool SendCommand(cec_adapter_messagecode msgCode, CCECAdapterMessage ¶ms, bool bExpectAck = true, bool bIsTransmission = false, bool bSendDirectly = true, bool bIsRetry = false);
cec_datapacket GetSetting(cec_adapter_messagecode msgCode, uint8_t iResponseLength);
bool SetSettingAutoEnabled(bool enabled);
bool Read(CCECAdapterMessage &msg, uint32_t iTimeout = 1000);
bool ParseMessage(const CCECAdapterMessage &msg);
void SendMessageToAdapter(CCECAdapterMessage *msg);
- void WriteNextCommand(void);
void AddData(uint8_t *data, size_t iLen);
bool ReadFromDevice(uint32_t iTimeout, size_t iSize = 256);
bool WaitForAck(CCECAdapterMessage &message);
PLATFORM::ISocket * m_port;
CCECProcessor * m_processor;
PLATFORM::SyncedBuffer<CCECAdapterMessage *> m_inBuffer;
- PLATFORM::SyncedBuffer<CCECAdapterMessage *> m_outBuffer;
PLATFORM::CMutex m_mutex;
PLATFORM::CCondition<volatile bool> m_rcvCondition;
volatile bool m_bHasData;
uint8_t m_iLineTimeout;
uint16_t m_iFirmwareVersion;
cec_command m_currentframe;
- cec_logical_address m_lastInitiator;
+ cec_logical_address m_lastDestination;
CCECAdapterMessage m_currentAdapterMessage;
bool m_bNextIsEscaped;
bool m_bGotStart;
IAdapterCommunicationCallback * m_callback;
- CUSBCECAdapterProcessor * m_messageProcessor;
bool m_bInitialised;
+ bool m_bWaitingForAck[15];
};
};