From 710556737dfaa0ff3bb7a3bdabf3a90219b6444a Mon Sep 17 00:00:00 2001 From: Philipp Zabel Date: Thu, 10 Feb 2011 17:10:25 +0100 Subject: [PATCH] Update the LED pattern helper to use a more robust testing method --- src/led-pattern-helper.vala | 134 +++++++++++++------------------------------ 1 file changed, 39 insertions(+), 95 deletions(-) diff --git a/src/led-pattern-helper.vala b/src/led-pattern-helper.vala index 7fc5ad5..5bd07c6 100644 --- a/src/led-pattern-helper.vala +++ b/src/led-pattern-helper.vala @@ -16,6 +16,16 @@ * along with LED Pattern Editor. If not, see . */ +bool sysfs_write (string filename, string contents) { + var f = FileStream.open (filename, "w"); + if (f == null) { + stderr.printf ("failed to open '%s' for writing\n", filename); + return false; + } + f.printf ("%s", contents); + return true; +} + public bool test_pattern (string pattern, bool apply) { string[] key_value = pattern.split ("="); @@ -78,19 +88,19 @@ public bool test_pattern (string pattern, bool apply) { return false; } - int[] led_currents = { 2, 2, 2 }; + string[] led_currents = { "2", "2", "2" }; switch (led_map1 | led_map2) { case 0x001: - led_currents = { 8, 0, 2 }; + led_currents = { "8", "0", "2" }; break; case 0x010: - led_currents = { 2, 2, 2 }; + led_currents = { "2", "2", "2" }; break; case 0x100: - led_currents = { 2, 2, 2 }; + led_currents = { "2", "2", "2" }; break; case 0x011: - led_currents = { 20, 2, 0 }; + led_currents = { "20", "2", "0" }; break; case 0x101: // TODO: led_currents? @@ -99,7 +109,7 @@ public bool test_pattern (string pattern, bool apply) { // TODO: led_currents? break; case 0x111: - led_currents = { 8, 2, 2 }; + led_currents = { "8", "2", "2" }; break; } @@ -136,95 +146,29 @@ public bool test_pattern (string pattern, bool apply) { if (apply == false) return true; - string i2c_dev = "/sys/bus/i2c/devices/2-0032"; - - var f = FileStream.open ("/sys/class/leds/lp5523:r/led_current", "w"); - if (f == null) { - stderr.printf ("failed to set red led current\n"); - return false; - } - f.printf ("%d\n", led_currents[0]); - - f = FileStream.open ("/sys/class/leds/lp5523:g/led_current", "w"); - if (f == null) { - stderr.printf ("failed to set green led current\n"); - return false; - } - f.printf ("%d\n", led_currents[1]); - - f = FileStream.open ("/sys/class/leds/lp5523:b/led_current", "w"); - if (f == null) { - stderr.printf ("failed to set blue led current\n"); - return false; - } - f.printf ("%d\n", led_currents[2]); - - f = FileStream.open (Path.build_filename (i2c_dev, "engine1_mode"), "w"); - if (f == null) { - stderr.printf ("failed to set engine1 to load mode\n"); - return false; - } - f.printf ("load\n"); - - int retries = 100; - for (int i = 0; i < retries; i++) { - f = FileStream.open (Path.build_filename (i2c_dev, "engine1_leds"), "w"); - if (f != null) - break; - } - if (f == null) { - stderr.printf ("failed to set engine1 mux\n"); - return false; - } - f.printf ("0000%03x00\n", led_map1); - - f = FileStream.open (Path.build_filename (i2c_dev, "engine1_load"), "w"); - if (f == null) { - stderr.printf ("failed to load engine1 pattern\n"); - return false; - } - f.printf ("%s\n", p[4]); - - if (led_map2 != 0x000) { - f = FileStream.open (Path.build_filename (i2c_dev, "engine2_mode"), "w"); - if (f == null) { - stderr.printf ("failed to set engine2 to load mode\n"); - return false; - } - f.printf ("load\n"); - - for (int i = 0; i < retries; i++) { - f = FileStream.open (Path.build_filename (i2c_dev, "engine2_leds"), "w"); - if (f != null) - break; - } - if (f == null) { - stderr.printf ("failed to set engine2 mux\n"); - return false; - } - f.printf ("0000%03x00\n", led_map2); - - f = FileStream.open (Path.build_filename (i2c_dev, "engine2_load"), "w"); - if (f == null) { - stderr.printf ("failed to load engine1 pattern\n"); - return false; - } - f.printf ("%s\n", p[5]); - - f = FileStream.open (Path.build_filename (i2c_dev, "engine2_mode"), "w"); - if (f == null) { - stderr.printf ("failed to set engine2 to run mode\n"); - return false; - } - f.printf ("run\n"); - } - - f = FileStream.open (Path.build_filename (i2c_dev, "engine1_mode"), "w"); - if (f == null) { - stderr.printf ("failed to set engine1 to run mode\n"); - return false; - } - f.printf ("run\n"); + string mux1 = "0000%03x00\n".printf (led_map1); + string mux2 = "0000%03x00\n".printf (led_map2); + string pattern1 = p[4]; + string pattern2 = p[5]; + + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine1_mode", "disabled"); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine2_mode", "disabled"); + sysfs_write ("/sys/class/leds/lp5523:r/brightness", "0"); + sysfs_write ("/sys/class/leds/lp5523:g/brightness", "0"); + sysfs_write ("/sys/class/leds/lp5523:b/brightness", "0"); + + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine1_mode", "load"); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine1_leds", mux1); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine1_load", pattern1); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine2_mode", "load"); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine2_leds", mux2); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine2_load", pattern2); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine2_mode", "run"); + sysfs_write ("/sys/class/i2c-adapter/i2c-2/2-0032/engine1_mode", "run"); + + sysfs_write ("/sys/class/leds/lp5523:r/led_current", led_currents[0]); + sysfs_write ("/sys/class/leds/lp5523:g/led_current", led_currents[1]); + sysfs_write ("/sys/class/leds/lp5523:b/led_current", led_currents[2]); return true; } -- 1.7.9.5