r3561 - in trunk/src/target/OM-2007.2/applications/openmoko-dialer2: . src/phone-kit

thomas at sita.openmoko.org thomas at sita.openmoko.org
Tue Dec 4 14:49:01 CET 2007


Author: thomas
Date: 2007-12-04 14:48:57 +0100 (Tue, 04 Dec 2007)
New Revision: 3561

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
Log:
* src/phone-kit/moko-network.c: (on_network_registered),
(phone_msghandler), (connection_source_dispatch),
(network_init_gsmd):

Fix bug 1028 (PIN dialog appears multiple times) by using the pin and
phone power callback messages.


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-12-04 11:30:04 UTC (rev 3560)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-12-04 13:48:57 UTC (rev 3561)
@@ -1,5 +1,14 @@
 2007-12-04  Thomas Wood  <thomas at openedhand.com>
 
+	* src/phone-kit/moko-network.c: (on_network_registered),
+	(phone_msghandler), (connection_source_dispatch),
+	(network_init_gsmd):
+
+	Fix bug 1028 (PIN dialog appears multiple times) by using the pin and
+	phone power callback messages.
+
+2007-12-04  Thomas Wood  <thomas at openedhand.com>
+
 	* src/phone-kit/moko-pin.c:
 	* src/phone-kit/moko-pin.h:
 

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c	2007-12-04 11:30:04 UTC (rev 3560)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-network.c	2007-12-04 13:48:57 UTC (rev 3561)
@@ -152,15 +152,6 @@
   }
 }
 
-static gboolean
-register_to_network (MokoNetwork *network)
-{
-  g_return_val_if_fail (MOKO_IS_NETWORK (network), FALSE);
-
-  lgsm_netreg_register (network->priv->handle, "");
-  return FALSE;
-}
-
 static void
 on_pin_requested (MokoListener *listener, struct lgsm_handle *handle,
                   int type)
@@ -179,10 +170,6 @@
   
   lgsm_pin (handle, 1, pin, NULL);
   g_free (pin);
-  
-  /* temporary delay before we try registering
-   * FIXME: this should check if pin was OK */
-  g_timeout_add_seconds (1, (GSourceFunc) register_to_network, listener);
 }
 
 static void
@@ -514,14 +501,31 @@
   GList *l;
   MokoNetwork *network = moko_network_get_default ();
   MokoNetworkPrivate *priv = network->priv;
+  int *intresult = (void *)gmh + sizeof(*gmh);
 
-  switch (gmh->msg_subtype) {
-    case GSMD_PHONE_GET_IMSI :
-      for (l = priv->listeners; l; l = l->next) {
+  switch (gmh->msg_subtype)
+  {
+    case GSMD_PHONE_GET_IMSI:
+      for (l = priv->listeners; l; l = l->next)
+      {
         moko_listener_on_imsi (MOKO_LISTENER (l->data), priv->handle,
                                (const gchar *)gmh + sizeof (*gmh));
       }
       break;
+    case GSMD_PHONE_POWERUP:
+      if (*intresult == 0)
+      {
+        /* phone has been powered on successfully */
+        g_debug ("Phone powered on");
+        /* Register with network */
+        priv->registered = GSMD_NETREG_UNREG;
+        lgsm_netreg_register (priv->handle, "");
+        
+        /* Get phone number */
+        lgsm_get_subscriber_num (priv->handle);
+      }
+      break;
+    
     default :
       return -EINVAL;
   }
@@ -529,6 +533,47 @@
   return 0;
 }
 
+static int
+pin_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
+{
+  int result = *(int *) gmh->data;
+  static int attempt = 0;
+  
+  /* store the number of pin attempts */
+  attempt++;
+  
+  /* must not do more than three attempts */
+  if (attempt > 3)
+  {
+    char *msg = "Maximum number of PIN attempts reached";
+    g_debug (msg);
+    display_pin_error (msg);
+  }
+ 
+  if (result)
+  {
+    gchar *pin = NULL;
+    char *msg = g_strdup_printf ("PIN error: %i", result);
+    
+    g_debug (msg);
+    display_pin_error (msg);
+    g_free (msg);
+    
+    pin = get_pin_from_user ();
+    if (!pin) return 0;
+    lgsm_pin (lh, 1, pin, NULL);
+    g_free (pin);
+  }
+  else
+  {
+    /* PIN accepted, so let's make sure the phone is now powered on */
+    g_debug ("PIN accepted!");
+    lgsm_phone_power (lh, 1);
+  }
+
+  return 0;
+}
+
 static gboolean 
 connection_source_prepare (GSource* self, gint* timeout)
 {
@@ -594,25 +639,16 @@
   lgsm_evt_handler_register (priv->handle, GSMD_EVT_IN_DS, gsmd_eventhandler);
   lgsm_evt_handler_register (priv->handle, GSMD_EVT_NETREG, gsmd_eventhandler);
   lgsm_evt_handler_register (priv->handle, GSMD_EVT_OUT_STATUS, gsmd_eventhandler);
+  lgsm_evt_handler_register (priv->handle, GSMD_EVT_OUT_STATUS, gsmd_eventhandler);
+  lgsm_evt_handler_register (priv->handle, GSMD_EVT_PIN, gsmd_eventhandler);
   lgsm_register_handler (priv->handle, GSMD_MSG_NETWORK, net_msghandler);
   lgsm_register_handler (priv->handle, GSMD_MSG_PHONE, phone_msghandler);
   lgsm_register_handler (priv->handle, GSMD_MSG_SMS, sms_msghandler);
+  lgsm_register_handler (priv->handle, GSMD_MSG_PIN, pin_msghandler);
 
-  /* Power the gsm modem up */
-  if (lgsm_phone_power (priv->handle, 1) == -1) {
-    g_warning ("Error powering up gsm modem");
-    lgsm_exit (priv->handle);
-    priv->handle = NULL;
-    return;
-  }
+  /* Power the gsm modem up - this should trigger a PIN requiest if needed */
+  lgsm_phone_power (priv->handle, 1);
 
-  /* Register with network */
-  priv->registered = GSMD_NETREG_UNREG;
-  lgsm_netreg_register (priv->handle, "");
-  
-  /* Get phone number */
-  lgsm_get_subscriber_num (priv->handle);
-
   /* Start polling for events */
   priv->source = (MokoNetworkSource *)
     g_source_new (&funcs, sizeof (MokoNetworkSource));





More information about the commitlog mailing list