From f1388dd1e116f98078bd837fc3546a77571e363b Mon Sep 17 00:00:00 2001 From: Florian Hoelzl <hoelzl@fortiss.org> Date: Thu, 7 Jun 2018 15:45:09 +0200 Subject: [PATCH] Added 7 segment display actuator generator extension. Signed-off-by: Florian Hoelzl <hoelzl@fortiss.org> --- org.fortiss.af3.platform.raspberry/plugin.xml | 13 +++ .../raspberry/generator/extension/.ratings | 2 +- .../extension/SingleUnitMainGenerator.java | 8 +- .../generator/extension/brick/.ratings | 1 + .../ActuatorDigitsGeneratorExtension.java | 102 ++++++++++++++++++ .../brick/ActuatorDigitsTransformation.java | 28 +++++ 6 files changed, 150 insertions(+), 4 deletions(-) create mode 100644 org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/ActuatorDigitsGeneratorExtension.java create mode 100644 org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/transform/brick/ActuatorDigitsTransformation.java diff --git a/org.fortiss.af3.platform.raspberry/plugin.xml b/org.fortiss.af3.platform.raspberry/plugin.xml index d2a572fa..c331e3fe 100644 --- a/org.fortiss.af3.platform.raspberry/plugin.xml +++ b/org.fortiss.af3.platform.raspberry/plugin.xml @@ -201,6 +201,19 @@ </objectClass> </target> </transformationProvider> + <transformationProvider + transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.brick.ActuatorDigitsTransformation"> + <source> + <objectClass + objectClass="org.fortiss.af3.platform.raspberry.model.brick.ActuatorDigits"> + </objectClass> + </source> + <target> + <objectClass + objectClass="org.fortiss.af3.platform.raspberry.generator.extension.brick.ActuatorDigitsGeneratorExtension"> + </objectClass> + </target> + </transformationProvider> <transformationProvider transformationProvider="org.fortiss.af3.platform.raspberry.generator.transform.brick.LaserRangeTransformation"> <source> diff --git a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/.ratings b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/.ratings index 4d7a84e1..001d5a64 100644 --- a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/.ratings +++ b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/.ratings @@ -5,4 +5,4 @@ ConsoleOutputGeneratorExtension.java d57db44d57630a50e26c9eeed90d6631bf99db5d YE MultiUnitMainGenerator.java 458754b89c2d79db3fee08baa444424772e40fb7 RED PWMActuatorGeneratorExtension.java 8cbfd72070cfc1c8a4da4ccc1d18a6b3e75cea7f YELLOW RaspberryPIGeneratorExtension.java 2cd95ddc54d7562bd9fa0b8a4018c25eda01b5a8 RED -SingleUnitMainGenerator.java 93d0370b01330ab023e02761df818d36fac42b0f RED +SingleUnitMainGenerator.java bea3d14367798b0ac6e832328f57cd6e7ea05425 RED diff --git a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/SingleUnitMainGenerator.java b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/SingleUnitMainGenerator.java index 93d0370b..bea3d143 100644 --- a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/SingleUnitMainGenerator.java +++ b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/SingleUnitMainGenerator.java @@ -306,7 +306,8 @@ class SingleUnitMainGenerator { String sPostfix = null; if(exec instanceof ISingletonGeneratorExtension) { sPostfix = - singletonPostfixMap.get(((ISingletonGeneratorExtension)exec).getSingletonIdentifier()); + singletonPostfixMap.get(((ISingletonGeneratorExtension)exec) + .getSingletonIdentifier()); } String iPostfix = instancePostfixMap.get(exec); if(exec instanceof IWriteableGeneratorExtension) { @@ -316,7 +317,7 @@ class SingleUnitMainGenerator { String novalCode = wexec.getNoValWriteCode(iPostfix, sPostfix, outport); if(novalCode != null) { String novalVariable = getPortNoValIdentifier(sourceVariable); - return "if (" + novalVariable + ") {\n" + novalCode + "}\n else {\n" + writeCode + + return "if (" + novalVariable + ") {\n" + novalCode + "} else {\n" + writeCode + "}\n"; } return writeCode; @@ -331,7 +332,8 @@ class SingleUnitMainGenerator { String sPostfix = null; if(exec instanceof ISingletonGeneratorExtension) { sPostfix = - singletonPostfixMap.get(((ISingletonGeneratorExtension)exec).getSingletonIdentifier()); + singletonPostfixMap.get(((ISingletonGeneratorExtension)exec) + .getSingletonIdentifier()); } String iPostfix = instancePostfixMap.get(exec); if(exec instanceof IReadableGeneratorExtension) { diff --git a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/.ratings b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/.ratings index 3554096a..72b0f75c 100644 --- a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/.ratings +++ b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/.ratings @@ -1,3 +1,4 @@ +ActuatorDigitsGeneratorExtension.java 5df8861318c5b8002785ae4ff9fb9af0d095b7bc YELLOW BrickGeneratorExtensionBase.java 01442772f80ebf32eaf0507495a4380d0de034b1 YELLOW LaserRangeSensorGeneratorExtension.java ff0c1e5e96a69b7deb6d7675e40f18510a36e7a0 YELLOW UltraSonicSensorGeneratorExtension.java cbd4555e28600ce8f47c737330adfc9b5581bae8 YELLOW diff --git a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/ActuatorDigitsGeneratorExtension.java b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/ActuatorDigitsGeneratorExtension.java new file mode 100644 index 00000000..5df88613 --- /dev/null +++ b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/extension/brick/ActuatorDigitsGeneratorExtension.java @@ -0,0 +1,102 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.platform.raspberry.generator.extension.brick; + +import org.fortiss.af3.component.model.OutputPort; +import org.fortiss.af3.platform.raspberry.generator.framework.IInstanceInitializationGeneratorExtension; +import org.fortiss.af3.platform.raspberry.generator.framework.IWriteableGeneratorExtension; +import org.fortiss.af3.platform.raspberry.model.brick.ActuatorDigits; + +/** + * Generator extension for {@link ActuatorDigits}s. + * + * @author hoelzl + */ +public class ActuatorDigitsGeneratorExtension extends BrickGeneratorExtensionBase<ActuatorDigits> + implements IWriteableGeneratorExtension, IInstanceInitializationGeneratorExtension { + /** Constructor. */ + public ActuatorDigitsGeneratorExtension(ActuatorDigits modelElement) { + super(modelElement); + } + + /** {@inheritDoc} */ + @Override + public String getHeaderFileName() { + return "bricklet_segment_display_4x7.h"; + } + + /** {@inheritDoc} */ + @Override + public String getVariableDeclaration(String postfix, String singletonPostfix) { + StringBuilder sb = new StringBuilder(); + sb.append("static SegmentDisplay4x7 segment_display_" + postfix + ";\n"); + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public String getInstanceAuxiliaryFunctions(String postfix, String singletonPostfix) { + StringBuilder sb = new StringBuilder(); + sb.append("static void set_led_display_" + postfix + + "(SegmentDisplay4x7 *segment_display, uint16_t value, bool showHex) {\n"); + sb.append("static const uint8_t digits_" + postfix + "[] = {0x3f,0x06,0x5b,0x4f,\n"); + sb.append(" 0x66,0x6d,0x7d,0x07,\n"); + sb.append(" 0x7f,0x6f,0x77,0x7c,\n"); + sb.append(" 0x39,0x5e,0x79,0x71};\n"); + sb.append("if(showHex) {\n"); + sb.append("uint8_t segments[4] = {(uint8_t) digits_" + postfix + + "[(value >> 12) & 0x0F], (uint8_t) digits_" + postfix + + "[(value >> 8) & 0x0F], (uint8_t) digits_" + postfix + + "[(value >> 4) & 0x0F], (uint8_t) digits_" + postfix + "[value & 0x0F]};\n"); + sb.append("segment_display_4x7_set_segments(segment_display, segments, 5, false);\n"); + sb.append("} else {\n"); + sb.append("uint8_t segments[4] = {(uint8_t) digits_" + postfix + + "[(value%10000)/1000], (uint8_t) digits_" + postfix + + "[(value%1000)/100], (uint8_t) digits_" + postfix + + "[(value%100)/10], (uint8_t) digits_" + postfix + "[value%10]};\n"); + sb.append("segment_display_4x7_set_segments(segment_display, segments, 5, false);\n"); + sb.append("}\n"); + sb.append("}\n\n"); + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public String getInitializationCode(String postfix, String singletonPostfix) { + StringBuilder sb = new StringBuilder(); + sb.append("segment_display_4x7_create(&segment_display_" + postfix + ", \"" + + modelElement.getUniqueBrickletID() + "\", &" + + getConnectionVariable(singletonPostfix) + ");\n"); + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public String getWriteCode(String postfix, String singletonPostfix, OutputPort logicalSignal, + String value) { + StringBuilder sb = new StringBuilder(); + sb.append("set_led_display_" + postfix + "(&segment_display_" + postfix + ", (uint16_t)" + + value + ", " + modelElement.isShowHexValue() + ");\n"); + return sb.toString(); + } + + /** {@inheritDoc} */ + @Override + public String getNoValWriteCode(String postfix, String singletonPostfix, + OutputPort logicalSignal) { + return null; + } +} diff --git a/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/transform/brick/ActuatorDigitsTransformation.java b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/transform/brick/ActuatorDigitsTransformation.java new file mode 100644 index 00000000..7b7b0fb3 --- /dev/null +++ b/org.fortiss.af3.platform.raspberry/src/org/fortiss/af3/platform/raspberry/generator/transform/brick/ActuatorDigitsTransformation.java @@ -0,0 +1,28 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.af3.platform.raspberry.generator.transform.brick; + +import org.fortiss.af3.platform.raspberry.generator.extension.brick.ActuatorDigitsGeneratorExtension; +import org.fortiss.af3.platform.raspberry.generator.transform.RasPiGeneratorTransformationBase; +import org.fortiss.af3.platform.raspberry.model.brick.ActuatorDigits; + +/** Transformation for {@link ActuatorDigits}. */ +public class ActuatorDigitsTransformation extends RasPiGeneratorTransformationBase { + /** Constructor. */ + public ActuatorDigitsTransformation() { + super(ActuatorDigits.class, ActuatorDigitsGeneratorExtension.class); + } +} -- GitLab