From 3b232ad4f575fb778b51d5349d4beea08e744064 Mon Sep 17 00:00:00 2001 From: "T. van der Zwan" Date: Mon, 30 Sep 2013 15:40:51 +0200 Subject: [PATCH] Renamed packaging to HyperCon. Added javadoc comments. Added build script for auto jar-build. Former-commit-id: d54f184b3b9fad359c5469361d6f93a8b884a00b --- src/config-tool/ConfigTool/build.xml | 26 ++++ .../hyperion/config/HyperionConfigApplet.java | 23 ---- .../src/org/hyperion/config/Main.java | 24 ---- .../hyperion/config/spec/BootSequence.java | 29 ----- .../org/hyperion/config/spec/BorderSide.java | 22 ---- .../org/hyperion/config/spec/DeviceType.java | 9 -- .../config/spec/ImageProcessConfig.java | 21 ---- .../src/org/hyperion/config/spec/Led.java | 21 ---- .../org/hyperion/config/spec/Ws2801Led.java | 83 ------------- .../org/hyperion/hypercon/HyperConApplet.java | 34 ++++++ .../{config => hypercon}/LedFrameFactory.java | 113 ++++++++++++++---- .../{config => hypercon}/LedString.java | 30 +++-- .../src/org/hyperion/hypercon/Main.java | 37 ++++++ .../gui/ColorConfigPanel.java | 7 +- .../{config => hypercon}/gui/ConfigPanel.java | 42 +++++-- .../gui/ImageProcessPanel.java | 27 +++-- .../{config => hypercon}/gui/JHyperionTv.java | 6 +- .../gui/LedFramePanel.java | 6 +- .../gui/MiscConfigPanel.java | 6 +- .../gui/TestImageBBB_01.png.REMOVED.git-id | 0 .../gui/TestImageBBB_02.png.REMOVED.git-id | 0 .../gui/TestImageBBB_03.png.REMOVED.git-id | 0 .../gui/TestImage_01.png.REMOVED.git-id | 0 .../gui/TestImage_02.png.REMOVED.git-id | 0 .../gui/TestImage_03.png.REMOVED.git-id | 0 .../{config => hypercon}/gui/TestImage_04.png | Bin .../gui/TestImage_05.png.REMOVED.git-id | 0 .../hyperion/hypercon/spec/BootSequence.java | 31 +++++ .../hyperion/hypercon/spec/BorderSide.java | 37 ++++++ .../spec/ColorConfig.java | 38 +++++- .../spec/DeviceConfig.java | 14 ++- .../hyperion/hypercon/spec/DeviceType.java | 13 ++ .../hypercon/spec/ImageProcessConfig.java | 110 +++++++++++++++++ .../src/org/hyperion/hypercon/spec/Led.java | 33 +++++ .../spec/LedFrameConstruction.java | 9 +- .../{config => hypercon}/spec/MiscConfig.java | 23 +++- 36 files changed, 572 insertions(+), 302 deletions(-) create mode 100644 src/config-tool/ConfigTool/build.xml delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/HyperionConfigApplet.java delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/Main.java delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/spec/BootSequence.java delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/spec/BorderSide.java delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/spec/DeviceType.java delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/spec/ImageProcessConfig.java delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/spec/Led.java delete mode 100644 src/config-tool/ConfigTool/src/org/hyperion/config/spec/Ws2801Led.java create mode 100644 src/config-tool/ConfigTool/src/org/hyperion/hypercon/HyperConApplet.java rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/LedFrameFactory.java (53%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/LedString.java (75%) create mode 100644 src/config-tool/ConfigTool/src/org/hyperion/hypercon/Main.java rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/ColorConfigPanel.java (98%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/ConfigPanel.java (72%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/ImageProcessPanel.java (84%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/JHyperionTv.java (98%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/LedFramePanel.java (98%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/MiscConfigPanel.java (97%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImageBBB_01.png.REMOVED.git-id (100%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImageBBB_02.png.REMOVED.git-id (100%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImageBBB_03.png.REMOVED.git-id (100%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImage_01.png.REMOVED.git-id (100%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImage_02.png.REMOVED.git-id (100%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImage_03.png.REMOVED.git-id (100%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImage_04.png (100%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/gui/TestImage_05.png.REMOVED.git-id (100%) create mode 100644 src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BootSequence.java create mode 100644 src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BorderSide.java rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/spec/ColorConfig.java (63%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/spec/DeviceConfig.java (63%) create mode 100644 src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceType.java create mode 100644 src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/ImageProcessConfig.java create mode 100644 src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/Led.java rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/spec/LedFrameConstruction.java (91%) rename src/config-tool/ConfigTool/src/org/hyperion/{config => hypercon}/spec/MiscConfig.java (64%) diff --git a/src/config-tool/ConfigTool/build.xml b/src/config-tool/ConfigTool/build.xml new file mode 100644 index 00000000..7256686b --- /dev/null +++ b/src/config-tool/ConfigTool/build.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/HyperionConfigApplet.java b/src/config-tool/ConfigTool/src/org/hyperion/config/HyperionConfigApplet.java deleted file mode 100644 index 0b5292fe..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/HyperionConfigApplet.java +++ /dev/null @@ -1,23 +0,0 @@ -package org.hyperion.config; - -import java.awt.BorderLayout; -import java.awt.Dimension; - -import javax.swing.JApplet; - -import org.hyperion.config.gui.ConfigPanel; - -public class HyperionConfigApplet extends JApplet { - - public HyperionConfigApplet() { - super(); - - initialise(); - } - - private void initialise() { - setPreferredSize(new Dimension(600, 300)); - - add(new ConfigPanel(), BorderLayout.CENTER); - } -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/Main.java b/src/config-tool/ConfigTool/src/org/hyperion/config/Main.java deleted file mode 100644 index 2405c8df..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/Main.java +++ /dev/null @@ -1,24 +0,0 @@ -package org.hyperion.config; - -import javax.swing.JFrame; -import javax.swing.UIManager; - -import org.hyperion.config.gui.ConfigPanel; - -public class Main { - - public static void main(String[] pArgs) { - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } catch (Exception e) {} - - JFrame frame = new JFrame(); - frame.setTitle("Hyperion configuration Tool"); - frame.setSize(1300, 600); - frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - - frame.setContentPane(new ConfigPanel()); - - frame.setVisible(true); - } -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/BootSequence.java b/src/config-tool/ConfigTool/src/org/hyperion/config/spec/BootSequence.java deleted file mode 100644 index 805eb576..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/BootSequence.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.hyperion.config.spec; - -public enum BootSequence { - rainbow, - knight_rider, - none; - - public static BootSequence fromString(String pStr) { - for (BootSequence seq : values()) { - if (seq.toString().equalsIgnoreCase(pStr)) { - return seq; - } - } - return none; - } - - @Override - public String toString() { - switch(this) { - case rainbow: - return "Rainbow"; - case knight_rider: - return "Kinght Rider"; - case none: - return "None"; - } - return "None"; - } -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/BorderSide.java b/src/config-tool/ConfigTool/src/org/hyperion/config/spec/BorderSide.java deleted file mode 100644 index a0bd5675..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/BorderSide.java +++ /dev/null @@ -1,22 +0,0 @@ -package org.hyperion.config.spec; - -public enum BorderSide { - top_left (0.75*Math.PI), - top(0.5*Math.PI), - top_right(0.25*Math.PI), - right(0.0*Math.PI), - bottom_right(-0.25*Math.PI), - bottom(-0.5*Math.PI), - bottom_left(-0.75*Math.PI), - left(1.0*Math.PI); - - private final double mAngle; - - BorderSide(double pAngle) { - mAngle = pAngle; - } - - public double getAngle() { - return mAngle; - } -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/DeviceType.java b/src/config-tool/ConfigTool/src/org/hyperion/config/spec/DeviceType.java deleted file mode 100644 index f3cfa8ee..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/DeviceType.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.hyperion.config.spec; - -public enum DeviceType { - ws2801, - test, - none; - - -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/ImageProcessConfig.java b/src/config-tool/ConfigTool/src/org/hyperion/config/spec/ImageProcessConfig.java deleted file mode 100644 index 289849d3..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/ImageProcessConfig.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.hyperion.config.spec; - -import java.util.Observable; - -public class ImageProcessConfig extends Observable { - - /** The 'integration depth' of the leds along the horizontal axis of the tv */ - public double horizontalDepth = 0.05; - /** The 'integration depth' of the leds along the vertical axis of the tv */ - public double verticalDepth = 0.05; - - /** The fraction of overlap from one to another led */ - public double overlapFraction = 0.0; - - public boolean blackBorderRemoval = true; - - @Override - public void setChanged() { - super.setChanged(); - } -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/Led.java b/src/config-tool/ConfigTool/src/org/hyperion/config/spec/Led.java deleted file mode 100644 index 8135b3fc..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/Led.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.hyperion.config.spec; - -import java.awt.geom.Point2D; -import java.awt.geom.Rectangle2D; - - -public class Led { - - public int mLedSeqNr; - - public BorderSide mSide; - - public Point2D mLocation; - - public Rectangle2D mImageRectangle; - - @Override - public String toString() { - return "Led[" + mLedSeqNr + "] Location=" + mLocation + " Rectangle=" + mImageRectangle; - } -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/Ws2801Led.java b/src/config-tool/ConfigTool/src/org/hyperion/config/spec/Ws2801Led.java deleted file mode 100644 index ec46f0d6..00000000 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/Ws2801Led.java +++ /dev/null @@ -1,83 +0,0 @@ -package org.hyperion.config.spec; - -import java.awt.Color; -import java.awt.Graphics; -import java.awt.Graphics2D; - -import javax.swing.JComponent; - -public class Ws2801Led extends JComponent { - - enum Border { - top, - topleft, - left, - bottomleft, - bottom, - bottomright, - right, - topright; - } - - final int size = 12; - final int halfSize = size/2; - - final Border mBorder; - - public Ws2801Led(Border pBorder) { - mBorder = pBorder; - } - - - @Override - protected void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g.create(); - -// g2d.setColor(Color.BLACK); -// g2d.drawRect(0, 0, getWidth()-1, getHeight()-1); - - switch (mBorder) { - case top: - g2d.translate(getWidth()/2, getHeight()); - break; - case topleft: - g2d.translate(getWidth(), getHeight()); - g2d.rotate(1.75*Math.PI); - break; - case left: - g2d.translate(0, getHeight()/2); - g2d.rotate(Math.PI*0.5); - break; - case bottomleft: - g2d.translate(getWidth(), 0); - g2d.rotate(-0.75*Math.PI); - break; - case bottom: - g2d.translate(getWidth()/2, 0); - g2d.rotate(Math.PI*1.0); - break; - case bottomright: - g2d.rotate(0.75*Math.PI); - break; - case right: - g2d.translate(getWidth(), getHeight()/2); - g2d.rotate(Math.PI*1.5); - break; - case topright: - g2d.translate(0, getHeight()); - g2d.rotate(0.25*Math.PI); - break; - } - - g2d.setColor(new Color(255, 0, 0, 172)); - g2d.fillRoundRect(-3, -12, 6, 6, 2, 2); - - g2d.setColor(new Color(255, 0, 0, 255)); - g2d.drawRoundRect(-3, -12, 6, 6, 2, 2); - - g2d.setColor(Color.GRAY); - g2d.drawRect(-halfSize, -halfSize, size, halfSize); - g2d.fillRect(-halfSize, -halfSize, size, halfSize); - - } -} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/hypercon/HyperConApplet.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/HyperConApplet.java new file mode 100644 index 00000000..f165c8af --- /dev/null +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/HyperConApplet.java @@ -0,0 +1,34 @@ +package org.hyperion.hypercon; + +import java.awt.BorderLayout; +import java.awt.Dimension; + +import javax.swing.JApplet; + +import org.hyperion.hypercon.gui.ConfigPanel; + +/** + * Class for starting HyperCon (Hyperion configuration file builder) as a Applet (within a browser) + * + */ +public class HyperConApplet extends JApplet { + + /** + * Constructs the HyperCon Applet + */ + public HyperConApplet() { + super(); + + initialise(); + } + + /** + * Initialises this applet + */ + private void initialise() { + setPreferredSize(new Dimension(600, 300)); + + // Add the HyperCon configuration panel + add(new ConfigPanel(), BorderLayout.CENTER); + } +} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/LedFrameFactory.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/LedFrameFactory.java similarity index 53% rename from src/config-tool/ConfigTool/src/org/hyperion/config/LedFrameFactory.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/LedFrameFactory.java index d382c3e4..ff997ddf 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/LedFrameFactory.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/LedFrameFactory.java @@ -1,16 +1,28 @@ -package org.hyperion.config; +package org.hyperion.hypercon; import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; import java.util.Vector; -import org.hyperion.config.spec.BorderSide; -import org.hyperion.config.spec.ImageProcessConfig; -import org.hyperion.config.spec.Led; -import org.hyperion.config.spec.LedFrameConstruction; +import org.hyperion.hypercon.spec.BorderSide; +import org.hyperion.hypercon.spec.ImageProcessConfig; +import org.hyperion.hypercon.spec.Led; +import org.hyperion.hypercon.spec.LedFrameConstruction; +/** + * The LedFrameFactory translates user specifications (number of leds, etc) to actual led + * specifications (location of led, depth and width of integration, etc) + */ public class LedFrameFactory { + /** + * Convenience method for increasing the led counter (it might actually decrease if the frame is + * counter clockwise) + * + * @param frameSpec The specification of the led-frame + * @param pLedCounter The current led counter + * @return The counter/index of the next led + */ private static int increase(LedFrameConstruction frameSpec, int pLedCounter) { if (frameSpec.clockwiseDirection) { return (pLedCounter+1)%frameSpec.getLedCount(); @@ -23,6 +35,14 @@ public class LedFrameFactory { } + /** + * Translate a 'frame' and picture integration specification to per-led specification + * + * @param frameSpec The specification of the led frame + * @param processConfig The picture integration specification + * + * @return The per-led specification + */ public static Vector construct(LedFrameConstruction frameSpec, ImageProcessConfig processConfig) { Vector mLeds = new Vector<>(); @@ -31,71 +51,104 @@ public class LedFrameFactory { return mLeds; } + // Determine the led-number of the top-left led int iLed = (totalLedCount - frameSpec.firstLedOffset)%totalLedCount; if (iLed < 0) { iLed += totalLedCount; } + + // Construct the top-left led (if top-left is enabled) if (frameSpec.topLeftCorner) { - mLeds.add(createLed(frameSpec, processConfig, iLed, 0.0, 0.0, processConfig.overlapFraction, BorderSide.top_left)); + mLeds.add(createLed(frameSpec, processConfig, iLed, 0.0, 0.0, processConfig.getOverlapFraction(), BorderSide.top_left)); iLed = increase(frameSpec, iLed); } + + // Construct all leds along the top of the screen (if any) if (frameSpec.topLedCnt > 0) { + // Determine the led-spacing int ledCnt = frameSpec.topLedCnt; double ledSpacing = (double)1.0/(ledCnt); + for (int iTop=0; iTop 0) { + // Determine the led-spacing int ledCnt = frameSpec.rightLedCnt; double ledSpacing = 1.0/ledCnt; + for (int iRight=0; iRight 0) { + // Determine the led-spacing (based on top-leds [=bottom leds + gap size]) int ledCnt = frameSpec.topLedCnt; - double ledSpacing = (double)1.0/ledCnt; + for (int iBottom=(ledCnt-1); iBottom>=0; --iBottom) { + // Special case for the bottom-gap if (iBottom > (frameSpec.bottomLedCnt-1)/2 && iBottom < ledCnt - frameSpec.bottomLedCnt/2) { continue; } + // Compute the location of this led double led_x = ledSpacing/2.0 + iBottom * ledSpacing; double led_y = 1.0; - mLeds.add(createLed(frameSpec, processConfig, iLed, led_x, led_y, processConfig.overlapFraction, BorderSide.bottom)); + // Construct and add the single led specification to the list of leds + mLeds.add(createLed(frameSpec, processConfig, iLed, led_x, led_y, processConfig.getOverlapFraction(), BorderSide.bottom)); iLed = increase(frameSpec, iLed); } } + + // Construct the bottom-left led (if bottom-left is enabled) if (frameSpec.bottomLeftCorner) { - mLeds.add(createLed(frameSpec, processConfig, iLed, 0.0, 1.0, processConfig.overlapFraction, BorderSide.bottom_left)); + mLeds.add(createLed(frameSpec, processConfig, iLed, 0.0, 1.0, processConfig.getOverlapFraction(), BorderSide.bottom_left)); iLed = increase(frameSpec, iLed); } + + // Construct all leds along the left of the screen (if any) if (frameSpec.leftLedCnt > 0) { + // Determine the led-spacing int ledCnt = frameSpec.leftLedCnt; double ledSpacing = (double)1.0/ledCnt; + for (int iRight=(ledCnt-1); iRight>=0; --iRight) { + // Compute the location of this led double led_x = 0.0; double led_y = ledSpacing/2.0 + iRight * ledSpacing; - mLeds.add(createLed(frameSpec, processConfig, iLed, led_x, led_y, processConfig.overlapFraction, BorderSide.left)); + // Construct and add the single led specification to the list of leds + mLeds.add(createLed(frameSpec, processConfig, iLed, led_x, led_y, processConfig.getOverlapFraction(), BorderSide.left)); iLed = increase(frameSpec, iLed); } } @@ -103,6 +156,19 @@ public class LedFrameFactory { return mLeds; } + /** + * Constructs the specification of a single led + * + * @param pFrameSpec The overall led-frame specification + * @param pProcessSpec The overall image-processing specification + * @param seqNr The number of the led + * @param x_frac The x location of the led in fractional range [0.0; 1.0] + * @param y_frac The y location of the led in fractional range [0.0; 1.0] + * @param overlap_frac The fractional overlap of the led integration with its neighbor + * @param pBorderSide The side on which the led is located + * + * @return The image integration specifications of the single led + */ private static Led createLed(LedFrameConstruction pFrameSpec, ImageProcessConfig pProcessSpec, int seqNr, double x_frac, double y_frac, double overlap_frac, BorderSide pBorderSide) { Led led = new Led(); led.mLedSeqNr = seqNr; @@ -114,51 +180,50 @@ public class LedFrameFactory { switch (pBorderSide) { case top_left: { - led.mImageRectangle = new Rectangle2D.Double(0.0, 0.0, pProcessSpec.verticalDepth, pProcessSpec.horizontalDepth); + led.mImageRectangle = new Rectangle2D.Double(0.0, 0.0, pProcessSpec.getVerticalDepth(), pProcessSpec.getHorizontalDepth()); break; } case top_right: { - led.mImageRectangle = new Rectangle2D.Double(1.0-pProcessSpec.verticalDepth, 0.0, pProcessSpec.verticalDepth, pProcessSpec.horizontalDepth); + led.mImageRectangle = new Rectangle2D.Double(1.0-pProcessSpec.getVerticalDepth(), 0.0, pProcessSpec.getVerticalDepth(), pProcessSpec.getHorizontalDepth()); break; } case bottom_left: { - led.mImageRectangle = new Rectangle2D.Double(0.0, 1.0-pProcessSpec.horizontalDepth, pProcessSpec.verticalDepth, pProcessSpec.horizontalDepth); + led.mImageRectangle = new Rectangle2D.Double(0.0, 1.0-pProcessSpec.getHorizontalDepth(), pProcessSpec.getVerticalDepth(), pProcessSpec.getHorizontalDepth()); break; } case bottom_right: { - led.mImageRectangle = new Rectangle2D.Double(1.0-pProcessSpec.verticalDepth, 1.0-pProcessSpec.horizontalDepth, pProcessSpec.verticalDepth, pProcessSpec.horizontalDepth); + led.mImageRectangle = new Rectangle2D.Double(1.0-pProcessSpec.getVerticalDepth(), 1.0-pProcessSpec.getHorizontalDepth(), pProcessSpec.getVerticalDepth(), pProcessSpec.getHorizontalDepth()); break; } case top:{ double intXmin_frac = Math.max(0.0, x_frac-widthFrac); double intXmax_frac = Math.min(x_frac+widthFrac, 1.0); - led.mImageRectangle = new Rectangle2D.Double(intXmin_frac, 0.0, intXmax_frac-intXmin_frac, pProcessSpec.horizontalDepth); + led.mImageRectangle = new Rectangle2D.Double(intXmin_frac, 0.0, intXmax_frac-intXmin_frac, pProcessSpec.getHorizontalDepth()); break; } case bottom: - { + { double intXmin_frac = Math.max(0.0, x_frac-widthFrac); double intXmax_frac = Math.min(x_frac+widthFrac, 1.0); - led.mImageRectangle = new Rectangle2D.Double(intXmin_frac, 1.0-pProcessSpec.horizontalDepth, intXmax_frac-intXmin_frac, pProcessSpec.horizontalDepth); + led.mImageRectangle = new Rectangle2D.Double(intXmin_frac, 1.0-pProcessSpec.getHorizontalDepth(), intXmax_frac-intXmin_frac, pProcessSpec.getHorizontalDepth()); break; } case left: { double intYmin_frac = Math.max(0.0, y_frac-heightFrac); double intYmax_frac = Math.min(y_frac+heightFrac, 1.0); - led.mImageRectangle = new Rectangle2D.Double(0.0, intYmin_frac, pProcessSpec.verticalDepth, intYmax_frac-intYmin_frac); + led.mImageRectangle = new Rectangle2D.Double(0.0, intYmin_frac, pProcessSpec.getVerticalDepth(), intYmax_frac-intYmin_frac); break; } case right: double intYmin_frac = Math.max(0.0, y_frac-heightFrac); double intYmax_frac = Math.min(y_frac+heightFrac, 1.0); - led.mImageRectangle = new Rectangle2D.Double(1.0-pProcessSpec.verticalDepth, intYmin_frac, pProcessSpec.verticalDepth, intYmax_frac-intYmin_frac); + led.mImageRectangle = new Rectangle2D.Double(1.0-pProcessSpec.getVerticalDepth(), intYmin_frac, pProcessSpec.getVerticalDepth(), intYmax_frac-intYmin_frac); break; } return led; } - } diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/LedString.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/LedString.java similarity index 75% rename from src/config-tool/ConfigTool/src/org/hyperion/config/LedString.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/LedString.java index 75936f62..ecb1ef15 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/LedString.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/LedString.java @@ -1,17 +1,19 @@ -package org.hyperion.config; +package org.hyperion.hypercon; import java.io.FileWriter; import java.io.IOException; import java.util.Locale; import java.util.Vector; -import org.hyperion.config.spec.ColorConfig; -import org.hyperion.config.spec.DeviceConfig; -import org.hyperion.config.spec.ImageProcessConfig; -import org.hyperion.config.spec.Led; -import org.hyperion.config.spec.LedFrameConstruction; -import org.hyperion.config.spec.MiscConfig; - +import org.hyperion.hypercon.spec.ColorConfig; +import org.hyperion.hypercon.spec.DeviceConfig; +import org.hyperion.hypercon.spec.ImageProcessConfig; +import org.hyperion.hypercon.spec.Led; +import org.hyperion.hypercon.spec.LedFrameConstruction; +import org.hyperion.hypercon.spec.MiscConfig; +/** + * The full configuration of Hyperion with sub-items for device, color and miscelanuous items. + */ public class LedString { /** The configuration of the output device */ @@ -31,6 +33,13 @@ public class LedString { /** The translation of the led frame construction and image processing to individual led configuration */ public Vector leds; + /** + * Writes the configuration to the given file + * + * @param mFilename The absolute filename + * + * @throws IOException If unable to write the given file + */ public void saveConfigFile(String mFilename) throws IOException { try (FileWriter fw = new FileWriter(mFilename)) { @@ -57,6 +66,11 @@ public class LedString { } } + /** + * Converts the list with leds specifications to a JSON string as used by the Hyperion Deamon + * + * @return The JSON string with led-specifications + */ String ledToJsonString() { StringBuffer strBuf = new StringBuffer(); strBuf.append("\t\"leds\" : \n"); diff --git a/src/config-tool/ConfigTool/src/org/hyperion/hypercon/Main.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/Main.java new file mode 100644 index 00000000..721dd0c1 --- /dev/null +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/Main.java @@ -0,0 +1,37 @@ +package org.hyperion.hypercon; + +import javax.swing.JFrame; +import javax.swing.UIManager; + +import org.hyperion.hypercon.gui.ConfigPanel; + +/** + * (static) Main-class for starting HyperCon (the Hyperion configuration file builder) as a standard + * JAVA application (contains the entry-point). + */ +public class Main { + + /** + * Entry point to start HyperCon + * + * @param pArgs HyperCon does not have command line arguments + */ + public static void main(String[] pArgs) { + try { + // Configure swing to use the system default look and feel + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception e) {} + + // Create a frame for the configuration panel + JFrame frame = new JFrame(); + frame.setTitle("Hyperion configuration Tool"); + frame.setSize(1300, 600); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + + // Add the HyperCon configuration panel + frame.setContentPane(new ConfigPanel()); + + // Show the frame + frame.setVisible(true); + } +} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/ColorConfigPanel.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ColorConfigPanel.java similarity index 98% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/ColorConfigPanel.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ColorConfigPanel.java index 31b66e5b..97f16f11 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/ColorConfigPanel.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ColorConfigPanel.java @@ -1,4 +1,4 @@ -package org.hyperion.config.gui; +package org.hyperion.hypercon.gui; import javax.swing.BorderFactory; import javax.swing.BoxLayout; @@ -8,6 +8,11 @@ import javax.swing.JPanel; import javax.swing.JSpinner; import javax.swing.SpinnerNumberModel; +/** + * Configuration panel for the ColorConfig. + * + * NB This has not been integrated in the GUI jet! + */ public class ColorConfigPanel extends JPanel { private JPanel mRgbTransformPanel; private JLabel mThresholdLabel; diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/ConfigPanel.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ConfigPanel.java similarity index 72% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/ConfigPanel.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ConfigPanel.java index ff122804..ba763e05 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/ConfigPanel.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ConfigPanel.java @@ -1,4 +1,4 @@ -package org.hyperion.config.gui; +package org.hyperion.hypercon.gui; import java.awt.BorderLayout; import java.awt.Dimension; @@ -15,17 +15,23 @@ import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JPanel; -import org.hyperion.config.LedFrameFactory; -import org.hyperion.config.LedString; +import org.hyperion.hypercon.LedFrameFactory; +import org.hyperion.hypercon.LedString; +/** + * The main-config panel of HyperCon. Includes the configuration and the panels to edit and + * write-out the configuration. This can be placed on JFrame, JDialog or JApplet as required. + */ public class ConfigPanel extends JPanel { + /** The LED configuration information*/ private final LedString ledString = new LedString(); + /** Action for write the Hyperion deamon configuration file */ private final Action mSaveConfigAction = new AbstractAction("Create Hyperion Configuration") { + JFileChooser fileChooser = new JFileChooser(); @Override public void actionPerformed(ActionEvent e) { - JFileChooser fileChooser = new JFileChooser(); if (fileChooser.showSaveDialog(ConfigPanel.this) != JFileChooser.APPROVE_OPTION) { return; } @@ -39,27 +45,39 @@ public class ConfigPanel extends JPanel { } }; + /** The panel for containing the example 'Hyperion TV' */ private JPanel mTvPanel; + /** The simulated 'Hyperion TV' */ private JHyperionTv mHyperionTv; - private JPanel mConstructionPanel; - - private JPanel mIntegrationPanel; - + /** The left (WEST) side panel containing the diferent configuration panels */ private JPanel mSpecificationPanel; + /** The panel for specifying the construction of the LED-Frame */ + private JPanel mConstructionPanel; + + /** The panel for specifying the image integration */ + private JPanel mIntegrationPanel; + + /** The panel for specifying the miscallenuous configuration */ private MiscConfigPanel mMiscPanel; + /** The button connected to mSaveConfigAction */ private JButton mSaveConfigButton; + /** + * Constructs the configuration panel with a default initialised led-frame and configuration + */ public ConfigPanel() { super(); initialise(); + // Compute the individual leds for the current configuration ledString.leds = LedFrameFactory.construct(ledString.mLedFrameConfig, ledString.mProcessConfig); mHyperionTv.setLeds(ledString.leds); + // Add Observer to update the individual leds if the configuration changes final Observer observer = new Observer() { @Override public void update(Observable o, Object arg) { @@ -72,6 +90,9 @@ public class ConfigPanel extends JPanel { ledString.mProcessConfig.addObserver(observer); } + /** + * Initialises the config-panel + */ private void initialise() { setLayout(new BorderLayout()); @@ -80,6 +101,11 @@ public class ConfigPanel extends JPanel { } + /** + * Created, if not exists, and returns the panel holding the simulated 'Hyperion TV' + * + * @return The Tv panel + */ private JPanel getTvPanel() { if (mTvPanel == null) { mTvPanel = new JPanel(); diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/ImageProcessPanel.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ImageProcessPanel.java similarity index 84% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/ImageProcessPanel.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ImageProcessPanel.java index 010763a8..8042321e 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/ImageProcessPanel.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ImageProcessPanel.java @@ -1,4 +1,4 @@ -package org.hyperion.config.gui; +package org.hyperion.hypercon.gui; import java.awt.Dimension; import java.awt.event.ActionEvent; @@ -15,7 +15,7 @@ import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.hyperion.config.spec.ImageProcessConfig; +import org.hyperion.hypercon.spec.ImageProcessConfig; public class ImageProcessPanel extends JPanel implements Observer { @@ -126,25 +126,30 @@ public class ImageProcessPanel extends JPanel implements Observer { @Override public void update(Observable pObs, Object pArg) { if (pObs == mProcessConfig && pArg != this) { - mHorizontalDepthSpinner.setValue(mProcessConfig.horizontalDepth * 100.0); - mVerticalDepthSpinner.setValue(mProcessConfig.verticalDepth * 100.0); - mOverlapSpinner.setValue(mProcessConfig.overlapFraction * 100.0); + mHorizontalDepthSpinner.setValue(mProcessConfig.getHorizontalDepth() * 100.0); + mVerticalDepthSpinner.setValue(mProcessConfig.getVerticalDepth() * 100.0); + mOverlapSpinner.setValue(mProcessConfig.getOverlapFraction() * 100.0); } } private final ActionListener mActionListener = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - mProcessConfig.blackBorderRemoval = (mBlackborderDetectorCombo.getSelectedItem() == "On"); + // Update the processing configuration + mProcessConfig.setBlackBorderRemoval((mBlackborderDetectorCombo.getSelectedItem() == "On")); + + // Notify observers + mProcessConfig.notifyObservers(this); } }; private final ChangeListener mChangeListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { - mProcessConfig.horizontalDepth = ((Double)mHorizontalDepthSpinner.getValue())/100.0; - mProcessConfig.verticalDepth = ((Double)mVerticalDepthSpinner.getValue())/100.0; - mProcessConfig.overlapFraction = ((Double)mOverlapSpinner.getValue())/100.0; - - mProcessConfig.setChanged(); + // Update the processing configuration + mProcessConfig.setHorizontalDepth(((Double)mHorizontalDepthSpinner.getValue())/100.0); + mProcessConfig.setVerticalDepth(((Double)mVerticalDepthSpinner.getValue())/100.0); + mProcessConfig.setOverlapFraction(((Double)mOverlapSpinner.getValue())/100.0); + + // Notify observers mProcessConfig.notifyObservers(this); } }; diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/JHyperionTv.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/JHyperionTv.java similarity index 98% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/JHyperionTv.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/JHyperionTv.java index 0e58c21a..6f225f8e 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/JHyperionTv.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/JHyperionTv.java @@ -1,4 +1,4 @@ -package org.hyperion.config.gui; +package org.hyperion.hypercon.gui; import java.awt.BasicStroke; import java.awt.BorderLayout; @@ -28,7 +28,7 @@ import javax.swing.JMenu; import javax.swing.JPopupMenu; import javax.swing.SwingWorker; -import org.hyperion.config.spec.Led; +import org.hyperion.hypercon.spec.Led; public class JHyperionTv extends Component { @@ -293,7 +293,7 @@ public class JHyperionTv extends Component { ledPaint.screenX = led.lastX; ledPaint.screenY = led.lastY; - ledPaint.angle_rad = 0.5*Math.PI - led.led.mSide.getAngle(); + ledPaint.angle_rad = 0.5*Math.PI - led.led.mSide.getAngle_rad(); ledPaint.seqNr = led.led.mLedSeqNr; } diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/LedFramePanel.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/LedFramePanel.java similarity index 98% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/LedFramePanel.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/LedFramePanel.java index 0197d453..057c72c5 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/LedFramePanel.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/LedFramePanel.java @@ -1,4 +1,4 @@ -package org.hyperion.config.gui; +package org.hyperion.hypercon.gui; import java.awt.Dimension; import java.awt.event.ActionEvent; @@ -13,8 +13,8 @@ import javax.swing.SpinnerNumberModel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.hyperion.config.spec.DeviceType; -import org.hyperion.config.spec.LedFrameConstruction; +import org.hyperion.hypercon.spec.DeviceType; +import org.hyperion.hypercon.spec.LedFrameConstruction; public class LedFramePanel extends JPanel { diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/MiscConfigPanel.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/MiscConfigPanel.java similarity index 97% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/MiscConfigPanel.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/MiscConfigPanel.java index 5f9d1236..686842b5 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/MiscConfigPanel.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/MiscConfigPanel.java @@ -1,4 +1,4 @@ -package org.hyperion.config.gui; +package org.hyperion.hypercon.gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; @@ -8,8 +8,8 @@ import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JPanel; -import org.hyperion.config.spec.BootSequence; -import org.hyperion.config.spec.MiscConfig; +import org.hyperion.hypercon.spec.BootSequence; +import org.hyperion.hypercon.spec.MiscConfig; public class MiscConfigPanel extends JPanel { diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImageBBB_01.png.REMOVED.git-id b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImageBBB_01.png.REMOVED.git-id similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImageBBB_01.png.REMOVED.git-id rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImageBBB_01.png.REMOVED.git-id diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImageBBB_02.png.REMOVED.git-id b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImageBBB_02.png.REMOVED.git-id similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImageBBB_02.png.REMOVED.git-id rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImageBBB_02.png.REMOVED.git-id diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImageBBB_03.png.REMOVED.git-id b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImageBBB_03.png.REMOVED.git-id similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImageBBB_03.png.REMOVED.git-id rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImageBBB_03.png.REMOVED.git-id diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_01.png.REMOVED.git-id b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_01.png.REMOVED.git-id similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_01.png.REMOVED.git-id rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_01.png.REMOVED.git-id diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_02.png.REMOVED.git-id b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_02.png.REMOVED.git-id similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_02.png.REMOVED.git-id rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_02.png.REMOVED.git-id diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_03.png.REMOVED.git-id b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_03.png.REMOVED.git-id similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_03.png.REMOVED.git-id rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_03.png.REMOVED.git-id diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_04.png b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_04.png similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_04.png rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_04.png diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_05.png.REMOVED.git-id b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_05.png.REMOVED.git-id similarity index 100% rename from src/config-tool/ConfigTool/src/org/hyperion/config/gui/TestImage_05.png.REMOVED.git-id rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/TestImage_05.png.REMOVED.git-id diff --git a/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BootSequence.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BootSequence.java new file mode 100644 index 00000000..f21f73c2 --- /dev/null +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BootSequence.java @@ -0,0 +1,31 @@ +package org.hyperion.hypercon.spec; + +/** + * Enumeration of possible boot sequences + */ +public enum BootSequence { + /** The rainbow boot sequence */ + rainbow, + /** The Knight Rider (or KITT) boot sequence */ + knight_rider, + /** No boot sequence */ + none; + + /** + * Returns a string representation of the BootSequence + * + * @return String representation of this boot-sequence + */ + @Override + public String toString() { + switch(this) { + case rainbow: + return "Rainbow"; + case knight_rider: + return "Kinght Rider"; + case none: + return "None"; + } + return "None"; + } +} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BorderSide.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BorderSide.java new file mode 100644 index 00000000..bda7ce3c --- /dev/null +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/BorderSide.java @@ -0,0 +1,37 @@ +package org.hyperion.hypercon.spec; + +/** + * Enumeration of possible led-locations (aka border-sides). This also contains the specification of + * the angle at which the led is placed along a specific border (0.0rad = pointing right). + */ +public enum BorderSide { + top_left (0.75*Math.PI), + top(0.5*Math.PI), + top_right(0.25*Math.PI), + right(0.0*Math.PI), + bottom_right(-0.25*Math.PI), + bottom(-0.5*Math.PI), + bottom_left(-0.75*Math.PI), + left(1.0*Math.PI); + + /** The angle of the led [rad] */ + private final double mAngle_rad; + + /** + * Constructs the BorderSide with the given led angle + * + * @param pAngle_rad The angle of the led [rad] + */ + BorderSide(double pAngle_rad) { + mAngle_rad = pAngle_rad; + } + + /** + * Returns the angle of the led placement + * + * @return The angle of the led [rad] + */ + public double getAngle_rad() { + return mAngle_rad; + } +} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/ColorConfig.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/ColorConfig.java similarity index 63% rename from src/config-tool/ConfigTool/src/org/hyperion/config/spec/ColorConfig.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/ColorConfig.java index 0df65857..539659ec 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/ColorConfig.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/ColorConfig.java @@ -1,27 +1,49 @@ -package org.hyperion.config.spec; +package org.hyperion.hypercon.spec; import java.util.Locale; +/** + * The color tuning parameters of the different color channels (both in RGB space as in HSV space) + */ public class ColorConfig { + /** The saturation gain (in HSV space) */ double mSaturationGain = 1.0; + /** The value gain (in HSV space) */ double mValueGain = 1.0; + /** The minimum required RED-value (in RGB space) */ double mRedThreshold = 0.0; + /** The gamma-curve correct for the RED-value (in RGB space) */ double mRedGamma = 1.0; + /** The black-level of the RED-value (in RGB space) */ double mRedBlacklevel = 0.0; + /** The white-level of the RED-value (in RGB space) */ double mRedWhitelevel = 1.0; + /** The minimum required GREEN-value (in RGB space) */ double mGreenThreshold = 0.0; + /** The gamma-curve correct for the GREEN-value (in RGB space) */ double mGreenGamma = 1.0; + /** The black-level of the GREEN-value (in RGB space) */ double mGreenBlacklevel = 0.0; + /** The white-level of the GREEN-value (in RGB space) */ double mGreenWhitelevel = 1.0; + /** The minimum required BLUE-value (in RGB space) */ double mBlueThreshold = 0.0; + /** The gamma-curve correct for the BLUE-value (in RGB space) */ double mBlueGamma = 1.0; + /** The black-level of the BLUE-value (in RGB space) */ double mBlueBlacklevel = 0.0; + /** The white-level of the BLUE-value (in RGB space) */ double mBlueWhitelevel = 1.0; + /** + * Creates the JSON string of the configuration as used in the Hyperion daemon configfile + * + * @return The JSON string of this ColorConfig + */ public String toJsonString() { StringBuffer strBuf = new StringBuffer(); strBuf.append("\t\"color\" :\n"); @@ -33,7 +55,12 @@ public class ColorConfig { return strBuf.toString(); } - public String hsvToJsonString() { + /** + * Creates the JSON string of the HSV-subconfiguration as used in the Hyperion deaomn configfile + * + * @return The JSON string of the HSV-config + */ + private String hsvToJsonString() { StringBuffer strBuf = new StringBuffer(); strBuf.append("\t\t\"hsv\" :\n"); strBuf.append("\t\t{\n"); @@ -44,7 +71,12 @@ public class ColorConfig { return strBuf.toString(); } - public String rgbToJsonString() { + /** + * Creates the JSON string of the RGB-subconfiguration as used in the Hyperion deaomn configfile + * + * @return The JSON string of the RGB-config + */ + private String rgbToJsonString() { StringBuffer strBuf = new StringBuffer(); strBuf.append("\t\t\"red\" :\n"); diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/DeviceConfig.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceConfig.java similarity index 63% rename from src/config-tool/ConfigTool/src/org/hyperion/config/spec/DeviceConfig.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceConfig.java index a04e4c17..58cef5c8 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/DeviceConfig.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceConfig.java @@ -1,12 +1,24 @@ -package org.hyperion.config.spec; +package org.hyperion.hypercon.spec; +/** + * The device specific configuration + */ public class DeviceConfig { + /** The name of the device */ String mName = "MyPi"; + /** The type specification of the device */ DeviceType mType = DeviceType.ws2801; + /** The device 'file' name */ String mOutput = "/dev/spidev0.0"; + /** The baudrate of the device */ int mBaudrate = 48000; + /** + * Creates the JSON string of the configuration as used in the Hyperion daemon configfile + * + * @return The JSON string of this DeviceConfig + */ public String toJsonString() { StringBuffer strBuf = new StringBuffer(); strBuf.append("\t\"device\" :\n"); diff --git a/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceType.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceType.java new file mode 100644 index 00000000..963a49e3 --- /dev/null +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceType.java @@ -0,0 +1,13 @@ +package org.hyperion.hypercon.spec; + +/** + * Enumeration of known device types + */ +public enum DeviceType { + /** WS2801 Led String device with one continuous shift-register */ + ws2801, + /** Test device for writing color values to file-output */ + test, + /** No device, no output is generated */ + none; +} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/ImageProcessConfig.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/ImageProcessConfig.java new file mode 100644 index 00000000..9ec4e68c --- /dev/null +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/ImageProcessConfig.java @@ -0,0 +1,110 @@ +package org.hyperion.hypercon.spec; + +import java.util.Observable; + +import org.hyperion.hypercon.LedFrameFactory; + +/** + * Configuration parameters for the image processing. These settings are translated using the + * {@link LedFrameFactory} to configuration items used in the Hyperion daemon configfile. + * + */ +public class ImageProcessConfig extends Observable { + + /** The 'integration depth' of the leds along the horizontal axis of the tv */ + private double mHorizontalDepth = 0.05; + /** The 'integration depth' of the leds along the vertical axis of the tv */ + private double mVerticalDepth = 0.05; + + /** The fraction of overlap from one to another led */ + private double mOverlapFraction = 0.0; + + /** Flag indicating that black borders are excluded in the image processing */ + private boolean mBlackBorderRemoval = true; + + /** + * Returns the horizontal depth (top and bottom) of the image integration as a fraction of the + * image [0.0; 1.0] + * + * @return The horizontal integration depth [0.0; 1.0] + */ + public double getHorizontalDepth() { + return mHorizontalDepth; + } + + /** + * Sets the horizontal depth (top and bottom) of the image integration as a fraction of the + * image [0.0; 1.0] + * + * @param pHorizontalDepth The horizontal integration depth [0.0; 1.0] + */ + public void setHorizontalDepth(double pHorizontalDepth) { + if (mHorizontalDepth != pHorizontalDepth) { + mHorizontalDepth = pHorizontalDepth; + setChanged(); + } + } + + /** + * Returns the vertical depth (left and right) of the image integration as a fraction of the + * image [0.0; 1.0] + * + * @return The vertical integration depth [0.0; 1.0] + */ + public double getVerticalDepth() { + return mVerticalDepth; + } + + /** + * Sets the vertical depth (left and right) of the image integration as a fraction of the + * image [0.0; 1.0] + * + * @param pVerticalDepth The vertical integration depth [0.0; 1.0] + */ + public void setVerticalDepth(double pVerticalDepth) { + if (mVerticalDepth != pVerticalDepth) { + mVerticalDepth = pVerticalDepth; + setChanged(); + } + } + + /** + * Returns the fractional overlap of one integration tile with its neighbors + * + * @return The fractional overlap of the integration tiles + */ + public double getOverlapFraction() { + return mOverlapFraction; + } + + /** + * Sets the fractional overlap of one integration tile with its neighbors + * + * @param pOverlapFraction The fractional overlap of the integration tiles + */ + public void setOverlapFraction(double pOverlapFraction) { + if (mOverlapFraction != pOverlapFraction) { + mOverlapFraction = pOverlapFraction; + setChanged(); + } + } + + /** + * Returns the black border removal flag + * @return True if black border removal is enabled else false + */ + public boolean isBlackBorderRemoval() { + return mBlackBorderRemoval; + } + + /** + * Sets the black border removal flag + * @param pBlackBorderRemoval True if black border removal is enabled else false + */ + public void setBlackBorderRemoval(boolean pBlackBorderRemoval) { + if (mBlackBorderRemoval != pBlackBorderRemoval) { + mBlackBorderRemoval = pBlackBorderRemoval; + setChanged(); + } + } +} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/Led.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/Led.java new file mode 100644 index 00000000..8edbc6b4 --- /dev/null +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/Led.java @@ -0,0 +1,33 @@ +package org.hyperion.hypercon.spec; + +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; + + +/** + * Led specification with fractional location along screen border and fractional-rectangle for + * integrating an image into led color + */ +public class Led { + /** The sequence number of the led */ + public int mLedSeqNr; + + /** The side along which the led is placed */ + public BorderSide mSide; + + /** The fractional location of the led */ + public Point2D mLocation; + + /** The fractional rectangle for image integration */ + public Rectangle2D mImageRectangle; + + /** + * String representation of the led specification + * + * @return The led specs as nice readable string + */ + @Override + public String toString() { + return "Led[" + mLedSeqNr + "] Location=" + mLocation + " Rectangle=" + mImageRectangle; + } +} diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/LedFrameConstruction.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/LedFrameConstruction.java similarity index 91% rename from src/config-tool/ConfigTool/src/org/hyperion/config/spec/LedFrameConstruction.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/LedFrameConstruction.java index 087b5e96..6b8d815f 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/LedFrameConstruction.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/LedFrameConstruction.java @@ -1,4 +1,4 @@ -package org.hyperion.config.spec; +package org.hyperion.hypercon.spec; import java.util.Observable; @@ -6,12 +6,15 @@ import java.util.Observable; /** * The LedFrame describes the construction of leds along the sides of the TV screen. - * */ public class LedFrameConstruction extends Observable { - + /** + * Enumeration of the led configuration direction + */ public enum Direction { + /** Clockwise led configuration */ clockwise, + /** Counter Clockwise led configuration */ counter_clockwise; } diff --git a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/MiscConfig.java b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/MiscConfig.java similarity index 64% rename from src/config-tool/ConfigTool/src/org/hyperion/config/spec/MiscConfig.java rename to src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/MiscConfig.java index bce46322..d31d7444 100644 --- a/src/config-tool/ConfigTool/src/org/hyperion/config/spec/MiscConfig.java +++ b/src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/MiscConfig.java @@ -1,24 +1,43 @@ -package org.hyperion.config.spec; +package org.hyperion.hypercon.spec; import java.util.Locale; - +/** + * Miscellaneous configuration items for the Hyperion daemon. + */ public class MiscConfig { + /** The selected boot sequence */ public BootSequence mBootSequence = BootSequence.rainbow; + /** The length of the boot sequence [ms] */ public int mBootSequenceLength_ms = 3000; + /** The width of 'grabbed' frames (screen shots) [pixels] */ public int mFrameGrabberWidth = 64; + /** The height of 'grabbed' frames (screen shots) [pixels] */ public int mFrameGrabberHeight = 64; + /** The interval of frame grabs (screen shots) [ms] */ public int mFrameGrabberInterval_ms = 100; + /** Flag enabling/disabling XBMC communication */ public boolean mXbmcChecker = true; + /** The IP-address of XBMC */ public String mXbmcAddress = "127.0.0.1"; + /** The TCP JSON-Port of XBMC */ public int mXbmcTcpPort = 9090; + /** Flag indicating that the frame-grabber is on during video playback */ public boolean mVideoOn = true; + /** Flag indicating that the frame-grabber is on during XBMC menu */ public boolean mMenuOn = false; + /** Flag indicating that the frame-grabber is on during picture slideshow */ public boolean mPictureOn = false; + /** Flag indicating that the frame-grabber is on during audio playback */ public boolean mAudioOn = false; + /** + * Creates the JSON string of the configuration as used in the Hyperion daemon configfile + * + * @return The JSON string of this MiscConfig + */ public String toJsonString() { StringBuffer strBuf = new StringBuffer(); strBuf.append("\t\"bootsequence\" :\n");