]> ToastFreeware Gitweb - gregoa/zavai.git/blobdiff - src/gsm.vala
Notes about remotising devices
[gregoa/zavai.git] / src / gsm.vala
index 105d6efb7d246eb62f7a87c880e22c00897c3124..b11065d0a79511493c222874ff28187847c92aeb 100644 (file)
@@ -31,6 +31,8 @@ protected class GSMActivator : Object
     public dynamic DBus.Object network;
     public dynamic DBus.Object sim;
 
+    public signal void status_changed(string message);
+
     public GSMActivator()
     {
         device = null;
@@ -56,6 +58,7 @@ protected class GSMActivator : Object
                     "org.freesmartphone.GSM.SIM");
         }
 
+        status_changed("Turning on antenna");
         device.SetAntennaPower(true, on_antenna_power);
     }
 
@@ -67,17 +70,20 @@ protected class GSMActivator : Object
             if (e.message.str("current status is 'enabling'") != null
                 || e.message.str("current status is 'unknown'") != null)
             {
-                zavai.log.info("trying again after 5 seconds");
-                Timeout.add(5 * 1000, () => {
+                status_changed("Waiting for ogsmd to settle");
+                zavai.log.info("trying again after 2 seconds");
+                Timeout.add(2 * 1000, () => {
                     device.SetAntennaPower(true, on_antenna_power);
                     return false;
                 });
             } else {
+                status_changed("Checking if PIN is required");
                 sim.GetAuthStatus(on_auth_status);
             }
             return;
         }
         zavai.log.warning("on_antenna_power ok");
+        status_changed("Registering with network");
         network.Register(on_network_register);
     }
 
@@ -88,7 +94,7 @@ protected class GSMActivator : Object
             zavai.log.warning("on_network_register: " + e.message);
             return;
         }
-        zavai.log.info("on_network_register: registered");
+        status_changed("Registered with network");
     }
 
     protected void on_auth_status(string status, Error e)
@@ -100,9 +106,15 @@ protected class GSMActivator : Object
         }
         zavai.log.info("on_auth_status: " + status);
         if (status == "READY")
+        {
+            status_changed("PIN ok");
             device.SetAntennaPower(true, on_antenna_power);
+        }
         else if (status == "SIM PIN")
+        {
+            status_changed("Sending PIN");
             sim.SendAuthCode(zavai.config.sim_pin, on_auth_code);
+        }
         else
             zavai.log.debug("Unknown status: " + status);
     }
@@ -114,29 +126,27 @@ protected class GSMActivator : Object
             zavai.log.warning("on_auth_code: " + e.message);
             return;
         }
-        zavai.log.info("PIN OK");
+        status_changed("PIN OK");
     }
 }
 
-public class GSM: zavai.Service
+public class GSM: zavai.ScriptMonitorService
 {
     protected dynamic DBus.Object dbus;
     public dynamic DBus.Object call;
-    protected Pid child_pid;
-    protected int child_watch_id;
     protected GSMActivator activator;
 
+    public signal void status_changed(string message);
+
     public GSM()
     {
-        Object(name: "gsm.gsm");
+        Object(name: "gsm");
 
         activator = new GSMActivator();
+        activator.status_changed += (msg) => { status_changed(msg); };
 
         call = null;
 
-        child_pid = 0;
-        child_watch_id = 0;
-
         dbus = zavai.registry.sbus.get_object(
                 "org.freedesktop.DBus",
                 "/org/freedesktop/DBus",
@@ -149,45 +159,15 @@ public class GSM: zavai.Service
     {
         if (started) return;
 
-        string command = zavai.config.homedir + "/gsm pre";
-        try {
-            // Then run our own script
-            zavai.app.run_script(command);
-        } catch (Error e) {
-            zavai.log.error("Running " + command + ": " + e.message);
-            return;
-        }
+        status_changed("Starting");
 
-        command = zavai.config.homedir + "/gsm run";
-        zavai.log.info("Run program: " + command);
-        string[] args = command.split(" ");
-        try {
-            Process.spawn_async(
-                Environment.get_home_dir(),
-                args,
-                null,
-                SpawnFlags.SEARCH_PATH | SpawnFlags.DO_NOT_REAP_CHILD,
-                null,
-                out child_pid);
-        } catch (SpawnError e) {
-            zavai.log.error("Running " + command + ": " + e.message);
-        }
-
-        // Add a child watch source to know when it ends
-        ChildWatch.add(child_pid, on_child);
+        script_start();
 
         call = zavai.registry.sbus.get_object(
             "org.freesmartphone.ogsmd", 
             "/org/freesmartphone/GSM/Device",
             "org.freesmartphone.GSM.Call");
 
-        // try {
-        //     device.Enable();
-        //     zavai.log.info("Started GSM");
-        //     base.start();
-        // } catch (GLib.Error e) {
-        //     zavai.log.error(e.message);
-        // }
         base.start();
     }
 
@@ -195,7 +175,10 @@ public class GSM: zavai.Service
     {
         zavai.log.debug("NOC " + name + " from " + oldOwner + " to " + newOwner);
         if (name == "org.freesmartphone.ogsmd" && newOwner != "")
+        {
+            status_changed("ogpsd came online");
             activator.begin();
+        }
     }
 
     // Release usage of GPS
@@ -203,35 +186,12 @@ public class GSM: zavai.Service
     {
         if (!started) return;
 
-        Posix.kill((Posix.pid_t)child_pid, Posix.SIGTERM);
+        script_stop();
     }
 
-    public void on_child(Pid pid, int status)
+    protected override void cleanup_after_script_stop()
     {
-        zavai.log.info("Exited");
-stderr.printf("STATUS %d\n", status);
-        Process.close_pid(pid);
-
-        // try {
-        //     device.Disable();
-        //     zavai.log.info("Stopped GSM");
-        //     base.stop();
-        // } catch (GLib.Error e) {
-        //     zavai.log.error(e.message);
-        // }
-
-        string command = zavai.config.homedir + "/gsm post";
-        try {
-            // Then run our own script
-            zavai.app.run_script(command);
-        } catch (Error e) {
-            zavai.log.error("Running " + command + ": " + e.message);
-            return;
-        }
-
         call = null;
-
-        base.stop();
     }
 }