Add USB Gadget HAL 1.2 support
Add a new API to query current USB connection speed Bug: 181938674 Test: Pass USB Gadget V1.2 HIDL tests Signed-off-by: Albert Wang <albertccwang@google.com> Change-Id: Ib908434771854e66d22323b15c02acffe1eff48b
This commit is contained in:
parent
95e87f3721
commit
a36726f4fd
|
@ -1,5 +1,5 @@
|
||||||
//
|
//
|
||||||
// Copyright (C) 2018 The Android Open Source Project
|
// Copyright (C) 2020 The Android Open Source Project
|
||||||
//
|
//
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
// you may not use this file except in compliance with the License.
|
// you may not use this file except in compliance with the License.
|
||||||
|
@ -23,7 +23,7 @@ cc_binary {
|
||||||
init_rc: ["android.hardware.usb@1.2-service.redfin.rc"],
|
init_rc: ["android.hardware.usb@1.2-service.redfin.rc"],
|
||||||
vintf_fragments: [
|
vintf_fragments: [
|
||||||
"android.hardware.usb@1.2-service.redfin.xml",
|
"android.hardware.usb@1.2-service.redfin.xml",
|
||||||
"android.hardware.usb.gadget@1.1-service.redfin.xml",
|
"android.hardware.usb.gadget@1.2-service.redfin.xml",
|
||||||
],
|
],
|
||||||
srcs: ["service.cpp", "Usb.cpp", "UsbGadget.cpp"],
|
srcs: ["service.cpp", "Usb.cpp", "UsbGadget.cpp"],
|
||||||
shared_libs: [
|
shared_libs: [
|
||||||
|
@ -32,6 +32,7 @@ cc_binary {
|
||||||
"android.hardware.usb@1.2",
|
"android.hardware.usb@1.2",
|
||||||
"android.hardware.usb.gadget@1.0",
|
"android.hardware.usb.gadget@1.0",
|
||||||
"android.hardware.usb.gadget@1.1",
|
"android.hardware.usb.gadget@1.1",
|
||||||
|
"android.hardware.usb.gadget@1.2",
|
||||||
"libbase",
|
"libbase",
|
||||||
"libcutils",
|
"libcutils",
|
||||||
"libhardware",
|
"libhardware",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 The Android Open Source Project
|
* Copyright (C) 2020 The Android Open Source Project
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
* limitations under the License.
|
* limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define LOG_TAG "android.hardware.usb.gadget@1.1-service.redfin"
|
#define LOG_TAG "android.hardware.usb.gadget@1.2-service.redfin"
|
||||||
|
|
||||||
#include "UsbGadget.h"
|
#include "UsbGadget.h"
|
||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
@ -30,7 +30,7 @@ namespace android {
|
||||||
namespace hardware {
|
namespace hardware {
|
||||||
namespace usb {
|
namespace usb {
|
||||||
namespace gadget {
|
namespace gadget {
|
||||||
namespace V1_1 {
|
namespace V1_2 {
|
||||||
namespace implementation {
|
namespace implementation {
|
||||||
|
|
||||||
UsbGadget::UsbGadget() {
|
UsbGadget::UsbGadget() {
|
||||||
|
@ -55,6 +55,40 @@ Return<void> UsbGadget::getCurrentUsbFunctions(const sp<V1_0::IUsbGadgetCallback
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Return<void> UsbGadget::getUsbSpeed(const sp<V1_2::IUsbGadgetCallback> &callback) {
|
||||||
|
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::RESERVED_SPEED;
|
||||||
|
} else {
|
||||||
|
ALOGE("Fail to read current speed");
|
||||||
|
mUsbSpeed = UsbSpeed::UNKNOWN;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (callback) {
|
||||||
|
Return<void> ret = callback->getUsbSpeedCb(mUsbSpeed);
|
||||||
|
|
||||||
|
if (!ret.isOk())
|
||||||
|
ALOGE("Call to getUsbSpeedCb failed %s", ret.description().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
return Void();
|
||||||
|
}
|
||||||
|
|
||||||
V1_0::Status UsbGadget::tearDownGadget() {
|
V1_0::Status UsbGadget::tearDownGadget() {
|
||||||
if (resetGadget() != Status::SUCCESS)
|
if (resetGadget() != Status::SUCCESS)
|
||||||
return Status::ERROR;
|
return Status::ERROR;
|
||||||
|
@ -357,7 +391,7 @@ error:
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
} // namespace implementation
|
} // namespace implementation
|
||||||
} // namespace V1_1
|
} // namespace V1_2
|
||||||
} // namespace gadget
|
} // namespace gadget
|
||||||
} // namespace usb
|
} // namespace usb
|
||||||
} // namespace hardware
|
} // namespace hardware
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 The Android Open Source Project
|
* Copyright (C) 2020 The Android Open Source Project
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -19,7 +19,9 @@
|
||||||
#include <android-base/file.h>
|
#include <android-base/file.h>
|
||||||
#include <android-base/properties.h>
|
#include <android-base/properties.h>
|
||||||
#include <android-base/unique_fd.h>
|
#include <android-base/unique_fd.h>
|
||||||
#include <android/hardware/usb/gadget/1.1/IUsbGadget.h>
|
#include <android-base/strings.h>
|
||||||
|
#include <android/hardware/usb/gadget/1.2/types.h>
|
||||||
|
#include <android/hardware/usb/gadget/1.2/IUsbGadget.h>
|
||||||
#include <hidl/MQDescriptor.h>
|
#include <hidl/MQDescriptor.h>
|
||||||
#include <hidl/Status.h>
|
#include <hidl/Status.h>
|
||||||
#include <pixelusb/UsbGadgetCommon.h>
|
#include <pixelusb/UsbGadgetCommon.h>
|
||||||
|
@ -36,13 +38,15 @@ namespace android {
|
||||||
namespace hardware {
|
namespace hardware {
|
||||||
namespace usb {
|
namespace usb {
|
||||||
namespace gadget {
|
namespace gadget {
|
||||||
namespace V1_1 {
|
namespace V1_2 {
|
||||||
namespace implementation {
|
namespace implementation {
|
||||||
|
|
||||||
using ::android::sp;
|
using ::android::sp;
|
||||||
using ::android::base::GetProperty;
|
using ::android::base::GetProperty;
|
||||||
using ::android::base::SetProperty;
|
using ::android::base::SetProperty;
|
||||||
|
using ::android::base::Trim;
|
||||||
using ::android::base::unique_fd;
|
using ::android::base::unique_fd;
|
||||||
|
using ::android::base::ReadFileToString;
|
||||||
using ::android::base::WriteStringToFile;
|
using ::android::base::WriteStringToFile;
|
||||||
using ::android::hardware::hidl_array;
|
using ::android::hardware::hidl_array;
|
||||||
using ::android::hardware::hidl_memory;
|
using ::android::hardware::hidl_memory;
|
||||||
|
@ -60,14 +64,18 @@ using ::android::hardware::google::pixel::usb::MonitorFfs;
|
||||||
using ::android::hardware::google::pixel::usb::resetGadget;
|
using ::android::hardware::google::pixel::usb::resetGadget;
|
||||||
using ::android::hardware::google::pixel::usb::setVidPid;
|
using ::android::hardware::google::pixel::usb::setVidPid;
|
||||||
using ::android::hardware::google::pixel::usb::unlinkFunctions;
|
using ::android::hardware::google::pixel::usb::unlinkFunctions;
|
||||||
using ::android::hardware::usb::gadget::V1_0::GadgetFunction;
|
using ::android::hardware::usb::gadget::V1_0::IUsbGadgetCallback;
|
||||||
using ::android::hardware::usb::gadget::V1_0::Status;
|
using ::android::hardware::usb::gadget::V1_0::Status;
|
||||||
using ::android::hardware::usb::gadget::V1_1::IUsbGadget;
|
using ::android::hardware::usb::gadget::V1_2::IUsbGadget;
|
||||||
|
using ::android::hardware::usb::gadget::V1_2::GadgetFunction;
|
||||||
using ::std::string;
|
using ::std::string;
|
||||||
|
|
||||||
constexpr char kGadgetName[] = "a600000.dwc3";
|
constexpr char kGadgetName[] = "a600000.dwc3";
|
||||||
static MonitorFfs monitorFfs(kGadgetName);
|
static MonitorFfs monitorFfs(kGadgetName);
|
||||||
|
|
||||||
|
#define UDC_PATH "/sys/class/udc/a600000.dwc3/"
|
||||||
|
#define SPEED_PATH UDC_PATH "current_speed"
|
||||||
|
|
||||||
struct UsbGadget : public IUsbGadget {
|
struct UsbGadget : public IUsbGadget {
|
||||||
UsbGadget();
|
UsbGadget();
|
||||||
|
|
||||||
|
@ -75,6 +83,7 @@ struct UsbGadget : public IUsbGadget {
|
||||||
std::mutex mLockSetCurrentFunction;
|
std::mutex mLockSetCurrentFunction;
|
||||||
uint64_t mCurrentUsbFunctions;
|
uint64_t mCurrentUsbFunctions;
|
||||||
bool mCurrentUsbFunctionsApplied;
|
bool mCurrentUsbFunctionsApplied;
|
||||||
|
UsbSpeed mUsbSpeed;
|
||||||
|
|
||||||
Return<void> setCurrentUsbFunctions(uint64_t functions,
|
Return<void> setCurrentUsbFunctions(uint64_t functions,
|
||||||
const sp<V1_0::IUsbGadgetCallback> &callback,
|
const sp<V1_0::IUsbGadgetCallback> &callback,
|
||||||
|
@ -84,6 +93,8 @@ struct UsbGadget : public IUsbGadget {
|
||||||
|
|
||||||
Return<Status> reset() override;
|
Return<Status> reset() override;
|
||||||
|
|
||||||
|
Return<void> getUsbSpeed(const sp<V1_2::IUsbGadgetCallback> &callback) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Status tearDownGadget();
|
Status tearDownGadget();
|
||||||
Status setupFunctions(uint64_t functions, const sp<V1_0::IUsbGadgetCallback> &callback,
|
Status setupFunctions(uint64_t functions, const sp<V1_0::IUsbGadgetCallback> &callback,
|
||||||
|
@ -91,7 +102,7 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace implementation
|
} // namespace implementation
|
||||||
} // namespace V1_1
|
} // namespace V1_2
|
||||||
} // namespace gadget
|
} // namespace gadget
|
||||||
} // namespace usb
|
} // namespace usb
|
||||||
} // namespace hardware
|
} // namespace hardware
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<hal format="hidl">
|
<hal format="hidl">
|
||||||
<name>android.hardware.usb.gadget</name>
|
<name>android.hardware.usb.gadget</name>
|
||||||
<transport>hwbinder</transport>
|
<transport>hwbinder</transport>
|
||||||
<version>1.1</version>
|
<version>1.2</version>
|
||||||
<interface>
|
<interface>
|
||||||
<name>IUsbGadget</name>
|
<name>IUsbGadget</name>
|
||||||
<instance>default</instance>
|
<instance>default</instance>
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2018 The Android Open Source Project
|
* Copyright (C) 2020 The Android Open Source Project
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
|
@ -27,8 +27,8 @@ using android::hardware::configureRpcThreadpool;
|
||||||
using android::hardware::joinRpcThreadpool;
|
using android::hardware::joinRpcThreadpool;
|
||||||
|
|
||||||
// Generated HIDL files
|
// Generated HIDL files
|
||||||
using android::hardware::usb::gadget::V1_1::IUsbGadget;
|
using android::hardware::usb::gadget::V1_2::IUsbGadget;
|
||||||
using android::hardware::usb::gadget::V1_1::implementation::UsbGadget;
|
using android::hardware::usb::gadget::V1_2::implementation::UsbGadget;
|
||||||
using android::hardware::usb::V1_2::IUsb;
|
using android::hardware::usb::V1_2::IUsb;
|
||||||
using android::hardware::usb::V1_2::implementation::Usb;
|
using android::hardware::usb::V1_2::implementation::Usb;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue