X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2FConfiguration.java;h=755586fd986905024a5ab5a11bce50743b6ec634;hb=eba8feca754a0875f30b8284dab67c8c01f85ef6;hp=86ade8e75fe073dff1557c693175d93b791daac0;hpb=38c759f87fc7de47d9dee60088f2dbc60e0a55fb;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/Configuration.java b/src/kaka/cakelight/Configuration.java index 86ade8e..755586f 100644 --- a/src/kaka/cakelight/Configuration.java +++ b/src/kaka/cakelight/Configuration.java @@ -21,24 +21,13 @@ public class Configuration { } public static Configuration from(String propertiesFile) { - InputStream input = null; - try { - input = new FileInputStream(propertiesFile); - Properties prop = new Properties(); + Properties prop = new Properties(); + try (InputStream input = new FileInputStream(propertiesFile)) { prop.load(input); - return new Configuration(prop); } catch (IOException ex) { ex.printStackTrace(); - } finally { - if (input != null) { - try { - input.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } } - return null; + return new Configuration(prop); } private String get(Properties prop, String name) { @@ -64,12 +53,19 @@ public class Configuration { public int height; public int bpp; public int format; + public boolean mjpg; + public double saturation; + public String device; + public boolean deviceIsAutomatic; public CropConfiguration crop; + public ListConfiguration list; private VideoConfiguration(Properties prop) { width = Integer.parseInt(get(prop, "video.width", "720")); height = Integer.parseInt(get(prop, "video.height", "576")); bpp = Integer.parseInt(get(prop, "video.bpp", "2")); + device = get(prop, "video.device", "auto"); + deviceIsAutomatic = "auto".equals(device); switch (get(prop, "video.format", "").toUpperCase()) { case "YUYV": format = Imgproc.COLOR_YUV2BGR_YUYV; @@ -77,10 +73,15 @@ public class Configuration { case "YVYU": format = Imgproc.COLOR_YUV2BGR_YVYU; break; + case "MJPG": + format = 0; + mjpg = true; default: format = Imgproc.COLOR_YUV2BGR_UYVY; } + saturation = inRange(Double.parseDouble(get(prop, "video.saturation", "0.5")), 0, 1); crop = new CropConfiguration(prop); + list = new ListConfiguration(prop); } public class CropConfiguration { @@ -93,19 +94,51 @@ public class Configuration { bottom = Integer.parseInt(get(prop, "video.crop.bottom", "0")); } } + + public class ListConfiguration { + public boolean top, bottom, left, right; + + private ListConfiguration(Properties prop) { + top = get(prop, "video.list.top", "on").equals("on"); + bottom = get(prop, "video.list.bottom", "on").equals("on"); + left = get(prop, "video.list.left", "on").equals("on"); + right = get(prop, "video.list.right", "on").equals("on"); + } + } } public class LedConfiguration { public int cols; public int rows; + public int brightness; + public LedType type; private LedConfiguration(Properties prop) { cols = Integer.parseInt(get(prop, "leds.cols")); rows = Integer.parseInt(get(prop, "leds.rows")); + brightness = (int) inRange(Integer.parseInt(get(prop, "leds.brightness", "31")), 1, 31); + switch (get(prop, "leds.type", "").toUpperCase()) { + case "WS2801": + type = LedType.WS2801; + break; + case "APA102": + default: + type = LedType.APA102; + } } public int getCount() { return cols * 2 + rows * 2; } } + + public enum LedType { + WS2801, APA102 + } + + private double inRange(double value, double lower, double upper) { + return value < lower ? lower + : value > upper ? upper + : value; + } }