From 3cafa77e1876d456024093338c2ae913c82f4f07 Mon Sep 17 00:00:00 2001 From: Enrico Zini Date: Thu, 11 Mar 2010 15:24:22 +0100 Subject: [PATCH] More activation motions --- src/config.vala | 9 +++ src/gsm.vala | 144 +++++++++++++++++++++++++++++++++--------------- 2 files changed, 108 insertions(+), 45 deletions(-) diff --git a/src/config.vala b/src/config.vala index e4c5cfd..dcc352e 100644 --- a/src/config.vala +++ b/src/config.vala @@ -124,6 +124,13 @@ public class Config set { _gprs_pass = set_string("gprs_pass", value); } } + private string _sim_pin; + public string sim_pin + { + get { return _sim_pin; } + set { _sim_pin = set_string("sim_pin", value); } + } + private int _power_button_keycode; public int power_button_keycode { @@ -176,6 +183,7 @@ public class Config _gprs_apn = get_string("gprs_apn"); _gprs_user = get_string("gprs_user"); _gprs_pass = get_string("gprs_pass"); + _sim_pin = get_string("sim_pin"); _power_button_keycode = get_int("power_button_keycode"); _aux_button_keycode = get_int("aux_button_keycode"); } @@ -198,6 +206,7 @@ public class Config gprs_apn = "general.t-mobile.uk"; gprs_user = "x"; gprs_pass = "x"; + sim_pin = "1234"; backlight_max = 15; power_button_keycode = 124; aux_button_keycode = 177; diff --git a/src/gsm.vala b/src/gsm.vala index f73ac15..105d6ef 100644 --- a/src/gsm.vala +++ b/src/gsm.vala @@ -23,24 +23,116 @@ using GLib; namespace zavai { namespace gsm { +// Isolate here the insane loops we need to go through to turn on the bloody +// gsm +protected class GSMActivator : Object +{ + public dynamic DBus.Object device; + public dynamic DBus.Object network; + public dynamic DBus.Object sim; + + public GSMActivator() + { + device = null; + network = null; + sim = null; + } + + public void begin() + { + if (device == null) + { + device = zavai.registry.sbus.get_object( + "org.freesmartphone.ogsmd", + "/org/freesmartphone/GSM/Device", + "org.freesmartphone.GSM.Device"); + network = zavai.registry.sbus.get_object( + "org.freesmartphone.ogsmd", + "/org/freesmartphone/GSM/Device", + "org.freesmartphone.GSM.Network"); + sim = zavai.registry.sbus.get_object( + "org.freesmartphone.ogsmd", + "/org/freesmartphone/GSM/Device", + "org.freesmartphone.GSM.SIM"); + } + + device.SetAntennaPower(true, on_antenna_power); + } + + protected void on_antenna_power(Error e) + { + if (e != null) + { + zavai.log.warning("on_antenna_power: " + e.message); + 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, () => { + device.SetAntennaPower(true, on_antenna_power); + return false; + }); + } else { + sim.GetAuthStatus(on_auth_status); + } + return; + } + zavai.log.warning("on_antenna_power ok"); + network.Register(on_network_register); + } + + protected void on_network_register(Error e) + { + if (e != null) + { + zavai.log.warning("on_network_register: " + e.message); + return; + } + zavai.log.info("on_network_register: registered"); + } + + protected void on_auth_status(string status, Error e) + { + if (e != null) + { + zavai.log.warning("on_auth_status: " + e.message); + return; + } + zavai.log.info("on_auth_status: " + status); + if (status == "READY") + device.SetAntennaPower(true, on_antenna_power); + else if (status == "SIM PIN") + sim.SendAuthCode(zavai.config.sim_pin, on_auth_code); + else + zavai.log.debug("Unknown status: " + status); + } + + protected void on_auth_code(Error e) + { + if (e != null) + { + zavai.log.warning("on_auth_code: " + e.message); + return; + } + zavai.log.info("PIN OK"); + } +} + public class GSM: zavai.Service { protected dynamic DBus.Object dbus; - public dynamic DBus.Object network; public dynamic DBus.Object call; - public dynamic DBus.Object device; - public dynamic DBus.Object sim; protected Pid child_pid; protected int child_watch_id; + protected GSMActivator activator; public GSM() { Object(name: "gsm.gsm"); - network = null; + activator = new GSMActivator(); + call = null; - device = null; - sim = null; child_pid = 0; child_watch_id = 0; @@ -84,22 +176,10 @@ public class GSM: zavai.Service // Add a child watch source to know when it ends ChildWatch.add(child_pid, on_child); - network = zavai.registry.sbus.get_object( - "org.freesmartphone.ogsmd", - "/org/freesmartphone/GSM/Device", - "org.freesmartphone.GSM.Network"); call = zavai.registry.sbus.get_object( "org.freesmartphone.ogsmd", "/org/freesmartphone/GSM/Device", "org.freesmartphone.GSM.Call"); - device = zavai.registry.sbus.get_object( - "org.freesmartphone.ogsmd", - "/org/freesmartphone/GSM/Device", - "org.freesmartphone.GSM.Device"); - sim = zavai.registry.sbus.get_object( - "org.freesmartphone.ogsmd", - "/org/freesmartphone/GSM/Device", - "org.freesmartphone.GSM.SIM"); // try { // device.Enable(); @@ -115,30 +195,7 @@ public class GSM: zavai.Service { zavai.log.debug("NOC " + name + " from " + oldOwner + " to " + newOwner); if (name == "org.freesmartphone.ogsmd" && newOwner != "") - { - // Frameworkd started - device.SetAntennaPower(true, on_antenna_power); - // reply_handler = self.cbAntennaPowerReply, - // error_handler = self.cbAntennaPowerError) - } - } - - protected void on_antenna_power(Error e) - { - if (e != null) - { - zavai.log.warning("on_antenna_power: " + e.message); - // if str(e).find("current status is 'enabling'") >= 0 or str(e).find("current status is 'unknown'") >= 0: - // time.sleep(10) - // self.cbStartAntenna(0) - // else: - // self.gsm_sim_iface.GetAuthStatus(reply_handler = self.cbAuthStatusReply, - // error_handler = lambda e: (dbg("cbAuthStatusError %s" % e), self.loop.quit())) - return; - } - zavai.log.warning("on_antenna_power ok"); - // network.Register(reply_handler = self.cbRegisterReply, - // error_handler = lambda e: (dbg("cbRegisterError %s" % e), self.loop.quit())) + activator.begin(); } // Release usage of GPS @@ -172,10 +229,7 @@ stderr.printf("STATUS %d\n", status); return; } - network = null; call = null; - device = null; - sim = null; base.stop(); } -- 2.39.5