summaryrefslogtreecommitdiffstats
path: root/skeleton-subsystem/SkeletonSubsystemObject.cpp
diff options
context:
space:
mode:
authorKevin Rocard <kevinx.rocard@intel.com>2013-01-28 17:07:33 +0100
committerDavid Wagner <david.wagner@intel.com>2014-02-27 18:34:02 +0100
commitad12cb6f1d4ac9f2c24171567f935693db211bd6 (patch)
tree5aa051ad2913e40fcb17b23b700112dcdfd092bf /skeleton-subsystem/SkeletonSubsystemObject.cpp
parent37a6ee8e632205b18159be428bfc73ade527726b (diff)
downloadexternal_parameter-framework-ad12cb6f1d4ac9f2c24171567f935693db211bd6.zip
external_parameter-framework-ad12cb6f1d4ac9f2c24171567f935693db211bd6.tar.gz
external_parameter-framework-ad12cb6f1d4ac9f2c24171567f935693db211bd6.tar.bz2
Add a example skeleton plugin
Change-Id: I16c4e9c90395648dc3d583687c97f4b72401be8b Signed-off-by: Kevin Rocard <kevinx.rocard@intel.com>
Diffstat (limited to 'skeleton-subsystem/SkeletonSubsystemObject.cpp')
-rw-r--r--skeleton-subsystem/SkeletonSubsystemObject.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/skeleton-subsystem/SkeletonSubsystemObject.cpp b/skeleton-subsystem/SkeletonSubsystemObject.cpp
new file mode 100644
index 0000000..5c251db
--- /dev/null
+++ b/skeleton-subsystem/SkeletonSubsystemObject.cpp
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2011-2014, Intel Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation and/or
+ * other materials provided with the distribution.
+ *
+ * 3. Neither the name of the copyright holder nor the names of its contributors
+ * may be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <fstream>
+#include <string>
+#include <sstream>
+#include <cstdlib>
+#include <cassert>
+#include <iostream>
+#include "ParameterType.h"
+#include "MappingContext.h"
+#include "SkeletonMappingKeys.h"
+#include "InstanceConfigurableElement.h"
+#include "SkeletonSubsystemObject.h"
+
+#define STR_FORMAT_LENGTH 32
+
+#define base CFormattedSubsystemObject
+
+CSkeletonSubsystemObject::CSkeletonSubsystemObject(
+ const string& strMappingValue,
+ CInstanceConfigurableElement* pInstanceConfigurableElement,
+ const CMappingContext& context
+ ) :
+ base(pInstanceConfigurableElement,
+ strMappingValue,
+ EAmend1,
+ EAmendEnd - EAmend1 + 1,
+ context),
+ _bWrongElementTypeError(false)
+{
+ // Get actual element type
+ const CParameterType* pParameterType = static_cast<const CParameterType*>(pInstanceConfigurableElement->getTypeElement());
+
+ // Retrieve sizes
+ _uiScalarSize = pParameterType->getSize();
+ _uiArraySize = pInstanceConfigurableElement->getFootPrint() / _uiScalarSize;
+
+ // Construct message
+ _strMessage = context.getItem(ESkeletonOwner) + ":" + strMappingValue ;
+
+ // Handle types
+ // Check we are able to handle elements (no exception support, defer the error)
+ switch(pInstanceConfigurableElement->getType()) {
+
+ case CInstanceConfigurableElement::EParameter:
+ break;
+ default:
+ _bWrongElementTypeError = true;
+ break;
+ }
+
+}
+// Sync to/from HW
+bool CSkeletonSubsystemObject::accessHW(bool bReceive, string& strError)
+{
+ // Check parameter type is ok (deferred error, no exceptions available :-()
+ if (_bWrongElementTypeError) {
+
+ strError = "Unsupported parameter type";
+
+ return false;
+ }
+
+ return base::accessHW(bReceive, strError);
+}
+
+bool CSkeletonSubsystemObject::sendToHW(string& strError)
+{
+ (void) strError;
+
+ uint32_t uiIndex;
+
+ void* pvValue = alloca(_uiScalarSize);
+
+ for (uiIndex = 0 ; uiIndex < _uiArraySize ; uiIndex++) {
+
+ // Read Value in BlackBoard
+ blackboardRead(pvValue, _uiScalarSize);
+
+ // Send here the value
+ cout << "Sending to HW: " << _strMessage << endl;
+ }
+
+ return true;
+}
+
+bool CSkeletonSubsystemObject::receiveFromHW(string& strError)
+{
+ (void) strError;
+
+ uint32_t uiIndex;
+
+ void* pvValue = alloca(_uiScalarSize);
+
+ for (uiIndex = 0 ; uiIndex < _uiArraySize ; uiIndex++) {
+
+ // Retreive here the value
+ cout << "Retreive from HW: " << _strMessage << endl;
+
+ // Write Value in Blackboard
+ blackboardWrite(pvValue, _uiScalarSize);
+ }
+
+ return true;
+}