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

chris at sita.openmoko.org chris at sita.openmoko.org
Mon Nov 19 14:59:29 CET 2007


Author: chris
Date: 2007-11-19 14:59:28 +0100 (Mon, 19 Nov 2007)
New Revision: 3438

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c
Log:
        * src/phone-kit/moko-dialer-sms.c: (moko_dialer_sms_finalize),
        (connection_source_prepare), (connection_source_check),
        (connection_source_dispatch), (moko_dialer_sms_init):
        Don't forget to actually poll for events...


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-11-19 13:24:53 UTC (rev 3437)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-11-19 13:59:28 UTC (rev 3438)
@@ -1,5 +1,12 @@
 2007-11-19  Chris Lord  <chris at openedhand.com>
 
+	* src/phone-kit/moko-dialer-sms.c: (moko_dialer_sms_finalize),
+	(connection_source_prepare), (connection_source_check),
+	(connection_source_dispatch), (moko_dialer_sms_init):
+	Don't forget to actually poll for events...
+
+2007-11-19  Chris Lord  <chris at openedhand.com>
+
 	* src/phone-kit/moko-dialer-sms.c: (status_report_added_cb),
 	(store_sms), (gsmd_eventhandler), (sms_msghandler),
 	(moko_dialer_sms_init):

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c	2007-11-19 13:24:53 UTC (rev 3437)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c	2007-11-19 13:59:28 UTC (rev 3438)
@@ -9,6 +9,7 @@
 #include <libjana/jana.h>
 #include <libjana-ecal/jana-ecal.h>
 #include <string.h>
+#include <unistd.h>
 
 #include "moko-dialer-sms-glue.h"
 
@@ -19,10 +20,17 @@
 
 typedef struct _MokoDialerSMSPrivate MokoDialerSMSPrivate;
 
+typedef struct {
+	GSource source;
+	GPollFD pollfd;
+	struct lgsm_handle *handle;
+} MokoDialerSMSSource;
+
 struct _MokoDialerSMSPrivate {
 	struct lgsm_handle *handle;
 	JanaStore *note_store;
 	JanaNote *last_msg;
+	MokoDialerSMSSource *source;
 };
 
 static void
@@ -55,6 +63,11 @@
 static void
 moko_dialer_sms_finalize (GObject *object)
 {
+	MokoDialerSMSPrivate *priv = SMS_PRIVATE (object);
+	
+	g_source_destroy ((GSource *)priv->source);
+	lgsm_exit (priv->handle);
+
 	G_OBJECT_CLASS (moko_dialer_sms_parent_class)->finalize (object);
 }
 
@@ -269,10 +282,52 @@
 	return 0;
 }
 
+static gboolean 
+connection_source_prepare (GSource* self, gint* timeout)
+{
+    return FALSE;
+}
+
+static gboolean 
+connection_source_check (GSource* source)
+{
+	MokoDialerSMSSource *self = (MokoDialerSMSSource *)source;
+	return self->pollfd.revents & G_IO_IN;
+}
+
+static gboolean 
+connection_source_dispatch (GSource *source, GSourceFunc callback,
+			    gpointer data)
+{
+	char buf[1025];
+	int size;
+
+	MokoDialerSMSSource *self = (MokoDialerSMSSource *)source;
+
+	size = read (self->pollfd.fd, &buf, sizeof(buf));
+	if (size < 0) {
+		g_warning ("moko_gsmd_connection_source_dispatch:%s %s",
+			"read error from libgsmd:", strerror (errno));
+	} else {
+		if (size == 0) /* EOF */
+			return FALSE;
+		lgsm_handle_packet (self->handle, buf, size);
+	}
+	
+	return TRUE;
+}
+
 static void
 moko_dialer_sms_init (MokoDialerSMS *self)
 {
 	static gboolean first_init = TRUE;
+	static GSourceFuncs funcs = {
+		connection_source_prepare,
+		connection_source_check,
+		connection_source_dispatch,
+		NULL,
+	};
+	
 	MokoDialerSMSPrivate *priv = SMS_PRIVATE (self);
 	
 	/* We can only have one of these objects per process, as the gsmd 
@@ -300,6 +355,16 @@
 	
 	/* List all messages to move to journal */
 	lgsm_sms_list (priv->handle, GSMD_SMS_ALL);
+	
+	/* Start polling for events */
+	priv->source = (MokoDialerSMSSource *)
+		g_source_new (&funcs, sizeof (MokoDialerSMSSource));
+	priv->source->handle = priv->handle;
+	priv->source->pollfd.fd = lgsm_fd (priv->handle);
+	priv->source->pollfd.events = G_IO_IN | G_IO_HUP | G_IO_ERR;
+	priv->source->pollfd.revents = 0;
+	g_source_add_poll ((GSource*)priv->source, &priv->source->pollfd);
+	g_source_attach ((GSource*)priv->source, NULL);
 }
 
 MokoDialerSMS*





More information about the commitlog mailing list