X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2Fadapter%2FUSBCECAdapterMessageQueue.h;h=e476e26660382a9359d12fc822054d99114e9c10;hb=c04eaabcca1ce4b633427f6a146e0728c29a4343;hp=5163090b6e33676aa231c8222ba5e0f7fd747569;hpb=a75e3a5a63546d6f7e670bc2a7a1931887a5d2a0;p=deb_libcec.git diff --git a/src/lib/adapter/USBCECAdapterMessageQueue.h b/src/lib/adapter/USBCECAdapterMessageQueue.h index 5163090..e476e26 100644 --- a/src/lib/adapter/USBCECAdapterMessageQueue.h +++ b/src/lib/adapter/USBCECAdapterMessageQueue.h @@ -32,6 +32,8 @@ */ #include "USBCECAdapterMessage.h" +#include "../platform/threads/threads.h" +#include namespace CEC { @@ -84,28 +86,32 @@ namespace CEC */ const char *ToString(void) const; - private: /*! * @brief Called when a 'command accepted' message was received. * @param message The message that was received. - * @return True when the waiting thread need to be signaled, false otherwise. + * @return True when the message was handled, false otherwise. */ bool MessageReceivedCommandAccepted(const CCECAdapterMessage &message); /*! * @brief Called when a 'transmit succeeded' message was received. * @param message The message that was received. - * @return True when the waiting thread need to be signaled, false otherwise. + * @return True when the message was handled, false otherwise. */ bool MessageReceivedTransmitSucceeded(const CCECAdapterMessage &message); /*! * @brief Called when a message that's not a 'command accepted' or 'transmit succeeded' message was received. * @param message The message that was received. - * @return True when the waiting thread need to be signaled, false otherwise. + * @return True when the message was handled, false otherwise. */ bool MessageReceivedResponse(const CCECAdapterMessage &message); + /*! + * @brief Signals the waiting thread. + */ + void Signal(void); + CCECAdapterMessage * m_message; /**< the message that was sent */ uint8_t m_iPacketsLeft; /**< the amount of acks that we're waiting on */ bool m_bSucceeded; /**< true when the command received a response, false otherwise */ @@ -114,7 +120,7 @@ namespace CEC PLATFORM::CMutex m_mutex; /**< mutex for changes to this class */ }; - class CCECAdapterMessageQueue + class CCECAdapterMessageQueue : public PLATFORM::CThread { friend class CUSBCECAdapterCommunication; @@ -124,9 +130,10 @@ namespace CEC * @param com The communication handler callback to use. * @param iQueueSize The outgoing message queue size. */ - CCECAdapterMessageQueue(CUSBCECAdapterCommunication *com, size_t iQueueSize = 64) : + CCECAdapterMessageQueue(CUSBCECAdapterCommunication *com) : + PLATFORM::CThread(), m_com(com), - m_messages(iQueueSize) {} + m_iNextMessage(0) {} virtual ~CCECAdapterMessageQueue(void); /*! @@ -154,15 +161,14 @@ namespace CEC */ bool Write(CCECAdapterMessage *msg); - private: - /*! - * @return The next message in the queue, or NULL if there is none. - */ - CCECAdapterMessageQueueEntry *GetNextQueuedEntry(void); + virtual void *Process(void); + private: CUSBCECAdapterCommunication * m_com; /**< the communication handler */ PLATFORM::CMutex m_mutex; /**< mutex for changes to this class */ - PLATFORM::SyncedBuffer m_messages; /**< the outgoing message queue */ + std::map m_messages; /**< the outgoing message queue */ + PLATFORM::SyncedBuffer m_writeQueue; /**< the queue for messages that are to be written */ + uint64_t m_iNextMessage; /**< the index of the next message */ CCECAdapterMessage m_incomingAdapterMessage; /**< the current incoming message that's being assembled */ cec_command m_currentCECFrame; /**< the current incoming CEC command that's being assembled */ };