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

chris at sita.openmoko.org chris at sita.openmoko.org
Tue Nov 13 19:14:42 CET 2007


Author: chris
Date: 2007-11-13 19:14:40 +0100 (Tue, 13 Nov 2007)
New Revision: 3407

Added:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml
   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.h
Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
Log:
        * configure.ac:
        * src/phone-kit/Makefile.am:
        * src/phone-kit/moko-dialer-sms-dbus.xml:
        * src/phone-kit/moko-dialer-sms.c: (moko_dialer_sms_get_property),
        (moko_dialer_sms_set_property), (moko_dialer_sms_dispose),
        (moko_dialer_sms_finalize), (moko_dialer_sms_class_init),
        (gsmd_eventhandler), (moko_dialer_sms_init), (moko_dialer_sms_new),
        (moko_dialer_sms_send), (moko_dialer_sms_sending),
        (moko_dialer_sms_sent), (moko_dialer_sms_rejected):
        * src/phone-kit/moko-dialer-sms.h:
        Add beginnings of SMS part of phone-kit. May or may not work.


Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-11-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/ChangeLog	2007-11-13 18:14:40 UTC (rev 3407)
@@ -1,3 +1,17 @@
+2007-11-13  Chris Lord  <chris at openedhand.com>
+
+	* configure.ac:
+	* src/phone-kit/Makefile.am:
+	* src/phone-kit/moko-dialer-sms-dbus.xml:
+	* src/phone-kit/moko-dialer-sms.c: (moko_dialer_sms_get_property),
+	(moko_dialer_sms_set_property), (moko_dialer_sms_dispose),
+	(moko_dialer_sms_finalize), (moko_dialer_sms_class_init),
+	(gsmd_eventhandler), (moko_dialer_sms_init), (moko_dialer_sms_new),
+	(moko_dialer_sms_send), (moko_dialer_sms_sending),
+	(moko_dialer_sms_sent), (moko_dialer_sms_rejected):
+	* src/phone-kit/moko-dialer-sms.h:
+	Add beginnings of SMS part of phone-kit. May or may not work.
+
 2007-11-12  Thomas Wood  <thomas at openedhand.com>
 
 	* src/common/moko-contacts.c: (moko_contacts_get_photo),

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac	2007-11-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/configure.ac	2007-11-13 18:14:40 UTC (rev 3407)
@@ -20,6 +20,8 @@
                   libmokoui2
                   libpulse)
 
+PKG_CHECK_MODULES(JANA, libjana libjana-ecal)
+
 old_cflags=$CFLAGS
 CFLAGS=$DIALER_CFLAGS
 AC_CHECK_TYPE(EContactPhotoType, [], [], [#include <libebook/e-book.h>])

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am	2007-11-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/Makefile.am	2007-11-13 18:14:40 UTC (rev 3407)
@@ -1,5 +1,5 @@
 AM_CPPFLAGS = -DDATADIR=\"$(datadir)\" -DPKGDATADIR=\"$(pkgdatadir)\"
-AM_CFLAGS = -Wall @DIALER_CFLAGS@
+AM_CFLAGS = -Wall @DIALER_CFLAGS@ @JANA_CFLAGS@
 
 INCLUDES = -I$(top_srcdir)/src/common
 
@@ -10,15 +10,16 @@
 	moko-dialer.c moko-dialer.h \
 	moko-notify.c moko-notify.h \
 	moko-sound.c moko-sound.h \
-	moko-talking.c moko-talking.h
+	moko-talking.c moko-talking.h \
+	moko-dialer-sms.c moko-dialer-sms.h
 
-phone_kit_LDADD = @DIALER_LIBS@ $(top_srcdir)/src/common/libdialer-common.a
+phone_kit_LDADD = @DIALER_LIBS@ @JANA_LIBS@ $(top_srcdir)/src/common/libdialer-common.a
 
 
-moko-dialer-glue.h: moko-dialer-dbus.xml
-	$(LIBTOOL) --mode=execute $(DBUS_GLIB_BIN)/dbus-binding-tool --prefix=moko_dialer --mode=glib-server --output=$@ $<
+%-glue.h: %-dbus.xml
+	$(LIBTOOL) --mode=execute $(DBUS_GLIB_BIN)/dbus-binding-tool --prefix=$(subst -,_,$*) --mode=glib-server --output=$@ $<
 	
-BUILT_SOURCES = moko-dialer-glue.h
+BUILT_SOURCES = moko-dialer-glue.h moko-dialer-sms-glue.h
 
-EXTRA_DIST = moko-dialer-dbus.xml
+EXTRA_DIST = moko-dialer-dbus.xml moko-dialer-sms-dbus.xml
 

Added: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml	2007-11-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms-dbus.xml	2007-11-13 18:14:40 UTC (rev 3407)
@@ -0,0 +1,23 @@
+<?xml version="1.0"?>
+<node name="/org/openmoko/Dialer">
+<interface name="org.openmoko.Dialer.SMS">
+<annotation name="org.freedesktop.DBus.GLib.CSymbol" value="moko_dialer_sms"/>
+  <method name="Send">
+    <arg type="s" name="number" />
+    <arg type="s" name="message" />
+    <arg type="b" name="ascii" />
+  </method>
+
+  <signal name="Sending">
+  </signal>
+
+  <signal name="Sent">
+  </signal>
+
+  <signal name="Rejected">
+    <arg type="s" name="message" />
+  </signal>
+
+</interface>
+</node>
+

Added: 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-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.c	2007-11-13 18:14:40 UTC (rev 3407)
@@ -0,0 +1,242 @@
+
+#include "moko-dialer-sms.h"
+#include <dbus/dbus-glib.h>
+#include <dbus/dbus-glib-bindings.h>
+#include <libgsmd/libgsmd.h>
+#include <libgsmd/misc.h>
+#include <libgsmd/sms.h>
+#include <libjana/jana.h>
+#include <libjana-ecal/jana-ecal.h>
+
+#include "moko-dialer-sms-glue.h"
+
+G_DEFINE_TYPE (MokoDialerSMS, moko_dialer_sms, G_TYPE_OBJECT)
+
+#define SMS_PRIVATE(o) \
+  (G_TYPE_INSTANCE_GET_PRIVATE ((o), MOKO_DIALER_TYPE_SMS, MokoDialerSMSPrivate))
+
+typedef struct _MokoDialerSMSPrivate MokoDialerSMSPrivate;
+
+struct _MokoDialerSMSPrivate {
+	struct lgsm_handle *handle;
+	JanaStore *note_store;
+};
+
+enum {
+  SENDING,
+  SENT,
+  REJECTED,
+  LAST_SIGNAL
+};
+
+static guint signals[LAST_SIGNAL];
+
+static void
+moko_dialer_sms_get_property (GObject *object, guint property_id,
+                              GValue *value, GParamSpec *pspec)
+{
+	switch (property_id) {
+	    default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	}
+}
+
+static void
+moko_dialer_sms_set_property (GObject *object, guint property_id,
+                              const GValue *value, GParamSpec *pspec)
+{
+	switch (property_id) {
+	    default:
+		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+	}
+}
+
+static void
+moko_dialer_sms_dispose (GObject *object)
+{
+	if (G_OBJECT_CLASS (moko_dialer_sms_parent_class)->dispose)
+		G_OBJECT_CLASS (moko_dialer_sms_parent_class)->dispose (object);
+}
+
+static void
+moko_dialer_sms_finalize (GObject *object)
+{
+	G_OBJECT_CLASS (moko_dialer_sms_parent_class)->finalize (object);
+}
+
+static void
+moko_dialer_sms_class_init (MokoDialerSMSClass *klass)
+{
+	GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+	g_type_class_add_private (klass, sizeof (MokoDialerSMSPrivate));
+
+	object_class->get_property = moko_dialer_sms_get_property;
+	object_class->set_property = moko_dialer_sms_set_property;
+	object_class->dispose = moko_dialer_sms_dispose;
+	object_class->finalize = moko_dialer_sms_finalize;
+	
+	signals[SENDING] = g_signal_new ("sending", 
+		G_TYPE_FROM_CLASS (object_class),
+		G_SIGNAL_RUN_LAST,
+		G_STRUCT_OFFSET (MokoDialerSMSClass, sending),
+		NULL, NULL,
+		g_cclosure_marshal_VOID__VOID,
+		G_TYPE_NONE, 0);
+
+	signals[SENT] = g_signal_new ("sent", 
+		G_TYPE_FROM_CLASS (object_class),
+		G_SIGNAL_RUN_LAST,
+		G_STRUCT_OFFSET (MokoDialerSMSClass, sent),
+		NULL, NULL,
+		g_cclosure_marshal_VOID__VOID,
+		G_TYPE_NONE, 0);
+
+	signals[REJECTED] = g_signal_new ("rejected", 
+		G_TYPE_FROM_CLASS (object_class),
+		G_SIGNAL_RUN_LAST,
+		G_STRUCT_OFFSET (MokoDialerSMSClass, rejected),
+		NULL, NULL,
+		g_cclosure_marshal_VOID__STRING,
+		G_TYPE_NONE, 1, G_TYPE_STRING);
+}
+
+MokoDialerSMS *static_self;
+
+static int 
+gsmd_eventhandler (struct lgsm_handle *lh, int evt_type,
+		   struct gsmd_evt_auxdata *aux)
+{
+	MokoDialerSMSPrivate *priv = SMS_PRIVATE (static_self);
+	
+	switch (evt_type) {
+	    case GSMD_EVT_IN_SMS : /* Incoming SMS */
+		if (aux->u.sms.inlined) {
+			gchar *message;
+
+			struct gsmd_sms_list * sms =
+				(struct gsmd_sms_list *)aux->data;
+
+			/* Ignore voicemail notifications */
+			if (sms->payload.is_voicemail) break;
+
+			message = NULL;
+			switch (sms->payload.coding_scheme) {
+			    case ALPHABET_DEFAULT :
+				message = g_malloc (GSMD_SMS_DATA_MAXLEN);
+				unpacking_7bit_character (
+					&sms->payload, message);
+				break;
+			    case ALPHABET_8BIT :
+				/* TODO: Verify: Is this encoding just UTF-8? */
+				message = g_strdup (sms->payload.data);
+				break;
+			    case ALPHABET_UCS2 :
+				message = g_utf16_to_utf8 ((const gunichar2 *)
+					sms->payload.data, sms->payload.length,
+					NULL, NULL, NULL);
+				break;
+			}
+			
+			/* Store message in the journal */
+			if (message) {
+				struct lgsm_sms_delete sms_del;
+				gchar *author, *recipient;
+				JanaNote *note = jana_ecal_note_new ();
+				
+				author = g_strconcat (((sms->addr.type &
+					__GSMD_TOA_TON_MASK) ==
+					GSMD_TOA_TON_INTERNATIONAL) ? "+" : "",
+					sms->addr.number, NULL);
+				jana_note_set_author (note, author);
+				g_free (author);
+				
+				/* TODO: Normalise number necessary? */
+				recipient = g_strdup_printf ("%d",
+					lgsm_get_subscriber_num (priv->handle));
+				jana_note_set_recipient (note, recipient);
+				g_free (recipient);
+				
+				jana_note_set_body (note, message);
+				
+				/* TODO: Set creation time from SMS timestamp */
+				
+				/* Add SMS to store */
+				jana_store_add_component (priv->note_store,
+					JANA_COMPONENT (note));
+				
+				/* Delete SMS from internal storage */
+				sms_del.index = sms->index;
+				sms_del.delflg = LGSM_SMS_DELFLG_INDEX;
+				lgsm_sms_delete (priv->handle, &sms_del);
+			}
+		} else {
+		}
+		break;
+	    case GSMD_EVT_IN_DS : /* SMS status report */
+		break;
+	    default :
+		g_warning ("Unhandled gsmd event (%d)", evt_type);
+	}
+	
+	return 0;
+}
+
+static void
+moko_dialer_sms_init (MokoDialerSMS *self)
+{
+	static gboolean first_init = TRUE;
+	MokoDialerSMSPrivate *priv = SMS_PRIVATE (self);
+	
+	/* We can only have one of these objects per process, as the gsmd 
+	 * event handling callback does not allow for custom data...
+	 */
+	if (!first_init)
+		g_error ("MokoDialerSMS already created in this process");
+	first_init = FALSE;
+	static_self = self;
+	
+	/* Get the note store */
+	priv->note_store = jana_ecal_store_new (JANA_COMPONENT_NOTE);
+	
+	/* Initialise gsmd and connect event handler */
+	if (!(priv->handle = lgsm_init (LGSMD_DEVICE_GSMD))) {
+		g_warning ("Failed to connect to gsmd, signals won't work");
+	} else {
+		lgsm_evt_handler_register (priv->handle, GSMD_EVT_IN_SMS,
+			gsmd_eventhandler);
+		lgsm_evt_handler_register (priv->handle, GSMD_EVT_IN_DS,
+			gsmd_eventhandler);
+	}
+}
+
+MokoDialerSMS*
+moko_dialer_sms_new (void)
+{
+	return g_object_new (MOKO_DIALER_TYPE_SMS, NULL);
+}
+
+gboolean
+moko_dialer_sms_send (MokoDialerSMS *sms, const gchar *number,
+		      const gchar *message, gboolean ascii, GError **error)
+{
+}
+
+void
+moko_dialer_sms_sending (MokoDialerSMS *sms)
+{
+	g_signal_emit (sms, signals[SENDING], 0);
+}
+
+void
+moko_dialer_sms_sent (MokoDialerSMS *sms)
+{
+	g_signal_emit (sms, signals[SENT], 0);
+}
+
+void
+moko_dialer_sms_rejected (MokoDialerSMS *sms, const gchar *message)
+{
+	g_signal_emit (sms, signals[REJECTED], 0, message);
+}
+

Added: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.h
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.h	2007-11-13 16:27:39 UTC (rev 3406)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/moko-dialer-sms.h	2007-11-13 18:14:40 UTC (rev 3407)
@@ -0,0 +1,57 @@
+#ifndef _MOKO_DIALER_SMS_H
+#define _MOKO_DIALER_SMS_H
+
+#include <glib-object.h>
+
+G_BEGIN_DECLS
+
+#define MOKO_DIALER_TYPE_SMS moko_dialer_sms_get_type()
+
+#define MOKO_DIALER_SMS(obj) \
+	(G_TYPE_CHECK_INSTANCE_CAST ((obj), \
+	MOKO_DIALER_TYPE_SMS, MokoDialerSMS))
+
+#define MOKO_DIALER_SMS_CLASS(klass) \
+	(G_TYPE_CHECK_CLASS_CAST ((klass), \
+	MOKO_DIALER_TYPE_SMS, MokoDialerSMSClass))
+
+#define MOKO_DIALER_IS_SMS(obj) \
+	(G_TYPE_CHECK_INSTANCE_TYPE ((obj), \
+	MOKO_DIALER_TYPE_SMS))
+
+#define MOKO_DIALER_IS_SMS_CLASS(klass) \
+	(G_TYPE_CHECK_CLASS_TYPE ((klass), \
+	MOKO_DIALER_TYPE_SMS))
+
+#define MOKO_DIALER_SMS_GET_CLASS(obj) \
+	(G_TYPE_INSTANCE_GET_CLASS ((obj), \
+	MOKO_DIALER_TYPE_SMS, MokoDialerSMSClass))
+
+typedef struct {
+	GObject parent;
+} MokoDialerSMS;
+
+typedef struct {
+	GObjectClass parent_class;
+	
+	void	(*sending)	(MokoDialerSMS *sms);
+	void	(*sent)		(MokoDialerSMS *sms);
+	void	(*rejected)	(MokoDialerSMS *sms, const gchar *message);
+} MokoDialerSMSClass;
+
+GType moko_dialer_sms_get_type (void);
+
+MokoDialerSMS * moko_dialer_sms_new (void);
+
+gboolean moko_dialer_sms_send (MokoDialerSMS *sms, const gchar *number,
+			       const gchar *message, gboolean ascii,
+			       GError **error);
+
+void moko_dialer_sms_sending (MokoDialerSMS *sms);
+void moko_dialer_sms_sent (MokoDialerSMS *sms);
+void moko_dialer_sms_rejected (MokoDialerSMS *sms, const gchar *message);
+
+G_END_DECLS
+
+#endif /* _MOKO_DIALER_SMS_H */
+





More information about the commitlog mailing list