From cb746ac5aabfaaf962b4a70eff1555eb99688865 Mon Sep 17 00:00:00 2001 From: hneemann Date: Sat, 31 Mar 2018 10:06:45 +0200 Subject: [PATCH] refactoring of polarity aware LED --- distribution/ReleaseNotes.txt | 1 + .../java/de/neemann/digital/core/io/Out.java | 10 ++++ .../de/neemann/digital/core/io/RealLED.java | 54 ------------------- .../digital/draw/library/ElementLibrary.java | 19 ++++--- ...DShape.java => PolarityAwareLEDShape.java} | 6 +-- .../digital/draw/shapes/ShapeFactory.java | 2 +- src/main/resources/lang/lang_de.xml | 8 +-- src/main/resources/lang/lang_en.xml | 8 +-- .../resources/dig/backtrack/AllComponents.dig | 2 +- src/test/resources/dig/shapes.dig | 4 +- 10 files changed, 39 insertions(+), 75 deletions(-) delete mode 100644 src/main/java/de/neemann/digital/core/io/RealLED.java rename src/main/java/de/neemann/digital/draw/shapes/{RealLEDShape.java => PolarityAwareLEDShape.java} (96%) diff --git a/distribution/ReleaseNotes.txt b/distribution/ReleaseNotes.txt index 77672d4ca..3c40e40a7 100644 --- a/distribution/ReleaseNotes.txt +++ b/distribution/ReleaseNotes.txt @@ -17,6 +17,7 @@ HEAD, planed as v0.18 - Added a simple bidirectional splitter. - Added a monoflop. - Added a 16 Segment display. +- Added a polarity aware LED. - Added a counter with preset. v0.17, released on 19. Feb 2018 diff --git a/src/main/java/de/neemann/digital/core/io/Out.java b/src/main/java/de/neemann/digital/core/io/Out.java index eec0aad38..5d7379585 100644 --- a/src/main/java/de/neemann/digital/core/io/Out.java +++ b/src/main/java/de/neemann/digital/core/io/Out.java @@ -46,6 +46,16 @@ public class Out implements Element { .addAttribute(Keys.SIZE) .addAttribute(Keys.COLOR); + /** + * The polarity aware LED description + */ + public static final ElementTypeDescription POLARITYAWARELEDDESCRIPTION + = new ElementTypeDescription("PolarityAwareLED", + attributes -> new Out(1, 1), input("A"), input("C")) + .addAttribute(Keys.ROTATE) + .addAttribute(Keys.LABEL) + .addAttribute(Keys.COLOR); + /** * The seven segment display description */ diff --git a/src/main/java/de/neemann/digital/core/io/RealLED.java b/src/main/java/de/neemann/digital/core/io/RealLED.java deleted file mode 100644 index 3e04c17a2..000000000 --- a/src/main/java/de/neemann/digital/core/io/RealLED.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (c) 2017 Helmut Neemann - * Use of this source code is governed by the GPL v3 license - * that can be found in the LICENSE file. - */ -package de.neemann.digital.core.io; - -import de.neemann.digital.core.Model; -import de.neemann.digital.core.NodeException; -import de.neemann.digital.core.ObservableValues; -import de.neemann.digital.core.element.Element; -import de.neemann.digital.core.element.ElementAttributes; -import de.neemann.digital.core.element.ElementTypeDescription; -import de.neemann.digital.core.element.Keys; - -import static de.neemann.digital.core.element.PinInfo.input; - -/** - * A real LED - */ -public class RealLED implements Element { - - /** - * The LED description - */ - public static final ElementTypeDescription DESCRIPTION - = new ElementTypeDescription(RealLED.class, input("A"), input("C")) - .addAttribute(Keys.ROTATE) - .addAttribute(Keys.LABEL) - .addAttribute(Keys.COLOR); - - /** - * Creates a new light bulb - * - * @param attr the attributes - */ - public RealLED(ElementAttributes attr) { - } - - @Override - public void setInputs(ObservableValues inputs) throws NodeException { - inputs.get(0).checkBits(1, null, 0); - inputs.get(1).checkBits(1, null, 1); - } - - @Override - public ObservableValues getOutputs() { - return ObservableValues.EMPTY_LIST; - } - - @Override - public void registerNodes(Model model) { - } -} diff --git a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java index 260c33b81..5b120fde4 100644 --- a/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java +++ b/src/main/java/de/neemann/digital/draw/library/ElementLibrary.java @@ -52,6 +52,7 @@ import java.util.*; */ public class ElementLibrary implements Iterable { private static final Logger LOGGER = LoggerFactory.getLogger(ElementLibrary.class); + private static final long MIN_RESCAN_INTERVAL = 5000; /** * @return the additional library path @@ -82,6 +83,7 @@ public class ElementLibrary implements Iterable private ElementLibraryFolder custom; private File rootLibraryPath; private Exception exception; + private long lastRescanTime; /** * Creates a new instance. @@ -117,7 +119,7 @@ public class ElementLibrary implements Iterable .add(Probe.DESCRIPTION) .add(new LibraryNode(Lang.get("lib_more")) .add(LightBulb.DESCRIPTION) - .add(RealLED.DESCRIPTION) + .add(Out.POLARITYAWARELEDDESCRIPTION) .add(Out.SEVENDESCRIPTION) .add(Out.SEVENHEXDESCRIPTION) .add(Out.SIXTEENDESCRIPTION) @@ -396,11 +398,15 @@ public class ElementLibrary implements Iterable if (rootLibraryPath == null) throw new ElementNotFoundException(Lang.get("err_fileNeedsToBeSaved")); - rescanFolder(); + LOGGER.debug("could not find " + elementName); - node = map.get(elementName); - if (node != null) - return node.getDescription(); + if (System.currentTimeMillis() - lastRescanTime > MIN_RESCAN_INTERVAL) { + rescanFolder(); + + node = map.get(elementName); + if (node != null) + return node.getDescription(); + } } catch (IOException e) { throw new ElementNotFoundException(Lang.get("msg_errorImportingModel_N0", elementName), e); } @@ -408,7 +414,7 @@ public class ElementLibrary implements Iterable throw new ElementNotFoundException(Lang.get("err_element_N_notFound", elementName)); } - private void rescanFolder() throws IOException { + private void rescanFolder() { LOGGER.debug("rescan folder"); LibraryNode cn = custom.scanFolder(rootLibraryPath, false); @@ -416,6 +422,7 @@ public class ElementLibrary implements Iterable if (cn != null) fireLibraryChanged(cn); + lastRescanTime = System.currentTimeMillis(); } /** diff --git a/src/main/java/de/neemann/digital/draw/shapes/RealLEDShape.java b/src/main/java/de/neemann/digital/draw/shapes/PolarityAwareLEDShape.java similarity index 96% rename from src/main/java/de/neemann/digital/draw/shapes/RealLEDShape.java rename to src/main/java/de/neemann/digital/draw/shapes/PolarityAwareLEDShape.java index 4032820bc..9e5546de7 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/RealLEDShape.java +++ b/src/main/java/de/neemann/digital/draw/shapes/PolarityAwareLEDShape.java @@ -23,9 +23,9 @@ import static de.neemann.digital.draw.shapes.PullDownShape.HEIGHT; import static de.neemann.digital.draw.shapes.PullDownShape.WIDTH2; /** - * The real LED shape + * The polarity aware LED shape */ -public class RealLEDShape implements Shape { +public class PolarityAwareLEDShape implements Shape { private static final int RAD = SIZE * 3 / 4; private final PinDescriptions inputs; private final Style style; @@ -42,7 +42,7 @@ public class RealLEDShape implements Shape { * @param inputs the inputs * @param outputs the outputs */ - public RealLEDShape(ElementAttributes attr, PinDescriptions inputs, PinDescriptions outputs) { + public PolarityAwareLEDShape(ElementAttributes attr, PinDescriptions inputs, PinDescriptions outputs) { this.inputs = inputs; style = Style.NORMAL.deriveFillStyle(attr.get(Keys.COLOR)); String l = attr.getLabel(); diff --git a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java index 9fd367c40..4aa53c72c 100644 --- a/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java +++ b/src/main/java/de/neemann/digital/draw/shapes/ShapeFactory.java @@ -90,7 +90,7 @@ public final class ShapeFactory { map.put(Out.DESCRIPTION.getName(), OutputShape::new); map.put(Out.LEDDESCRIPTION.getName(), LEDShape::new); map.put(LightBulb.DESCRIPTION.getName(), LightBulbShape::new); - map.put(RealLED.DESCRIPTION.getName(), RealLEDShape::new); + map.put(Out.POLARITYAWARELEDDESCRIPTION.getName(), PolarityAwareLEDShape::new); map.put(Button.DESCRIPTION.getName(), ButtonShape::new); map.put(Probe.DESCRIPTION.getName(), ProbeShape::new); map.put(Clock.DESCRIPTION.getName(), ClockShape::new); diff --git a/src/main/resources/lang/lang_de.xml b/src/main/resources/lang/lang_de.xml index 8199e8fd2..ecec85088 100644 --- a/src/main/resources/lang/lang_de.xml +++ b/src/main/resources/lang/lang_de.xml @@ -168,11 +168,11 @@ Anschluss Anschluss - LED mit zwei Anschlüssen - LED mit zwei Anschlüssen für die Kathode und die Anode. Die LED leuchtet + LED mit zwei Anschlüssen + LED mit zwei Anschlüssen für die Kathode und die Anode. Die LED leuchtet nur, wenn die Anode auf High und die Kathode auf Low gelegt wird. - Die Anode der LED. - Die Kathode der LED. + Die Anode der LED. + Die Kathode der LED. Siebensegmentanzeige Siebensegmentanzeige, bei der jedes Segment über einen eigenen Eingang gesteuert diff --git a/src/main/resources/lang/lang_en.xml b/src/main/resources/lang/lang_en.xml index 688e60b99..15c429d86 100644 --- a/src/main/resources/lang/lang_en.xml +++ b/src/main/resources/lang/lang_en.xml @@ -133,11 +133,11 @@ Lights up if the input is set to 1. LED Input. LED lights up if the input is set to 1. - LED with two connections. - LED with connections for the cathode and the anode. The LED lights up, + LED with two connections. + LED with connections for the cathode and the anode. The LED lights up, if the anode is connected to high and the cathode is connected to low. - The anode connection of the LED. - The cathode connection of the LED. + The anode connection of the LED. + The cathode connection of the LED. Input Can be used to interactively manipulate an input signal in a circuit with the diff --git a/src/test/resources/dig/backtrack/AllComponents.dig b/src/test/resources/dig/backtrack/AllComponents.dig index 2c238c6ce..53714e8b4 100644 --- a/src/test/resources/dig/backtrack/AllComponents.dig +++ b/src/test/resources/dig/backtrack/AllComponents.dig @@ -535,7 +535,7 @@ - RealLED + PolarityAwareLED diff --git a/src/test/resources/dig/shapes.dig b/src/test/resources/dig/shapes.dig index ed7a42e7c..6579b717c 100644 --- a/src/test/resources/dig/shapes.dig +++ b/src/test/resources/dig/shapes.dig @@ -469,9 +469,9 @@ - RealLED + PolarityAwareLED - +