private static final int MSG_SET_FUNCTIONS_TIMEOUT = 15;
private static final int MSG_GET_CURRENT_USB_FUNCTIONS = 16;
private static final int MSG_FUNCTION_SWITCH_TIMEOUT = 17;
+ private static final int MSG_GADGET_HAL_REGISTERED = 18;
private static final int AUDIO_MODE_SOURCE = 1;
protected static final String CTL_STOP = "ctl.stop";
/**
- * Adb natvie daemon
+ * Adb native daemon.
*/
protected static final String ADBD = "adbd";
+ /**
+ * Gadget HAL fully qualified instance name for registering for ServiceNotification.
+ */
+ protected static final String GADGET_HAL_FQ_NAME =
+ "android.hardware.usb.gadget@1.0::IUsbGadget";
+
protected boolean mCurrentUsbFunctionsRequested;
UsbHandlerHal(Looper looper, Context context, UsbDeviceManager deviceManager,
ServiceNotification serviceNotification = new ServiceNotification();
boolean ret = IServiceManager.getService()
- .registerForNotifications("android.hardware.usb.gadget@1.0::IUsbGadget",
- "", serviceNotification);
+ .registerForNotifications(GADGET_HAL_FQ_NAME, "", serviceNotification);
if (!ret) {
Slog.e(TAG, "Failed to register usb gadget service start notification");
return;
@Override
public void onRegistration(String fqName, String name, boolean preexisting) {
Slog.i(TAG, "Usb gadget hal service started " + fqName + " " + name);
- synchronized (mGadgetProxyLock) {
- try {
- mGadgetProxy = IUsbGadget.getService();
- mGadgetProxy.linkToDeath(new UsbGadgetDeathRecipient(),
- USB_GADGET_HAL_DEATH_COOKIE);
- if (!mCurrentFunctionsApplied && !mCurrentUsbFunctionsRequested) {
- setEnabledFunctions(mCurrentFunctions, false);
- }
- } catch (NoSuchElementException e) {
- Slog.e(TAG, "Usb gadget hal not found", e);
- } catch (RemoteException e) {
- Slog.e(TAG, "Usb Gadget hal not responding", e);
- }
+ if (!fqName.equals(GADGET_HAL_FQ_NAME)) {
+ Slog.e(TAG, "fqName does not match");
+ return;
}
+
+ sendMessage(MSG_GADGET_HAL_REGISTERED, preexisting);
}
}
setEnabledFunctions(UsbManager.FUNCTION_NONE, !mAdbEnabled);
}
break;
+ case MSG_GADGET_HAL_REGISTERED:
+ boolean preexisting = msg.arg1 == 1;
+ synchronized (mGadgetProxyLock) {
+ try {
+ mGadgetProxy = IUsbGadget.getService();
+ mGadgetProxy.linkToDeath(new UsbGadgetDeathRecipient(),
+ USB_GADGET_HAL_DEATH_COOKIE);
+ if (!mCurrentFunctionsApplied && !preexisting) {
+ setEnabledFunctions(mCurrentFunctions, false);
+ }
+ } catch (NoSuchElementException e) {
+ Slog.e(TAG, "Usb gadget hal not found", e);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Usb Gadget hal not responding", e);
+ }
+ }
+ break;
default:
super.handleMessage(msg);
}