Add static configurations for usb gadget mode according to tethering on/off 87/224687/7
authorINSUN PYO <insun.pyo@samsung.com>
Wed, 12 Feb 2020 08:00:20 +0000 (17:00 +0900)
committerHyotaek Shim <hyotaek.shim@samsung.com>
Wed, 12 Feb 2020 10:43:09 +0000 (19:43 +0900)
On:
SET_USB_RNDIS_SDB (USB_FUNCTION_ACM | USB_FUNCTION_SDB | USB_FUNCTION_RNDIS)

Off:
SET_USB_SDB (USB_FUNCTION_ACM | USB_FUNCTION_SDB | USB_FUNCTION_MTP)

Change-Id: I18cad16c6cebfa6d168beb2acca6462e673d2701
Signed-off-by: Hyotaek Shim <hyotaek.shim@samsung.com>
src/usb/usb-tethering.c

index 6e939e0..4ca4e06 100644 (file)
@@ -60,23 +60,32 @@ static int usb_tethering_mode_changed(void *data)
 {
        bool on;
        unsigned mode;
-       int ret;
+       int ret = 0;
 
        on = (bool)data;
 
        /*
-        * TODO.
-        * Preserve gadget mode when tethering is being turned on
-        * and restore it later when tethering is being turned off/
+        * It is not always possible to add rndis mode to an existing mode.
+        * The newly changed mode is not always possible and meaningful.
+        * So, You use the predefined mode for rndis mode only.
+        *
+        * Example:
+        *  - Current mode: USB_FUNCTION_MTP | USB_FUNCTION_SDB
+        *  - Adding RNDIS: USB_FUNCTION_MTP | USB_FUNCTION_SDB | USB_FUNCTION_RNDIS  ==> this mode does not exist.
+        *
+        * TODO. You should consider removing USB_FUNCTION_SDB mode.
         */
        if (on)
-               mode = USB_FUNCTION_RNDIS | USB_FUNCTION_SDB;
+               mode = USB_FUNCTION_ACM | USB_FUNCTION_SDB | USB_FUNCTION_RNDIS; /* SET_USB_RNDIS_SDB */
        else
-               mode = USB_FUNCTION_MTP | USB_FUNCTION_ACM | USB_FUNCTION_SDB;
-
-       ret = usb_change_mode(mode);
-       if (ret < 0)
-               _E("Failed to change usb mode to (%d).", mode);
+               mode = USB_FUNCTION_MTP | USB_FUNCTION_ACM | USB_FUNCTION_SDB; /* SET_USB_SDB */
+
+       if (usb_state_get_selected_mode() != mode) {
+               ret = usb_change_mode(mode);
+               if (ret < 0)
+                       _E("Failed to change usb mode to (%d).", mode);
+       } else
+               _I("already mode(%d) was enabled", mode);
 
        return ret;
 }