[maemo-commits] [maemo-commits] r18868 - in projects/haf/trunk/ke-recv: debian src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Fri Jul 17 15:54:58 EEST 2009
Author: kihamala
Date: 2009-07-17 15:54:56 +0300 (Fri, 17 Jul 2009)
New Revision: 18868

Modified:
   projects/haf/trunk/ke-recv/debian/changelog
   projects/haf/trunk/ke-recv/src/ke-recv.c
Log:
add interface for the USB plugin


Modified: projects/haf/trunk/ke-recv/debian/changelog
===================================================================
--- projects/haf/trunk/ke-recv/debian/changelog	2009-07-17 12:50:53 UTC (rev 18867)
+++ projects/haf/trunk/ke-recv/debian/changelog	2009-07-17 12:54:56 UTC (rev 18868)
@@ -8,6 +8,7 @@
     - Do not insert any USB module in startup: wait for the cable
     - Do not keep g_nada inserted, it is only used temporarily on cable
       connection
+    - Add USB mode signal and querying interface for the USB plugin
     - NOTE: requires infonote and infobanner interfaces to be provided on
       the system bus also
 

Modified: projects/haf/trunk/ke-recv/src/ke-recv.c
===================================================================
--- projects/haf/trunk/ke-recv/src/ke-recv.c	2009-07-17 12:50:53 UTC (rev 18867)
+++ projects/haf/trunk/ke-recv/src/ke-recv.c	2009-07-17 12:54:56 UTC (rev 18868)
@@ -484,6 +484,46 @@
         return DBUS_HANDLER_RESULT_HANDLED;
 }
 
+static DBusHandlerResult get_usb_mode_handler(DBusConnection *c,
+                                              DBusMessage *m, void *data)
+{
+        DBusMessage *r;
+        char buf[20], *buf_p;
+        dbus_bool_t ret;
+        buf_p = buf;
+
+        ULOG_DEBUG_F("entered");
+
+        if (usb_state == S_PERIPHERAL_WAIT ||
+            usb_state == S_PCSUITE ||
+            usb_state == S_MASS_STORAGE) {
+                strcpy(buf, "peripheral");
+        } else {
+                strcpy(buf, "disconnected");
+        }
+
+	r = dbus_message_new_method_return(m);
+        if (r == NULL) {
+                ULOG_ERR_F("couldn't create message");
+                return DBUS_HANDLER_RESULT_HANDLED;
+        }
+        ret = dbus_message_append_args(r, DBUS_TYPE_STRING, &buf_p,
+                                       DBUS_TYPE_INVALID);
+        if (!ret) {
+                ULOG_ERR_F("couldn't append arguments");
+                dbus_message_unref(r);
+                return DBUS_HANDLER_RESULT_HANDLED;
+        }
+
+        ret = dbus_connection_send(sys_conn, r, NULL);
+        dbus_message_unref(r);
+        if (!ret) {
+                ULOG_ERR_F("sending failed");
+        }
+
+        return DBUS_HANDLER_RESULT_HANDLED;
+}
+
 static DBusHandlerResult enable_mmc_swap_handler(DBusConnection *c,
                                                  DBusMessage *m,
                                                  void *data)
@@ -980,6 +1020,35 @@
 }
 #endif
 
+static void send_usb_mode_signal(void)
+{
+        DBusMessage *m;
+        dbus_bool_t ret;
+
+        ULOG_DEBUG_F("entering");
+
+        if (usb_state == S_PERIPHERAL_WAIT ||
+            usb_state == S_PCSUITE ||
+            usb_state == S_MASS_STORAGE) {
+                m = dbus_message_new_signal("/com/nokia/ke_recv/usb_mode",
+                                            "com.nokia.ke_recv.usb_mode",
+                                            "peripheral");
+        } else {
+                m = dbus_message_new_signal("/com/nokia/ke_recv/usb_mode",
+                                            "com.nokia.ke_recv.usb_mode",
+                                            "disconnected");
+        }
+        if (m == NULL) {
+                ULOG_ERR_F("dbus_message_new_signal failed");
+                return;
+        }
+        ret = dbus_connection_send(sys_conn, m, NULL);
+        if (!ret) {
+                ULOG_ERR_F("dbus_connection_send failed");
+        }
+        dbus_message_unref(m);
+}
+
 void send_error(const char* n)
 {
         DBusMessage* e = NULL;
@@ -1970,15 +2039,10 @@
                                 usb_state = S_MASS_STORAGE;
                                 /* should reset gconf keys here */
                         } else {
-                                ULOG_DEBUG_F("peripheral but cards not "
-                                        "USB-shared, assuming charging mode");
-                                usb_state = S_CHARGING;
-                                /*
-                                if (do_e_plugged) {
-                                        handle_usb_event(
-                                                E_ENTER_PERIPHERAL_WAIT_MODE);
-                                }
-                                */
+                                /* this is startup time, so charger probe
+                                 * should succeed since no other g_* modules
+                                 * should be in use */
+                                handle_usb_event(E_ENTER_CHARGER_PROBE);
                         }
                         set_usb_mode_key("peripheral");
                 } else {
@@ -2085,7 +2149,9 @@
         } else {
                 int val;
 
+                /*
                 ULOG_DEBUG_F("udi %s modified %s", udi, key);
+                */
 
                 if (strcmp("volume.is_mounted", key) == 0) {
                         return;
@@ -3154,6 +3220,7 @@
                                             usb_state);
                         }
                         usb_state = S_CABLE_DETACHED;
+                        send_usb_mode_signal();
                         break;
                 case E_EJECT:
                         if (usb_state == S_HOST) {
@@ -3225,7 +3292,7 @@
                                         " in DETACHED, WAIT or PROBE state");
                                 dismantle_charger_probe_timeout();
                                 usb_state = S_PERIPHERAL_WAIT;
-                                /* FIXME: dialogi? */
+                                send_usb_mode_signal();
                         } else {
                                 ULOG_WARN_F("E_ENTER_PERIPHERAL_WAIT_MODE"
                                             " in %d!", usb_state);
@@ -3477,6 +3544,10 @@
         vtable.message_function = format_handler;
         register_op(sys_conn, &vtable, FORMAT_OP, NULL);
 
+        /* register D-BUS interface for USB mode (used by USB plugin) */
+        vtable.message_function = get_usb_mode_handler;
+        register_op(sys_conn, &vtable, "/com/nokia/ke_recv/get_usb_mode", NULL);
+
         /* register D-BUS interface for enabling swapping on MMC */
         vtable.message_function = enable_mmc_swap_handler;
         /* FIXME

More information about the maemo-commits mailing list