r4359 - trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit

sean_chiang at sita.openmoko.org sean_chiang at sita.openmoko.org
Tue Apr 15 12:42:12 CEST 2008


Author: sean_chiang
Date: 2008-04-15 12:42:08 +0200 (Tue, 15 Apr 2008)
New Revision: 4359

Modified:
   trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c
Log:
change state when headset in/out

Modified: trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c
===================================================================
--- trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c	2008-04-14 15:49:57 UTC (rev 4358)
+++ trunk/src/target/OM-2007.2/applications/openmoko-dialer2/src/phone-kit/dialer-main.c	2008-04-15 10:42:08 UTC (rev 4359)
@@ -23,6 +23,7 @@
 #include <gtk/gtk.h>
 #include <dbus/dbus-glib.h>
 #include <dbus/dbus-glib-bindings.h>
+#include <dbus/dbus-glib-lowlevel.h>
 #include <glib-object.h>
 #include <libnotify/notify.h>
 #include <libebook/e-book.h>
@@ -342,53 +343,52 @@
     on_network_status_changed (network, status, pb);
 }
 
-static void
-headset_in_cb (DBusGProxy *proxy, const gchar *name, void *data)
+DBusHandlerResult headset_signal_filter (DBusConnection *bus, DBusMessage *msg, void *user_data) 
 {
-    PhoneKitDialerStatus status;
-    MokoNetwork *network;
-    MokoDialer *dialer;
+	PhoneKitDialerStatus status;
+	MokoNetwork *network;
+	MokoDialer *dialer;
 
-    network = moko_network_get_default ();
-    dialer = moko_dialer_get_default (network);
-    
-    status = moko_dialer_get_status(dialer);  
+	g_debug( "headset signal filter" );
 
-    moko_headset_status_set(HEADSET_STATUS_IN);
+	network = moko_network_get_default ();
+	dialer = moko_dialer_get_default (network);
+	status = moko_dialer_get_status(dialer);  
 
-    if ( PK_DIALER_NORMAL == status )
-	moko_sound_profile_set(SOUND_PROFILE_HEADSET);
-    if ( PK_DIALER_INCOMING == status )
-	moko_sound_profile_set(SOUND_PROFILE_HEADSET);
-    if ( PK_DIALER_DIALING == status )
-	moko_sound_profile_set(SOUND_PROFILE_HEADSET);
-    if ( PK_DIALER_TALKING == status )
-	moko_sound_profile_set(SOUND_PROFILE_GSM_HEADSET);
-}
+	if ( dbus_message_is_signal( msg, "org.openmoko.PhoneKit.Headset", "HeadsetIn" ) )
+	{
+		moko_headset_status_set(HEADSET_STATUS_IN);
+		g_debug( "Headset In" );
 
-static void
-headset_out_cb (DBusGProxy *proxy, const gchar *name, void *data) 
-{
-    PhoneKitDialerStatus status;
-    MokoNetwork *network;
-    MokoDialer *dialer;
+		if ( PK_DIALER_TALKING == status ) {
+			moko_sound_profile_set(SOUND_PROFILE_GSM_HEADSET);
+			g_debug("SOUND_PROFILE_GSM_HEADSET\n");
+		}	
+		else {
+			moko_sound_profile_set(SOUND_PROFILE_HEADSET);
+			g_debug("SOUND_PROFILE_HEADSET\n");
+		}	
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+	}
+	else if ( dbus_message_is_signal( msg,"org.openmoko.PhoneKit.Headset", "HeadsetOut" ) )
+	{
+	        moko_headset_status_set(HEADSET_STATUS_OUT);
+		g_debug( "Headset Out" );
 
-    network = moko_network_get_default ();
-    dialer = moko_dialer_get_default (network);
-    
-    status = moko_dialer_get_status(dialer);  
-    
-    moko_headset_status_set(HEADSET_STATUS_OUT);
+		if ( PK_DIALER_TALKING == status ) {
+			moko_sound_profile_set(SOUND_PROFILE_GSM_HANDSET);
+			g_debug("SOUND_PROFILE_GSM_HANDSET\n");
+		}	
+		else {	
+			moko_sound_profile_set(SOUND_PROFILE_STEREO_OUT);
+			g_debug("SOUND_PROFILE_STEREO_OUT\n");
+		}	
+		return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+	}
 
-    if ( PK_DIALER_NORMAL == status )
-	moko_sound_profile_set(SOUND_PROFILE_STEREO_OUT);
-    if ( PK_DIALER_INCOMING == status )
-	moko_sound_profile_set(SOUND_PROFILE_STEREO_OUT);
-    if ( PK_DIALER_DIALING == status )
-	moko_sound_profile_set(SOUND_PROFILE_STEREO_OUT);
-    if ( PK_DIALER_TALKING == status )
-	moko_sound_profile_set(SOUND_PROFILE_GSM_HANDSET);
-}
+	g_debug( "(unknown dbus message, ignoring)" );
+	return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}    
 
 int
 main (int argc, char **argv)
@@ -399,10 +399,26 @@
   MokoPb *pb;
   DBusGConnection *connection;
   DBusGProxy *proxy;
-  DBusGProxy *headset_proxy;
   GError *error = NULL;
   guint32 ret;
 
+  DBusError err = {0};
+  DBusConnection* bus = dbus_bus_get (DBUS_BUS_SESSION, &err);
+
+  if (!bus)
+  {   
+     gchar buffer[100];
+     sprintf (buffer, "Failed to connect to the D-BUS daemon: %s", err.message);
+     g_critical (buffer);
+     dbus_error_free (&err);
+     return 1;
+  }   
+
+  dbus_connection_setup_with_g_main (bus, NULL);
+
+  dbus_bus_add_match (bus, "type='signal'", &err);
+  dbus_connection_add_filter (bus, headset_signal_filter, NULL, NULL);  
+
   /* initialise type system */
   g_type_init ();
 
@@ -419,6 +435,7 @@
                                      DBUS_SERVICE_DBUS,
                                      DBUS_PATH_DBUS, 
                                      DBUS_INTERFACE_DBUS);
+
   if (!org_freedesktop_DBus_request_name (proxy,
                                           PHONEKIT_NAMESPACE,
                                           0, &ret, &error))
@@ -469,21 +486,6 @@
                                        SMS_PATH,
                                        G_OBJECT (sms));
 
-  headset_proxy = dbus_g_proxy_new_for_name (connection,                                                  
-		  NULL,
-		  "/org/openmoko/PhoneKit/Headset",
-		  "org.openmoko.PhoneKit.Headset");
-  dbus_g_proxy_add_signal (headset_proxy,
-		  "HeadsetIn", G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal (headset_proxy,
-		  "HeadsetIn", G_CALLBACK (headset_in_cb),
-		  NULL, NULL);
-  dbus_g_proxy_add_signal (headset_proxy,
-		  "HeadsetOut", G_TYPE_INVALID);
-  dbus_g_proxy_connect_signal (headset_proxy,
-		  "HeadsetOut", G_CALLBACK (headset_out_cb),
-		  NULL, NULL);
-
   /* Sync phonebook */
   /* XXX this is not the right place! */
   pb_sync (pb, network);





More information about the commitlog mailing list