parameter-framework: initial commit

BZ: 6081

Parameter-framework is still-under-development, Intel proprietary,
multi-platform (standard C++, for now only linux, no dependency on
Android) software that allows system-wide parameter management. It
relies on a number of configurations files, from which it knows how
/ when to hand out settings towards the hardware (subsystems) at
runtime.
3 kinds of configuration files are used:
- Structure description files indicating the actual parameter
structure, types, min/max values, data representation.
- Configurable domain description file containing the actual
distribution of parameters over different domains, that is, different
set of configurations, each of which being dynamically activated
based on selection criteria rules that are themselves configurable.
Configurable domains file contain the tuned settings along the tuning
process, that is during the period where the system is being tuned.
- Binary settings file used to store the settings when the tuning
process is complete.

Changing any of those files causes no recompilation of the framework.
This project is based on a open plugin architecture allowing any kind
of subsystems to be handled, whatever their respective Endianness.
It fully relies on the platform SW to provide it with with the
kowledge of exisitng selection criteria (selected device, current
mode), as well as change events that occuring on them, thus
triggering the application of corresponding configuration settings
wherever appropriate.
It supports handling mutliple parameter classes (Audio, Energy
management) through TCP/IP interface.
For now tuning commands can be sent to parameter-framework instances
through a command-line utility, via adb over USB or via ethernet/WIFI.

Change-Id: If7709c464db118f367f953e0824f49cce9fd0402
Orig-Change-Id: I7842e8808a4cfc0c615e0365e6d02101971ae2dc
Signed-off-by: Patrick Benavoli <patrickx.benavoli@intel.com>
Reviewed-on: http://android.intel.com:8080/16877
Reviewed-by: Mahe, Erwan <erwan.mahe@intel.com>
Tested-by: Barthes, FabienX <fabienx.barthes@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
diff --git a/parameter/SelectionCriteria.cpp b/parameter/SelectionCriteria.cpp
new file mode 100644
index 0000000..f92807c
--- /dev/null
+++ b/parameter/SelectionCriteria.cpp
@@ -0,0 +1,80 @@
+/* <auto_header>
+ * <FILENAME>
+ * 
+ * INTEL CONFIDENTIAL
+ * Copyright © 2011 Intel 
+ * Corporation All Rights Reserved.
+ * 
+ * The source code contained or described herein and all documents related to
+ * the source code ("Material") are owned by Intel Corporation or its suppliers
+ * or licensors. Title to the Material remains with Intel Corporation or its
+ * suppliers and licensors. The Material contains trade secrets and proprietary
+ * and confidential information of Intel or its suppliers and licensors. The
+ * Material is protected by worldwide copyright and trade secret laws and
+ * treaty provisions. No part of the Material may be used, copied, reproduced,
+ * modified, published, uploaded, posted, transmitted, distributed, or
+ * disclosed in any way without Intel’s prior express written permission.
+ * 
+ * No license under any patent, copyright, trade secret or other intellectual
+ * property right is granted to or conferred upon you by disclosure or delivery
+ * of the Materials, either expressly, by implication, inducement, estoppel or
+ * otherwise. Any license under such intellectual property rights must be
+ * express and approved by Intel in writing.
+ * 
+ *  AUTHOR: Patrick Benavoli (patrickx.benavoli@intel.com)
+ * CREATED: 2011-06-01
+ * UPDATED: 2011-07-27
+ * 
+ * 
+ * </auto_header>
+ */
+#include "SelectionCriteria.h"
+#include "SelectionCriterionLibrary.h"
+#include "SelectionCriteriaDefinition.h"
+
+#define base CElement
+
+CSelectionCriteria::CSelectionCriteria()
+{
+    addChild(new CSelectionCriterionLibrary);
+    addChild(new CSelectionCriteriaDefinition);
+}
+
+string CSelectionCriteria::getKind() const
+{
+    return "SelectionCriteria";
+}
+
+// Selection Criteria/Type creation
+CSelectionCriterionType* CSelectionCriteria::createSelectionCriterionType(bool bIsInclusive)
+{
+    return getSelectionCriterionLibrary()->createSelectionCriterionType(bIsInclusive);
+}
+
+CSelectionCriterion* CSelectionCriteria::createSelectionCriterion(const string& strName, const CSelectionCriterionType* pSelectionCriterionType)
+{
+    return getSelectionCriteriaDefinition()->createSelectionCriterion(strName, pSelectionCriterionType);
+}
+
+// Subscription
+void CSelectionCriteria::setObserver(ISelectionCriterionObserver* pSelectionCriterionObserver)
+{
+    // Delegate
+    getSelectionCriteriaDefinition()->setObserver(pSelectionCriterionObserver);
+}
+
+// Children access
+CSelectionCriterionLibrary* CSelectionCriteria::getSelectionCriterionLibrary()
+{
+    return static_cast<CSelectionCriterionLibrary*>(getChild(ESelectionCriterionLibrary));
+}
+
+CSelectionCriteriaDefinition* CSelectionCriteria::getSelectionCriteriaDefinition()
+{
+    return static_cast<CSelectionCriteriaDefinition*>(getChild(ESelectionCriteriaDefinition));
+}
+
+const CSelectionCriteriaDefinition* CSelectionCriteria::getSelectionCriteriaDefinition() const
+{
+    return static_cast<const CSelectionCriteriaDefinition*>(getChild(ESelectionCriteriaDefinition));
+}