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

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Aug 19 19:48:29 EEST 2009
Author: kihamala
Date: 2009-08-19 19:48:14 +0300 (Wed, 19 Aug 2009)
New Revision: 19160

Modified:
   projects/haf/trunk/ke-recv/debian/changelog
   projects/haf/trunk/ke-recv/debian/init.d
   projects/haf/trunk/ke-recv/debian/ke-recv.upstart
   projects/haf/trunk/ke-recv/src/ke-recv.c
   projects/haf/trunk/ke-recv/src/pcsuite-disable.sh
Log:
fixes: hal connection improvement, modprobe g_nokia on disconnection


Modified: projects/haf/trunk/ke-recv/debian/changelog
===================================================================
--- projects/haf/trunk/ke-recv/debian/changelog	2009-08-19 14:26:27 UTC (rev 19159)
+++ projects/haf/trunk/ke-recv/debian/changelog	2009-08-19 16:48:14 UTC (rev 19160)
@@ -8,6 +8,8 @@
     - Insert g_nokia in startup, unless we're in ACTDEAD mode
     - NOTE: requires infonote and infobanner interfaces to be provided on
       the system bus also
+    - Assume S_PCSUITE if restarted when the cable is connected
+    - Be more persisting when connecting to hald.
 
  -- Kimmo Hämäläinen <kimmo.hamalainen at nokia.com>  Wed, 15 Jul 2009 13:02:48 +0300
 

Modified: projects/haf/trunk/ke-recv/debian/init.d
===================================================================
--- projects/haf/trunk/ke-recv/debian/init.d	2009-08-19 14:26:27 UTC (rev 19159)
+++ projects/haf/trunk/ke-recv/debian/init.d	2009-08-19 16:48:14 UTC (rev 19160)
@@ -54,19 +54,25 @@
 
 case "$1" in
   start)
-        modprobe omap_hsmmc
-        modprobe sd_mod
+        STATE="x$(cat /tmp/STATE)x"
+        if [ $STATE != "xACT_DEADx" -a $STATE != "xTESTx" ]; then
+                modprobe omap_hsmmc
+                modprobe sd_mod
 
-	# Start daemons
-	echo -n "Starting $DESC: "
+	        # Start daemons
+	        echo -n "Starting $DESC: "
 
-	if [ -x $DTOOL ]; then
-        	$DTOOL -U $USER -n -1 -t $DAEMON
-	else
-		start-stop-daemon -b --start --quiet --user $USER \
-			--exec $DAEMON -- $PARAMS
-	fi
-	echo "$NAME."
+                # modprobe g_nokia by default, unless in ACT_DEAD
+                modprobe g_nokia
+
+                if [ -x $DTOOL ]; then
+                        $DTOOL -U $USER -n -1 -t $DAEMON
+                else
+                        start-stop-daemon -b --start --quiet --user $USER \
+                                --exec $DAEMON -- $PARAMS
+                fi
+	        echo "$NAME."
+        fi
 	;;
   stop)
 	echo -n "Stopping $DESC: "

Modified: projects/haf/trunk/ke-recv/debian/ke-recv.upstart
===================================================================
--- projects/haf/trunk/ke-recv/debian/ke-recv.upstart	2009-08-19 14:26:27 UTC (rev 19159)
+++ projects/haf/trunk/ke-recv/debian/ke-recv.upstart	2009-08-19 16:48:14 UTC (rev 19160)
@@ -1,9 +1,10 @@
 description "starting ke-recv"
 author "Philippe De Swert"
 
+stop on ACT_DEAD
+stop on TEST
+stop on stopping hal
 start on started hal
-stop on stopping hal
-stop on ACT_DEAD
 console none
 
 script

Modified: projects/haf/trunk/ke-recv/src/ke-recv.c
===================================================================
--- projects/haf/trunk/ke-recv/src/ke-recv.c	2009-08-19 14:26:27 UTC (rev 19159)
+++ projects/haf/trunk/ke-recv/src/ke-recv.c	2009-08-19 16:48:14 UTC (rev 19160)
@@ -224,6 +224,12 @@
                 handle_event(E_INIT_CARD, &ext_mmc, NULL);
                 mmc_initialised = TRUE;
         }
+
+        if (usb_state == S_INVALID_USB_STATE) {
+                /* try USB init again now that syncd and obexd
+                 * should be running */
+                init_usb_cable_status ((void*)1);
+        }
 #if 0
         if (delayed_auto_install_check) {
                 possibly_start_am();
@@ -1825,8 +1831,11 @@
         if (state == S_HOST) {
                 handle_usb_event(E_ENTER_HOST_MODE);
         } else if (state == S_PERIPHERAL_WAIT) {
-                /* go directly to PC Suite mode whenever cable is plugged */
-                handle_usb_event(E_ENTER_PCSUITE_MODE);
+                if (usb_state == S_CABLE_DETACHED) {
+                        /* go directly to PC Suite mode whenever cable is
+                         * plugged */
+                        handle_usb_event(E_ENTER_PCSUITE_MODE);
+                }
         } else if (state == S_CABLE_DETACHED) {
                 handle_usb_event(E_CABLE_DETACHED);
         }
@@ -1878,8 +1887,12 @@
                                 /* should reset gconf keys here */
                         } else {
                                 ULOG_DEBUG_F("peripheral but cards not "
-                                        "USB-shared, assuming charging mode");
-                                usb_state = S_CHARGING;
+                                        "USB-shared, assuming PC Suite mode");
+                                usb_state = S_PCSUITE;
+                                if (!enable_pcsuite()) {
+                                        ULOG_ERR_F("Couldn't enable PC Suite");
+                                        usb_state = S_INVALID_USB_STATE;
+                                }
                                 /*
                                 if (do_e_plugged) {
                                         handle_usb_event(
@@ -1892,7 +1905,8 @@
                         set_usb_mode_key("idle");
                 }
 
-                if (desktop_started && !mmc_initialised) {
+                if (usb_state != S_INVALID_USB_STATE &&
+                    desktop_started && !mmc_initialised) {
                         /* initialise GConf keys and possibly mount or
                          * USB-share */
                         if (int_mmc_enabled) {
@@ -2903,6 +2917,17 @@
         return retval;
 }
 
+static gboolean modprobe_g_nokia()
+{
+        int ret;
+        const char *args[] = {"/sbin/modprobe", "g_nokia", NULL};
+        ret = exec_prog(args[0], args);
+        if (ret)
+                return FALSE;
+        else
+                return TRUE;
+}
+
 static void handle_usb_event(usb_event_t e)
 {
         switch (e) {
@@ -2926,6 +2951,7 @@
                                         show_infobanner(
                                                 MSG_USB_DISCONNECTED);
                                 }
+                                modprobe_g_nokia();
                         } else if (usb_state == S_EJECTED) {
                                 ULOG_DEBUG_F("E_CABLE_DETACHED in S_EJECTED");
                         } else if (usb_state == S_EJECTING) {
@@ -2940,9 +2966,11 @@
                                             "S_CHARGING");
                         } else if (usb_state == S_PCSUITE) {
                                 ULOG_INFO_F("E_CABLE_DETACHED in S_PCSUITE");
+                                /*
                                 if (!disable_pcsuite()) {
                                         ULOG_ERR_F("disable_pcsuite() failed");
                                 }
+                                */
                         } else {
                                 ULOG_WARN_F("E_CABLE_DETACHED in %d!",
                                             usb_state);
@@ -3028,6 +3056,9 @@
                             usb_state == S_CHARGING ||
                             usb_state == S_PCSUITE) {
                                 usb_state_t orig = usb_state;
+                                if (!disable_pcsuite()) {
+                                        ULOG_ERR_F("disable_pcsuite() failed");
+                                }
                                 usb_state = S_MASS_STORAGE;
                                 if (!e_plugged_helper()) {
                                         ULOG_DEBUG_F("no card was USB shared");
@@ -3108,6 +3139,7 @@
 	        .unregister_function = NULL
         };
         int ret;
+        int hal_retries = 10;
 
         if (signal(SIGTERM, sigterm) == SIG_ERR) {
                 ULOG_CRIT_L("signal() failed");
@@ -3191,6 +3223,8 @@
                 ULOG_CRIT_L("libhal_ctx_set_dbus_connection() failed");
                 exit(1);
         }
+
+try_hal_again:
         if (!libhal_ctx_init(hal_ctx, &error)) {
                 if (dbus_error_is_set(&error)) {
                         ULOG_CRIT_L("libhal_ctx_init: %s: %s", error.name,
@@ -3198,7 +3232,11 @@
                         dbus_error_free(&error);
                 }
                 ULOG_CRIT_L("Could not initialise connection to hald");
-                exit(1);
+                if (--hal_retries > 0) {
+                        sleep(1);
+                        goto try_hal_again;
+                } else
+                        exit(1);
         }
 
         do_global_init();

Modified: projects/haf/trunk/ke-recv/src/pcsuite-disable.sh
===================================================================
--- projects/haf/trunk/ke-recv/src/pcsuite-disable.sh	2009-08-19 14:26:27 UTC (rev 19159)
+++ projects/haf/trunk/ke-recv/src/pcsuite-disable.sh	2009-08-19 16:48:14 UTC (rev 19160)
@@ -19,4 +19,37 @@
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 # 02110-1301 USA
 
+/sbin/lsmod | grep g_nokia > /dev/null
+if [ $? = 0 ]; then
+    logger "$0: removing g_nokia"
+
+    initctl emit G_NOKIA_REMOVE
+
+    PNATD_PID=`pidof pnatd`
+    if [ $? = 0 ]; then
+        kill $PNATD_PID
+    else
+        logger "$0: pnatd is not running"
+    fi
+    OBEXD_PID=`pidof obexd`
+    if [ $? = 0 ]; then
+        kill -HUP $OBEXD_PID
+    else
+        logger "$0: obexd is not running"
+    fi
+    SYNCD_PID=`pidof syncd`
+    if [ $? = 0 ]; then
+        kill $SYNCD_PID
+    else
+        logger "$0: syncd is not running"
+    fi
+
+    sleep 2
+    /sbin/rmmod g_nokia
+    if [ $? != 0 ]; then
+        logger "$0: failed to rmmod g_nokia!"
+        exit 1
+    fi
+fi
+
 exit 0

More information about the maemo-commits mailing list