Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ad25ef7 authored by Steve Kondik's avatar Steve Kondik Committed by Tom Giordano
Browse files

More legacy USB support.

Change-Id: I9d2cdd33be3bd5c482401add4df3e4d91bc9cfb0
parent 8357ebd4
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -246,7 +246,10 @@ public class UsbManager {
    }

    private static File getFunctionEnableFile(String function) {
        if((new File("/sys/class/usb_composite/" + function + "/enable")).exists())
            return new File("/sys/class/usb_composite/" + function + "/enable");
        else
            return new File("/sys/devices/platform/android_usb/functions/" + function);
    }

    /**
+63 −5
Original line number Diff line number Diff line
@@ -72,6 +72,8 @@ public class UsbService extends IUsbManager.Stub {
            "/sys/class/switch/usb_configuration/state";
    private static final String USB_COMPOSITE_CLASS_PATH =
            "/sys/class/usb_composite";
    private static final String USB_LEGACY_FUNCTIONS_PATH =
            "/sys/devices/platform/android_usb/functions";
    private static final String USB_LEGACY_PATH =
            "/sys/class/switch/usb_mass_storage/state";

@@ -155,6 +157,29 @@ public class UsbService extends IUsbManager.Stub {
            }

            synchronized (mLock) {
                char[] buffer = new char[1024];
                if((new File(USB_LEGACY_FUNCTIONS_PATH)).exists()) {
                    try {
                        File[] files = new File(USB_LEGACY_FUNCTIONS_PATH).listFiles();
                        for (int i = 0; i < files.length; i++) {
                            FileReader reader = new FileReader(files[i]);
                            int len = reader.read(buffer, 0, 1024);
                            reader.close();
                            try {
                                int value = Integer.valueOf((new String(buffer, 0, len)).trim()) == 1 ?
                                    MSG_FUNCTION_ENABLED : MSG_FUNCTION_DISABLED;
                                String functionName = files[i].getName();
                                Message msg = Message.obtain(mHandler, value);
                                msg.obj = functionName;
                                mHandler.sendMessage(msg);
                            } catch(NumberFormatException nfe){
                                Slog.d(TAG, files[i].getName()+" contains non-numeric data");
                            }
                        }
                    } catch (Exception e) {
                        Slog.e(TAG, "" , e);
                    }
                }
                String name = event.get("SWITCH_NAME");
                String state = event.get("SWITCH_STATE");
                if (name != null && state != null) {
@@ -264,7 +289,7 @@ public class UsbService extends IUsbManager.Stub {
                FileReader file = new FileReader(USB_LEGACY_PATH);
                int len = file.read(buffer, 0, 1024);
                file.close();
                mConnected = ("online".equals((new String(buffer, 0, len))) ? 1 : 0);
                mConnected = ("online".equals((new String(buffer, 0, len)).trim()) ? 1 : 0);
                mLegacy = true;
                mConfiguration = 0;
            } catch (FileNotFoundException f) {
@@ -280,9 +305,7 @@ public class UsbService extends IUsbManager.Stub {
            return;
        }

        if (mLegacy) {
            mDisabledFunctions.add(UsbManager.USB_FUNCTION_MASS_STORAGE);
        } else {
        if((new File(USB_COMPOSITE_CLASS_PATH)).exists()){
            // Read initial list of enabled and disabled functions (device mode)
            try {
                File[] files = new File(USB_COMPOSITE_CLASS_PATH).listFiles();
@@ -314,6 +337,41 @@ public class UsbService extends IUsbManager.Stub {
                Slog.e(TAG, "" , e);
            }
        }
        else if((new File(USB_LEGACY_FUNCTIONS_PATH)).exists()) {
            try {
                File[] files = new File(USB_LEGACY_FUNCTIONS_PATH).listFiles();
                for (int i = 0; i < files.length; i++) {
                    FileReader reader = new FileReader(files[i]);
                    int len = reader.read(buffer, 0, 1024);
                    reader.close();
                    try{
                        int value = Integer.valueOf((new String(buffer, 0, len)).trim());
                        String functionName = files[i].getName();
                        if (value == 1) {
                            mEnabledFunctions.add(functionName);
                            if (UsbManager.USB_FUNCTION_ACCESSORY.equals(functionName)) {
                                // The USB accessory driver is on by default, but it might have been
                                // enabled before the USB service has initialized.
                                inAccessoryMode = true;
                            } else if (!UsbManager.USB_FUNCTION_ADB.equals(functionName)) {
                                // adb is enabled/disabled automatically by the adbd daemon,
                                // so don't treat it as a default function.
                                mDefaultFunctions.add(functionName);
                            }
                        } else {
                            mDisabledFunctions.add(functionName);
                        }
                    }
                    catch(NumberFormatException nfe){
                        Slog.d(TAG, files[i].getName()+" contains non-numeric data");
                    }
                }
            } catch (Exception e) {
                Slog.e(TAG, "" , e);
            }
        }
        else if (mLegacy)
            mDisabledFunctions.add(UsbManager.USB_FUNCTION_MASS_STORAGE);

        // handle the case where an accessory switched the driver to accessory mode
        // before the framework finished booting