/*
* 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.
* 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;
{
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);
}
}
{
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);
}
}
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;
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);
+}