[maemo-developers] [maemo-developers] using gwconnect api

From: kurt ak kurt at notenuf.net
Date: Wed Jun 28 15:06:40 EEST 2006
Hello, I'm just trying to get a list of bluetooth devices by using the gwconnect 
api (http://maemo.org/platform/docs/osso-gwconnect.html) with dbus.  However, 
I'm a still a bit new to dbus, and so far I've been able to issue the 
"start_search" method from com.nokia.btsearch.request, though it's not clear to 
me how I set up some kind of callback for the com.nokia.btsearch.signal 
interface and receive the "dev_found" signals.

I've tried one approach using dbus-glib (attached below) for setting up the 
callback, and I didn't find how to do so with libosso, so since this is the 
maemo list, maybe one of you could shed some light on how to set up listening 
for signals coming from com.nokia.btsearch.signal using libosso??

I also attached the majority of my testing main() function, using dbus-glib, and 
that didn't seem to set up a callback correctly either (or maybe start_search 
wasn't even handled properly) because i never received any dev_found signals.  I 
made sure there are some BT devices around me that should be found, b/c doing a 
"hcitool scan" returns a few.  Any hints??

Thanks much for your time,
kurt



int main( int argc, char **argv )
{
     gboolean ret;
     GMainLoop *loop;
     DBusGConnection *bus;
     GError *error = NULL;
     DBusGProxy *proxy_request, *proxy_signal;

   g_type_init();
     loop = g_main_loop_new(NULL, FALSE);

     if( !( bus = dbus_g_bus_get( DBUS_BUS_SYSTEM, &error ) ) )
     {
         fprintf(stderr, "Unable to connect to the system D-BUS: 
%s\n",error->message);
         return 1;
     }


     // invoke bt search method call over dbus
     proxy_request = dbus_g_proxy_new_for_name(bus,
                          "com.nokia.btsearch",
                          "/com/nokia/btsearch/request",
                          "com.nokia.btsearch.request" );

     if( !proxy_request )
     {
         printf("Error: Couldn't get proxy_request. %s\n", error->message);
         return 1;
     }

     proxy_signal = dbus_g_proxy_new_for_name(bus,
                          "com.nokia.btsearch",
                          "/com/nokia/btsearch/signal",
                          "com.nokia.btsearch.signal" );

     if( !proxy_signal )
     {
         printf("Error: Couldn't get proxy_signal. %s\n", error->message);
         g_error_free(error);
     return 1;
     }

     // call bt search method
     error = NULL;

     /* proxy, method, error, send type, send var, ... , receive type, rec. var 
... */
     if( !dbus_g_proxy_call( proxy_request, "start_search", &error, 
G_TYPE_INVALID, G_TYPE_INVALID ) )
     {
         printf("Error calling dbus start_search method: %s\n",error->message);
         g_error_free(error);
         return 1;
     } else {
         printf("Successfully called dbus method start_search.  Setting up 
listener now..\n");
     }

     dbus_g_object_register_marshaller (
         g_cclosure_user_marshal_VOID__STRING_STRING_POINTER_UCHAR_UINT,
         G_TYPE_NONE,
         G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER,
         G_TYPE_UCHAR, G_TYPE_UINT,
         G_TYPE_INVALID );

     dbus_g_proxy_add_signal( proxy_signal, "dev_found", G_TYPE_STRING, 
G_TYPE_STRING,
                  G_TYPE_POINTER, G_TYPE_UCHAR, G_TYPE_UINT,
                  G_TYPE_INVALID );

     dbus_g_proxy_connect_signal( proxy_signal, "dev_found", 
G_CALLBACK(signal_handler), NULL, NULL );

     g_main_loop_run (loop);
     return 0;
}


More information about the maemo-developers mailing list