allocate a new address in a background thread when the communication interface report...
[deb_libcec.git] / src / lib / CECProcessor.h
index 6faf52132e44bccfa62c2ac2273c8a7cf31d49b1..6ad60c515a6c7a55137423b62f2602cf59f7b492 100644 (file)
@@ -51,6 +51,18 @@ namespace CEC
   class CCECTuner;
   class CCECTV;
   class CCECClient;
+  class CCECProcessor;
+
+  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
   {
@@ -69,7 +81,7 @@ namespace CEC
       CCECClient *GetClient(const cec_logical_address address);
 
       bool                  OnCommandReceived(const cec_command &command);
-      void                  HandleLogicalAddressLost(cec_logical_address oldAddress, cec_logical_address newAddress);
+      void                  HandleLogicalAddressLost(cec_logical_address oldAddress);
 
       CCECBusDevice *       GetDevice(cec_logical_address address) const;
       CCECAudioSystem *     GetAudioSystem(void) const;
@@ -130,6 +142,7 @@ namespace CEC
       bool IsRunningLatestFirmware(void);
       void SwitchMonitoring(bool bSwitchTo);
 
+      bool AllocateLogicalAddresses(CCECClient* client);
     private:
       bool OpenConnection(const char *strPort, uint16_t iBaudRate, uint32_t iTimeoutMs, bool bStartListening = true);
       void SetCECInitialised(bool bSetTo = true);
@@ -145,8 +158,6 @@ namespace CEC
 
       void ResetMembers(void);
 
-      bool AllocateLogicalAddresses(CCECClient* client);
-
       bool                                        m_bInitialised;
       PLATFORM::CMutex                            m_mutex;
       IAdapterCommunication *                     m_communication;
@@ -158,5 +169,6 @@ namespace CEC
       CCECDeviceMap *                             m_busDevices;
       std::map<cec_logical_address, CCECClient *> m_clients;
       bool                                        m_bMonitor;
+      CCECAllocateLogicalAddress*                 m_addrAllocator;
   };
 };