X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=include%2Fcecloader.h;h=6c7c97a04d417167eeceed71d18d3e0f1c5c3374;hb=b1bd94283cef75676b987f30d61f26fad09c19c3;hp=1a75169154fed380f059d5f5e941cee3db2bac12;hpb=39b1216c4883c7a3a351283e61e58891699ef091;p=deb_libcec.git diff --git a/include/cecloader.h b/include/cecloader.h index 1a75169..6c7c97a 100644 --- a/include/cecloader.h +++ b/include/cecloader.h @@ -2,7 +2,7 @@ /* * This file is part of the libCEC(R) library. * - * libCEC(R) is Copyright (C) 2011-2012 Pulse-Eight Limited. All rights reserved. + * libCEC(R) is Copyright (C) 2011-2013 Pulse-Eight Limited. All rights reserved. * libCEC(R) is an original work, containing original code. * * libCEC(R) is a trademark of Pulse-Eight Limited. @@ -40,39 +40,13 @@ 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) @@ -83,7 +57,7 @@ CEC::ICECAdapter *LibCecInitialise(const CEC::libcec_configuration *configuratio 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) @@ -111,77 +85,63 @@ void UnloadLibCec(CEC::ICECAdapter *device) g_libCEC = NULL; } -#else - -#include - -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 + +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); + g_libCEC = dlopen(strLib ? strLib : "libcec." CEC_LIB_VERSION_MAJOR_STR ".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) { @@ -206,6 +166,40 @@ void UnloadLibCec(CEC::ICECAdapter *device) 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_ */