diff options
| author | 2017-10-12 21:13:50 +0000 | |
|---|---|---|
| committer | 2017-10-12 21:13:50 +0000 | |
| commit | 613bc557850f60c2561d3514599425ac6c2bec99 (patch) | |
| tree | f1d1a5008b06483e37b3a8f44a48c5a88fb5b692 | |
| parent | a88b7a97bdb197f3e20e9d51559ae151efb3c747 (diff) | |
| parent | fd47f4032da128e78d605e10f9e67786b08a14e2 (diff) | |
Merge "Checking for errors opening/parsing ALSA "cards" file."
4 files changed, 65 insertions, 8 deletions
diff --git a/core/java/com/android/internal/alsa/AlsaCardsParser.java b/core/java/com/android/internal/alsa/AlsaCardsParser.java index 5b92a1734d47..bb75bf6e6fb8 100644 --- a/core/java/com/android/internal/alsa/AlsaCardsParser.java +++ b/core/java/com/android/internal/alsa/AlsaCardsParser.java @@ -37,6 +37,12 @@ public class AlsaCardsParser { private ArrayList<AlsaCardRecord> mCardRecords = new ArrayList<AlsaCardRecord>(); + public static final int SCANSTATUS_NOTSCANNED = -1; + public static final int SCANSTATUS_SUCCESS = 0; + public static final int SCANSTATUS_FAIL = 1; + public static final int SCANSTATUS_EMPTY = 2; + private int mScanStatus = SCANSTATUS_NOTSCANNED; + public class AlsaCardRecord { private static final String TAG = "AlsaCardRecord"; private static final String kUsbCardKeyStr = "at usb-"; @@ -104,10 +110,11 @@ public class AlsaCardsParser { public AlsaCardsParser() {} - public void scan() { + public int scan() { if (DEBUG) { - Slog.i(TAG, "AlsaCardsParser.scan()"); + Slog.i(TAG, "AlsaCardsParser.scan()...."); } + mCardRecords = new ArrayList<AlsaCardRecord>(); File cardsFile = new File(kCardsFilePath); @@ -134,11 +141,26 @@ public class AlsaCardsParser { mCardRecords.add(cardRecord); } reader.close(); + if (mCardRecords.size() > 0) { + mScanStatus = SCANSTATUS_SUCCESS; + } else { + mScanStatus = SCANSTATUS_EMPTY; + } } catch (FileNotFoundException e) { e.printStackTrace(); + mScanStatus = SCANSTATUS_FAIL; } catch (IOException e) { e.printStackTrace(); + mScanStatus = SCANSTATUS_FAIL; + } + if (DEBUG) { + Slog.i(TAG, " status:" + mScanStatus); } + return mScanStatus; + } + + public int getScanStatus() { + return mScanStatus; } public ArrayList<AlsaCardRecord> getScanRecords() { @@ -182,7 +204,11 @@ public class AlsaCardsParser { } // get the new list of devices - scan(); + if (scan() != SCANSTATUS_SUCCESS) { + Slog.e(TAG, "Error scanning Alsa cards file."); + return -1; + } + if (DEBUG) { LogDevices("Current Devices:", mCardRecords); } diff --git a/core/java/com/android/internal/alsa/AlsaDevicesParser.java b/core/java/com/android/internal/alsa/AlsaDevicesParser.java index 6e3d5966c00d..15261bafd299 100644 --- a/core/java/com/android/internal/alsa/AlsaDevicesParser.java +++ b/core/java/com/android/internal/alsa/AlsaDevicesParser.java @@ -46,6 +46,12 @@ public class AlsaDevicesParser { private boolean mHasPlaybackDevices = false; private boolean mHasMIDIDevices = false; + public static final int SCANSTATUS_NOTSCANNED = -1; + public static final int SCANSTATUS_SUCCESS = 0; + public static final int SCANSTATUS_FAIL = 1; + public static final int SCANSTATUS_EMPTY = 2; + private int mScanStatus = SCANSTATUS_NOTSCANNED; + public class AlsaDeviceRecord { public static final int kDeviceType_Unknown = -1; public static final int kDeviceType_Audio = 0; @@ -258,7 +264,11 @@ public class AlsaDevicesParser { return line.charAt(kIndex_CardDeviceField) == '['; } - public boolean scan() { + public int scan() { + if (DEBUG) { + Slog.i(TAG, "AlsaDevicesParser.scan()...."); + } + mDeviceRecords.clear(); File devicesFile = new File(kDevicesFilePath); @@ -274,13 +284,27 @@ public class AlsaDevicesParser { } } reader.close(); - return true; + // success if we add at least 1 record + if (mDeviceRecords.size() > 0) { + mScanStatus = SCANSTATUS_SUCCESS; + } else { + mScanStatus = SCANSTATUS_EMPTY; + } } catch (FileNotFoundException e) { e.printStackTrace(); + mScanStatus = SCANSTATUS_FAIL; } catch (IOException e) { e.printStackTrace(); + mScanStatus = SCANSTATUS_FAIL; } - return false; + if (DEBUG) { + Slog.i(TAG, " status:" + mScanStatus); + } + return mScanStatus; + } + + public int getScanStatus() { + return mScanStatus; } // diff --git a/services/usb/java/com/android/server/usb/UsbAlsaManager.java b/services/usb/java/com/android/server/usb/UsbAlsaManager.java index acc27beec32d..d359b7045007 100644 --- a/services/usb/java/com/android/server/usb/UsbAlsaManager.java +++ b/services/usb/java/com/android/server/usb/UsbAlsaManager.java @@ -132,7 +132,9 @@ public final class UsbAlsaManager { mHasMidiFeature = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI); // initial scan - mCardsParser.scan(); + if (mCardsParser.scan() != AlsaCardsParser.SCANSTATUS_SUCCESS) { + Slog.e(TAG, "Error scanning ASLA cards file."); + } } public void systemReady() { @@ -314,7 +316,7 @@ public final class UsbAlsaManager { return null; } - if (!mDevicesParser.scan()) { + if (mDevicesParser.scan() != AlsaDevicesParser.SCANSTATUS_SUCCESS) { Slog.e(TAG, "Error parsing ALSA devices file."); return null; } @@ -530,6 +532,9 @@ public final class UsbAlsaManager { // // called by UsbService.dump public void dump(IndentingPrintWriter pw) { + pw.println("Parsers Scan Status:"); + pw.println(" Cards Parser: " + mCardsParser.getScanStatus()); + pw.println(" Devices Parser: " + mDevicesParser.getScanStatus()); pw.println("USB Audio Devices:"); for (UsbDevice device : mAudioDevices.keySet()) { pw.println(" " + device.getDeviceName() + ": " + mAudioDevices.get(device)); diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.java index c657a1b4cc98..095fdc63975c 100644 --- a/services/usb/java/com/android/server/usb/UsbHostManager.java +++ b/services/usb/java/com/android/server/usb/UsbHostManager.java @@ -376,6 +376,8 @@ public class UsbHostManager { } } } + + mUsbAlsaManager.dump(pw); } private native void monitorUsbHostBus(); |