HINSTANCE g_libCEC = NULL;
-/*!
- * @brief Create a new libCEC instance.
- * @param strDeviceName The name of the primary device to pass to other CEC devices.
- * @param types The list of device types to register on the bus.
- * @param strLib The name of and/or path to libCEC
- * @return An instance of libCEC or NULL when it failed to load.
- */
-CEC::ICECAdapter *LibCecInit(const char *strDeviceName, CEC::cec_device_type_list types, const char *strLib = NULL)
-{
- if (!g_libCEC)
-#if defined(_WIN64)
- g_libCEC = LoadLibrary(strLib ? strLib : "libcec.x64.dll");
-#else
- g_libCEC = LoadLibrary(strLib ? strLib : "libcec.dll");
-#endif
- if (!g_libCEC)
- return NULL;
-
- typedef void* (__cdecl*_LibCecInit)(const char *, CEC::cec_device_type_list);
- _LibCecInit LibCecInit;
- LibCecInit = (_LibCecInit) (GetProcAddress(g_libCEC, "CECInit"));
- if (!LibCecInit)
- return NULL;
- return static_cast< CEC::ICECAdapter* > (LibCecInit(strDeviceName, types));
-}
-
/*!
* @brief Create a new libCEC instance.
* @param configuration The configuration to pass to libCEC
* @param strLib The name of and/or path to libCEC
* @return An instance of ICECAdapter or NULL on error.
*/
-CEC::ICECAdapter *LibCecInitialise(const CEC::libcec_configuration *configuration, const char *strLib = NULL)
+CEC::ICECAdapter *LibCecInitialise(CEC::libcec_configuration *configuration, const char *strLib = NULL)
{
if (!g_libCEC)
#if defined(_WIN64)
if (!g_libCEC)
return NULL;
- typedef void* (__cdecl*_LibCecInitialise)(const CEC::libcec_configuration *);
+ typedef void* (__cdecl*_LibCecInitialise)(CEC::libcec_configuration *);
_LibCecInitialise LibCecInitialise;
LibCecInitialise = (_LibCecInitialise) (GetProcAddress(g_libCEC, "CECInitialise"));
if (!LibCecInitialise)
g_libCEC = NULL;
}
-#else
-
-#include <dlfcn.h>
-
-void *g_libCEC = NULL;
-
/*!
- * @brief Create a new libCEC instance.
- * @param strDeviceName The name of the primary device to pass to other CEC devices.
- * @param types The list of device types to register on the bus.
+ * @brief Start the bootloader on the first device that was detected.
* @param strLib The name of and/or path to libCEC
- * @return An instance of libCEC or NULL when it failed to load.
+ * @return True when the command was sent, false otherwise.
*/
-CEC::ICECAdapter *LibCecInit(const char *strDeviceName, CEC::cec_device_type_list types, const char *strLib = NULL)
+bool LibCecBootloader(const char *strLib = NULL)
{
if (!g_libCEC)
- {
-#if defined(__APPLE__)
- g_libCEC = dlopen(strLib ? strLib : "libcec.dylib", RTLD_LAZY);
-#else
- g_libCEC = dlopen(strLib ? strLib : "libcec.so", RTLD_LAZY);
-#endif
- if (!g_libCEC)
- {
-#if defined(__APPLE__)
- cout << "cannot find " << (strLib ? strLib : "libcec.dylib") << dlerror() << endl;
+#if defined(_WIN64)
+ g_libCEC = LoadLibrary(strLib ? strLib : "libcec.x64.dll");
#else
- cout << "cannot find " << (strLib ? strLib : "libcec.so") << dlerror() << endl;
+ g_libCEC = LoadLibrary(strLib ? strLib : "libcec.dll");
#endif
- return NULL;
- }
- }
-
- typedef void* _LibCecInit(const char *, CEC::cec_device_type_list);
- _LibCecInit* LibCecInit = (_LibCecInit*) dlsym(g_libCEC, "CECInit");
- if (!LibCecInit)
- {
- cout << "cannot find CECInit" << endl;
+ if (!g_libCEC)
return NULL;
- }
- return (CEC::ICECAdapter*) LibCecInit(strDeviceName, types);
+ typedef bool (__cdecl*_LibCecBootloader)(void);
+ _LibCecBootloader LibCecBootloader;
+ LibCecBootloader = (_LibCecBootloader) (GetProcAddress(g_libCEC, "CECStartBootloader"));
+ if (!LibCecBootloader)
+ return false;
+
+ bool bReturn = LibCecBootloader();
+ FreeLibrary(g_libCEC);
+ g_libCEC = NULL;
+ return bReturn;
}
+#else
+
+#include <dlfcn.h>
+
+void *g_libCEC = NULL;
+
/*!
* @brief Create a new libCEC instance.
* @param configuration The configuration to pass to libCEC
* @param strLib The name of and/or path to libCEC
* @return An instance of ICECAdapter or NULL on error.
*/
-CEC::ICECAdapter *LibCecInitialise(const CEC::libcec_configuration *configuration, const char *strLib = NULL)
+CEC::ICECAdapter *LibCecInitialise(CEC::libcec_configuration *configuration, const char *strLib = NULL)
{
if (!g_libCEC)
{
#if defined(__APPLE__)
g_libCEC = dlopen(strLib ? strLib : "libcec.dylib", RTLD_LAZY);
#else
- g_libCEC = dlopen(strLib ? strLib : "libcec.so", RTLD_LAZY);
+ g_libCEC = dlopen(strLib ? strLib : "libcec.so." CEC_LIB_VERSION_MAJOR_STR, RTLD_LAZY);
#endif
if (!g_libCEC)
{
-#if defined(__APPLE__)
- cout << "cannot find " << (strLib ? strLib : "libcec.dylib") << dlerror() << endl;
-#else
- cout << "cannot find " << (strLib ? strLib : "libcec.so") << dlerror() << endl;
-#endif
+ cout << dlerror() << endl;
return NULL;
}
}
- typedef void* _LibCecInitialise(const CEC::libcec_configuration *);
+ typedef void* _LibCecInitialise(CEC::libcec_configuration *);
_LibCecInitialise* LibCecInitialise = (_LibCecInitialise*) dlsym(g_libCEC, "CECInitialise");
if (!LibCecInitialise)
{
dlclose(g_libCEC);
}
+/*!
+ * @brief Start the bootloader on the first device that was detected.
+ * @param strLib The name of and/or path to libCEC
+ * @return True when the command was sent, false otherwise.
+ */
+bool LibCecBootloader(const char *strLib = NULL)
+{
+ if (!g_libCEC)
+ {
+#if defined(__APPLE__)
+ g_libCEC = dlopen(strLib ? strLib : "libcec.dylib", RTLD_LAZY);
+#else
+ g_libCEC = dlopen(strLib ? strLib : "libcec.so." CEC_LIB_VERSION_MAJOR_STR, RTLD_LAZY);
+#endif
+ if (!g_libCEC)
+ {
+ cout << dlerror() << endl;
+ return NULL;
+ }
+ }
+
+ typedef bool _LibCecBootloader(void);
+ _LibCecBootloader* LibCecBootloader = (_LibCecBootloader*) dlsym(g_libCEC, "CECStartBootloader");
+ if (!LibCecBootloader)
+ {
+ cout << "cannot find CECStartBootloader" << endl;
+ return NULL;
+ }
+
+ bool bReturn = LibCecBootloader();
+ dlclose(g_libCEC);
+ return bReturn;
+}
+
#endif
#endif /* CECLOADER_H_ */