cec: abi fixes (binary compat with v1.2)
authorLars Op den Kamp <lars@opdenkamp.eu>
Tue, 26 Jun 2012 11:28:44 +0000 (13:28 +0200)
committerLars Op den Kamp <lars@opdenkamp.eu>
Tue, 26 Jun 2012 13:54:39 +0000 (15:54 +0200)
include/cec.h
include/cectypes.h
src/cec-config/cec-config.cpp
src/lib/CECClient.cpp
src/lib/CECProcessor.cpp
src/lib/LibCEC.cpp
src/lib/adapter/USBCECAdapterMessageQueue.h
src/testclient/main.cpp

index 46262239278dc62487c5ab95229193e4aa2c3402..a41f50709e79349480c3a45e2a995662708086e7 100644 (file)
@@ -60,14 +60,6 @@ namespace CEC
      */
     virtual void Close(void) = 0;
 
-    /*!
-     * @brief Set and enable the callback methods. If this method is not called, the GetNext...() methods will have to be used.
-     * @param cbParam Parameter to pass to callback methods.
-     * @param callbacks The callbacks to set.
-     * @return True when enabled, false otherwise.
-     */
-    virtual bool EnableCallbacks(void *cbParam, ICECCallbacks *callbacks) = 0;
-
     /*!
      * @brief Try to find all connected CEC adapters. Only implemented on Linux and Windows at the moment.
      * @param deviceList The vector to store device descriptors in.
@@ -153,21 +145,6 @@ namespace CEC
      */
     virtual bool SetPhysicalAddress(uint16_t iPhysicalAddress = CEC_DEFAULT_PHYSICAL_ADDRESS) = 0;
 
-    /*!
-     * @deprecated Use libcec_configuration instead.
-     * @brief Enable physical address detection (if the connected adapter supports this).
-     * @return True when physical address detection was enabled, false otherwise.
-     */
-    virtual bool EnablePhysicalAddressDetection(void) = 0;
-
-    /*!
-     * @brief Changes the active HDMI port.
-     * @param iBaseDevice The device to which this libcec is connected.
-     * @param iPort The new port number.
-     * @return True when changed, false otherwise.
-     */
-    virtual bool SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort) = 0;
-
     /*!
      * @brief Power on the connected CEC capable devices.
      * @param address The logical address to power on.
@@ -269,13 +246,6 @@ namespace CEC
      */
     virtual cec_power_status GetDevicePowerStatus(cec_logical_address iLogicalAddress) = 0;
 
-    /*!
-     * @brief Get the physical address of the device with the given logical address.
-     * @param iLogicalAddress The device to get the vendor id for.
-     * @return The physical address or 0 if it wasn't found.
-     */
-    virtual uint16_t GetDevicePhysicalAddress(cec_logical_address iLogicalAddress) = 0;
-
     /*!
      * @brief Sends a POLL message to a device.
      * @param iLogicalAddress The device to send the message to.
@@ -436,6 +406,36 @@ namespace CEC
      * @return True when the device was found, false otherwise
      */
     virtual bool GetDeviceInformation(const char *strPort, libcec_configuration *config, uint32_t iTimeoutMs = 10000) = 0;
+
+    /*!
+     * @brief Set and enable the callback methods. If this method is not called, the GetNext...() methods will have to be used.
+     * @param cbParam Parameter to pass to callback methods.
+     * @param callbacks The callbacks to set.
+     * @return True when enabled, false otherwise.
+     */
+    virtual bool EnableCallbacks(void *cbParam, ICECCallbacks *callbacks) = 0;
+
+        /*!
+     * @deprecated Use libcec_configuration instead.
+     * @brief Enable physical address detection (if the connected adapter supports this).
+     * @return True when physical address detection was enabled, false otherwise.
+     */
+    virtual bool EnablePhysicalAddressDetection(void) = 0;
+
+    /*!
+     * @brief Changes the active HDMI port.
+     * @param iBaseDevice The device to which this libcec is connected.
+     * @param iPort The new port number.
+     * @return True when changed, false otherwise.
+     */
+    virtual bool SetHDMIPort(cec_logical_address iBaseDevice, uint8_t iPort) = 0;
+
+    /*!
+     * @brief Get the physical address of the device with the given logical address.
+     * @param iLogicalAddress The device to get the vendor id for.
+     * @return The physical address or 0 if it wasn't found.
+     */
+    virtual uint16_t GetDevicePhysicalAddress(cec_logical_address iLogicalAddress) = 0;
   };
 };
 
@@ -443,10 +443,19 @@ namespace CEC
  * @brief Load the CEC adapter library.
  * @param strDeviceName How to present this device to other devices.
  * @param deviceTypes The device types to use on the CEC bus.
- * @param iPhysicalAddress The physical address to assume on the bus. If set to 0, libCEC will try to autodetect the address, with the data provided via SetHDMIPort()
  * @return An instance of ICECAdapter or NULL on error.
  */
-extern "C" DECLSPEC void * CECInit(const char *strDeviceName, CEC::cec_device_type_list deviceTypes, uint16_t iPhysicalAddress = 0);
+extern "C" DECLSPEC void * CECInit(const char *strDeviceName, CEC::cec_device_type_list deviceTypes);
+
+/*!
+ * @deprecated
+ */
+extern "C" DECLSPEC void * CECCreate(const char *strDeviceName, CEC::cec_logical_address iLogicalAddress = CEC::CECDEVICE_PLAYBACKDEVICE1, uint16_t iPhysicalAddress = CEC_DEFAULT_PHYSICAL_ADDRESS);
+
+/*!
+ * @brief Unload the CEC adapter library.
+ */
+extern "C" DECLSPEC void CECDestroy(CEC::ICECAdapter *instance);
 
 /*!
  * @brief Load the CEC adapter library.
@@ -461,9 +470,4 @@ extern "C" DECLSPEC void * CECInitialise(CEC::libcec_configuration *configuratio
  */
 extern "C" DECLSPEC bool CECStartBootloader(void);
 
-/*!
- * @brief Unload the CEC adapter library.
- */
-extern "C" DECLSPEC void CECDestroy(CEC::ICECAdapter *instance);
-
 #endif /* CECEXPORTS_H_ */
index 4f74d8d6c2656ed9c4e2b6623abb4c308cbce863..47168a296a663d66bf347c4ae17734868490038a 100644 (file)
@@ -802,10 +802,11 @@ typedef struct cec_command
   int32_t             transmit_timeout; /**< the timeout to use in ms */
 
 #ifdef __cplusplus
-  cec_command(void)
-  {
-    Clear();
-  }
+  // @todo re-add in v2.0 (breaks ABI)
+  //cec_command(void)
+  //{
+  //  Clear();
+  //}
 
   cec_command &operator =(const struct cec_command &command)
   {
@@ -1193,8 +1194,9 @@ typedef struct ICECCallbacks
   CBCecSourceActivatedType CBCecSourceActivated;
 
 #ifdef __cplusplus
-   ICECCallbacks(void) { Clear(); }
-  ~ICECCallbacks(void) { Clear(); };
+  // @todo re-add in v2.0 (breaks ABI)
+  // ICECCallbacks(void) { Clear(); }
+  //~ICECCallbacks(void) { Clear(); };
 
   void Clear(void)
   {
@@ -1274,8 +1276,9 @@ typedef struct libcec_configuration
   uint8_t               bMonitorOnly;         /*!< won't allocate a CCECClient when starting the connection when set (same as monitor mode). added in 1.6.3 */
 
 #ifdef __cplusplus
-   libcec_configuration(void) { Clear(); }
-  ~libcec_configuration(void) { Clear(); }
+  // @todo re-add in v2.0 (breaks ABI)
+  // libcec_configuration(void) { Clear(); }
+  //~libcec_configuration(void) { Clear(); }
 
   bool operator==(const libcec_configuration &other) const
   {
index 57931ee81dfb4dcbe59e54bdb8e23cfcc89a8768..7b203cb87c079b7663cb4c850009a9fcdfed2945 100644 (file)
@@ -315,6 +315,8 @@ bool PowerOnTV(uint64_t iTimeout = 60000)
 
 int main (int UNUSED(argc), char *UNUSED(argv[]))
 {
+  g_callbacks.Clear();
+  g_config.Clear();
   PrintToStdOut("=== USB-CEC Adapter Configuration ===\n");
   if (!OpenConnection())
     return 1;
index afbaaafe8983f6dce032d40aff15fa14cc13ac45..e4033604aaa91593ee60e48882f3f503a9fdd31b 100644 (file)
@@ -53,6 +53,7 @@ CCECClient::CCECClient(CCECProcessor *processor, const libcec_configuration &con
     m_buttontime(0),
     m_iPreventForwardingPowerOffCommand(0)
 {
+  m_configuration.Clear();
   // set the initial configuration
   SetConfiguration(configuration);
 }
index 324c5580e7439d8c21c62c108124824f2f0894d0..4d4abba2ac93cca0fc6c2ee9bebb1cd531fc93ca 100644 (file)
@@ -207,7 +207,7 @@ void *CCECProcessor::Process(void)
 {
   m_libcec->AddLog(CEC_LOG_DEBUG, "processor thread started");
 
-  cec_command command;
+  cec_command command; command.Clear();
   CTimeout activeSourceCheck(ACTIVE_SOURCE_CHECK_INTERVAL);
 
   // as long as we're not being stopped and the connection is open
@@ -679,7 +679,7 @@ bool CCECProcessor::RegisterClient(CCECClient *client)
   // get the settings from the rom
   if (configuration.bGetSettingsFromROM == 1)
   {
-    libcec_configuration config;
+    libcec_configuration config; config.Clear();
     m_communication->GetConfiguration(config);
 
     CLockObject lock(m_mutex);
index effade5bdd02a04846fba055ba3d0e706c78a13a..c0931c3e963d3fb724c5da88ba7d74e9b2cd1502 100644 (file)
@@ -556,9 +556,9 @@ void * CECInitialise(libcec_configuration *configuration)
   return static_cast< void* > (lib);
 }
 
-void * CECInit(const char *strDeviceName, CEC::cec_device_type_list types, uint16_t UNUSED(iPhysicalAddress) /* = 0 */)
+void * CECInit(const char *strDeviceName, CEC::cec_device_type_list types)
 {
-  libcec_configuration configuration;
+  libcec_configuration configuration; configuration.Clear();
 
   // client version < 1.5.0
   snprintf(configuration.strDeviceName, 13, "%s", strDeviceName);
@@ -571,6 +571,18 @@ void * CECInit(const char *strDeviceName, CEC::cec_device_type_list types, uint1
   return CECInitialise(&configuration);
 }
 
+void * CECCreate(const char *strDeviceName, CEC::cec_logical_address iLogicalAddress /* = CEC::CECDEVICE_PLAYBACKDEVICE1 */, uint16_t iPhysicalAddress /* = CEC_DEFAULT_PHYSICAL_ADDRESS */)
+{
+  libcec_configuration configuration; configuration.Clear();
+
+  // client version < 1.5.0
+  snprintf(configuration.strDeviceName, 13, "%s", strDeviceName);
+  configuration.iPhysicalAddress = iPhysicalAddress;
+  configuration.deviceTypes.Add(CEC_DEVICE_TYPE_RECORDING_DEVICE);
+
+  return CECInitialise(&configuration);
+}
+
 bool CECStartBootloader(void)
 {
   bool bReturn(false);
index 4646fe497cdeb7a56883ad291ed877ad8fb050d1..44c930be3cd7efcc84001506ac8c9943655222dd 100644 (file)
@@ -136,7 +136,11 @@ namespace CEC
     CCECAdapterMessageQueue(CUSBCECAdapterCommunication *com) :
       PLATFORM::CThread(),
       m_com(com),
-      m_iNextMessage(0) {}
+      m_iNextMessage(0)
+    {
+      m_currentCECFrame.Clear();
+    }
+
     virtual ~CCECAdapterMessageQueue(void);
 
     /*!
index f2802a6c23516a13773962e4faf093419ce8309f..fe3f893a863ef2df0cc92f8250409f144c6f993e 100644 (file)
@@ -1106,6 +1106,7 @@ bool ProcessCommandLineArguments(int argc, char *argv[])
 int main (int argc, char *argv[])
 {
   g_config.Clear();
+  g_callbacks.Clear();
   snprintf(g_config.strDeviceName, 13, "CECTester");
   g_config.clientVersion       = CEC_CONFIG_VERSION;
   g_config.bActivateSource     = 0;