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