X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flib%2Fdevices%2FCECDeviceMap.cpp;h=84fda1d68d79da50feacbc7e7a8145e2a648b8ae;hb=5ce88432714dbc3ff38f93227d84da5ff88b6781;hp=2603e33d2de82fb22b37a71bcb880fc2f8754da9;hpb=004b83822a351e1fb6e982a9183a12a430b0b769;p=deb_libcec.git diff --git a/src/lib/devices/CECDeviceMap.cpp b/src/lib/devices/CECDeviceMap.cpp index 2603e33..84fda1d 100644 --- a/src/lib/devices/CECDeviceMap.cpp +++ b/src/lib/devices/CECDeviceMap.cpp @@ -1,7 +1,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. @@ -30,13 +30,16 @@ * http://www.pulse-eight.net/ */ +#include "env.h" #include "CECDeviceMap.h" + #include "CECAudioSystem.h" #include "CECPlaybackDevice.h" #include "CECRecordingDevice.h" #include "CECTuner.h" #include "CECTV.h" -#include "CECProcessor.h" +#include "lib/CECProcessor.h" +#include "lib/CECTypeUtils.h" using namespace std; using namespace CEC; @@ -185,7 +188,7 @@ void CCECDeviceMap::GetPowerOffDevices(const libcec_configuration &configuration { for (CECDEVICEMAP::const_iterator it = m_busDevices.begin(); it != m_busDevices.end(); it++) { - if (configuration.powerOffDevices[it->first]) + if (configuration.powerOffDevices[(uint8_t)it->first]) devices.push_back(it->second); } } @@ -194,7 +197,7 @@ void CCECDeviceMap::GetWakeDevices(const libcec_configuration &configuration, CE { for (CECDEVICEMAP::const_iterator it = m_busDevices.begin(); it != m_busDevices.end(); it++) { - if (configuration.wakeDevices[it->first]) + if (configuration.wakeDevices[(uint8_t)it->first]) devices.push_back(it->second); } } @@ -235,10 +238,11 @@ void CCECDeviceMap::FilterActive(CECDEVICEVEC &devices) void CCECDeviceMap::FilterTypes(const cec_device_type_list &types, CECDEVICEVEC &devices) { + cec_device_type_list t(types);//silly, but needed to retain abi CECDEVICEVEC newDevices; for (CECDEVICEVEC::const_iterator it = devices.begin(); it != devices.end(); it++) { - if (types.IsSet((*it)->GetType())) + if (t.IsSet((*it)->GetType())) newDevices.push_back(*it); } devices = newDevices; @@ -258,7 +262,30 @@ void CCECDeviceMap::FilterType(const cec_device_type type, CECDEVICEVEC &devices cec_logical_addresses CCECDeviceMap::ToLogicalAddresses(const CECDEVICEVEC &devices) { cec_logical_addresses addresses; + addresses.Clear(); for (CECDEVICEVEC::const_iterator it = devices.begin(); it != devices.end(); it++) addresses.Set((*it)->GetLogicalAddress()); return addresses; } + +void CCECDeviceMap::GetChildrenOf(CECDEVICEVEC& devices, CCECBusDevice* device) const +{ + devices.clear(); + if (!device) + return; + + uint16_t iPA = device->GetCurrentPhysicalAddress(); + + for (CECDEVICEMAP::const_iterator it = m_busDevices.begin(); it != m_busDevices.end(); it++) + { + uint16_t iCurrentPA = it->second->GetCurrentPhysicalAddress(); + if (CCECTypeUtils::PhysicalAddressIsIncluded(iPA, iCurrentPA)) + devices.push_back(it->second); + } +} + +void CCECDeviceMap::SignalAll(cec_opcode opcode) +{ + for (CECDEVICEMAP::iterator it = m_busDevices.begin(); it != m_busDevices.end(); it++) + it->second->SignalOpcode(opcode); +}