Update the LED pattern helper to use a more robust testing method
authorPhilipp Zabel <philipp.zabel@gmail.com>
Thu, 10 Feb 2011 16:10:25 +0000 (17:10 +0100)
committerPhilipp Zabel <philipp.zabel@gmail.com>
Thu, 10 Feb 2011 16:13:24 +0000 (17:13 +0100)
src/led-pattern-helper.vala

index 7fc5ad5..5bd07c6 100644 (file)
  * along with LED Pattern Editor. If not, see <http://www.gnu.org/licenses/>.
  */
 
+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;
 }