Merge changes from topic "USB AIDL Migration"
* changes: Migrate IUsbGadget to AIDL (Fixed Commnets) Migrate IUsbGadget to AIDL
This commit is contained in:
commit
ef0ed10e8f
18 changed files with 1034 additions and 0 deletions
|
@ -760,6 +760,13 @@
|
|||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="aidl" optional="true">
|
||||
<name>android.hardware.usb.gadget</name>
|
||||
<interface>
|
||||
<name>IUsbGadget</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
<hal format="aidl" optional="true">
|
||||
<name>android.hardware.vibrator</name>
|
||||
<version>1-2</version>
|
||||
|
|
37
usb/gadget/aidl/Android.bp
Normal file
37
usb/gadget/aidl/Android.bp
Normal file
|
@ -0,0 +1,37 @@
|
|||
// Copyright (C) 2022 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
package {
|
||||
// See: http://go/android-license-faq
|
||||
// A large-scale-change added 'default_applicable_licenses' to import
|
||||
// all of the 'license_kinds' from "hardware_interfaces_license"
|
||||
// to get the below license kinds:
|
||||
// SPDX-license-identifier-Apache-2.0
|
||||
default_applicable_licenses: ["hardware_interfaces_license"],
|
||||
}
|
||||
|
||||
aidl_interface {
|
||||
name: "android.hardware.usb.gadget",
|
||||
vendor_available: true,
|
||||
srcs: ["android/hardware/usb/gadget/*.aidl"],
|
||||
stability: "vintf",
|
||||
backend: {
|
||||
cpp: {
|
||||
enabled: false,
|
||||
},
|
||||
java: {
|
||||
sdk_version: "module_current",
|
||||
},
|
||||
},
|
||||
}
|
|
@ -0,0 +1,46 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
@VintfStability
|
||||
parcelable GadgetFunction {
|
||||
const long NONE = 0;
|
||||
const long ADB = 1;
|
||||
const long ACCESSORY = 2;
|
||||
const long MTP = 4;
|
||||
const long MIDI = 8;
|
||||
const long PTP = 16;
|
||||
const long RNDIS = 32;
|
||||
const long AUDIO_SOURCE = 64;
|
||||
const long NCM = 1024;
|
||||
}
|
|
@ -0,0 +1,41 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
@VintfStability
|
||||
interface IUsbGadget {
|
||||
oneway void setCurrentUsbFunctions(in long functions, in android.hardware.usb.gadget.IUsbGadgetCallback callback, in long timeoutMs, long transactionId);
|
||||
oneway void getCurrentUsbFunctions(in android.hardware.usb.gadget.IUsbGadgetCallback callback, long transactionId);
|
||||
oneway void getUsbSpeed(in android.hardware.usb.gadget.IUsbGadgetCallback callback, long transactionId);
|
||||
oneway void reset();
|
||||
}
|
|
@ -0,0 +1,40 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
@VintfStability
|
||||
interface IUsbGadgetCallback {
|
||||
oneway void setCurrentUsbFunctionsCb(in long functions, in android.hardware.usb.gadget.Status status, long transactionId);
|
||||
oneway void getCurrentUsbFunctionsCb(in long functions, in android.hardware.usb.gadget.Status status, long transactionId);
|
||||
oneway void getUsbSpeedCb(in android.hardware.usb.gadget.UsbSpeed speed, long transactionId);
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum Status {
|
||||
SUCCESS = 0,
|
||||
ERROR = 1,
|
||||
FUNCTIONS_APPLIED = 2,
|
||||
FUNCTIONS_NOT_APPLIED = 3,
|
||||
CONFIGURATION_NOT_SUPPORTED = 4,
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// This file is a snapshot of an AIDL file. Do not edit it manually. There are
|
||||
// two cases:
|
||||
// 1). this is a frozen version file - do not edit this in any case.
|
||||
// 2). this is a 'current' file. If you make a backwards compatible change to
|
||||
// the interface (from the latest frozen version), the build system will
|
||||
// prompt you to update this file with `m <name>-update-api`.
|
||||
//
|
||||
// You must not make a backward incompatible change to any AIDL file built
|
||||
// with the aidl_interface module type with versions property set. The module
|
||||
// type is used to build AIDL files in a way that they can be used across
|
||||
// independently updatable components of the system. If a device is shipped
|
||||
// with such a backward incompatible change, it has a high risk of breaking
|
||||
// later when a module using the interface is updated, e.g., Mainline modules.
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
@Backing(type="int") @VintfStability
|
||||
enum UsbSpeed {
|
||||
UNKNOWN = 0,
|
||||
LOWSPEED = 1,
|
||||
FULLSPEED = 2,
|
||||
HIGHSPEED = 3,
|
||||
SUPERSPEED = 4,
|
||||
SUPERSPEED_10Gb = 5,
|
||||
SUPERSPEED_20Gb = 6,
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
|
||||
@VintfStability
|
||||
parcelable GadgetFunction {
|
||||
/**
|
||||
* Removes all the functions and pulls down the gadget.
|
||||
*/
|
||||
const long NONE = 0;
|
||||
/**
|
||||
* Android Debug Bridge function.
|
||||
*/
|
||||
const long ADB = 1;
|
||||
/**
|
||||
* Android open accessory protocol function.
|
||||
*/
|
||||
const long ACCESSORY = 1 << 1;
|
||||
/**
|
||||
* Media Transfer protocol function.
|
||||
*/
|
||||
const long MTP = 1 << 2;
|
||||
/**
|
||||
* Peripheral mode USB Midi function.
|
||||
*/
|
||||
const long MIDI = 1 << 3;
|
||||
/**
|
||||
* Picture transfer protocol function.
|
||||
*/
|
||||
const long PTP = 1 << 4;
|
||||
/**
|
||||
* Tethering function.
|
||||
*/
|
||||
const long RNDIS = 1 << 5;
|
||||
/**
|
||||
* AOAv2.0 - Audio Source function.
|
||||
*/
|
||||
const long AUDIO_SOURCE = 1 << 6;
|
||||
/**
|
||||
* NCM - NCM function.
|
||||
*/
|
||||
const long NCM = 1 << 10;
|
||||
}
|
65
usb/gadget/aidl/android/hardware/usb/gadget/IUsbGadget.aidl
Normal file
65
usb/gadget/aidl/android/hardware/usb/gadget/IUsbGadget.aidl
Normal file
|
@ -0,0 +1,65 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
|
||||
import android.hardware.usb.gadget.GadgetFunction;
|
||||
import android.hardware.usb.gadget.IUsbGadgetCallback;
|
||||
|
||||
@VintfStability
|
||||
oneway interface IUsbGadget {
|
||||
/**
|
||||
* This function is used to set the current USB gadget configuration.
|
||||
* Usb gadget needs to be reset if an USB configuration is already.
|
||||
*
|
||||
* @param functions The GadgetFunction bitmap. See GadgetFunction for
|
||||
* the value of each bit.
|
||||
* @param callback IUsbGadgetCallback::setCurrentUsbFunctionsCb used to
|
||||
* propagate back the status.
|
||||
* @param timeoutMs The maximum time (in milliseconds) within which the
|
||||
* IUsbGadgetCallback needs to be returned.
|
||||
* @param transactionId ID to be used when invoking the callback.
|
||||
*
|
||||
*/
|
||||
void setCurrentUsbFunctions(in long functions, in IUsbGadgetCallback callback,
|
||||
in long timeoutMs, long transactionId);
|
||||
|
||||
/**
|
||||
* This function is used to query the USB functions included in the
|
||||
* current USB configuration.
|
||||
*
|
||||
* @param callback IUsbGadgetCallback::getCurrentUsbFunctionsCb used to
|
||||
* propagate the current functions list.
|
||||
* @param transactionId ID to be used when invoking the callback.
|
||||
*/
|
||||
void getCurrentUsbFunctions(in IUsbGadgetCallback callback, long transactionId);
|
||||
|
||||
/**
|
||||
* The function is used to query current USB speed.
|
||||
*
|
||||
* @param callback IUsbGadgetCallback::getUsbSpeedCb used to propagate
|
||||
* current USB speed.
|
||||
* @param transactionId ID to be used when invoking the callback.
|
||||
*/
|
||||
void getUsbSpeed(in IUsbGadgetCallback callback, long transactionId);
|
||||
|
||||
/**
|
||||
* This function is used to reset USB gadget driver.
|
||||
* Performs USB data connection reset. The connection will disconnect and
|
||||
* reconnect.
|
||||
*/
|
||||
void reset();
|
||||
}
|
|
@ -0,0 +1,63 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
|
||||
import android.hardware.usb.gadget.GadgetFunction;
|
||||
import android.hardware.usb.gadget.Status;
|
||||
import android.hardware.usb.gadget.UsbSpeed;
|
||||
|
||||
@VintfStability
|
||||
oneway interface IUsbGadgetCallback {
|
||||
/**
|
||||
* Callback function used to propagate the status of configuration
|
||||
* switch to the caller.
|
||||
*
|
||||
* @param functions list of functions defined by GadgetFunction
|
||||
* included in the current USB gadget composition.
|
||||
* @param status SUCCESS when the functions are applied.
|
||||
* FUNCTIONS_NOT_SUPPORTED when the configuration is
|
||||
* not supported.
|
||||
* ERROR otherwise.
|
||||
* @param transactionId ID to be used when invoking the callback.
|
||||
*/
|
||||
void setCurrentUsbFunctionsCb(in long functions, in Status status, long transactionId);
|
||||
|
||||
/**
|
||||
* Callback function used to propagate the current USB gadget
|
||||
* configuration.
|
||||
* @param functions The GadgetFunction bitmap. See GadgetFunction for
|
||||
* the value of each bit.
|
||||
* @param status FUNCTIONS_APPLIED when list of functions have been
|
||||
* applied.
|
||||
* FUNCTIONS_NOT_APPLIED when the functions have not
|
||||
* been applied.
|
||||
* ERROR otherwise.
|
||||
* @param transactionId ID to be used when invoking the callback.
|
||||
*/
|
||||
void getCurrentUsbFunctionsCb(in long functions, in Status status, long transactionId);
|
||||
|
||||
/**
|
||||
* Used to convey the current USB speed to the caller.
|
||||
* Must be called either when USB state changes due to USB enumeration or
|
||||
* when caller requested for USB speed through getUsbSpeed.
|
||||
*
|
||||
* @param speed USB Speed defined by UsbSpeed showed current USB
|
||||
* connection speed.
|
||||
* @param transactionId ID to be used when invoking the callback.
|
||||
*/
|
||||
void getUsbSpeedCb(in UsbSpeed speed, long transactionId);
|
||||
}
|
39
usb/gadget/aidl/android/hardware/usb/gadget/Status.aidl
Normal file
39
usb/gadget/aidl/android/hardware/usb/gadget/Status.aidl
Normal file
|
@ -0,0 +1,39 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum Status {
|
||||
SUCCESS = 0,
|
||||
/**
|
||||
* Error value when the HAL operation fails for reasons not listed here.
|
||||
*/
|
||||
ERROR = 1,
|
||||
/**
|
||||
* USB configuration applied successfully.
|
||||
*/
|
||||
FUNCTIONS_APPLIED = 2,
|
||||
/**
|
||||
* USB confgiuration failed to apply.
|
||||
*/
|
||||
FUNCTIONS_NOT_APPLIED = 3,
|
||||
/**
|
||||
* USB configuration not supported.
|
||||
*/
|
||||
CONFIGURATION_NOT_SUPPORTED = 4,
|
||||
}
|
50
usb/gadget/aidl/android/hardware/usb/gadget/UsbSpeed.aidl
Normal file
50
usb/gadget/aidl/android/hardware/usb/gadget/UsbSpeed.aidl
Normal file
|
@ -0,0 +1,50 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package android.hardware.usb.gadget;
|
||||
|
||||
@VintfStability
|
||||
@Backing(type="int")
|
||||
enum UsbSpeed {
|
||||
/**
|
||||
* UNKNOWN - Not Connected or Unsupported Speed
|
||||
*/
|
||||
UNKNOWN = 0,
|
||||
/**
|
||||
* USB Low Speed
|
||||
*/
|
||||
LOWSPEED = 1,
|
||||
/**
|
||||
* USB Full Speed
|
||||
*/
|
||||
FULLSPEED = 2,
|
||||
/**
|
||||
* USB High Speed
|
||||
*/
|
||||
HIGHSPEED = 3,
|
||||
/**
|
||||
* USB Super Speed
|
||||
*/
|
||||
SUPERSPEED = 4,
|
||||
/**
|
||||
* USB Super Speed 10Gbps
|
||||
*/
|
||||
SUPERSPEED_10Gb = 5,
|
||||
/**
|
||||
* USB Super Speed 20Gbps
|
||||
*/
|
||||
SUPERSPEED_20Gb = 6,
|
||||
}
|
47
usb/gadget/aidl/default/Android.bp
Normal file
47
usb/gadget/aidl/default/Android.bp
Normal file
|
@ -0,0 +1,47 @@
|
|||
//
|
||||
// Copyright (C) 2022 The Android Open Source Project
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
package {
|
||||
// See: http://go/android-license-faq
|
||||
// A large-scale-change added 'default_applicable_licenses' to import
|
||||
// all of the 'license_kinds' from "hardware_interfaces_license"
|
||||
// to get the below license kinds:
|
||||
// SPDX-license-identifier-Apache-2.0
|
||||
default_applicable_licenses: [
|
||||
"hardware_interfaces_license",
|
||||
],
|
||||
}
|
||||
cc_binary {
|
||||
name: "android.hardware.usb.gadget-service.example",
|
||||
relative_install_path: "hw",
|
||||
init_rc: ["android.hardware.usb.gadget-service.example.rc"],
|
||||
vintf_fragments: [
|
||||
"android.hardware.usb.gadget-service.example.xml",
|
||||
],
|
||||
vendor: true,
|
||||
srcs: ["service_gadget.cpp", "UsbGadget.cpp"],
|
||||
cflags: ["-Wall", "-Werror"],
|
||||
shared_libs: [
|
||||
"libbase",
|
||||
"libbinder",
|
||||
"libhidlbase",
|
||||
"liblog",
|
||||
"libutils",
|
||||
"libhardware",
|
||||
"android.hardware.usb.gadget-V1-ndk",
|
||||
"android.frameworks.stats-V1-ndk",
|
||||
"libcutils",
|
||||
"libbinder_ndk",
|
||||
],
|
||||
}
|
292
usb/gadget/aidl/default/UsbGadget.cpp
Normal file
292
usb/gadget/aidl/default/UsbGadget.cpp
Normal file
|
@ -0,0 +1,292 @@
|
|||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#define LOG_TAG "android.hardware.usb.gadget.aidl-service"
|
||||
|
||||
#include "UsbGadget.h"
|
||||
#include <dirent.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
#include <sys/inotify.h>
|
||||
#include <sys/mount.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/types.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <aidl/android/frameworks/stats/IStats.h>
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace usb {
|
||||
namespace gadget {
|
||||
|
||||
string enabledPath;
|
||||
constexpr char kHsi2cPath[] = "/sys/devices/platform/10d50000.hsi2c";
|
||||
constexpr char kI2CPath[] = "/sys/devices/platform/10d50000.hsi2c/i2c-";
|
||||
constexpr char kAccessoryLimitCurrent[] = "i2c-max77759tcpc/usb_limit_accessory_current";
|
||||
constexpr char kAccessoryLimitCurrentEnable[] = "i2c-max77759tcpc/usb_limit_accessory_enable";
|
||||
|
||||
UsbGadget::UsbGadget() : mGadgetIrqPath("") {}
|
||||
|
||||
Status UsbGadget::getUsbGadgetIrqPath() {
|
||||
std::string irqs;
|
||||
size_t read_pos = 0;
|
||||
size_t found_pos = 0;
|
||||
|
||||
if (!ReadFileToString(kProcInterruptsPath, &irqs)) {
|
||||
ALOGE("cannot read all interrupts");
|
||||
return Status::ERROR;
|
||||
}
|
||||
|
||||
while (true) {
|
||||
found_pos = irqs.find_first_of("\n", read_pos);
|
||||
if (found_pos == std::string::npos) {
|
||||
ALOGI("the string of all interrupts is unexpected");
|
||||
return Status::ERROR;
|
||||
}
|
||||
|
||||
std::string single_irq = irqs.substr(read_pos, found_pos - read_pos);
|
||||
|
||||
if (single_irq.find("dwc3", 0) != std::string::npos) {
|
||||
unsigned int dwc3_irq_number;
|
||||
size_t dwc3_pos = single_irq.find_first_of(":");
|
||||
if (!ParseUint(single_irq.substr(0, dwc3_pos), &dwc3_irq_number)) {
|
||||
ALOGI("unknown IRQ strings");
|
||||
return Status::ERROR;
|
||||
}
|
||||
|
||||
mGadgetIrqPath = kProcIrqPath + single_irq.substr(0, dwc3_pos) + kSmpAffinityList;
|
||||
break;
|
||||
}
|
||||
|
||||
if (found_pos == irqs.npos) {
|
||||
ALOGI("USB gadget doesn't start");
|
||||
return Status::ERROR;
|
||||
}
|
||||
|
||||
read_pos = found_pos + 1;
|
||||
}
|
||||
|
||||
return Status::SUCCESS;
|
||||
}
|
||||
|
||||
void currentFunctionsAppliedCallback(bool functionsApplied, void* payload) {
|
||||
UsbGadget* gadget = (UsbGadget*)payload;
|
||||
gadget->mCurrentUsbFunctionsApplied = functionsApplied;
|
||||
}
|
||||
|
||||
ScopedAStatus UsbGadget::getCurrentUsbFunctions(const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
int64_t in_transactionId) {
|
||||
ScopedAStatus ret = callback->getCurrentUsbFunctionsCb(
|
||||
mCurrentUsbFunctions,
|
||||
mCurrentUsbFunctionsApplied ? Status::FUNCTIONS_APPLIED : Status::FUNCTIONS_NOT_APPLIED,
|
||||
in_transactionId);
|
||||
if (!ret.isOk())
|
||||
ALOGE("Call to getCurrentUsbFunctionsCb failed %s", ret.getDescription().c_str());
|
||||
|
||||
return ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
ScopedAStatus UsbGadget::getUsbSpeed(const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
int64_t in_transactionId) {
|
||||
std::string current_speed;
|
||||
if (ReadFileToString(SPEED_PATH, ¤t_speed)) {
|
||||
current_speed = Trim(current_speed);
|
||||
ALOGI("current USB speed is %s", current_speed.c_str());
|
||||
if (current_speed == "low-speed")
|
||||
mUsbSpeed = UsbSpeed::LOWSPEED;
|
||||
else if (current_speed == "full-speed")
|
||||
mUsbSpeed = UsbSpeed::FULLSPEED;
|
||||
else if (current_speed == "high-speed")
|
||||
mUsbSpeed = UsbSpeed::HIGHSPEED;
|
||||
else if (current_speed == "super-speed")
|
||||
mUsbSpeed = UsbSpeed::SUPERSPEED;
|
||||
else if (current_speed == "super-speed-plus")
|
||||
mUsbSpeed = UsbSpeed::SUPERSPEED_10Gb;
|
||||
else if (current_speed == "UNKNOWN")
|
||||
mUsbSpeed = UsbSpeed::UNKNOWN;
|
||||
else
|
||||
mUsbSpeed = UsbSpeed::UNKNOWN;
|
||||
} else {
|
||||
ALOGE("Fail to read current speed");
|
||||
mUsbSpeed = UsbSpeed::UNKNOWN;
|
||||
}
|
||||
|
||||
if (callback) {
|
||||
ScopedAStatus ret = callback->getUsbSpeedCb(mUsbSpeed, in_transactionId);
|
||||
|
||||
if (!ret.isOk()) ALOGE("Call to getUsbSpeedCb failed %s", ret.getDescription().c_str());
|
||||
}
|
||||
|
||||
return ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
Status UsbGadget::tearDownGadget() {
|
||||
return Status::SUCCESS;
|
||||
}
|
||||
|
||||
ScopedAStatus UsbGadget::reset() {
|
||||
return ScopedAStatus::ok();
|
||||
}
|
||||
|
||||
Status UsbGadget::setupFunctions(long functions, const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
uint64_t timeout, int64_t in_transactionId) {
|
||||
bool ffsEnabled = false;
|
||||
ALOGI("functions: %ld, timeout: %ld", functions, timeout);
|
||||
|
||||
if ((functions & GadgetFunction::ADB) != 0) {
|
||||
ffsEnabled = true;
|
||||
}
|
||||
|
||||
if ((functions & GadgetFunction::NCM) != 0) {
|
||||
ALOGI("setCurrentUsbFunctions ncm");
|
||||
}
|
||||
|
||||
// Pull up the gadget right away when there are no ffs functions.
|
||||
if (!ffsEnabled) {
|
||||
mCurrentUsbFunctionsApplied = true;
|
||||
if (callback)
|
||||
callback->setCurrentUsbFunctionsCb(functions, Status::SUCCESS, in_transactionId);
|
||||
return Status::SUCCESS;
|
||||
}
|
||||
|
||||
return Status::SUCCESS;
|
||||
}
|
||||
|
||||
Status getI2cBusHelper(string* name) {
|
||||
DIR* dp;
|
||||
|
||||
dp = opendir(kHsi2cPath);
|
||||
if (dp != NULL) {
|
||||
struct dirent* ep;
|
||||
|
||||
while ((ep = readdir(dp))) {
|
||||
if (ep->d_type == DT_DIR) {
|
||||
if (string::npos != string(ep->d_name).find("i2c-")) {
|
||||
std::strtok(ep->d_name, "-");
|
||||
*name = std::strtok(NULL, "-");
|
||||
}
|
||||
}
|
||||
}
|
||||
closedir(dp);
|
||||
return Status::SUCCESS;
|
||||
}
|
||||
|
||||
ALOGE("Failed to open %s", kHsi2cPath);
|
||||
return Status::ERROR;
|
||||
}
|
||||
|
||||
ScopedAStatus UsbGadget::setCurrentUsbFunctions(long functions,
|
||||
const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
int64_t timeout, int64_t in_transactionId) {
|
||||
std::unique_lock<std::mutex> lk(mLockSetCurrentFunction);
|
||||
std::string current_usb_power_operation_mode, current_usb_type;
|
||||
std::string usb_limit_sink_enable;
|
||||
|
||||
string accessoryCurrentLimitEnablePath, accessoryCurrentLimitPath, path;
|
||||
|
||||
ALOGI("enter setCurrentUsbFunctions, in_transactionId=%ld , %ld", in_transactionId, timeout);
|
||||
mCurrentUsbFunctions = functions;
|
||||
mCurrentUsbFunctionsApplied = false;
|
||||
|
||||
getI2cBusHelper(&path);
|
||||
accessoryCurrentLimitPath = kI2CPath + path + "/" + kAccessoryLimitCurrent;
|
||||
accessoryCurrentLimitEnablePath = kI2CPath + path + "/" + kAccessoryLimitCurrentEnable;
|
||||
|
||||
// Get the gadget IRQ number before tearDownGadget()
|
||||
if (mGadgetIrqPath.empty()) getUsbGadgetIrqPath();
|
||||
|
||||
// Unlink the gadget and stop the monitor if running.
|
||||
Status status = tearDownGadget();
|
||||
if (status != Status::SUCCESS) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
ALOGI("Returned from tearDown gadget");
|
||||
|
||||
// Leave the gadget pulled down to give time for the host to sense disconnect.
|
||||
// usleep(kDisconnectWaitUs);
|
||||
|
||||
if (functions == GadgetFunction::NONE) {
|
||||
if (callback == NULL)
|
||||
return ScopedAStatus::fromServiceSpecificErrorWithMessage(-1, "callback == NULL");
|
||||
ScopedAStatus ret =
|
||||
callback->setCurrentUsbFunctionsCb(functions, Status::SUCCESS, in_transactionId);
|
||||
if (!ret.isOk())
|
||||
ALOGE("Error while calling setCurrentUsbFunctionsCb %s", ret.getDescription().c_str());
|
||||
return ScopedAStatus::fromServiceSpecificErrorWithMessage(
|
||||
-1, "Error while calling setCurrentUsbFunctionsCb");
|
||||
}
|
||||
|
||||
status = setupFunctions(functions, callback, timeout, in_transactionId);
|
||||
if (status != Status::SUCCESS) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (functions & GadgetFunction::NCM) {
|
||||
if (!mGadgetIrqPath.empty()) {
|
||||
if (!WriteStringToFile(BIG_CORE, mGadgetIrqPath))
|
||||
ALOGI("Cannot move gadget IRQ to big core, path:%s", mGadgetIrqPath.c_str());
|
||||
}
|
||||
} else {
|
||||
if (!mGadgetIrqPath.empty()) {
|
||||
if (!WriteStringToFile(MEDIUM_CORE, mGadgetIrqPath))
|
||||
ALOGI("Cannot move gadget IRQ to medium core, path:%s", mGadgetIrqPath.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
if (ReadFileToString(CURRENT_USB_TYPE_PATH, ¤t_usb_type))
|
||||
current_usb_type = Trim(current_usb_type);
|
||||
|
||||
if (ReadFileToString(CURRENT_USB_POWER_OPERATION_MODE_PATH, ¤t_usb_power_operation_mode))
|
||||
current_usb_power_operation_mode = Trim(current_usb_power_operation_mode);
|
||||
|
||||
if (functions & GadgetFunction::ACCESSORY && current_usb_type == "Unknown SDP [CDP] DCP" &&
|
||||
(current_usb_power_operation_mode == "default" ||
|
||||
current_usb_power_operation_mode == "1.5A")) {
|
||||
if (!WriteStringToFile("1300000", accessoryCurrentLimitPath)) {
|
||||
ALOGI("Write 1.3A to limit current fail");
|
||||
} else {
|
||||
if (!WriteStringToFile("1", accessoryCurrentLimitEnablePath)) {
|
||||
ALOGI("Enable limit current fail");
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!WriteStringToFile("0", accessoryCurrentLimitEnablePath))
|
||||
ALOGI("unvote accessory limit current failed");
|
||||
}
|
||||
|
||||
ALOGI("Usb Gadget setcurrent functions called successfully");
|
||||
return ScopedAStatus::fromServiceSpecificErrorWithMessage(
|
||||
-1, "Usb Gadget setcurrent functions called successfully");
|
||||
|
||||
error:
|
||||
ALOGI("Usb Gadget setcurrent functions failed");
|
||||
if (callback == NULL)
|
||||
return ScopedAStatus::fromServiceSpecificErrorWithMessage(
|
||||
-1, "Usb Gadget setcurrent functions failed");
|
||||
ScopedAStatus ret = callback->setCurrentUsbFunctionsCb(functions, status, in_transactionId);
|
||||
if (!ret.isOk())
|
||||
ALOGE("Error while calling setCurrentUsbFunctionsCb %s", ret.getDescription().c_str());
|
||||
return ScopedAStatus::fromServiceSpecificErrorWithMessage(
|
||||
-1, "Error while calling setCurrentUsbFunctionsCb");
|
||||
}
|
||||
} // namespace gadget
|
||||
} // namespace usb
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
} // namespace aidl
|
115
usb/gadget/aidl/default/UsbGadget.h
Normal file
115
usb/gadget/aidl/default/UsbGadget.h
Normal file
|
@ -0,0 +1,115 @@
|
|||
/*
|
||||
* Copyright (C) 2020 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <aidl/android/hardware/usb/gadget/BnUsbGadget.h>
|
||||
#include <aidl/android/hardware/usb/gadget/BnUsbGadgetCallback.h>
|
||||
#include <aidl/android/hardware/usb/gadget/GadgetFunction.h>
|
||||
#include <aidl/android/hardware/usb/gadget/IUsbGadget.h>
|
||||
#include <aidl/android/hardware/usb/gadget/IUsbGadgetCallback.h>
|
||||
#include <android-base/file.h>
|
||||
#include <android-base/parseint.h>
|
||||
#include <android-base/properties.h>
|
||||
#include <android-base/strings.h>
|
||||
#include <android-base/unique_fd.h>
|
||||
#include <sched.h>
|
||||
#include <sys/epoll.h>
|
||||
#include <sys/eventfd.h>
|
||||
#include <utils/Log.h>
|
||||
#include <chrono>
|
||||
#include <condition_variable>
|
||||
#include <mutex>
|
||||
#include <string>
|
||||
#include <thread>
|
||||
|
||||
namespace aidl {
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
namespace usb {
|
||||
namespace gadget {
|
||||
|
||||
using ::aidl::android::hardware::usb::gadget::GadgetFunction;
|
||||
using ::aidl::android::hardware::usb::gadget::IUsbGadget;
|
||||
using ::aidl::android::hardware::usb::gadget::IUsbGadgetCallback;
|
||||
using ::aidl::android::hardware::usb::gadget::Status;
|
||||
using ::aidl::android::hardware::usb::gadget::UsbSpeed;
|
||||
using ::android::base::GetProperty;
|
||||
using ::android::base::ParseUint;
|
||||
using ::android::base::ReadFileToString;
|
||||
using ::android::base::SetProperty;
|
||||
using ::android::base::Trim;
|
||||
using ::android::base::unique_fd;
|
||||
using ::android::base::WriteStringToFile;
|
||||
using ::ndk::ScopedAStatus;
|
||||
using ::std::shared_ptr;
|
||||
using ::std::string;
|
||||
|
||||
constexpr char kGadgetName[] = "11110000.dwc3";
|
||||
constexpr char kProcInterruptsPath[] = "/proc/interrupts";
|
||||
constexpr char kProcIrqPath[] = "/proc/irq/";
|
||||
constexpr char kSmpAffinityList[] = "/smp_affinity_list";
|
||||
#ifndef UDC_PATH
|
||||
#define UDC_PATH "/sys/class/udc/11110000.dwc3/"
|
||||
#endif
|
||||
// static MonitorFfs monitorFfs(kGadgetName);
|
||||
|
||||
#define SPEED_PATH UDC_PATH "current_speed"
|
||||
|
||||
#define BIG_CORE "6"
|
||||
#define MEDIUM_CORE "4"
|
||||
|
||||
#define POWER_SUPPLY_PATH "/sys/class/power_supply/usb/"
|
||||
#define USB_PORT0_PATH "/sys/class/typec/port0/"
|
||||
|
||||
#define CURRENT_MAX_PATH POWER_SUPPLY_PATH "current_max"
|
||||
#define CURRENT_USB_TYPE_PATH POWER_SUPPLY_PATH "usb_type"
|
||||
#define CURRENT_USB_POWER_OPERATION_MODE_PATH USB_PORT0_PATH "power_operation_mode"
|
||||
|
||||
struct UsbGadget : public BnUsbGadget {
|
||||
UsbGadget();
|
||||
|
||||
// Makes sure that only one request is processed at a time.
|
||||
std::mutex mLockSetCurrentFunction;
|
||||
std::string mGadgetIrqPath;
|
||||
long mCurrentUsbFunctions;
|
||||
bool mCurrentUsbFunctionsApplied;
|
||||
UsbSpeed mUsbSpeed;
|
||||
|
||||
ScopedAStatus setCurrentUsbFunctions(long functions,
|
||||
const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
int64_t timeout, int64_t in_transactionId) override;
|
||||
|
||||
ScopedAStatus getCurrentUsbFunctions(const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
int64_t in_transactionId) override;
|
||||
|
||||
ScopedAStatus reset() override;
|
||||
|
||||
ScopedAStatus getUsbSpeed(const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
int64_t in_transactionId) override;
|
||||
|
||||
private:
|
||||
Status tearDownGadget();
|
||||
Status getUsbGadgetIrqPath();
|
||||
Status setupFunctions(long functions, const shared_ptr<IUsbGadgetCallback>& callback,
|
||||
uint64_t timeout, int64_t in_transactionId);
|
||||
};
|
||||
|
||||
} // namespace gadget
|
||||
} // namespace usb
|
||||
} // namespace hardware
|
||||
} // namespace android
|
||||
} // namespace aidl
|
|
@ -0,0 +1,4 @@
|
|||
service vendor.usb_gadget_default /vendor/bin/hw/android.hardware.usb.gadget-service.example
|
||||
class hal
|
||||
user system
|
||||
group system
|
|
@ -0,0 +1,10 @@
|
|||
<manifest version="1.0" type="device">
|
||||
<hal format="aidl">
|
||||
<name>android.hardware.usb.gadget</name>
|
||||
<version>1</version>
|
||||
<interface>
|
||||
<name>IUsbGadget</name>
|
||||
<instance>default</instance>
|
||||
</interface>
|
||||
</hal>
|
||||
</manifest>
|
35
usb/gadget/aidl/default/service_gadget.cpp
Normal file
35
usb/gadget/aidl/default/service_gadget.cpp
Normal file
|
@ -0,0 +1,35 @@
|
|||
/*
|
||||
* Copyright (C) 2022 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
#include <android-base/logging.h>
|
||||
#include <android/binder_manager.h>
|
||||
#include <android/binder_process.h>
|
||||
#include "UsbGadget.h"
|
||||
/*using android::OK;
|
||||
using android::hardware::configureRpcThreadpool;
|
||||
using android::hardware::joinRpcThreadpool;
|
||||
using android::sp;
|
||||
using android::status_t;*/
|
||||
using ::aidl::android::hardware::usb::gadget::UsbGadget;
|
||||
int main() {
|
||||
ABinderProcess_setThreadPoolMaxThreadCount(0);
|
||||
std::shared_ptr<UsbGadget> usbgadget = ndk::SharedRefBase::make<UsbGadget>();
|
||||
const std::string instance = std::string() + UsbGadget::descriptor + "/default";
|
||||
binder_status_t status =
|
||||
AServiceManager_addService(usbgadget->asBinder().get(), instance.c_str());
|
||||
CHECK(status == STATUS_OK);
|
||||
ABinderProcess_joinThreadPool();
|
||||
return -1;
|
||||
}
|
Loading…
Reference in a new issue