public dynamic DBus.Object network;
public dynamic DBus.Object sim;
+ public signal void status_changed(string message);
+
public GSMActivator()
{
device = null;
"org.freesmartphone.GSM.SIM");
}
+ status_changed("Turning on antenna");
device.SetAntennaPower(true, on_antenna_power);
}
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);
}
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)
}
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);
}
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",
{
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();
}
{
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
{
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();
}
}