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