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