Merge remote-tracking branch 'remotes/origin/master'

Conflicts:
	src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/ConfigPanel.java
	src/config-tool/ConfigTool/src/org/hyperion/hypercon/gui/LedFramePanel.java
	src/config-tool/ConfigTool/src/org/hyperion/hypercon/spec/DeviceConfig.java

Former-commit-id: 18ef539aef815aaf80e0954b27647d29acb0be6c
This commit is contained in:
T. van der Zwan 2013-11-04 23:31:58 +01:00
commit 8e978047a1
18 changed files with 514 additions and 448 deletions

View File

@ -2,390 +2,390 @@
// Generated by: HyperCon (The Hyperion deamon configuration file builder // Generated by: HyperCon (The Hyperion deamon configuration file builder
{ {
/// Device configuration contains the following fields: /// Device configuration contains the following fields:
/// * 'name' : The user friendly name of the device (only used for display purposes) /// * 'name' : The user friendly name of the device (only used for display purposes)
/// * 'type' : The type of the device or leds (known types for now are 'ws2801', 'test' and 'none') /// * 'type' : The type of the device or leds (known types for now are 'ws2801', 'ldp6803', 'test' and 'none')
/// * 'output' : The output specification depends on selected device /// * 'output' : The output specification depends on selected device
/// - 'ws2801' this is the device (eg '/dev/spidev0.0') /// - 'ws2801' this is the device (eg '/dev/spidev0.0')
/// - 'test' this is the file used to write test output (eg '/home/pi/hyperion.out') /// - 'test' this is the file used to write test output (eg '/home/pi/hyperion.out')
/// * 'rate' : The baudrate of the output to the device (only applicable for 'ws2801') /// * 'rate' : The baudrate of the output to the device (only applicable for 'ws2801')
/// * 'bgr-output' : Use BGR output instead of RGB (reverse red and blue). /// * 'colorOrder' : The order of the color bytes ('rgb', 'rbg', 'bgr', etc.).
"device" : "device" :
{ {
"name" : "MyPi", "name" : "MyPi",
"type" : "ws2801", "type" : "ws2801",
"output" : "/dev/spidev0.0", "output" : "/dev/spidev0.0",
"rate" : 1000000, "rate" : 1000000,
"bgr-output" : false "colorOrder" : "rgb"
}, },
/// Color manipulation configuration used to tune the output colors to specific surroundings. Contains the following fields: /// Color manipulation configuration used to tune the output colors to specific surroundings. Contains the following fields:
/// * 'hsv' : The manipulation in the Hue-Saturation-Value color domain with the following tuning parameters: /// * 'hsv' : The manipulation in the Hue-Saturation-Value color domain with the following tuning parameters:
/// - 'saturationGain' The gain adjustement of the saturation /// - 'saturationGain' The gain adjustement of the saturation
/// - 'valueGain' The gain adjustement of the value /// - 'valueGain' The gain adjustement of the value
/// * 'red'/'green'/'blue' : The manipulation in the Red-Green-Blue color domain with the following tuning parameters for each channel: /// * 'red'/'green'/'blue' : The manipulation in the Red-Green-Blue color domain with the following tuning parameters for each channel:
/// - 'threshold' The minimum required input value for the channel to be on (else zero) /// - 'threshold' The minimum required input value for the channel to be on (else zero)
/// - 'gamma' The gamma-curve correction factor /// - 'gamma' The gamma-curve correction factor
/// - 'blacklevel' The lowest possible value (when the channel is black) /// - 'blacklevel' The lowest possible value (when the channel is black)
/// - 'whitelevel' The highest possible value (when the channel is white) /// - 'whitelevel' The highest possible value (when the channel is white)
/// * 'smoothing' : Smoothing of the colors in the time-domain with the following tuning parameters: /// * 'smoothing' : Smoothing of the colors in the time-domain with the following tuning parameters:
/// - 'type' The type of smoothing algorithm ('linear' or 'none') /// - 'type' The type of smoothing algorithm ('linear' or 'none')
/// - 'time_ms' The time constant for smoothing algorithm in milliseconds /// - 'time_ms' The time constant for smoothing algorithm in milliseconds
/// - 'updateFrequency' The update frequency of the leds in Hz /// - 'updateFrequency' The update frequency of the leds in Hz
"color" : "color" :
{ {
"hsv" : "hsv" :
{ {
"saturationGain" : 1.0000, "saturationGain" : 1.0000,
"valueGain" : 1.5000 "valueGain" : 1.5000
}, },
"red" : "red" :
{ {
"threshold" : 0.1000, "threshold" : 0.1000,
"gamma" : 2.0000, "gamma" : 2.0000,
"blacklevel" : 0.0000, "blacklevel" : 0.0000,
"whitelevel" : 0.8000 "whitelevel" : 0.8000
}, },
"green" : "green" :
{ {
"threshold" : 0.1000, "threshold" : 0.1000,
"gamma" : 2.0000, "gamma" : 2.0000,
"blacklevel" : 0.0000, "blacklevel" : 0.0000,
"whitelevel" : 1.0000 "whitelevel" : 1.0000
}, },
"blue" : "blue" :
{ {
"threshold" : 0.1000, "threshold" : 0.1000,
"gamma" : 2.0000, "gamma" : 2.0000,
"blacklevel" : 0.0000, "blacklevel" : 0.0000,
"whitelevel" : 1.0000 "whitelevel" : 1.0000
}, },
"smoothing" : "smoothing" :
{ {
"type" : "none", "type" : "none",
"time_ms" : 200, "time_ms" : 200,
"updateFrequency" : 20.0000 "updateFrequency" : 20.0000
} }
}, },
/// The configuration for each individual led. This contains the specification of the area /// The configuration for each individual led. This contains the specification of the area
/// averaged of an input image for each led to determine its color. Each item in the list /// averaged of an input image for each led to determine its color. Each item in the list
/// contains the following fields: /// contains the following fields:
/// * index: The index of the led. This determines its location in the string of leds; zero /// * index: The index of the led. This determines its location in the string of leds; zero
/// being the first led. /// being the first led.
/// * hscan: The fractional part of the image along the horizontal used for the averaging /// * hscan: The fractional part of the image along the horizontal used for the averaging
/// (minimum and maximum inclusive) /// (minimum and maximum inclusive)
/// * vscan: The fractional part of the image along the vertical used for the averaging /// * vscan: The fractional part of the image along the vertical used for the averaging
/// (minimum and maximum inclusive) /// (minimum and maximum inclusive)
"leds" : "leds" :
[ [
{ {
"index" : 0, "index" : 0,
"hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 }, "hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 1, "index" : 1,
"hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 }, "hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 2, "index" : 2,
"hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 }, "hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 3, "index" : 3,
"hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 }, "hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 4, "index" : 4,
"hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 }, "hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 5, "index" : 5,
"hscan" : { "minimum" : 0.1250, "maximum" : 0.1875 }, "hscan" : { "minimum" : 0.1250, "maximum" : 0.1875 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 6, "index" : 6,
"hscan" : { "minimum" : 0.0625, "maximum" : 0.1250 }, "hscan" : { "minimum" : 0.0625, "maximum" : 0.1250 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 7, "index" : 7,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0625 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0625 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 8, "index" : 8,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 9, "index" : 9,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.8571, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.8571, "maximum" : 1.0000 }
}, },
{ {
"index" : 10, "index" : 10,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.7143, "maximum" : 0.8571 } "vscan" : { "minimum" : 0.7143, "maximum" : 0.8571 }
}, },
{ {
"index" : 11, "index" : 11,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.5714, "maximum" : 0.7143 } "vscan" : { "minimum" : 0.5714, "maximum" : 0.7143 }
}, },
{ {
"index" : 12, "index" : 12,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.4286, "maximum" : 0.5714 } "vscan" : { "minimum" : 0.4286, "maximum" : 0.5714 }
}, },
{ {
"index" : 13, "index" : 13,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.2857, "maximum" : 0.4286 } "vscan" : { "minimum" : 0.2857, "maximum" : 0.4286 }
}, },
{ {
"index" : 14, "index" : 14,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.1429, "maximum" : 0.2857 } "vscan" : { "minimum" : 0.1429, "maximum" : 0.2857 }
}, },
{ {
"index" : 15, "index" : 15,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.1429 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.1429 }
}, },
{ {
"index" : 16, "index" : 16,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0500 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 17, "index" : 17,
"hscan" : { "minimum" : 0.0000, "maximum" : 0.0625 }, "hscan" : { "minimum" : 0.0000, "maximum" : 0.0625 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 18, "index" : 18,
"hscan" : { "minimum" : 0.0625, "maximum" : 0.1250 }, "hscan" : { "minimum" : 0.0625, "maximum" : 0.1250 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 19, "index" : 19,
"hscan" : { "minimum" : 0.1250, "maximum" : 0.1875 }, "hscan" : { "minimum" : 0.1250, "maximum" : 0.1875 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 20, "index" : 20,
"hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 }, "hscan" : { "minimum" : 0.1875, "maximum" : 0.2500 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 21, "index" : 21,
"hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 }, "hscan" : { "minimum" : 0.2500, "maximum" : 0.3125 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 22, "index" : 22,
"hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 }, "hscan" : { "minimum" : 0.3125, "maximum" : 0.3750 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 23, "index" : 23,
"hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 }, "hscan" : { "minimum" : 0.3750, "maximum" : 0.4375 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 24, "index" : 24,
"hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 }, "hscan" : { "minimum" : 0.4375, "maximum" : 0.5000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 25, "index" : 25,
"hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 }, "hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 26, "index" : 26,
"hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 }, "hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 27, "index" : 27,
"hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 }, "hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 28, "index" : 28,
"hscan" : { "minimum" : 0.6875, "maximum" : 0.7500 }, "hscan" : { "minimum" : 0.6875, "maximum" : 0.7500 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 29, "index" : 29,
"hscan" : { "minimum" : 0.7500, "maximum" : 0.8125 }, "hscan" : { "minimum" : 0.7500, "maximum" : 0.8125 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 30, "index" : 30,
"hscan" : { "minimum" : 0.8125, "maximum" : 0.8750 }, "hscan" : { "minimum" : 0.8125, "maximum" : 0.8750 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 31, "index" : 31,
"hscan" : { "minimum" : 0.8750, "maximum" : 0.9375 }, "hscan" : { "minimum" : 0.8750, "maximum" : 0.9375 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 32, "index" : 32,
"hscan" : { "minimum" : 0.9375, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9375, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 33, "index" : 33,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.0800 }
}, },
{ {
"index" : 34, "index" : 34,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.0000, "maximum" : 0.1429 } "vscan" : { "minimum" : 0.0000, "maximum" : 0.1429 }
}, },
{ {
"index" : 35, "index" : 35,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.1429, "maximum" : 0.2857 } "vscan" : { "minimum" : 0.1429, "maximum" : 0.2857 }
}, },
{ {
"index" : 36, "index" : 36,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.2857, "maximum" : 0.4286 } "vscan" : { "minimum" : 0.2857, "maximum" : 0.4286 }
}, },
{ {
"index" : 37, "index" : 37,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.4286, "maximum" : 0.5714 } "vscan" : { "minimum" : 0.4286, "maximum" : 0.5714 }
}, },
{ {
"index" : 38, "index" : 38,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.5714, "maximum" : 0.7143 } "vscan" : { "minimum" : 0.5714, "maximum" : 0.7143 }
}, },
{ {
"index" : 39, "index" : 39,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.7143, "maximum" : 0.8571 } "vscan" : { "minimum" : 0.7143, "maximum" : 0.8571 }
}, },
{ {
"index" : 40, "index" : 40,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.8571, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.8571, "maximum" : 1.0000 }
}, },
{ {
"index" : 41, "index" : 41,
"hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9500, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 42, "index" : 42,
"hscan" : { "minimum" : 0.9375, "maximum" : 1.0000 }, "hscan" : { "minimum" : 0.9375, "maximum" : 1.0000 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 43, "index" : 43,
"hscan" : { "minimum" : 0.8750, "maximum" : 0.9375 }, "hscan" : { "minimum" : 0.8750, "maximum" : 0.9375 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 44, "index" : 44,
"hscan" : { "minimum" : 0.8125, "maximum" : 0.8750 }, "hscan" : { "minimum" : 0.8125, "maximum" : 0.8750 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 45, "index" : 45,
"hscan" : { "minimum" : 0.7500, "maximum" : 0.8125 }, "hscan" : { "minimum" : 0.7500, "maximum" : 0.8125 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 46, "index" : 46,
"hscan" : { "minimum" : 0.6875, "maximum" : 0.7500 }, "hscan" : { "minimum" : 0.6875, "maximum" : 0.7500 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 47, "index" : 47,
"hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 }, "hscan" : { "minimum" : 0.6250, "maximum" : 0.6875 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 48, "index" : 48,
"hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 }, "hscan" : { "minimum" : 0.5625, "maximum" : 0.6250 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
}, },
{ {
"index" : 49, "index" : 49,
"hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 }, "hscan" : { "minimum" : 0.5000, "maximum" : 0.5625 },
"vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 } "vscan" : { "minimum" : 0.9200, "maximum" : 1.0000 }
} }
], ],
/// The black border configuration, contains the following items: /// The black border configuration, contains the following items:
/// * enable : true if the detector should be activated /// * enable : true if the detector should be activated
"blackborderdetector" : "blackborderdetector" :
{ {
"enable" : true "enable" : true
}, },
/// The boot-sequence configuration, contains the following items: /// The boot-sequence configuration, contains the following items:
/// * type : The type of the boot-sequence ('rainbow', 'knight_rider', 'none') /// * type : The type of the boot-sequence ('rainbow', 'knight_rider', 'none')
/// * duration_ms : The length of the boot-sequence [ms] /// * duration_ms : The length of the boot-sequence [ms]
"bootsequence" : "bootsequence" :
{ {
"type" : "Rainbow", "type" : "Rainbow",
"duration_ms" : 3000 "duration_ms" : 3000
}, },
/// The configuration for the frame-grabber, contains the following items: /// The configuration for the frame-grabber, contains the following items:
/// * width : The width of the grabbed frames [pixels] /// * width : The width of the grabbed frames [pixels]
/// * height : The height of the grabbed frames [pixels] /// * height : The height of the grabbed frames [pixels]
/// * frequency_Hz : The frequency of the frame grab [Hz] /// * frequency_Hz : The frequency of the frame grab [Hz]
"framegrabber" : "framegrabber" :
{ {
"width" : 64, "width" : 64,
"height" : 64, "height" : 64,
"frequency_Hz" : 10.0 "frequency_Hz" : 10.0
}, },
/// The configuration of the XBMC connection used to enable and disable the frame-grabber. Contains the following fields: /// The configuration of the XBMC connection used to enable and disable the frame-grabber. Contains the following fields:
/// * xbmcAddress : The IP address of the XBMC-host /// * xbmcAddress : The IP address of the XBMC-host
/// * xbmcTcpPort : The TCP-port of the XBMC-server /// * xbmcTcpPort : The TCP-port of the XBMC-server
/// * grabVideo : Flag indicating that the frame-grabber is on(true) during video playback /// * grabVideo : Flag indicating that the frame-grabber is on(true) during video playback
/// * grabPictures : Flag indicating that the frame-grabber is on(true) during picture show /// * grabPictures : Flag indicating that the frame-grabber is on(true) during picture show
/// * grabAudio : Flag indicating that the frame-grabber is on(true) during audio playback /// * grabAudio : Flag indicating that the frame-grabber is on(true) during audio playback
/// * grabMenu : Flag indicating that the frame-grabber is on(true) in the XBMC menu /// * grabMenu : Flag indicating that the frame-grabber is on(true) in the XBMC menu
"xbmcVideoChecker" : "xbmcVideoChecker" :
{ {
"xbmcAddress" : "127.0.0.1", "xbmcAddress" : "127.0.0.1",
"xbmcTcpPort" : 9090, "xbmcTcpPort" : 9090,
"grabVideo" : true, "grabVideo" : true,
"grabPictures" : true, "grabPictures" : true,
"grabAudio" : true, "grabAudio" : true,
"grabMenu" : false "grabMenu" : false
}, },
/// The configuration of the Json server which enables the json remote interface /// The configuration of the Json server which enables the json remote interface
/// * port : Port at which the json server is started /// * port : Port at which the json server is started
"jsonServer" : "jsonServer" :
{ {
"port" : 19444 "port" : 19444
}, },
/// The configuration of the Proto server which enables the protobuffer remote interface /// The configuration of the Proto server which enables the protobuffer remote interface
/// * port : Port at which the protobuffer server is started /// * port : Port at which the protobuffer server is started
"protoServer" : "protoServer" :
{ {
"port" : 19445 "port" : 19445
} }
} }

View File

@ -1 +1 @@
6f2aab422e3d1b03080de92c3e3aea9b270a3e9b 5a45be79a986ebe2dde72420862801608de41fa2

Binary file not shown.

View File

@ -1 +1 @@
e027a9a48c14dcffacb9539ede8ddca32cba2171 632c368d0a5ce42aff067c6ba5f63dbe108dddc9

View File

@ -46,6 +46,12 @@ public:
SATURATION_GAIN, VALUE_GAIN, THRESHOLD, GAMMA, BLACKLEVEL, WHITELEVEL SATURATION_GAIN, VALUE_GAIN, THRESHOLD, GAMMA, BLACKLEVEL, WHITELEVEL
}; };
/// Enumeration containing the possible orders of device color byte data
enum ColorOrder
{
ORDER_RGB, ORDER_RBG, ORDER_GRB, ORDER_BRG, ORDER_GBR, ORDER_BGR
};
/// ///
/// Constructs the Hyperion instance based on the given Json configuration /// Constructs the Hyperion instance based on the given Json configuration
/// ///
@ -136,6 +142,7 @@ public:
const InputInfo& getPriorityInfo(const int priority) const; const InputInfo& getPriorityInfo(const int priority) const;
static LedDevice * createDevice(const Json::Value & deviceConfig); static LedDevice * createDevice(const Json::Value & deviceConfig);
static ColorOrder createColorOrder(const Json::Value & deviceConfig);
static LedString createLedString(const Json::Value & ledsConfig); static LedString createLedString(const Json::Value & ledsConfig);
static HsvTransform * createHsvTransform(const Json::Value & hsvConfig); static HsvTransform * createHsvTransform(const Json::Value & hsvConfig);
static ColorTransform * createColorTransform(const Json::Value & colorConfig); static ColorTransform * createColorTransform(const Json::Value & colorConfig);
@ -172,8 +179,8 @@ private:
/// The BLUE-Channel (RGB) transform /// The BLUE-Channel (RGB) transform
ColorTransform * _blueTransform; ColorTransform * _blueTransform;
/// Flag indicating if the output should be BGR (red and blue reversed) /// Value with the desired color byte order
bool _haveBgrOutput; ColorOrder _colorOrder;
/// The actual LedDevice /// The actual LedDevice
LedDevice * _device; LedDevice * _device;

View File

@ -60,6 +60,47 @@ LedDevice* Hyperion::createDevice(const Json::Value& deviceConfig)
return device; return device;
} }
Hyperion::ColorOrder Hyperion::createColorOrder(const Json::Value &deviceConfig)
{
// deprecated: force BGR when the deprecated flag is present and set to true
if (deviceConfig.get("bgr-output", false).asBool())
{
return ORDER_BGR;
}
std::string order = deviceConfig.get("colorOrder", "rgb").asString();
if (order == "rgb")
{
return ORDER_RGB;
}
else if (order == "bgr")
{
return ORDER_BGR;
}
else if (order == "rbg")
{
return ORDER_RBG;
}
else if (order == "brg")
{
return ORDER_BRG;
}
else if (order == "gbr")
{
return ORDER_GBR;
}
else if (order == "grb")
{
return ORDER_GRB;
}
else
{
std::cout << "Unknown color order defined (" << order << "). Using RGB." << std::endl;
}
return ORDER_RGB;
}
HsvTransform * Hyperion::createHsvTransform(const Json::Value & hsvConfig) HsvTransform * Hyperion::createHsvTransform(const Json::Value & hsvConfig)
{ {
const double saturationGain = hsvConfig.get("saturationGain", 1.0).asDouble(); const double saturationGain = hsvConfig.get("saturationGain", 1.0).asDouble();
@ -143,6 +184,7 @@ LedDevice * Hyperion::createColorSmoothing(const Json::Value & smoothingConfig,
return ledDevice; return ledDevice;
} }
Hyperion::Hyperion(const Json::Value &jsonConfig) : Hyperion::Hyperion(const Json::Value &jsonConfig) :
_ledString(createLedString(jsonConfig["leds"])), _ledString(createLedString(jsonConfig["leds"])),
_muxer(_ledString.leds().size()), _muxer(_ledString.leds().size()),
@ -150,7 +192,7 @@ Hyperion::Hyperion(const Json::Value &jsonConfig) :
_redTransform(createColorTransform(jsonConfig["color"]["red"])), _redTransform(createColorTransform(jsonConfig["color"]["red"])),
_greenTransform(createColorTransform(jsonConfig["color"]["green"])), _greenTransform(createColorTransform(jsonConfig["color"]["green"])),
_blueTransform(createColorTransform(jsonConfig["color"]["blue"])), _blueTransform(createColorTransform(jsonConfig["color"]["blue"])),
_haveBgrOutput(jsonConfig["device"].get("bgr-output", false).asBool()), _colorOrder(createColorOrder(jsonConfig["device"])),
_device(createDevice(jsonConfig["device"])), _device(createDevice(jsonConfig["device"])),
_timer() _timer()
{ {
@ -366,9 +408,37 @@ void Hyperion::update()
color.green = _greenTransform->transform(color.green); color.green = _greenTransform->transform(color.green);
color.blue = _blueTransform->transform(color.blue); color.blue = _blueTransform->transform(color.blue);
if (_haveBgrOutput) // correct the color byte order
switch (_colorOrder)
{ {
case ORDER_RGB:
// leave as it is
break;
case ORDER_BGR:
std::swap(color.red, color.blue); std::swap(color.red, color.blue);
break;
case ORDER_RBG:
std::swap(color.green, color.blue);
break;
case ORDER_GRB:
std::swap(color.red, color.green);
break;
case ORDER_GBR:
{
uint8_t temp = color.red;
color.red = color.green;
color.green = color.blue;
color.blue = temp;
break;
}
case ORDER_BRG:
{
uint8_t temp = color.red;
color.red = color.blue;
color.blue = color.green;
color.green = temp;
break;
}
} }
} }

View File

@ -20,31 +20,23 @@ LedDeviceLdp6803::LedDeviceLdp6803(const std::string& outputDevice, const unsign
int LedDeviceLdp6803::write(const std::vector<RgbColor> &ledValues) int LedDeviceLdp6803::write(const std::vector<RgbColor> &ledValues)
{ {
// Reconfigure if the current connfiguration does not match the required configuration // Reconfigure if the current connfiguration does not match the required configuration
if (ledValues.size() != _ledBuffer.size()) if (4 + 2*ledValues.size() != _ledBuffer.size())
{ {
// Initialise the buffer with all 'black' values // Initialise the buffer
_ledBuffer.resize(ledValues.size() + 2, 0x80); _ledBuffer.resize(4 + 2*ledValues.size(), 0x00);
_ledBuffer[0] = 0;
_ledBuffer[1] = 0;
} }
// Copy the colors from the RgbColor vector to the Ldp6803Rgb vector // Copy the colors from the RgbColor vector to the Ldp6803 data vector
for (unsigned iLed=0; iLed<ledValues.size(); ++iLed) for (unsigned iLed=0; iLed<ledValues.size(); ++iLed)
{ {
const RgbColor& rgb = ledValues[iLed]; const RgbColor& rgb = ledValues[iLed];
const char packedRed = rgb.red & 0xf8; _ledBuffer[4 + 2 * iLed] = 0x80 | ((rgb.red & 0xf8) >> 1) | (rgb.green >> 6);
const char packedGreen = rgb.green & 0xf8; _ledBuffer[5 + 2 * iLed] = ((rgb.green & 0x38) << 2) | (rgb.blue >> 3);
const char packedBlue = rgb.blue & 0xf8;
const unsigned short packedRgb = 0x80 | (packedRed << 7) | (packedGreen << 2) | (packedBlue >> 3);
_ledBuffer[iLed + 2] = packedRgb;
} }
// Write the data // Write the data
const unsigned bufCnt = _ledBuffer.size() * sizeof(short); if (writeBytes(_ledBuffer.size(), _ledBuffer.data()) < 0)
const char * bufPtr = reinterpret_cast<const char *>(_ledBuffer.data());
if (latch(bufCnt, bufPtr, 0) < 0)
{ {
return -1; return -1;
} }

View File

@ -6,12 +6,12 @@
/// ///
/// Implementation of the LedDevice interface for writing to LDP6803 led device. /// Implementation of the LedDevice interface for writing to LDP6803 led device.
/// ///
/// 00000000 00000000 00000000 00000000 1XXXXXYY YYYZZZZZ 1XXXXXYY YYYZZZZZ ... /// 00000000 00000000 00000000 00000000 1RRRRRGG GGGBBBBB 1RRRRRGG GGGBBBBB ...
/// |---------------------------------| |---------------| |---------------| /// |---------------------------------| |---------------| |---------------|
/// 32 zeros to start the frame Led1 Led2 ... /// 32 zeros to start the frame Led1 Led2 ...
/// ///
/// For each led, the first bit is always 1, and then you have 5 bits each for red, green and blue /// For each led, the first bit is always 1, and then you have 5 bits each for red, green and blue
/// (X, Y and Z in the above illustration) making 16 bits per led. Total bits = 32 + (16 x number of /// (R, G and B in the above illustration) making 16 bits per led. Total bytes = 4 + (2 x number of
/// leds) /// leds)
/// ///
class LedDeviceLdp6803 : public LedSpiDevice class LedDeviceLdp6803 : public LedSpiDevice
@ -20,7 +20,7 @@ public:
/// ///
/// Constructs the LedDevice for a string containing leds of the type LDP6803 /// Constructs the LedDevice for a string containing leds of the type LDP6803
/// ///
/// @param[in] outputDevice The name of the output device (eg '/etc/SpiDev.0.0') /// @param[in] outputDevice The name of the output device (eg '/dev/spidev0.0')
/// @param[in] baudrate The used baudrate for writing to the output device /// @param[in] baudrate The used baudrate for writing to the output device
/// ///
LedDeviceLdp6803(const std::string& outputDevice, const unsigned baudrate); LedDeviceLdp6803(const std::string& outputDevice, const unsigned baudrate);
@ -38,5 +38,5 @@ public:
private: private:
/// The buffer containing the packed RGB values /// The buffer containing the packed RGB values
std::vector<unsigned short> _ledBuffer; std::vector<uint8_t> _ledBuffer;
}; };

View File

@ -12,7 +12,7 @@
#include "LedDeviceWs2801.h" #include "LedDeviceWs2801.h"
LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate) : LedDeviceWs2801::LedDeviceWs2801(const std::string& outputDevice, const unsigned baudrate) :
LedSpiDevice(outputDevice, baudrate), LedSpiDevice(outputDevice, baudrate, 500000),
mLedCount(0) mLedCount(0)
{ {
// empty // empty
@ -23,10 +23,9 @@ int LedDeviceWs2801::write(const std::vector<RgbColor> &ledValues)
mLedCount = ledValues.size(); mLedCount = ledValues.size();
const unsigned dataLen = ledValues.size() * sizeof(RgbColor); const unsigned dataLen = ledValues.size() * sizeof(RgbColor);
const char * dataPtr = reinterpret_cast<const char *>(ledValues.data()); const uint8_t * dataPtr = reinterpret_cast<const uint8_t *>(ledValues.data());
const int retVal = latch(dataLen, dataPtr, 500000); return writeBytes(dataLen, dataPtr);
return retVal;
} }
int LedDeviceWs2801::switchOff() int LedDeviceWs2801::switchOff()

View File

@ -12,9 +12,10 @@
#include "LedSpiDevice.h" #include "LedSpiDevice.h"
LedSpiDevice::LedSpiDevice(const std::string& outputDevice, const unsigned baudrate) : LedSpiDevice::LedSpiDevice(const std::string& outputDevice, const unsigned baudrate, const int latchTime_ns) :
mDeviceName(outputDevice), mDeviceName(outputDevice),
mBaudRate_Hz(baudrate), mBaudRate_Hz(baudrate),
mLatchTime_ns(latchTime_ns),
mFid(-1) mFid(-1)
{ {
memset(&spi, 0, sizeof(spi)); memset(&spi, 0, sizeof(spi));
@ -56,30 +57,28 @@ int LedSpiDevice::open()
return 0; return 0;
} }
int LedSpiDevice::latch(const unsigned len, const char * vec, const int latchTime_ns) int LedSpiDevice::writeBytes(const unsigned size, const uint8_t * data)
{ {
if (mFid < 0) if (mFid < 0)
{ {
return -1; return -1;
} }
spi.tx_buf = __u64(vec); spi.tx_buf = __u64(data);
spi.len = __u32(len); spi.len = __u32(size);
int retVal = ioctl(mFid, SPI_IOC_MESSAGE(1), &spi); int retVal = ioctl(mFid, SPI_IOC_MESSAGE(1), &spi);
if (retVal == 0 && latchTime_ns > 0) if (retVal == 0 && mLatchTime_ns > 0)
{ {
// The 'latch' time for latching the shifted-value into the leds // The 'latch' time for latching the shifted-value into the leds
timespec latchTime; timespec latchTime;
latchTime.tv_sec = 0; latchTime.tv_sec = 0;
latchTime.tv_nsec = latchTime_ns; latchTime.tv_nsec = mLatchTime_ns;
// Sleep to latch the leds (only if write succesfull) // Sleep to latch the leds (only if write succesfull)
nanosleep(&latchTime, NULL); nanosleep(&latchTime, NULL);
} }
return retVal; return retVal;
} }

View File

@ -18,7 +18,7 @@ public:
/// @param[in] outputDevice The name of the output device (eg '/etc/SpiDev.0.0') /// @param[in] outputDevice The name of the output device (eg '/etc/SpiDev.0.0')
/// @param[in] baudrate The used baudrate for writing to the output device /// @param[in] baudrate The used baudrate for writing to the output device
/// ///
LedSpiDevice(const std::string& outputDevice, const unsigned baudrate); LedSpiDevice(const std::string& outputDevice, const unsigned baudrate, const int latchTime_ns = -1);
/// ///
/// Destructor of the LedDevice; closes the output device if it is open /// Destructor of the LedDevice; closes the output device if it is open
@ -37,20 +37,22 @@ protected:
* Writes the given bytes/bits to the SPI-device and sleeps the latch time to ensure that the * Writes the given bytes/bits to the SPI-device and sleeps the latch time to ensure that the
* values are latched. * values are latched.
* *
* @param[in[ len The length of the data * @param[in[ size The length of the data
* @param[in] vec The data * @param[in] data The data
* @param[in] latchTime_ns The latch-time to latch in the values across the SPI-device (negative * @param[in] latchTime_ns The latch-time to latch in the values across the SPI-device (negative
* means no latch required) [ns] * means no latch required) [ns]
* *
* @return Zero on succes else negative * @return Zero on succes else negative
*/ */
int latch(const unsigned len, const char * vec, const int latchTime_ns); int writeBytes(const unsigned size, const uint8_t *data);
private: private:
/// The name of the output device /// The name of the output device
const std::string mDeviceName; const std::string mDeviceName;
/// The used baudrate of the output device /// The used baudrate of the output device
const int mBaudRate_Hz; const int mBaudRate_Hz;
/// The time which the device should be untouched after a write
const int mLatchTime_ns;
/// The File Identifier of the opened output device (or -1 if not opened) /// The File Identifier of the opened output device (or -1 if not opened)
int mFid; int mFid;

View File

@ -23,7 +23,11 @@
"required" : true, "required" : true,
"minimum" : 0 "minimum" : 0
}, },
"bgr-output" : { "colorOrder" : {
"type" : "string",
"required" : false
},
"bgr-output" : { // deprecated
"type" : "boolean", "type" : "boolean",
"required" : false "required" : false
} }

View File

@ -21,6 +21,7 @@ public class LedString {
/** THe configuration of the 'physical' led frame */ /** THe configuration of the 'physical' led frame */
public LedFrameConstruction mLedFrameConfig = new LedFrameConstruction(); public LedFrameConstruction mLedFrameConfig = new LedFrameConstruction();
/** The configuration of the image processing */ /** The configuration of the image processing */
public ImageProcessConfig mProcessConfig = new ImageProcessConfig(); public ImageProcessConfig mProcessConfig = new ImageProcessConfig();

View File

@ -7,8 +7,8 @@ import javax.swing.JComboBox;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import org.hyperion.hypercon.spec.ColorByteOrder;
import org.hyperion.hypercon.spec.DeviceConfig; import org.hyperion.hypercon.spec.DeviceConfig;
import org.hyperion.hypercon.spec.RgbByteOrder;
public class DevicePanel extends JPanel { public class DevicePanel extends JPanel {
@ -21,7 +21,7 @@ public class DevicePanel extends JPanel {
private JComboBox<Integer> mBaudrateCombo; private JComboBox<Integer> mBaudrateCombo;
private JLabel mRgbLabel; private JLabel mRgbLabel;
private JComboBox<RgbByteOrder> mRgbCombo; private JComboBox<ColorByteOrder> mRgbCombo;
public DevicePanel(DeviceConfig pDeviceConfig) { public DevicePanel(DeviceConfig pDeviceConfig) {
super(); super();
@ -52,8 +52,8 @@ public class DevicePanel extends JPanel {
mRgbLabel = new JLabel("RGB Byte Order"); mRgbLabel = new JLabel("RGB Byte Order");
add(mRgbLabel); add(mRgbLabel);
mRgbCombo = new JComboBox<>(RgbByteOrder.values()); mRgbCombo = new JComboBox<>(ColorByteOrder.values());
mRgbCombo.setSelectedItem(mDeviceConfig.mRgbByteOrder); mRgbCombo.setSelectedItem(mDeviceConfig.mColorByteOrder);
mRgbCombo.addActionListener(mActionListener); mRgbCombo.addActionListener(mActionListener);
add(mRgbCombo); add(mRgbCombo);
} }
@ -63,7 +63,7 @@ public class DevicePanel extends JPanel {
public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) {
mDeviceConfig.mOutput = (String)mOutputCombo.getSelectedItem(); mDeviceConfig.mOutput = (String)mOutputCombo.getSelectedItem();
mDeviceConfig.mBaudrate = (Integer)mBaudrateCombo.getSelectedItem(); mDeviceConfig.mBaudrate = (Integer)mBaudrateCombo.getSelectedItem();
mDeviceConfig.mRgbByteOrder = (RgbByteOrder)mRgbCombo.getSelectedItem(); mDeviceConfig.mColorByteOrder = (ColorByteOrder)mRgbCombo.getSelectedItem();
} }
}; };
} }

View File

@ -0,0 +1,5 @@
package org.hyperion.hypercon.spec;
public enum ColorByteOrder {
RGB, RBG, BRG, BGR, GRB, GBR
}

View File

@ -1,21 +1,20 @@
package org.hyperion.hypercon.spec; package org.hyperion.hypercon.spec;
/** /**
* The device specific configuration * The device specific configuration
*/ */
public class DeviceConfig { public class DeviceConfig {
/** The name of the device */ /** The name of the device */
public String mName = "MyPi"; public String mName = "MyPi";
/** The type specification of the device */ /** The type specification of the device */
public DeviceType mType = DeviceType.ws2801; public DeviceType mType = DeviceType.ws2801;
/** The device 'file' name */ /** The device 'file' name */
public String mOutput = "/dev/spidev0.0"; public String mOutput = "/dev/spidev0.0";
/** The baudrate of the device */ /** The baudrate of the device */
public int mBaudrate = 1000000; public int mBaudrate = 1000000;
/** Ordering of the rgb-color channels */ /** The order of the color bytes */
public RgbByteOrder mRgbByteOrder = RgbByteOrder.rbg; public ColorByteOrder mColorByteOrder = ColorByteOrder.RGB;
/** /**
* Creates the JSON string of the configuration as used in the Hyperion daemon configfile * Creates the JSON string of the configuration as used in the Hyperion daemon configfile
@ -32,7 +31,7 @@ public class DeviceConfig {
strBuf.append("\t/// - 'ws2801' this is the device (eg '/dev/spidev0.0')\n"); strBuf.append("\t/// - 'ws2801' this is the device (eg '/dev/spidev0.0')\n");
strBuf.append("\t/// - 'test' this is the file used to write test output (eg '/home/pi/hyperion.out')\n"); strBuf.append("\t/// - 'test' this is the file used to write test output (eg '/home/pi/hyperion.out')\n");
strBuf.append("\t/// * 'rate' : The baudrate of the output to the device (only applicable for 'ws2801')\n"); strBuf.append("\t/// * 'rate' : The baudrate of the output to the device (only applicable for 'ws2801')\n");
strBuf.append("\t/// * 'colorOrder' : The order of the byte color channel (rgb, rbg, bgr, brg, gbr, grb).\n"); strBuf.append("\t/// * 'colorOrder' : The order of the color bytes ('rgb', 'rbg', 'bgr', etc.).\n");
strBuf.append("\t\"device\" :\n"); strBuf.append("\t\"device\" :\n");
strBuf.append("\t{\n"); strBuf.append("\t{\n");
@ -41,11 +40,10 @@ public class DeviceConfig {
strBuf.append("\t\t\"type\" : \"").append(mType.name()).append("\",\n"); strBuf.append("\t\t\"type\" : \"").append(mType.name()).append("\",\n");
strBuf.append("\t\t\"output\" : \"").append(mOutput).append("\",\n"); strBuf.append("\t\t\"output\" : \"").append(mOutput).append("\",\n");
strBuf.append("\t\t\"rate\" : ").append(mBaudrate).append(",\n"); strBuf.append("\t\t\"rate\" : ").append(mBaudrate).append(",\n");
strBuf.append("\t\t\"colorOrder\" : ").append(mRgbByteOrder.name()).append("\n"); strBuf.append("\t\t\"colorOrder\" : \"").append(mColorByteOrder.name().toLowerCase()).append("\"\n");
strBuf.append("\t}"); strBuf.append("\t}");
return strBuf.toString(); return strBuf.toString();
} }
} }

View File

@ -1,11 +0,0 @@
package org.hyperion.hypercon.spec;
public enum RgbByteOrder {
rgb,
rbg,
grb,
gbr,
brg,
bgr;
}

View File

@ -1,13 +1,13 @@
package org.hyperion.hypercon.test; package org.hyperion.hypercon.test;
import org.hyperion.hypercon.ConfigurationFile; import org.hyperion.hypercon.ConfigurationFile;
import org.hyperion.hypercon.spec.ColorByteOrder;
import org.hyperion.hypercon.spec.ColorConfig; import org.hyperion.hypercon.spec.ColorConfig;
import org.hyperion.hypercon.spec.DeviceConfig; import org.hyperion.hypercon.spec.DeviceConfig;
import org.hyperion.hypercon.spec.DeviceType; import org.hyperion.hypercon.spec.DeviceType;
import org.hyperion.hypercon.spec.ImageProcessConfig; import org.hyperion.hypercon.spec.ImageProcessConfig;
import org.hyperion.hypercon.spec.LedFrameConstruction; import org.hyperion.hypercon.spec.LedFrameConstruction;
import org.hyperion.hypercon.spec.MiscConfig; import org.hyperion.hypercon.spec.MiscConfig;
import org.hyperion.hypercon.spec.RgbByteOrder;
public class TesConfigWriter { public class TesConfigWriter {
@ -19,7 +19,7 @@ public class TesConfigWriter {
MiscConfig miscConfig = new MiscConfig(); MiscConfig miscConfig = new MiscConfig();
deviceConfig.mBaudrate = 4800; deviceConfig.mBaudrate = 4800;
deviceConfig.mRgbByteOrder = RgbByteOrder.bgr; deviceConfig.mColorByteOrder = ColorByteOrder.BGR;
deviceConfig.mName = "DAG"; deviceConfig.mName = "DAG";
deviceConfig.mOutput = "/dev/null"; deviceConfig.mOutput = "/dev/null";
deviceConfig.mType = DeviceType.ldp6803; deviceConfig.mType = DeviceType.ldp6803;