X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=src%2Flib%2FLibCEC.cpp;h=ad4ce66625873f156c7f037b0d9445228c3e0e28;hb=2b44051cbfa70deafc30d9767323214debbc1a75;hp=56ece65b08d706d7275b6f04fd696ccd1482511e;hpb=af205cf4e5e328c51f65b662c0c115af8a3cfd6c;p=deb_libcec.git diff --git a/src/lib/LibCEC.cpp b/src/lib/LibCEC.cpp index 56ece65..ad4ce66 100644 --- a/src/lib/LibCEC.cpp +++ b/src/lib/LibCEC.cpp @@ -30,10 +30,11 @@ * http://www.pulse-eight.net/ */ +#include "env.h" #include "LibCEC.h" -#include "adapter/USBCECAdapterDetection.h" -#include "adapter/USBCECAdapterCommunication.h" +#include "adapter/AdapterFactory.h" +#include "adapter/AdapterCommunication.h" #include "CECProcessor.h" #include "CECTypeUtils.h" #include "devices/CECAudioSystem.h" @@ -114,7 +115,7 @@ void CLibCEC::Close(void) int8_t CLibCEC::FindAdapters(cec_adapter *deviceList, uint8_t iBufSize, const char *strDevicePath /* = NULL */) { - return CUSBCECAdapterDetection::FindAdapters(deviceList, iBufSize, strDevicePath); + return CAdapterFactory(this).FindAdapters(deviceList, iBufSize, strDevicePath); } bool CLibCEC::StartBootloader(void) @@ -165,7 +166,7 @@ bool CLibCEC::IsLibCECActiveSource(void) bool CLibCEC::Transmit(const cec_command &data) { - return m_client ? m_client->Transmit(data) : false; + return m_client ? m_client->Transmit(data, false) : false; } bool CLibCEC::SetLogicalAddress(cec_logical_address iLogicalAddress) @@ -469,6 +470,13 @@ void CLibCEC::AddLog(const cec_log_level level, const char *strFormat, ...) (*it)->AddLog(message); } +void CLibCEC::AddCommand(const cec_command &command) +{ + // send the command to all clients + for (vector::iterator it = m_clients.begin(); it != m_clients.end(); it++) + (*it)->AddCommand(command); +} + void CLibCEC::Alert(const libcec_alert type, const libcec_parameter ¶m) { // send the alert to all clients @@ -543,14 +551,14 @@ void * CECInitialise(libcec_configuration *configuration) return static_cast< void* > (lib); } -void * CECInit(const char *strDeviceName, CEC::cec_device_type_list types, uint16_t 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); configuration.deviceTypes = types; - configuration.iPhysicalAddress = iPhysicalAddress; + configuration.iPhysicalAddress = CEC_INVALID_PHYSICAL_ADDRESS; if (configuration.deviceTypes.IsEmpty()) configuration.deviceTypes.Add(CEC_DEVICE_TYPE_RECORDING_DEVICE); @@ -558,21 +566,40 @@ 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(CCECTypeUtils::GetType(iLogicalAddress)); + + return CECInitialise(&configuration); +} + bool CECStartBootloader(void) { bool bReturn(false); cec_adapter deviceList[1]; - if (CUSBCECAdapterDetection::FindAdapters(deviceList, 1) > 0) + if (CAdapterFactory(NULL).FindAdapters(deviceList, 1, 0) > 0) { - CUSBCECAdapterCommunication comm(NULL, deviceList[0].comm); - CTimeout timeout(CEC_DEFAULT_CONNECT_TIMEOUT); - while (timeout.TimeLeft() > 0 && (bReturn = comm.Open(timeout.TimeLeft() / CEC_CONNECT_TRIES, true)) == false) + CAdapterFactory factory(NULL); + IAdapterCommunication *comm = factory.GetInstance(deviceList[0].comm); + if (comm) { - comm.Close(); - CEvent::Sleep(500); + CTimeout timeout(CEC_DEFAULT_CONNECT_TIMEOUT); + while (timeout.TimeLeft() > 0 && + (bReturn = comm->Open(timeout.TimeLeft() / CEC_CONNECT_TRIES, true)) == false) + { + comm->Close(); + CEvent::Sleep(500); + } + if (comm->IsOpen()) + bReturn = comm->StartBootloader(); + + delete comm; } - if (comm.IsOpen()) - bReturn = comm.StartBootloader(); } return bReturn; @@ -591,9 +618,39 @@ bool CLibCEC::GetDeviceInformation(const char *strPort, libcec_configuration *co return m_cec->GetDeviceInformation(strPort, config, iTimeoutMs); } +const char *CLibCEC::GetLibInfo(void) +{ +#ifndef LIB_INFO +#ifdef _WIN32 +#define FEATURES "'P8 USB' 'P8 USB detect'" +#ifdef _WIN64 +#define HOST_TYPE "Windows (x64)" +#else +#define HOST_TYPE "Windows (x86)" +#endif +#else +#define HOST_TYPE "unknown" +#define FEATURES "unknown" +#endif + + return "host: " HOST_TYPE ", features: " FEATURES ", compiled: " __DATE__; +#else + return LIB_INFO; +#endif +} + +const char *CLibCEC::ToString(const cec_user_control_code key) +{ + return CCECTypeUtils::ToString(key); +} + +void CLibCEC::InitVideoStandalone(void) +{ + CAdapterFactory::InitVideoStandalone(); +} + // no longer being used void CLibCEC::AddKey(const cec_keypress &UNUSED(key)) {} -void CLibCEC::AddCommand(const cec_command &UNUSED(command)) {} void CLibCEC::ConfigurationChanged(const libcec_configuration &UNUSED(config)) {} void CLibCEC::SetCurrentButton(cec_user_control_code UNUSED(iButtonCode)) {} CLibCEC *CLibCEC::GetInstance(void) { return NULL; }