updated copyright messages for 2013
[deb_libcec.git] / src / lib / devices / CECDeviceMap.cpp
index 2603e33d2de82fb22b37a71bcb880fc2f8754da9..84fda1d68d79da50feacbc7e7a8145e2a648b8ae 100644 (file)
@@ -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.
  *     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);
+}