Use android.hardware.vibrator NDK backend
Update vibrator HAL dependency to use the NDK backend.
Bug: 349595412
Test: libvibratorservice_test
Flag: EXEMPT mechanical refactor
Change-Id: I1eee7ea86d0535f93ed09d5295b3efbb4d5a1870
diff --git a/services/vibratorservice/Android.bp b/services/vibratorservice/Android.bp
index 2002bdf..503587f 100644
--- a/services/vibratorservice/Android.bp
+++ b/services/vibratorservice/Android.bp
@@ -33,19 +33,19 @@
],
aidl: {
- local_include_dirs: ["include"],
- include_dirs: [
- "hardware/interfaces/vibrator/aidl/android/hardware/vibrator",
- ],
- export_aidl_headers: true
+ local_include_dirs: ["include"],
+ include_dirs: [
+ "hardware/interfaces/vibrator/aidl/android/hardware/vibrator",
+ ],
+ export_aidl_headers: true,
},
shared_libs: [
- "libbinder",
+ "libbinder_ndk",
"libhidlbase",
"liblog",
"libutils",
- "android.hardware.vibrator-V2-cpp",
+ "android.hardware.vibrator-V2-ndk",
"android.hardware.vibrator@1.0",
"android.hardware.vibrator@1.1",
"android.hardware.vibrator@1.2",
diff --git a/services/vibratorservice/VibratorHalController.cpp b/services/vibratorservice/VibratorHalController.cpp
index c1795f5..283a5f0 100644
--- a/services/vibratorservice/VibratorHalController.cpp
+++ b/services/vibratorservice/VibratorHalController.cpp
@@ -16,9 +16,9 @@
#define LOG_TAG "VibratorHalController"
+#include <aidl/android/hardware/vibrator/IVibrator.h>
+#include <android/binder_manager.h>
#include <android/hardware/vibrator/1.3/IVibrator.h>
-#include <android/hardware/vibrator/IVibrator.h>
-#include <binder/IServiceManager.h>
#include <hardware/vibrator.h>
#include <utils/Log.h>
@@ -27,10 +27,10 @@
#include <vibratorservice/VibratorHalController.h>
#include <vibratorservice/VibratorHalWrapper.h>
-using android::hardware::vibrator::CompositeEffect;
-using android::hardware::vibrator::CompositePrimitive;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
using std::chrono::milliseconds;
@@ -38,7 +38,7 @@
namespace V1_1 = android::hardware::vibrator::V1_1;
namespace V1_2 = android::hardware::vibrator::V1_2;
namespace V1_3 = android::hardware::vibrator::V1_3;
-namespace Aidl = android::hardware::vibrator;
+namespace Aidl = aidl::android::hardware::vibrator;
namespace android {
@@ -53,10 +53,14 @@
return nullptr;
}
- sp<Aidl::IVibrator> aidlHal = waitForVintfService<Aidl::IVibrator>();
- if (aidlHal) {
- ALOGV("Successfully connected to Vibrator HAL AIDL service.");
- return std::make_shared<AidlHalWrapper>(std::move(scheduler), aidlHal);
+ auto serviceName = std::string(Aidl::IVibrator::descriptor) + "/default";
+ if (AServiceManager_isDeclared(serviceName.c_str())) {
+ std::shared_ptr<Aidl::IVibrator> hal = Aidl::IVibrator::fromBinder(
+ ndk::SpAIBinder(AServiceManager_waitForService(serviceName.c_str())));
+ if (hal) {
+ ALOGV("Successfully connected to Vibrator HAL AIDL service.");
+ return std::make_shared<AidlHalWrapper>(std::move(scheduler), std::move(hal));
+ }
}
sp<V1_0::IVibrator> halV1_0 = V1_0::IVibrator::getService();
diff --git a/services/vibratorservice/VibratorHalWrapper.cpp b/services/vibratorservice/VibratorHalWrapper.cpp
index f10ba44..abe78f0 100644
--- a/services/vibratorservice/VibratorHalWrapper.cpp
+++ b/services/vibratorservice/VibratorHalWrapper.cpp
@@ -16,8 +16,8 @@
#define LOG_TAG "VibratorHalWrapper"
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <android/hardware/vibrator/1.3/IVibrator.h>
-#include <android/hardware/vibrator/IVibrator.h>
#include <hardware/vibrator.h>
#include <cmath>
@@ -26,12 +26,12 @@
#include <vibratorservice/VibratorCallbackScheduler.h>
#include <vibratorservice/VibratorHalWrapper.h>
-using android::hardware::vibrator::Braking;
-using android::hardware::vibrator::CompositeEffect;
-using android::hardware::vibrator::CompositePrimitive;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
-using android::hardware::vibrator::PrimitivePwle;
+using aidl::android::hardware::vibrator::Braking;
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::PrimitivePwle;
using std::chrono::milliseconds;
@@ -39,7 +39,7 @@
namespace V1_1 = android::hardware::vibrator::V1_1;
namespace V1_2 = android::hardware::vibrator::V1_2;
namespace V1_3 = android::hardware::vibrator::V1_3;
-namespace Aidl = android::hardware::vibrator;
+namespace Aidl = aidl::android::hardware::vibrator;
namespace android {
@@ -200,7 +200,7 @@
// -------------------------------------------------------------------------------------------------
HalResult<void> AidlHalWrapper::ping() {
- return HalResultFactory::fromStatus(IInterface::asBinder(getHal())->pingBinder());
+ return HalResultFactory::fromStatus(AIBinder_ping(getHal()->asBinder().get()));
}
void AidlHalWrapper::tryReconnect() {
@@ -208,7 +208,7 @@
if (!result.isOk()) {
return;
}
- sp<Aidl::IVibrator> newHandle = result.value();
+ std::shared_ptr<Aidl::IVibrator> newHandle = result.value();
if (newHandle) {
std::lock_guard<std::mutex> lock(mHandleMutex);
mHandle = std::move(newHandle);
@@ -220,7 +220,8 @@
HalResult<Capabilities> capabilities = getCapabilities();
bool supportsCallback = capabilities.isOk() &&
static_cast<int32_t>(capabilities.value() & Capabilities::ON_CALLBACK);
- auto cb = supportsCallback ? new HalCallbackWrapper(completionCallback) : nullptr;
+ auto cb = supportsCallback ? ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback)
+ : nullptr;
auto ret = HalResultFactory::fromStatus(getHal()->on(timeout.count(), cb));
if (!supportsCallback && ret.isOk()) {
@@ -255,13 +256,14 @@
HalResult<Capabilities> capabilities = getCapabilities();
bool supportsCallback = capabilities.isOk() &&
static_cast<int32_t>(capabilities.value() & Capabilities::PERFORM_CALLBACK);
- auto cb = supportsCallback ? new HalCallbackWrapper(completionCallback) : nullptr;
+ auto cb = supportsCallback ? ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback)
+ : nullptr;
int32_t lengthMs;
- auto result = getHal()->perform(effect, strength, cb, &lengthMs);
+ auto status = getHal()->perform(effect, strength, cb, &lengthMs);
milliseconds length = milliseconds(lengthMs);
- auto ret = HalResultFactory::fromStatus<milliseconds>(result, length);
+ auto ret = HalResultFactory::fromStatus<milliseconds>(std::move(status), length);
if (!supportsCallback && ret.isOk()) {
mCallbackScheduler->schedule(completionCallback, length);
}
@@ -273,7 +275,7 @@
const std::vector<CompositeEffect>& primitives,
const std::function<void()>& completionCallback) {
// This method should always support callbacks, so no need to double check.
- auto cb = new HalCallbackWrapper(completionCallback);
+ auto cb = ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback);
auto durations = getPrimitiveDurations().valueOr({});
milliseconds duration(0);
@@ -294,40 +296,40 @@
HalResult<void> AidlHalWrapper::performPwleEffect(const std::vector<PrimitivePwle>& primitives,
const std::function<void()>& completionCallback) {
// This method should always support callbacks, so no need to double check.
- auto cb = new HalCallbackWrapper(completionCallback);
+ auto cb = ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback);
return HalResultFactory::fromStatus(getHal()->composePwle(primitives, cb));
}
HalResult<Capabilities> AidlHalWrapper::getCapabilitiesInternal() {
- int32_t capabilities = 0;
- auto result = getHal()->getCapabilities(&capabilities);
- return HalResultFactory::fromStatus<Capabilities>(result,
- static_cast<Capabilities>(capabilities));
+ int32_t cap = 0;
+ auto status = getHal()->getCapabilities(&cap);
+ auto capabilities = static_cast<Capabilities>(cap);
+ return HalResultFactory::fromStatus<Capabilities>(std::move(status), capabilities);
}
HalResult<std::vector<Effect>> AidlHalWrapper::getSupportedEffectsInternal() {
std::vector<Effect> supportedEffects;
- auto result = getHal()->getSupportedEffects(&supportedEffects);
- return HalResultFactory::fromStatus<std::vector<Effect>>(result, supportedEffects);
+ auto status = getHal()->getSupportedEffects(&supportedEffects);
+ return HalResultFactory::fromStatus<std::vector<Effect>>(std::move(status), supportedEffects);
}
HalResult<std::vector<Braking>> AidlHalWrapper::getSupportedBrakingInternal() {
std::vector<Braking> supportedBraking;
- auto result = getHal()->getSupportedBraking(&supportedBraking);
- return HalResultFactory::fromStatus<std::vector<Braking>>(result, supportedBraking);
+ auto status = getHal()->getSupportedBraking(&supportedBraking);
+ return HalResultFactory::fromStatus<std::vector<Braking>>(std::move(status), supportedBraking);
}
HalResult<std::vector<CompositePrimitive>> AidlHalWrapper::getSupportedPrimitivesInternal() {
std::vector<CompositePrimitive> supportedPrimitives;
- auto result = getHal()->getSupportedPrimitives(&supportedPrimitives);
- return HalResultFactory::fromStatus<std::vector<CompositePrimitive>>(result,
+ auto status = getHal()->getSupportedPrimitives(&supportedPrimitives);
+ return HalResultFactory::fromStatus<std::vector<CompositePrimitive>>(std::move(status),
supportedPrimitives);
}
HalResult<std::vector<milliseconds>> AidlHalWrapper::getPrimitiveDurationsInternal(
const std::vector<CompositePrimitive>& supportedPrimitives) {
std::vector<milliseconds> durations;
- constexpr auto primitiveRange = enum_range<CompositePrimitive>();
+ constexpr auto primitiveRange = ndk::enum_range<CompositePrimitive>();
constexpr auto primitiveCount = std::distance(primitiveRange.begin(), primitiveRange.end());
durations.resize(primitiveCount);
@@ -340,8 +342,8 @@
continue;
}
int32_t duration = 0;
- auto result = getHal()->getPrimitiveDuration(primitive, &duration);
- auto halResult = HalResultFactory::fromStatus<int32_t>(result, duration);
+ auto status = getHal()->getPrimitiveDuration(primitive, &duration);
+ auto halResult = HalResultFactory::fromStatus<int32_t>(std::move(status), duration);
if (halResult.isUnsupported()) {
// Should not happen, supported primitives should always support requesting duration.
ALOGE("Supported primitive %zu returned unsupported for getPrimitiveDuration",
@@ -349,7 +351,7 @@
}
if (halResult.isFailed()) {
// Fail entire request if one request has failed.
- return HalResult<std::vector<milliseconds>>::failed(result.toString8().c_str());
+ return HalResult<std::vector<milliseconds>>::failed(status.getMessage());
}
durations[primitiveIdx] = milliseconds(duration);
}
@@ -359,59 +361,59 @@
HalResult<milliseconds> AidlHalWrapper::getPrimitiveDelayMaxInternal() {
int32_t delay = 0;
- auto result = getHal()->getCompositionDelayMax(&delay);
- return HalResultFactory::fromStatus<milliseconds>(result, milliseconds(delay));
+ auto status = getHal()->getCompositionDelayMax(&delay);
+ return HalResultFactory::fromStatus<milliseconds>(std::move(status), milliseconds(delay));
}
HalResult<milliseconds> AidlHalWrapper::getPrimitiveDurationMaxInternal() {
int32_t delay = 0;
- auto result = getHal()->getPwlePrimitiveDurationMax(&delay);
- return HalResultFactory::fromStatus<milliseconds>(result, milliseconds(delay));
+ auto status = getHal()->getPwlePrimitiveDurationMax(&delay);
+ return HalResultFactory::fromStatus<milliseconds>(std::move(status), milliseconds(delay));
}
HalResult<int32_t> AidlHalWrapper::getCompositionSizeMaxInternal() {
int32_t size = 0;
- auto result = getHal()->getCompositionSizeMax(&size);
- return HalResultFactory::fromStatus<int32_t>(result, size);
+ auto status = getHal()->getCompositionSizeMax(&size);
+ return HalResultFactory::fromStatus<int32_t>(std::move(status), size);
}
HalResult<int32_t> AidlHalWrapper::getPwleSizeMaxInternal() {
int32_t size = 0;
- auto result = getHal()->getPwleCompositionSizeMax(&size);
- return HalResultFactory::fromStatus<int32_t>(result, size);
+ auto status = getHal()->getPwleCompositionSizeMax(&size);
+ return HalResultFactory::fromStatus<int32_t>(std::move(status), size);
}
HalResult<float> AidlHalWrapper::getMinFrequencyInternal() {
float minFrequency = 0;
- auto result = getHal()->getFrequencyMinimum(&minFrequency);
- return HalResultFactory::fromStatus<float>(result, minFrequency);
+ auto status = getHal()->getFrequencyMinimum(&minFrequency);
+ return HalResultFactory::fromStatus<float>(std::move(status), minFrequency);
}
HalResult<float> AidlHalWrapper::getResonantFrequencyInternal() {
float f0 = 0;
- auto result = getHal()->getResonantFrequency(&f0);
- return HalResultFactory::fromStatus<float>(result, f0);
+ auto status = getHal()->getResonantFrequency(&f0);
+ return HalResultFactory::fromStatus<float>(std::move(status), f0);
}
HalResult<float> AidlHalWrapper::getFrequencyResolutionInternal() {
float frequencyResolution = 0;
- auto result = getHal()->getFrequencyResolution(&frequencyResolution);
- return HalResultFactory::fromStatus<float>(result, frequencyResolution);
+ auto status = getHal()->getFrequencyResolution(&frequencyResolution);
+ return HalResultFactory::fromStatus<float>(std::move(status), frequencyResolution);
}
HalResult<float> AidlHalWrapper::getQFactorInternal() {
float qFactor = 0;
- auto result = getHal()->getQFactor(&qFactor);
- return HalResultFactory::fromStatus<float>(result, qFactor);
+ auto status = getHal()->getQFactor(&qFactor);
+ return HalResultFactory::fromStatus<float>(std::move(status), qFactor);
}
HalResult<std::vector<float>> AidlHalWrapper::getMaxAmplitudesInternal() {
std::vector<float> amplitudes;
- auto result = getHal()->getBandwidthAmplitudeMap(&litudes);
- return HalResultFactory::fromStatus<std::vector<float>>(result, amplitudes);
+ auto status = getHal()->getBandwidthAmplitudeMap(&litudes);
+ return HalResultFactory::fromStatus<std::vector<float>>(std::move(status), amplitudes);
}
-sp<Aidl::IVibrator> AidlHalWrapper::getHal() {
+std::shared_ptr<Aidl::IVibrator> AidlHalWrapper::getHal() {
std::lock_guard<std::mutex> lock(mHandleMutex);
return mHandle;
}
@@ -420,8 +422,7 @@
template <typename I>
HalResult<void> HidlHalWrapper<I>::ping() {
- auto result = getHal()->ping();
- return HalResultFactory::fromReturn(result);
+ return HalResultFactory::fromReturn(getHal()->ping());
}
template <typename I>
@@ -436,8 +437,8 @@
template <typename I>
HalResult<void> HidlHalWrapper<I>::on(milliseconds timeout,
const std::function<void()>& completionCallback) {
- auto result = getHal()->on(timeout.count());
- auto ret = HalResultFactory::fromStatus(result.withDefault(V1_0::Status::UNKNOWN_ERROR));
+ auto status = getHal()->on(timeout.count());
+ auto ret = HalResultFactory::fromStatus(status.withDefault(V1_0::Status::UNKNOWN_ERROR));
if (ret.isOk()) {
mCallbackScheduler->schedule(completionCallback, timeout);
}
@@ -446,15 +447,15 @@
template <typename I>
HalResult<void> HidlHalWrapper<I>::off() {
- auto result = getHal()->off();
- return HalResultFactory::fromStatus(result.withDefault(V1_0::Status::UNKNOWN_ERROR));
+ auto status = getHal()->off();
+ return HalResultFactory::fromStatus(status.withDefault(V1_0::Status::UNKNOWN_ERROR));
}
template <typename I>
HalResult<void> HidlHalWrapper<I>::setAmplitude(float amplitude) {
uint8_t amp = static_cast<uint8_t>(amplitude * std::numeric_limits<uint8_t>::max());
- auto result = getHal()->setAmplitude(amp);
- return HalResultFactory::fromStatus(result.withDefault(V1_0::Status::UNKNOWN_ERROR));
+ auto status = getHal()->setAmplitude(amp);
+ return HalResultFactory::fromStatus(status.withDefault(V1_0::Status::UNKNOWN_ERROR));
}
template <typename I>
@@ -480,7 +481,7 @@
hardware::Return<bool> result = getHal()->supportsAmplitudeControl();
Capabilities capabilities =
result.withDefault(false) ? Capabilities::AMPLITUDE_CONTROL : Capabilities::NONE;
- return HalResultFactory::fromReturn<Capabilities>(result, capabilities);
+ return HalResultFactory::fromReturn<Capabilities>(std::move(result), capabilities);
}
template <typename I>
@@ -499,7 +500,7 @@
auto result = std::invoke(performFn, handle, effect, effectStrength, effectCallback);
milliseconds length = milliseconds(lengthMs);
- auto ret = HalResultFactory::fromReturn<milliseconds>(result, status, length);
+ auto ret = HalResultFactory::fromReturn<milliseconds>(std::move(result), status, length);
if (ret.isOk()) {
mCallbackScheduler->schedule(completionCallback, length);
}
@@ -604,7 +605,7 @@
sp<V1_3::IVibrator> hal = getHal();
auto amplitudeResult = hal->supportsAmplitudeControl();
if (!amplitudeResult.isOk()) {
- return HalResultFactory::fromReturn<Capabilities>(amplitudeResult, capabilities);
+ return HalResultFactory::fromReturn<Capabilities>(std::move(amplitudeResult), capabilities);
}
auto externalControlResult = hal->supportsExternalControl();
@@ -619,7 +620,8 @@
}
}
- return HalResultFactory::fromReturn<Capabilities>(externalControlResult, capabilities);
+ return HalResultFactory::fromReturn<Capabilities>(std::move(externalControlResult),
+ capabilities);
}
// -------------------------------------------------------------------------------------------------
diff --git a/services/vibratorservice/VibratorManagerHalController.cpp b/services/vibratorservice/VibratorManagerHalController.cpp
index aa5b7fc..ba35d15 100644
--- a/services/vibratorservice/VibratorManagerHalController.cpp
+++ b/services/vibratorservice/VibratorManagerHalController.cpp
@@ -20,7 +20,7 @@
#include <vibratorservice/VibratorManagerHalController.h>
-namespace Aidl = android::hardware::vibrator;
+namespace Aidl = aidl::android::hardware::vibrator;
namespace android {
@@ -29,10 +29,15 @@
std::shared_ptr<ManagerHalWrapper> connectManagerHal(std::shared_ptr<CallbackScheduler> scheduler) {
static bool gHalExists = true;
if (gHalExists) {
- sp<Aidl::IVibratorManager> hal = waitForVintfService<Aidl::IVibratorManager>();
- if (hal) {
- ALOGV("Successfully connected to VibratorManager HAL AIDL service.");
- return std::make_shared<AidlManagerHalWrapper>(std::move(scheduler), hal);
+ auto serviceName = std::string(Aidl::IVibratorManager::descriptor) + "/default";
+ if (AServiceManager_isDeclared(serviceName.c_str())) {
+ std::shared_ptr<Aidl::IVibratorManager> hal = Aidl::IVibratorManager::fromBinder(
+ ndk::SpAIBinder(AServiceManager_checkService(serviceName.c_str())));
+ if (hal) {
+ ALOGV("Successfully connected to VibratorManager HAL AIDL service.");
+ return std::make_shared<AidlManagerHalWrapper>(std::move(scheduler),
+ std::move(hal));
+ }
}
}
diff --git a/services/vibratorservice/VibratorManagerHalWrapper.cpp b/services/vibratorservice/VibratorManagerHalWrapper.cpp
index 1341266..93ec781 100644
--- a/services/vibratorservice/VibratorManagerHalWrapper.cpp
+++ b/services/vibratorservice/VibratorManagerHalWrapper.cpp
@@ -20,7 +20,7 @@
#include <vibratorservice/VibratorManagerHalWrapper.h>
-namespace Aidl = android::hardware::vibrator;
+namespace Aidl = aidl::android::hardware::vibrator;
namespace android {
@@ -75,10 +75,11 @@
std::shared_ptr<HalWrapper> AidlManagerHalWrapper::connectToVibrator(
int32_t vibratorId, std::shared_ptr<CallbackScheduler> callbackScheduler) {
- std::function<HalResult<sp<Aidl::IVibrator>>()> reconnectFn = [=, this]() {
- sp<Aidl::IVibrator> vibrator;
- auto result = this->getHal()->getVibrator(vibratorId, &vibrator);
- return HalResultFactory::fromStatus<sp<Aidl::IVibrator>>(result, vibrator);
+ std::function<HalResult<std::shared_ptr<Aidl::IVibrator>>()> reconnectFn = [=, this]() {
+ std::shared_ptr<Aidl::IVibrator> vibrator;
+ auto status = this->getHal()->getVibrator(vibratorId, &vibrator);
+ return HalResultFactory::fromStatus<std::shared_ptr<Aidl::IVibrator>>(std::move(status),
+ vibrator);
};
auto result = reconnectFn();
if (!result.isOk()) {
@@ -93,11 +94,13 @@
}
HalResult<void> AidlManagerHalWrapper::ping() {
- return HalResultFactory::fromStatus(IInterface::asBinder(getHal())->pingBinder());
+ return HalResultFactory::fromStatus(AIBinder_ping(getHal()->asBinder().get()));
}
void AidlManagerHalWrapper::tryReconnect() {
- sp<Aidl::IVibratorManager> newHandle = checkVintfService<Aidl::IVibratorManager>();
+ auto aidlServiceName = std::string(Aidl::IVibratorManager::descriptor) + "/default";
+ std::shared_ptr<Aidl::IVibratorManager> newHandle = Aidl::IVibratorManager::fromBinder(
+ ndk::SpAIBinder(AServiceManager_checkService(aidlServiceName.c_str())));
if (newHandle) {
std::lock_guard<std::mutex> lock(mHandleMutex);
mHandle = std::move(newHandle);
@@ -111,9 +114,9 @@
return HalResult<ManagerCapabilities>::ok(*mCapabilities);
}
int32_t cap = 0;
- auto result = getHal()->getCapabilities(&cap);
+ auto status = getHal()->getCapabilities(&cap);
auto capabilities = static_cast<ManagerCapabilities>(cap);
- auto ret = HalResultFactory::fromStatus<ManagerCapabilities>(result, capabilities);
+ auto ret = HalResultFactory::fromStatus<ManagerCapabilities>(std::move(status), capabilities);
if (ret.isOk()) {
// Cache copy of returned value.
mCapabilities.emplace(ret.value());
@@ -128,8 +131,8 @@
return HalResult<std::vector<int32_t>>::ok(*mVibratorIds);
}
std::vector<int32_t> ids;
- auto result = getHal()->getVibratorIds(&ids);
- auto ret = HalResultFactory::fromStatus<std::vector<int32_t>>(result, ids);
+ auto status = getHal()->getVibratorIds(&ids);
+ auto ret = HalResultFactory::fromStatus<std::vector<int32_t>>(std::move(status), ids);
if (ret.isOk()) {
// Cache copy of returned value and the individual controllers.
mVibratorIds.emplace(ret.value());
@@ -178,7 +181,8 @@
HalResult<ManagerCapabilities> capabilities = getCapabilities();
bool supportsCallback = capabilities.isOk() &&
static_cast<int32_t>(capabilities.value() & ManagerCapabilities::TRIGGER_CALLBACK);
- auto cb = supportsCallback ? new HalCallbackWrapper(completionCallback) : nullptr;
+ auto cb = supportsCallback ? ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback)
+ : nullptr;
return HalResultFactory::fromStatus(getHal()->triggerSynced(cb));
}
@@ -196,7 +200,7 @@
return ret;
}
-sp<Aidl::IVibratorManager> AidlManagerHalWrapper::getHal() {
+std::shared_ptr<Aidl::IVibratorManager> AidlManagerHalWrapper::getHal() {
std::lock_guard<std::mutex> lock(mHandleMutex);
return mHandle;
}
diff --git a/services/vibratorservice/benchmarks/Android.bp b/services/vibratorservice/benchmarks/Android.bp
index 5437995..5bb8ceb 100644
--- a/services/vibratorservice/benchmarks/Android.bp
+++ b/services/vibratorservice/benchmarks/Android.bp
@@ -28,12 +28,12 @@
"VibratorHalControllerBenchmarks.cpp",
],
shared_libs: [
- "libbinder",
+ "libbinder_ndk",
"libhidlbase",
"liblog",
"libutils",
"libvibratorservice",
- "android.hardware.vibrator-V2-cpp",
+ "android.hardware.vibrator-V2-ndk",
"android.hardware.vibrator@1.0",
"android.hardware.vibrator@1.1",
"android.hardware.vibrator@1.2",
diff --git a/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp b/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp
index 9b30337..5c7c9f4 100644
--- a/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp
+++ b/services/vibratorservice/benchmarks/VibratorHalControllerBenchmarks.cpp
@@ -16,16 +16,15 @@
#define LOG_TAG "VibratorHalControllerBenchmarks"
+#include <android/binder_process.h>
#include <benchmark/benchmark.h>
-#include <binder/ProcessState.h>
#include <vibratorservice/VibratorHalController.h>
#include <future>
-using ::android::enum_range;
-using ::android::hardware::vibrator::CompositeEffect;
-using ::android::hardware::vibrator::CompositePrimitive;
-using ::android::hardware::vibrator::Effect;
-using ::android::hardware::vibrator::EffectStrength;
+using ::aidl::android::hardware::vibrator::CompositeEffect;
+using ::aidl::android::hardware::vibrator::CompositePrimitive;
+using ::aidl::android::hardware::vibrator::Effect;
+using ::aidl::android::hardware::vibrator::EffectStrength;
using ::benchmark::Counter;
using ::benchmark::Fixture;
using ::benchmark::kMicrosecond;
@@ -115,8 +114,8 @@
class VibratorBench : public Fixture {
public:
void SetUp(State& /*state*/) override {
- android::ProcessState::self()->setThreadPoolMaxThreadCount(1);
- android::ProcessState::self()->startThreadPool();
+ ABinderProcess_setThreadPoolMaxThreadCount(1);
+ ABinderProcess_startThreadPool();
mController.init();
}
@@ -388,11 +387,11 @@
return;
}
- for (const auto& effect : enum_range<Effect>()) {
+ for (const auto& effect : ndk::enum_range<Effect>()) {
if (std::find(supported.begin(), supported.end(), effect) == supported.end()) {
continue;
}
- for (const auto& strength : enum_range<EffectStrength>()) {
+ for (const auto& strength : ndk::enum_range<EffectStrength>()) {
b->Args({static_cast<long>(effect), static_cast<long>(strength)});
}
}
@@ -533,7 +532,7 @@
return;
}
- for (const auto& primitive : enum_range<CompositePrimitive>()) {
+ for (const auto& primitive : ndk::enum_range<CompositePrimitive>()) {
if (std::find(supported.begin(), supported.end(), primitive) == supported.end()) {
continue;
}
diff --git a/services/vibratorservice/include/vibratorservice/VibratorHalController.h b/services/vibratorservice/include/vibratorservice/VibratorHalController.h
index f97442d..a1cb3fa 100644
--- a/services/vibratorservice/include/vibratorservice/VibratorHalController.h
+++ b/services/vibratorservice/include/vibratorservice/VibratorHalController.h
@@ -17,8 +17,8 @@
#ifndef ANDROID_OS_VIBRATORHALCONTROLLER_H
#define ANDROID_OS_VIBRATORHALCONTROLLER_H
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <android-base/thread_annotations.h>
-#include <android/hardware/vibrator/IVibrator.h>
#include <vibratorservice/VibratorCallbackScheduler.h>
#include <vibratorservice/VibratorHalWrapper.h>
diff --git a/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h b/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h
index 39c4eb4..d4f7f1d 100644
--- a/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h
+++ b/services/vibratorservice/include/vibratorservice/VibratorHalWrapper.h
@@ -17,10 +17,12 @@
#ifndef ANDROID_OS_VIBRATORHALWRAPPER_H
#define ANDROID_OS_VIBRATORHALWRAPPER_H
+#include <aidl/android/hardware/vibrator/BnVibratorCallback.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
+
#include <android-base/thread_annotations.h>
+#include <android/binder_manager.h>
#include <android/hardware/vibrator/1.3/IVibrator.h>
-#include <android/hardware/vibrator/BnVibratorCallback.h>
-#include <android/hardware/vibrator/IVibrator.h>
#include <binder/IServiceManager.h>
#include <vibratorservice/VibratorCallbackScheduler.h>
@@ -98,43 +100,49 @@
class HalResultFactory {
public:
template <typename T>
- static HalResult<T> fromStatus(binder::Status status, T data) {
- return status.isOk() ? HalResult<T>::ok(data) : fromFailedStatus<T>(status);
+ static HalResult<T> fromStatus(ndk::ScopedAStatus&& status, T data) {
+ return status.isOk() ? HalResult<T>::ok(std::move(data))
+ : fromFailedStatus<T>(std::move(status));
}
template <typename T>
- static HalResult<T> fromStatus(hardware::vibrator::V1_0::Status status, T data) {
- return (status == hardware::vibrator::V1_0::Status::OK) ? HalResult<T>::ok(data)
- : fromFailedStatus<T>(status);
+ static HalResult<T> fromStatus(hardware::vibrator::V1_0::Status&& status, T data) {
+ return (status == hardware::vibrator::V1_0::Status::OK)
+ ? HalResult<T>::ok(std::move(data))
+ : fromFailedStatus<T>(std::move(status));
}
template <typename T, typename R>
- static HalResult<T> fromReturn(hardware::Return<R>& ret, T data) {
- return ret.isOk() ? HalResult<T>::ok(data) : fromFailedReturn<T, R>(ret);
+ static HalResult<T> fromReturn(hardware::Return<R>&& ret, T data) {
+ return ret.isOk() ? HalResult<T>::ok(std::move(data))
+ : fromFailedReturn<T, R>(std::move(ret));
}
template <typename T, typename R>
- static HalResult<T> fromReturn(hardware::Return<R>& ret,
+ static HalResult<T> fromReturn(hardware::Return<R>&& ret,
hardware::vibrator::V1_0::Status status, T data) {
- return ret.isOk() ? fromStatus<T>(status, data) : fromFailedReturn<T, R>(ret);
+ return ret.isOk() ? fromStatus<T>(std::move(status), std::move(data))
+ : fromFailedReturn<T, R>(std::move(ret));
}
static HalResult<void> fromStatus(status_t status) {
- return (status == android::OK) ? HalResult<void>::ok() : fromFailedStatus<void>(status);
+ return (status == android::OK) ? HalResult<void>::ok()
+ : fromFailedStatus<void>(std::move(status));
}
- static HalResult<void> fromStatus(binder::Status status) {
- return status.isOk() ? HalResult<void>::ok() : fromFailedStatus<void>(status);
+ static HalResult<void> fromStatus(ndk::ScopedAStatus&& status) {
+ return status.isOk() ? HalResult<void>::ok() : fromFailedStatus<void>(std::move(status));
}
- static HalResult<void> fromStatus(hardware::vibrator::V1_0::Status status) {
- return (status == hardware::vibrator::V1_0::Status::OK) ? HalResult<void>::ok()
- : fromFailedStatus<void>(status);
+ static HalResult<void> fromStatus(hardware::vibrator::V1_0::Status&& status) {
+ return (status == hardware::vibrator::V1_0::Status::OK)
+ ? HalResult<void>::ok()
+ : fromFailedStatus<void>(std::move(status));
}
template <typename R>
- static HalResult<void> fromReturn(hardware::Return<R>& ret) {
- return ret.isOk() ? HalResult<void>::ok() : fromFailedReturn<void, R>(ret);
+ static HalResult<void> fromReturn(hardware::Return<R>&& ret) {
+ return ret.isOk() ? HalResult<void>::ok() : fromFailedReturn<void, R>(std::move(ret));
}
private:
@@ -146,21 +154,21 @@
}
template <typename T>
- static HalResult<T> fromFailedStatus(binder::Status status) {
- if (status.exceptionCode() == binder::Status::EX_UNSUPPORTED_OPERATION ||
- status.transactionError() == android::UNKNOWN_TRANSACTION) {
- // UNKNOWN_TRANSACTION means the HAL implementation is an older version, so this is
- // the same as the operation being unsupported by this HAL. Should not retry.
+ static HalResult<T> fromFailedStatus(ndk::ScopedAStatus&& status) {
+ if (status.getExceptionCode() == EX_UNSUPPORTED_OPERATION ||
+ status.getStatus() == STATUS_UNKNOWN_TRANSACTION) {
+ // STATUS_UNKNOWN_TRANSACTION means the HAL implementation is an older version, so this
+ // is the same as the operation being unsupported by this HAL. Should not retry.
return HalResult<T>::unsupported();
}
- if (status.exceptionCode() == binder::Status::EX_TRANSACTION_FAILED) {
- return HalResult<T>::transactionFailed(status.toString8().c_str());
+ if (status.getExceptionCode() == EX_TRANSACTION_FAILED) {
+ return HalResult<T>::transactionFailed(status.getMessage());
}
- return HalResult<T>::failed(status.toString8().c_str());
+ return HalResult<T>::failed(status.getMessage());
}
template <typename T>
- static HalResult<T> fromFailedStatus(hardware::vibrator::V1_0::Status status) {
+ static HalResult<T> fromFailedStatus(hardware::vibrator::V1_0::Status&& status) {
switch (status) {
case hardware::vibrator::V1_0::Status::UNSUPPORTED_OPERATION:
return HalResult<T>::unsupported();
@@ -171,7 +179,7 @@
}
template <typename T, typename R>
- static HalResult<T> fromFailedReturn(hardware::Return<R>& ret) {
+ static HalResult<T> fromFailedReturn(hardware::Return<R>&& ret) {
return ret.isDeadObject() ? HalResult<T>::transactionFailed(ret.description().c_str())
: HalResult<T>::failed(ret.description().c_str());
}
@@ -179,14 +187,14 @@
// -------------------------------------------------------------------------------------------------
-class HalCallbackWrapper : public hardware::vibrator::BnVibratorCallback {
+class HalCallbackWrapper : public aidl::android::hardware::vibrator::BnVibratorCallback {
public:
HalCallbackWrapper(std::function<void()> completionCallback)
: mCompletionCallback(completionCallback) {}
- binder::Status onComplete() override {
+ ndk::ScopedAStatus onComplete() override {
mCompletionCallback();
- return binder::Status::ok();
+ return ndk::ScopedAStatus::ok();
}
private:
@@ -198,14 +206,15 @@
// Vibrator HAL capabilities.
enum class Capabilities : int32_t {
NONE = 0,
- ON_CALLBACK = hardware::vibrator::IVibrator::CAP_ON_CALLBACK,
- PERFORM_CALLBACK = hardware::vibrator::IVibrator::CAP_PERFORM_CALLBACK,
- AMPLITUDE_CONTROL = hardware::vibrator::IVibrator::CAP_AMPLITUDE_CONTROL,
- EXTERNAL_CONTROL = hardware::vibrator::IVibrator::CAP_EXTERNAL_CONTROL,
- EXTERNAL_AMPLITUDE_CONTROL = hardware::vibrator::IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL,
- COMPOSE_EFFECTS = hardware::vibrator::IVibrator::CAP_COMPOSE_EFFECTS,
- COMPOSE_PWLE_EFFECTS = hardware::vibrator::IVibrator::CAP_COMPOSE_PWLE_EFFECTS,
- ALWAYS_ON_CONTROL = hardware::vibrator::IVibrator::CAP_ALWAYS_ON_CONTROL,
+ ON_CALLBACK = aidl::android::hardware::vibrator::IVibrator::CAP_ON_CALLBACK,
+ PERFORM_CALLBACK = aidl::android::hardware::vibrator::IVibrator::CAP_PERFORM_CALLBACK,
+ AMPLITUDE_CONTROL = aidl::android::hardware::vibrator::IVibrator::CAP_AMPLITUDE_CONTROL,
+ EXTERNAL_CONTROL = aidl::android::hardware::vibrator::IVibrator::CAP_EXTERNAL_CONTROL,
+ EXTERNAL_AMPLITUDE_CONTROL =
+ aidl::android::hardware::vibrator::IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL,
+ COMPOSE_EFFECTS = aidl::android::hardware::vibrator::IVibrator::CAP_COMPOSE_EFFECTS,
+ COMPOSE_PWLE_EFFECTS = aidl::android::hardware::vibrator::IVibrator::CAP_COMPOSE_PWLE_EFFECTS,
+ ALWAYS_ON_CONTROL = aidl::android::hardware::vibrator::IVibrator::CAP_ALWAYS_ON_CONTROL,
};
inline Capabilities operator|(Capabilities lhs, Capabilities rhs) {
@@ -230,10 +239,15 @@
class Info {
public:
+ using Effect = aidl::android::hardware::vibrator::Effect;
+ using EffectStrength = aidl::android::hardware::vibrator::EffectStrength;
+ using CompositePrimitive = aidl::android::hardware::vibrator::CompositePrimitive;
+ using Braking = aidl::android::hardware::vibrator::Braking;
+
const HalResult<Capabilities> capabilities;
- const HalResult<std::vector<hardware::vibrator::Effect>> supportedEffects;
- const HalResult<std::vector<hardware::vibrator::Braking>> supportedBraking;
- const HalResult<std::vector<hardware::vibrator::CompositePrimitive>> supportedPrimitives;
+ const HalResult<std::vector<Effect>> supportedEffects;
+ const HalResult<std::vector<Braking>> supportedBraking;
+ const HalResult<std::vector<CompositePrimitive>> supportedPrimitives;
const HalResult<std::vector<std::chrono::milliseconds>> primitiveDurations;
const HalResult<std::chrono::milliseconds> primitiveDelayMax;
const HalResult<std::chrono::milliseconds> pwlePrimitiveDurationMax;
@@ -247,12 +261,9 @@
void logFailures() const {
logFailure<Capabilities>(capabilities, "getCapabilities");
- logFailure<std::vector<hardware::vibrator::Effect>>(supportedEffects,
- "getSupportedEffects");
- logFailure<std::vector<hardware::vibrator::Braking>>(supportedBraking,
- "getSupportedBraking");
- logFailure<std::vector<hardware::vibrator::CompositePrimitive>>(supportedPrimitives,
- "getSupportedPrimitives");
+ logFailure<std::vector<Effect>>(supportedEffects, "getSupportedEffects");
+ logFailure<std::vector<Braking>>(supportedBraking, "getSupportedBraking");
+ logFailure<std::vector<CompositePrimitive>>(supportedPrimitives, "getSupportedPrimitives");
logFailure<std::vector<std::chrono::milliseconds>>(primitiveDurations,
"getPrimitiveDuration");
logFailure<std::chrono::milliseconds>(primitiveDelayMax, "getPrimitiveDelayMax");
@@ -309,12 +320,12 @@
// Create a transaction failed results as default so we can retry on the first time we get them.
static const constexpr char* MSG = "never loaded";
HalResult<Capabilities> mCapabilities = HalResult<Capabilities>::transactionFailed(MSG);
- HalResult<std::vector<hardware::vibrator::Effect>> mSupportedEffects =
- HalResult<std::vector<hardware::vibrator::Effect>>::transactionFailed(MSG);
- HalResult<std::vector<hardware::vibrator::Braking>> mSupportedBraking =
- HalResult<std::vector<hardware::vibrator::Braking>>::transactionFailed(MSG);
- HalResult<std::vector<hardware::vibrator::CompositePrimitive>> mSupportedPrimitives =
- HalResult<std::vector<hardware::vibrator::CompositePrimitive>>::transactionFailed(MSG);
+ HalResult<std::vector<Info::Effect>> mSupportedEffects =
+ HalResult<std::vector<Info::Effect>>::transactionFailed(MSG);
+ HalResult<std::vector<Info::Braking>> mSupportedBraking =
+ HalResult<std::vector<Info::Braking>>::transactionFailed(MSG);
+ HalResult<std::vector<Info::CompositePrimitive>> mSupportedPrimitives =
+ HalResult<std::vector<Info::CompositePrimitive>>::transactionFailed(MSG);
HalResult<std::vector<std::chrono::milliseconds>> mPrimitiveDurations =
HalResult<std::vector<std::chrono::milliseconds>>::transactionFailed(MSG);
HalResult<std::chrono::milliseconds> mPrimitiveDelayMax =
@@ -336,6 +347,13 @@
// Wrapper for Vibrator HAL handlers.
class HalWrapper {
public:
+ using Effect = aidl::android::hardware::vibrator::Effect;
+ using EffectStrength = aidl::android::hardware::vibrator::EffectStrength;
+ using CompositePrimitive = aidl::android::hardware::vibrator::CompositePrimitive;
+ using CompositeEffect = aidl::android::hardware::vibrator::CompositeEffect;
+ using Braking = aidl::android::hardware::vibrator::Braking;
+ using PrimitivePwle = aidl::android::hardware::vibrator::PrimitivePwle;
+
explicit HalWrapper(std::shared_ptr<CallbackScheduler> scheduler)
: mCallbackScheduler(std::move(scheduler)) {}
virtual ~HalWrapper() = default;
@@ -355,21 +373,19 @@
virtual HalResult<void> setAmplitude(float amplitude) = 0;
virtual HalResult<void> setExternalControl(bool enabled) = 0;
- virtual HalResult<void> alwaysOnEnable(int32_t id, hardware::vibrator::Effect effect,
- hardware::vibrator::EffectStrength strength) = 0;
+ virtual HalResult<void> alwaysOnEnable(int32_t id, Effect effect, EffectStrength strength) = 0;
virtual HalResult<void> alwaysOnDisable(int32_t id) = 0;
virtual HalResult<std::chrono::milliseconds> performEffect(
- hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength,
+ Effect effect, EffectStrength strength,
const std::function<void()>& completionCallback) = 0;
virtual HalResult<std::chrono::milliseconds> performComposedEffect(
- const std::vector<hardware::vibrator::CompositeEffect>& primitives,
+ const std::vector<CompositeEffect>& primitives,
const std::function<void()>& completionCallback);
- virtual HalResult<void> performPwleEffect(
- const std::vector<hardware::vibrator::PrimitivePwle>& primitives,
- const std::function<void()>& completionCallback);
+ virtual HalResult<void> performPwleEffect(const std::vector<PrimitivePwle>& primitives,
+ const std::function<void()>& completionCallback);
protected:
// Shared pointer to allow CallbackScheduler to outlive this wrapper.
@@ -381,12 +397,11 @@
// Request vibrator info to HAL skipping cache.
virtual HalResult<Capabilities> getCapabilitiesInternal() = 0;
- virtual HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffectsInternal();
- virtual HalResult<std::vector<hardware::vibrator::Braking>> getSupportedBrakingInternal();
- virtual HalResult<std::vector<hardware::vibrator::CompositePrimitive>>
- getSupportedPrimitivesInternal();
+ virtual HalResult<std::vector<Effect>> getSupportedEffectsInternal();
+ virtual HalResult<std::vector<Braking>> getSupportedBrakingInternal();
+ virtual HalResult<std::vector<CompositePrimitive>> getSupportedPrimitivesInternal();
virtual HalResult<std::vector<std::chrono::milliseconds>> getPrimitiveDurationsInternal(
- const std::vector<hardware::vibrator::CompositePrimitive>& supportedPrimitives);
+ const std::vector<CompositePrimitive>& supportedPrimitives);
virtual HalResult<std::chrono::milliseconds> getPrimitiveDelayMaxInternal();
virtual HalResult<std::chrono::milliseconds> getPrimitiveDurationMaxInternal();
virtual HalResult<int32_t> getCompositionSizeMaxInternal();
@@ -405,12 +420,17 @@
// Wrapper for the AIDL Vibrator HAL.
class AidlHalWrapper : public HalWrapper {
public:
+ using IVibrator = aidl::android::hardware::vibrator::IVibrator;
+ using reconnect_fn = std::function<HalResult<std::shared_ptr<IVibrator>>()>;
+
AidlHalWrapper(
- std::shared_ptr<CallbackScheduler> scheduler, sp<hardware::vibrator::IVibrator> handle,
- std::function<HalResult<sp<hardware::vibrator::IVibrator>>()> reconnectFn =
+ std::shared_ptr<CallbackScheduler> scheduler, std::shared_ptr<IVibrator> handle,
+ reconnect_fn reconnectFn =
[]() {
- return HalResult<sp<hardware::vibrator::IVibrator>>::ok(
- checkVintfService<hardware::vibrator::IVibrator>());
+ auto serviceName = std::string(IVibrator::descriptor) + "/default";
+ auto hal = IVibrator::fromBinder(
+ ndk::SpAIBinder(AServiceManager_checkService(serviceName.c_str())));
+ return HalResult<std::shared_ptr<IVibrator>>::ok(std::move(hal));
})
: HalWrapper(std::move(scheduler)),
mReconnectFn(reconnectFn),
@@ -427,32 +447,29 @@
HalResult<void> setAmplitude(float amplitude) override final;
HalResult<void> setExternalControl(bool enabled) override final;
- HalResult<void> alwaysOnEnable(int32_t id, hardware::vibrator::Effect effect,
- hardware::vibrator::EffectStrength strength) override final;
+ HalResult<void> alwaysOnEnable(int32_t id, Effect effect,
+ EffectStrength strength) override final;
HalResult<void> alwaysOnDisable(int32_t id) override final;
HalResult<std::chrono::milliseconds> performEffect(
- hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength,
+ Effect effect, EffectStrength strength,
const std::function<void()>& completionCallback) override final;
HalResult<std::chrono::milliseconds> performComposedEffect(
- const std::vector<hardware::vibrator::CompositeEffect>& primitives,
+ const std::vector<CompositeEffect>& primitives,
const std::function<void()>& completionCallback) override final;
HalResult<void> performPwleEffect(
- const std::vector<hardware::vibrator::PrimitivePwle>& primitives,
+ const std::vector<PrimitivePwle>& primitives,
const std::function<void()>& completionCallback) override final;
protected:
HalResult<Capabilities> getCapabilitiesInternal() override final;
- HalResult<std::vector<hardware::vibrator::Effect>> getSupportedEffectsInternal() override final;
- HalResult<std::vector<hardware::vibrator::Braking>> getSupportedBrakingInternal()
- override final;
- HalResult<std::vector<hardware::vibrator::CompositePrimitive>> getSupportedPrimitivesInternal()
- override final;
+ HalResult<std::vector<Effect>> getSupportedEffectsInternal() override final;
+ HalResult<std::vector<Braking>> getSupportedBrakingInternal() override final;
+ HalResult<std::vector<CompositePrimitive>> getSupportedPrimitivesInternal() override final;
HalResult<std::vector<std::chrono::milliseconds>> getPrimitiveDurationsInternal(
- const std::vector<hardware::vibrator::CompositePrimitive>& supportedPrimitives)
- override final;
+ const std::vector<CompositePrimitive>& supportedPrimitives) override final;
HalResult<std::chrono::milliseconds> getPrimitiveDelayMaxInternal() override final;
HalResult<std::chrono::milliseconds> getPrimitiveDurationMaxInternal() override final;
HalResult<int32_t> getCompositionSizeMaxInternal() override final;
@@ -464,11 +481,11 @@
HalResult<std::vector<float>> getMaxAmplitudesInternal() override final;
private:
- const std::function<HalResult<sp<hardware::vibrator::IVibrator>>()> mReconnectFn;
+ const reconnect_fn mReconnectFn;
std::mutex mHandleMutex;
- sp<hardware::vibrator::IVibrator> mHandle GUARDED_BY(mHandleMutex);
+ std::shared_ptr<IVibrator> mHandle GUARDED_BY(mHandleMutex);
- sp<hardware::vibrator::IVibrator> getHal();
+ std::shared_ptr<IVibrator> getHal();
};
// Wrapper for the HDIL Vibrator HALs.
@@ -489,8 +506,8 @@
HalResult<void> setAmplitude(float amplitude) override final;
virtual HalResult<void> setExternalControl(bool enabled) override;
- HalResult<void> alwaysOnEnable(int32_t id, hardware::vibrator::Effect effect,
- hardware::vibrator::EffectStrength strength) override final;
+ HalResult<void> alwaysOnEnable(int32_t id, HalWrapper::Effect effect,
+ HalWrapper::EffectStrength strength) override final;
HalResult<void> alwaysOnDisable(int32_t id) override final;
protected:
@@ -506,8 +523,7 @@
template <class T>
HalResult<std::chrono::milliseconds> performInternal(
- perform_fn<T> performFn, sp<I> handle, T effect,
- hardware::vibrator::EffectStrength strength,
+ perform_fn<T> performFn, sp<I> handle, T effect, HalWrapper::EffectStrength strength,
const std::function<void()>& completionCallback);
sp<I> getHal();
@@ -523,7 +539,7 @@
virtual ~HidlHalWrapperV1_0() = default;
HalResult<std::chrono::milliseconds> performEffect(
- hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength,
+ HalWrapper::Effect effect, HalWrapper::EffectStrength strength,
const std::function<void()>& completionCallback) override final;
};
@@ -537,7 +553,7 @@
virtual ~HidlHalWrapperV1_1() = default;
HalResult<std::chrono::milliseconds> performEffect(
- hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength,
+ HalWrapper::Effect effect, HalWrapper::EffectStrength strength,
const std::function<void()>& completionCallback) override final;
};
@@ -551,7 +567,7 @@
virtual ~HidlHalWrapperV1_2() = default;
HalResult<std::chrono::milliseconds> performEffect(
- hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength,
+ HalWrapper::Effect effect, HalWrapper::EffectStrength strength,
const std::function<void()>& completionCallback) override final;
};
@@ -567,7 +583,7 @@
HalResult<void> setExternalControl(bool enabled) override final;
HalResult<std::chrono::milliseconds> performEffect(
- hardware::vibrator::Effect effect, hardware::vibrator::EffectStrength strength,
+ HalWrapper::Effect effect, HalWrapper::EffectStrength strength,
const std::function<void()>& completionCallback) override final;
protected:
diff --git a/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h b/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h
index 9168565..70c846b 100644
--- a/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h
+++ b/services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h
@@ -17,7 +17,7 @@
#ifndef ANDROID_OS_VIBRATOR_MANAGER_HAL_CONTROLLER_H
#define ANDROID_OS_VIBRATOR_MANAGER_HAL_CONTROLLER_H
-#include <android/hardware/vibrator/IVibratorManager.h>
+#include <aidl/android/hardware/vibrator/IVibratorManager.h>
#include <vibratorservice/VibratorHalController.h>
#include <vibratorservice/VibratorManagerHalWrapper.h>
#include <unordered_map>
diff --git a/services/vibratorservice/include/vibratorservice/VibratorManagerHalWrapper.h b/services/vibratorservice/include/vibratorservice/VibratorManagerHalWrapper.h
index 563f55e..9e3f221 100644
--- a/services/vibratorservice/include/vibratorservice/VibratorManagerHalWrapper.h
+++ b/services/vibratorservice/include/vibratorservice/VibratorManagerHalWrapper.h
@@ -17,7 +17,7 @@
#ifndef ANDROID_OS_VIBRATOR_MANAGER_HAL_WRAPPER_H
#define ANDROID_OS_VIBRATOR_MANAGER_HAL_WRAPPER_H
-#include <android/hardware/vibrator/IVibratorManager.h>
+#include <aidl/android/hardware/vibrator/IVibratorManager.h>
#include <vibratorservice/VibratorHalController.h>
#include <unordered_map>
@@ -28,14 +28,17 @@
// VibratorManager HAL capabilities.
enum class ManagerCapabilities : int32_t {
NONE = 0,
- SYNC = hardware::vibrator::IVibratorManager::CAP_SYNC,
- PREPARE_ON = hardware::vibrator::IVibratorManager::CAP_PREPARE_ON,
- PREPARE_PERFORM = hardware::vibrator::IVibratorManager::CAP_PREPARE_PERFORM,
- PREPARE_COMPOSE = hardware::vibrator::IVibratorManager::CAP_PREPARE_COMPOSE,
- MIXED_TRIGGER_ON = hardware::vibrator::IVibratorManager::IVibratorManager::CAP_MIXED_TRIGGER_ON,
- MIXED_TRIGGER_PERFORM = hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_PERFORM,
- MIXED_TRIGGER_COMPOSE = hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_COMPOSE,
- TRIGGER_CALLBACK = hardware::vibrator::IVibratorManager::CAP_TRIGGER_CALLBACK
+ SYNC = aidl::android::hardware::vibrator::IVibratorManager::CAP_SYNC,
+ PREPARE_ON = aidl::android::hardware::vibrator::IVibratorManager::CAP_PREPARE_ON,
+ PREPARE_PERFORM = aidl::android::hardware::vibrator::IVibratorManager::CAP_PREPARE_PERFORM,
+ PREPARE_COMPOSE = aidl::android::hardware::vibrator::IVibratorManager::CAP_PREPARE_COMPOSE,
+ MIXED_TRIGGER_ON = aidl::android::hardware::vibrator::IVibratorManager::IVibratorManager::
+ CAP_MIXED_TRIGGER_ON,
+ MIXED_TRIGGER_PERFORM =
+ aidl::android::hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_PERFORM,
+ MIXED_TRIGGER_COMPOSE =
+ aidl::android::hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_COMPOSE,
+ TRIGGER_CALLBACK = aidl::android::hardware::vibrator::IVibratorManager::CAP_TRIGGER_CALLBACK
};
inline ManagerCapabilities operator|(ManagerCapabilities lhs, ManagerCapabilities rhs) {
@@ -106,8 +109,10 @@
// Wrapper for the AIDL VibratorManager HAL.
class AidlManagerHalWrapper : public ManagerHalWrapper {
public:
+ using VibratorManager = aidl::android::hardware::vibrator::IVibratorManager;
+
explicit AidlManagerHalWrapper(std::shared_ptr<CallbackScheduler> callbackScheduler,
- sp<hardware::vibrator::IVibratorManager> handle)
+ std::shared_ptr<VibratorManager> handle)
: mHandle(std::move(handle)), mCallbackScheduler(callbackScheduler) {}
virtual ~AidlManagerHalWrapper() = default;
@@ -126,14 +131,14 @@
std::mutex mHandleMutex;
std::mutex mCapabilitiesMutex;
std::mutex mVibratorsMutex;
- sp<hardware::vibrator::IVibratorManager> mHandle GUARDED_BY(mHandleMutex);
+ std::shared_ptr<VibratorManager> mHandle GUARDED_BY(mHandleMutex);
std::optional<ManagerCapabilities> mCapabilities GUARDED_BY(mCapabilitiesMutex);
std::optional<std::vector<int32_t>> mVibratorIds GUARDED_BY(mVibratorsMutex);
std::unordered_map<int32_t, std::shared_ptr<HalController>> mVibrators
GUARDED_BY(mVibratorsMutex);
std::shared_ptr<CallbackScheduler> mCallbackScheduler;
- sp<hardware::vibrator::IVibratorManager> getHal();
+ std::shared_ptr<VibratorManager> getHal();
std::shared_ptr<HalWrapper> connectToVibrator(int32_t vibratorId,
std::shared_ptr<CallbackScheduler> scheduler);
};
diff --git a/services/vibratorservice/test/Android.bp b/services/vibratorservice/test/Android.bp
index be71dc2..cd05123 100644
--- a/services/vibratorservice/test/Android.bp
+++ b/services/vibratorservice/test/Android.bp
@@ -44,12 +44,12 @@
],
shared_libs: [
"libbase",
- "libbinder",
+ "libbinder_ndk",
"libhidlbase",
"liblog",
"libvibratorservice",
"libutils",
- "android.hardware.vibrator-V2-cpp",
+ "android.hardware.vibrator-V2-ndk",
"android.hardware.vibrator@1.0",
"android.hardware.vibrator@1.1",
"android.hardware.vibrator@1.2",
diff --git a/services/vibratorservice/test/VibratorHalControllerTest.cpp b/services/vibratorservice/test/VibratorHalControllerTest.cpp
index 15fde91..f4c2898 100644
--- a/services/vibratorservice/test/VibratorHalControllerTest.cpp
+++ b/services/vibratorservice/test/VibratorHalControllerTest.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "VibratorHalControllerTest"
-#include <android/hardware/vibrator/IVibrator.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <cutils/atomic.h>
#include <gmock/gmock.h>
@@ -29,10 +29,11 @@
#include <vibratorservice/VibratorHalController.h>
#include <vibratorservice/VibratorHalWrapper.h>
+#include "test_mocks.h"
#include "test_utils.h"
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
using std::chrono::milliseconds;
@@ -46,41 +47,12 @@
// -------------------------------------------------------------------------------------------------
-class MockHalWrapper : public vibrator::HalWrapper {
-public:
- MockHalWrapper(std::shared_ptr<vibrator::CallbackScheduler> scheduler)
- : HalWrapper(scheduler) {}
- virtual ~MockHalWrapper() = default;
-
- MOCK_METHOD(vibrator::HalResult<void>, ping, (), (override));
- MOCK_METHOD(void, tryReconnect, (), (override));
- MOCK_METHOD(vibrator::HalResult<void>, on,
- (milliseconds timeout, const std::function<void()>& completionCallback),
- (override));
- MOCK_METHOD(vibrator::HalResult<void>, off, (), (override));
- MOCK_METHOD(vibrator::HalResult<void>, setAmplitude, (float amplitude), (override));
- MOCK_METHOD(vibrator::HalResult<void>, setExternalControl, (bool enabled), (override));
- MOCK_METHOD(vibrator::HalResult<void>, alwaysOnEnable,
- (int32_t id, Effect effect, EffectStrength strength), (override));
- MOCK_METHOD(vibrator::HalResult<void>, alwaysOnDisable, (int32_t id), (override));
- MOCK_METHOD(vibrator::HalResult<milliseconds>, performEffect,
- (Effect effect, EffectStrength strength,
- const std::function<void()>& completionCallback),
- (override));
- MOCK_METHOD(vibrator::HalResult<vibrator::Capabilities>, getCapabilitiesInternal, (),
- (override));
-
- vibrator::CallbackScheduler* getCallbackScheduler() { return mCallbackScheduler.get(); }
-};
-
-// -------------------------------------------------------------------------------------------------
-
class VibratorHalControllerTest : public Test {
public:
void SetUp() override {
mConnectCounter = 0;
auto callbackScheduler = std::make_shared<vibrator::CallbackScheduler>();
- mMockHal = std::make_shared<StrictMock<MockHalWrapper>>(callbackScheduler);
+ mMockHal = std::make_shared<StrictMock<vibrator::MockHalWrapper>>(callbackScheduler);
mController = std::make_unique<
vibrator::HalController>(std::move(callbackScheduler),
[&](std::shared_ptr<vibrator::CallbackScheduler>) {
@@ -92,7 +64,7 @@
protected:
int32_t mConnectCounter;
- std::shared_ptr<MockHalWrapper> mMockHal;
+ std::shared_ptr<vibrator::MockHalWrapper> mMockHal;
std::unique_ptr<vibrator::HalController> mController;
};
diff --git a/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp b/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp
index 03c9e77..91717f6 100644
--- a/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp
+++ b/services/vibratorservice/test/VibratorHalWrapperAidlTest.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "VibratorHalWrapperAidlTest"
-#include <android/hardware/vibrator/IVibrator.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -27,18 +27,17 @@
#include <vibratorservice/VibratorCallbackScheduler.h>
#include <vibratorservice/VibratorHalWrapper.h>
+#include "test_mocks.h"
#include "test_utils.h"
-using android::binder::Status;
-
-using android::hardware::vibrator::Braking;
-using android::hardware::vibrator::CompositeEffect;
-using android::hardware::vibrator::CompositePrimitive;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
-using android::hardware::vibrator::IVibrator;
-using android::hardware::vibrator::IVibratorCallback;
-using android::hardware::vibrator::PrimitivePwle;
+using aidl::android::hardware::vibrator::Braking;
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::IVibrator;
+using aidl::android::hardware::vibrator::IVibratorCallback;
+using aidl::android::hardware::vibrator::PrimitivePwle;
using namespace android;
using namespace std::chrono_literals;
@@ -46,61 +45,10 @@
// -------------------------------------------------------------------------------------------------
-class MockBinder : public BBinder {
-public:
- MOCK_METHOD(status_t, linkToDeath,
- (const sp<DeathRecipient>& recipient, void* cookie, uint32_t flags), (override));
- MOCK_METHOD(status_t, unlinkToDeath,
- (const wp<DeathRecipient>& recipient, void* cookie, uint32_t flags,
- wp<DeathRecipient>* outRecipient),
- (override));
- MOCK_METHOD(status_t, pingBinder, (), (override));
-};
-
-class MockIVibrator : public IVibrator {
-public:
- MOCK_METHOD(Status, getCapabilities, (int32_t * ret), (override));
- MOCK_METHOD(Status, off, (), (override));
- MOCK_METHOD(Status, on, (int32_t timeout, const sp<IVibratorCallback>& cb), (override));
- MOCK_METHOD(Status, perform,
- (Effect e, EffectStrength s, const sp<IVibratorCallback>& cb, int32_t* ret),
- (override));
- MOCK_METHOD(Status, getSupportedEffects, (std::vector<Effect> * ret), (override));
- MOCK_METHOD(Status, setAmplitude, (float amplitude), (override));
- MOCK_METHOD(Status, setExternalControl, (bool enabled), (override));
- MOCK_METHOD(Status, getCompositionDelayMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getCompositionSizeMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getSupportedPrimitives, (std::vector<CompositePrimitive> * ret),
- (override));
- MOCK_METHOD(Status, getPrimitiveDuration, (CompositePrimitive p, int32_t* ret), (override));
- MOCK_METHOD(Status, compose,
- (const std::vector<CompositeEffect>& e, const sp<IVibratorCallback>& cb),
- (override));
- MOCK_METHOD(Status, composePwle,
- (const std::vector<PrimitivePwle>& e, const sp<IVibratorCallback>& cb), (override));
- MOCK_METHOD(Status, getSupportedAlwaysOnEffects, (std::vector<Effect> * ret), (override));
- MOCK_METHOD(Status, alwaysOnEnable, (int32_t id, Effect e, EffectStrength s), (override));
- MOCK_METHOD(Status, alwaysOnDisable, (int32_t id), (override));
- MOCK_METHOD(Status, getQFactor, (float * ret), (override));
- MOCK_METHOD(Status, getResonantFrequency, (float * ret), (override));
- MOCK_METHOD(Status, getFrequencyResolution, (float* ret), (override));
- MOCK_METHOD(Status, getFrequencyMinimum, (float* ret), (override));
- MOCK_METHOD(Status, getBandwidthAmplitudeMap, (std::vector<float> * ret), (override));
- MOCK_METHOD(Status, getPwlePrimitiveDurationMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getPwleCompositionSizeMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getSupportedBraking, (std::vector<Braking> * ret), (override));
- MOCK_METHOD(int32_t, getInterfaceVersion, (), (override));
- MOCK_METHOD(std::string, getInterfaceHash, (), (override));
- MOCK_METHOD(IBinder*, onAsBinder, (), (override));
-};
-
-// -------------------------------------------------------------------------------------------------
-
class VibratorHalWrapperAidlTest : public Test {
public:
void SetUp() override {
- mMockBinder = new StrictMock<MockBinder>();
- mMockHal = new StrictMock<MockIVibrator>();
+ mMockHal = ndk::SharedRefBase::make<StrictMock<vibrator::MockIVibrator>>();
mMockScheduler = std::make_shared<StrictMock<vibrator::MockCallbackScheduler>>();
mWrapper = std::make_unique<vibrator::AidlHalWrapper>(mMockScheduler, mMockHal);
ASSERT_NE(mWrapper, nullptr);
@@ -109,54 +57,28 @@
protected:
std::shared_ptr<StrictMock<vibrator::MockCallbackScheduler>> mMockScheduler = nullptr;
std::unique_ptr<vibrator::HalWrapper> mWrapper = nullptr;
- sp<StrictMock<MockIVibrator>> mMockHal = nullptr;
- sp<StrictMock<MockBinder>> mMockBinder = nullptr;
+ std::shared_ptr<StrictMock<vibrator::MockIVibrator>> mMockHal = nullptr;
};
// -------------------------------------------------------------------------------------------------
-ACTION(TriggerCallbackInArg1) {
- if (arg1 != nullptr) {
- arg1->onComplete();
- }
-}
-
-ACTION(TriggerCallbackInArg2) {
- if (arg2 != nullptr) {
- arg2->onComplete();
- }
-}
-
-TEST_F(VibratorHalWrapperAidlTest, TestPing) {
- EXPECT_CALL(*mMockHal.get(), onAsBinder())
- .Times(Exactly(2))
- .WillRepeatedly(Return(mMockBinder.get()));
- EXPECT_CALL(*mMockBinder.get(), pingBinder())
- .Times(Exactly(2))
- .WillOnce(Return(android::OK))
- .WillRepeatedly(Return(android::DEAD_OBJECT));
-
- ASSERT_TRUE(mWrapper->ping().isOk());
- ASSERT_TRUE(mWrapper->ping().isFailed());
-}
-
TEST_F(VibratorHalWrapperAidlTest, TestOnWithCallbackSupport) {
{
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(
- DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), on(Eq(10), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(TriggerCallbackInArg1(), Return(Status())));
+ .WillOnce(DoAll(WithArg<1>(vibrator::TriggerCallback()),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), on(Eq(100), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), on(Eq(1000), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -179,20 +101,20 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(
- DoAll(SetArgPointee<0>(IVibrator::CAP_COMPOSE_EFFECTS), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibrator::CAP_COMPOSE_EFFECTS),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), on(Eq(10), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status()));
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
EXPECT_CALL(*mMockScheduler.get(), schedule(_, Eq(10ms)))
.Times(Exactly(1))
- .WillRepeatedly(vibrator::TriggerSchedulerCallback());
+ .WillOnce(vibrator::TriggerSchedulerCallback());
EXPECT_CALL(*mMockHal.get(), on(Eq(11), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), on(Eq(12), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -211,10 +133,9 @@
TEST_F(VibratorHalWrapperAidlTest, TestOff) {
EXPECT_CALL(*mMockHal.get(), off())
.Times(Exactly(3))
- .WillOnce(Return(Status()))
- .WillOnce(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::ok()))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
ASSERT_TRUE(mWrapper->off().isOk());
ASSERT_TRUE(mWrapper->off().isUnsupported());
@@ -224,13 +145,15 @@
TEST_F(VibratorHalWrapperAidlTest, TestSetAmplitude) {
{
InSequence seq;
- EXPECT_CALL(*mMockHal.get(), setAmplitude(Eq(0.1f))).Times(Exactly(1));
+ EXPECT_CALL(*mMockHal.get(), setAmplitude(Eq(0.1f)))
+ .Times(Exactly(1))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
EXPECT_CALL(*mMockHal.get(), setAmplitude(Eq(0.2f)))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), setAmplitude(Eq(0.5f)))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
ASSERT_TRUE(mWrapper->setAmplitude(0.1f).isOk());
@@ -241,12 +164,13 @@
TEST_F(VibratorHalWrapperAidlTest, TestSetExternalControl) {
{
InSequence seq;
- EXPECT_CALL(*mMockHal.get(), setExternalControl(Eq(true))).Times(Exactly(1));
+ EXPECT_CALL(*mMockHal.get(), setExternalControl(Eq(true)))
+ .Times(Exactly(1))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
EXPECT_CALL(*mMockHal.get(), setExternalControl(Eq(false)))
.Times(Exactly(2))
- .WillOnce(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
ASSERT_TRUE(mWrapper->setExternalControl(true).isOk());
@@ -259,15 +183,16 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(),
alwaysOnEnable(Eq(1), Eq(Effect::CLICK), Eq(EffectStrength::LIGHT)))
- .Times(Exactly(1));
+ .Times(Exactly(1))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
EXPECT_CALL(*mMockHal.get(),
alwaysOnEnable(Eq(2), Eq(Effect::TICK), Eq(EffectStrength::MEDIUM)))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(),
alwaysOnEnable(Eq(3), Eq(Effect::POP), Eq(EffectStrength::STRONG)))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
auto result = mWrapper->alwaysOnEnable(1, Effect::CLICK, EffectStrength::LIGHT);
@@ -281,14 +206,15 @@
TEST_F(VibratorHalWrapperAidlTest, TestAlwaysOnDisable) {
{
InSequence seq;
- EXPECT_CALL(*mMockHal.get(), alwaysOnDisable(Eq(1))).Times(Exactly(1));
+ EXPECT_CALL(*mMockHal.get(), alwaysOnDisable(Eq(1)))
+ .Times(Exactly(1))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
EXPECT_CALL(*mMockHal.get(), alwaysOnDisable(Eq(2)))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), alwaysOnDisable(Eq(3)))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
ASSERT_TRUE(mWrapper->alwaysOnDisable(1).isOk());
@@ -311,66 +237,70 @@
std::vector<float> amplitudes = {0.f, 1.f, 0.f};
std::vector<std::chrono::milliseconds> primitiveDurations;
- constexpr auto primitiveRange = enum_range<CompositePrimitive>();
+ constexpr auto primitiveRange = ndk::enum_range<CompositePrimitive>();
constexpr auto primitiveCount = std::distance(primitiveRange.begin(), primitiveRange.end());
primitiveDurations.resize(primitiveCount);
primitiveDurations[static_cast<size_t>(CompositePrimitive::CLICK)] = 10ms;
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getSupportedEffects(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(supportedEffects), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(supportedEffects), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getSupportedBraking(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(supportedBraking), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(supportedBraking), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getSupportedPrimitives(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(supportedPrimitives), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(
+ DoAll(SetArgPointee<0>(supportedPrimitives), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::CLICK), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(10), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(10), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getCompositionSizeMax(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(COMPOSITION_SIZE_MAX), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(COMPOSITION_SIZE_MAX),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getCompositionDelayMax(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(PRIMITIVE_DELAY_MAX), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(
+ DoAll(SetArgPointee<0>(PRIMITIVE_DELAY_MAX), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPwlePrimitiveDurationMax(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(PWLE_DURATION_MAX), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(PWLE_DURATION_MAX), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPwleCompositionSizeMax(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(PWLE_SIZE_MAX), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(PWLE_SIZE_MAX), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getFrequencyMinimum(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(F_MIN), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(F_MIN), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getResonantFrequency(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(F0), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(F0), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getFrequencyResolution(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(F_RESOLUTION), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(F_RESOLUTION), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getQFactor(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(Q_FACTOR), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(Q_FACTOR), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getBandwidthAmplitudeMap(_))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(amplitudes), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(amplitudes), Return(ndk::ScopedAStatus::ok())));
vibrator::Info failed = mWrapper->getInfo();
ASSERT_TRUE(failed.capabilities.isFailed());
@@ -417,46 +347,46 @@
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getSupportedEffects(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(supportedEffects), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(supportedEffects), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getQFactor(_))
.Times(Exactly(1))
- .WillRepeatedly(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), getSupportedPrimitives(_))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), getCompositionSizeMax(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(COMPOSITION_SIZE_MAX), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(COMPOSITION_SIZE_MAX),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getCompositionDelayMax(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(PRIMITIVE_DELAY_MAX), Return(Status())));
+ .WillOnce(
+ DoAll(SetArgPointee<0>(PRIMITIVE_DELAY_MAX), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPwlePrimitiveDurationMax(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(PWLE_DURATION_MAX), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(PWLE_DURATION_MAX), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPwleCompositionSizeMax(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(PWLE_SIZE_MAX), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(PWLE_SIZE_MAX), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getFrequencyMinimum(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(F_MIN), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(F_MIN), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getResonantFrequency(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(F0), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(F0), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getFrequencyResolution(_))
.Times(Exactly(1))
- .WillRepeatedly(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), getBandwidthAmplitudeMap(_))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), getSupportedBraking(_))
.Times(Exactly(1))
- .WillRepeatedly(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)));
std::vector<std::thread> threads;
for (int i = 0; i < 10; i++) {
@@ -487,18 +417,18 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(
- DoAll(SetArgPointee<0>(IVibrator::CAP_PERFORM_CALLBACK), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibrator::CAP_PERFORM_CALLBACK),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::CLICK), Eq(EffectStrength::LIGHT), _, _))
.Times(Exactly(1))
- .WillRepeatedly(
- DoAll(SetArgPointee<3>(1000), TriggerCallbackInArg2(), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<3>(1000), WithArg<2>(vibrator::TriggerCallback()),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::POP), Eq(EffectStrength::MEDIUM), _, _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::THUD), Eq(EffectStrength::STRONG), _, _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -525,21 +455,20 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(
- DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibrator::CAP_ON_CALLBACK),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::CLICK), Eq(EffectStrength::LIGHT), _, _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<3>(10), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<3>(10), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockScheduler.get(), schedule(_, Eq(10ms)))
.Times(Exactly(1))
- .WillRepeatedly(vibrator::TriggerSchedulerCallback());
+ .WillOnce(vibrator::TriggerSchedulerCallback());
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::POP), Eq(EffectStrength::MEDIUM), _, _))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), perform(Eq(Effect::THUD), Eq(EffectStrength::STRONG), _, _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -576,26 +505,28 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getSupportedPrimitives(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(supportedPrimitives), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(supportedPrimitives),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::CLICK), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(1), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(1), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::SPIN), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(2), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(2), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::THUD), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(3), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(3), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), compose(Eq(emptyEffects), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(TriggerCallbackInArg1(), Return(Status())));
+ .WillOnce(DoAll(WithArg<1>(vibrator::TriggerCallback()),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), compose(Eq(singleEffect), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)));
EXPECT_CALL(*mMockHal.get(), compose(Eq(multipleEffects), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -630,26 +561,32 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getSupportedPrimitives(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(supportedPrimitives), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(supportedPrimitives),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::SPIN), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(2), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(2), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::THUD), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)));
EXPECT_CALL(*mMockHal.get(), compose(Eq(multipleEffects), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(TriggerCallbackInArg1(), Return(Status())));
+ .WillOnce(DoAll(WithArg<1>(vibrator::TriggerCallback()),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::SPIN), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(2), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(2), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getPrimitiveDuration(Eq(CompositePrimitive::THUD), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(2), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(2), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), compose(Eq(multipleEffects), _))
.Times(Exactly(2))
- .WillRepeatedly(DoAll(TriggerCallbackInArg1(), Return(Status())));
+ // ndk::ScopedAStatus::ok() cannot be copy-constructed so can't use WillRepeatedly
+ .WillOnce(DoAll(WithArg<1>(vibrator::TriggerCallback()),
+ Return(ndk::ScopedAStatus::ok())))
+ .WillOnce(DoAll(WithArg<1>(vibrator::TriggerCallback()),
+ Return(ndk::ScopedAStatus::ok())));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -680,12 +617,12 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), composePwle(Eq(emptyPrimitives), _))
.Times(Exactly(1))
- .WillRepeatedly(Return(
- Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)));
EXPECT_CALL(*mMockHal.get(), composePwle(Eq(multiplePrimitives), _))
.Times(Exactly(2))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(TriggerCallbackInArg1(), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(WithArg<1>(vibrator::TriggerCallback()),
+ Return(ndk::ScopedAStatus::ok())));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
diff --git a/services/vibratorservice/test/VibratorHalWrapperHidlV1_0Test.cpp b/services/vibratorservice/test/VibratorHalWrapperHidlV1_0Test.cpp
index 0c27fc7..dd59093 100644
--- a/services/vibratorservice/test/VibratorHalWrapperHidlV1_0Test.cpp
+++ b/services/vibratorservice/test/VibratorHalWrapperHidlV1_0Test.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "VibratorHalWrapperHidlV1_0Test"
-#include <android/hardware/vibrator/IVibrator.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -27,17 +27,18 @@
#include <vibratorservice/VibratorCallbackScheduler.h>
#include <vibratorservice/VibratorHalWrapper.h>
+#include "test_mocks.h"
#include "test_utils.h"
namespace V1_0 = android::hardware::vibrator::V1_0;
-using android::hardware::vibrator::Braking;
-using android::hardware::vibrator::CompositeEffect;
-using android::hardware::vibrator::CompositePrimitive;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
-using android::hardware::vibrator::IVibrator;
-using android::hardware::vibrator::PrimitivePwle;
+using aidl::android::hardware::vibrator::Braking;
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::IVibrator;
+using aidl::android::hardware::vibrator::PrimitivePwle;
using namespace android;
using namespace std::chrono_literals;
diff --git a/services/vibratorservice/test/VibratorHalWrapperHidlV1_1Test.cpp b/services/vibratorservice/test/VibratorHalWrapperHidlV1_1Test.cpp
index d887efc..b0a6537 100644
--- a/services/vibratorservice/test/VibratorHalWrapperHidlV1_1Test.cpp
+++ b/services/vibratorservice/test/VibratorHalWrapperHidlV1_1Test.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "VibratorHalWrapperHidlV1_1Test"
-#include <android/hardware/vibrator/IVibrator.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -26,13 +26,14 @@
#include <vibratorservice/VibratorCallbackScheduler.h>
#include <vibratorservice/VibratorHalWrapper.h>
+#include "test_mocks.h"
#include "test_utils.h"
namespace V1_0 = android::hardware::vibrator::V1_0;
namespace V1_1 = android::hardware::vibrator::V1_1;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
using namespace android;
using namespace std::chrono_literals;
diff --git a/services/vibratorservice/test/VibratorHalWrapperHidlV1_2Test.cpp b/services/vibratorservice/test/VibratorHalWrapperHidlV1_2Test.cpp
index 26d9350..dfe3fa0 100644
--- a/services/vibratorservice/test/VibratorHalWrapperHidlV1_2Test.cpp
+++ b/services/vibratorservice/test/VibratorHalWrapperHidlV1_2Test.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "VibratorHalWrapperHidlV1_2Test"
-#include <android/hardware/vibrator/IVibrator.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -26,14 +26,15 @@
#include <vibratorservice/VibratorCallbackScheduler.h>
#include <vibratorservice/VibratorHalWrapper.h>
+#include "test_mocks.h"
#include "test_utils.h"
namespace V1_0 = android::hardware::vibrator::V1_0;
namespace V1_1 = android::hardware::vibrator::V1_1;
namespace V1_2 = android::hardware::vibrator::V1_2;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
using namespace android;
using namespace std::chrono_literals;
diff --git a/services/vibratorservice/test/VibratorHalWrapperHidlV1_3Test.cpp b/services/vibratorservice/test/VibratorHalWrapperHidlV1_3Test.cpp
index a6f1a74..8624332 100644
--- a/services/vibratorservice/test/VibratorHalWrapperHidlV1_3Test.cpp
+++ b/services/vibratorservice/test/VibratorHalWrapperHidlV1_3Test.cpp
@@ -16,7 +16,7 @@
#define LOG_TAG "VibratorHalWrapperHidlV1_3Test"
-#include <android/hardware/vibrator/IVibrator.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>
@@ -27,6 +27,7 @@
#include <vibratorservice/VibratorCallbackScheduler.h>
#include <vibratorservice/VibratorHalWrapper.h>
+#include "test_mocks.h"
#include "test_utils.h"
namespace V1_0 = android::hardware::vibrator::V1_0;
@@ -34,9 +35,9 @@
namespace V1_2 = android::hardware::vibrator::V1_2;
namespace V1_3 = android::hardware::vibrator::V1_3;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
-using android::hardware::vibrator::IVibrator;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::IVibrator;
using namespace android;
using namespace std::chrono_literals;
diff --git a/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp b/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp
index 11a8b66..c7214e0 100644
--- a/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp
+++ b/services/vibratorservice/test/VibratorManagerHalControllerTest.cpp
@@ -24,6 +24,7 @@
#include <vibratorservice/VibratorManagerHalController.h>
+#include "test_mocks.h"
#include "test_utils.h"
using android::vibrator::HalController;
@@ -35,6 +36,8 @@
static const std::vector<int32_t> VIBRATOR_IDS = {1, 2};
static constexpr int VIBRATOR_ID = 1;
+// -------------------------------------------------------------------------------------------------
+
class MockManagerHalWrapper : public vibrator::ManagerHalWrapper {
public:
MOCK_METHOD(void, tryReconnect, (), (override));
@@ -51,6 +54,8 @@
MOCK_METHOD(vibrator::HalResult<void>, cancelSynced, (), (override));
};
+// -------------------------------------------------------------------------------------------------
+
class VibratorManagerHalControllerTest : public Test {
public:
void SetUp() override {
@@ -106,6 +111,8 @@
}
};
+// -------------------------------------------------------------------------------------------------
+
TEST_F(VibratorManagerHalControllerTest, TestInit) {
mController->init();
ASSERT_EQ(1, mConnectCounter);
diff --git a/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp b/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp
index dffc281..764d9be 100644
--- a/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp
+++ b/services/vibratorservice/test/VibratorManagerHalWrapperAidlTest.cpp
@@ -23,84 +23,42 @@
#include <vibratorservice/VibratorManagerHalWrapper.h>
+#include "test_mocks.h"
#include "test_utils.h"
-using android::binder::Status;
-
-using android::hardware::vibrator::Braking;
-using android::hardware::vibrator::CompositeEffect;
-using android::hardware::vibrator::CompositePrimitive;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
-using android::hardware::vibrator::IVibrator;
-using android::hardware::vibrator::IVibratorCallback;
-using android::hardware::vibrator::IVibratorManager;
-using android::hardware::vibrator::PrimitivePwle;
+using aidl::android::hardware::vibrator::Braking;
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::IVibrator;
+using aidl::android::hardware::vibrator::IVibratorCallback;
+using aidl::android::hardware::vibrator::IVibratorManager;
+using aidl::android::hardware::vibrator::PrimitivePwle;
using namespace android;
using namespace testing;
static const auto OFF_FN = [](vibrator::HalWrapper* hal) { return hal->off(); };
-class MockBinder : public BBinder {
-public:
- MOCK_METHOD(status_t, linkToDeath,
- (const sp<DeathRecipient>& recipient, void* cookie, uint32_t flags), (override));
- MOCK_METHOD(status_t, unlinkToDeath,
- (const wp<DeathRecipient>& recipient, void* cookie, uint32_t flags,
- wp<DeathRecipient>* outRecipient),
- (override));
- MOCK_METHOD(status_t, pingBinder, (), (override));
-};
-
-class MockIVibrator : public IVibrator {
-public:
- MOCK_METHOD(Status, getCapabilities, (int32_t * ret), (override));
- MOCK_METHOD(Status, off, (), (override));
- MOCK_METHOD(Status, on, (int32_t timeout, const sp<IVibratorCallback>& cb), (override));
- MOCK_METHOD(Status, perform,
- (Effect e, EffectStrength s, const sp<IVibratorCallback>& cb, int32_t* ret),
- (override));
- MOCK_METHOD(Status, getSupportedEffects, (std::vector<Effect> * ret), (override));
- MOCK_METHOD(Status, setAmplitude, (float amplitude), (override));
- MOCK_METHOD(Status, setExternalControl, (bool enabled), (override));
- MOCK_METHOD(Status, getCompositionDelayMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getCompositionSizeMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getSupportedPrimitives, (std::vector<CompositePrimitive> * ret),
- (override));
- MOCK_METHOD(Status, getPrimitiveDuration, (CompositePrimitive p, int32_t* ret), (override));
- MOCK_METHOD(Status, compose,
- (const std::vector<CompositeEffect>& e, const sp<IVibratorCallback>& cb),
- (override));
- MOCK_METHOD(Status, composePwle,
- (const std::vector<PrimitivePwle>& e, const sp<IVibratorCallback>& cb), (override));
- MOCK_METHOD(Status, getSupportedAlwaysOnEffects, (std::vector<Effect> * ret), (override));
- MOCK_METHOD(Status, alwaysOnEnable, (int32_t id, Effect e, EffectStrength s), (override));
- MOCK_METHOD(Status, alwaysOnDisable, (int32_t id), (override));
- MOCK_METHOD(Status, getQFactor, (float * ret), (override));
- MOCK_METHOD(Status, getResonantFrequency, (float * ret), (override));
- MOCK_METHOD(Status, getFrequencyResolution, (float* ret), (override));
- MOCK_METHOD(Status, getFrequencyMinimum, (float* ret), (override));
- MOCK_METHOD(Status, getBandwidthAmplitudeMap, (std::vector<float> * ret), (override));
- MOCK_METHOD(Status, getPwlePrimitiveDurationMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getPwleCompositionSizeMax, (int32_t * ret), (override));
- MOCK_METHOD(Status, getSupportedBraking, (std::vector<Braking> * ret), (override));
- MOCK_METHOD(int32_t, getInterfaceVersion, (), (override));
- MOCK_METHOD(std::string, getInterfaceHash, (), (override));
- MOCK_METHOD(IBinder*, onAsBinder, (), (override));
-};
+// -------------------------------------------------------------------------------------------------
class MockIVibratorManager : public IVibratorManager {
public:
- MOCK_METHOD(Status, getCapabilities, (int32_t * ret), (override));
- MOCK_METHOD(Status, getVibratorIds, (std::vector<int32_t> * ret), (override));
- MOCK_METHOD(Status, getVibrator, (int32_t id, sp<IVibrator>* ret), (override));
- MOCK_METHOD(Status, prepareSynced, (const std::vector<int32_t>& ids), (override));
- MOCK_METHOD(Status, triggerSynced, (const sp<IVibratorCallback>& cb), (override));
- MOCK_METHOD(Status, cancelSynced, (), (override));
- MOCK_METHOD(int32_t, getInterfaceVersion, (), (override));
- MOCK_METHOD(std::string, getInterfaceHash, (), (override));
- MOCK_METHOD(IBinder*, onAsBinder, (), (override));
+ MockIVibratorManager() = default;
+
+ MOCK_METHOD(ndk::ScopedAStatus, getCapabilities, (int32_t * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getVibratorIds, (std::vector<int32_t> * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getVibrator, (int32_t id, std::shared_ptr<IVibrator>* ret),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, prepareSynced, (const std::vector<int32_t>& ids), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, triggerSynced, (const std::shared_ptr<IVibratorCallback>& cb),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, cancelSynced, (), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getInterfaceVersion, (int32_t*), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getInterfaceHash, (std::string*), (override));
+ MOCK_METHOD(ndk::SpAIBinder, asBinder, (), (override));
+ MOCK_METHOD(bool, isRemote, (), (override));
};
// -------------------------------------------------------------------------------------------------
@@ -108,9 +66,8 @@
class VibratorManagerHalWrapperAidlTest : public Test {
public:
void SetUp() override {
- mMockBinder = new StrictMock<MockBinder>();
- mMockVibrator = new StrictMock<MockIVibrator>();
- mMockHal = new StrictMock<MockIVibratorManager>();
+ mMockVibrator = ndk::SharedRefBase::make<StrictMock<vibrator::MockIVibrator>>();
+ mMockHal = ndk::SharedRefBase::make<StrictMock<MockIVibratorManager>>();
mMockScheduler = std::make_shared<StrictMock<vibrator::MockCallbackScheduler>>();
mWrapper = std::make_unique<vibrator::AidlManagerHalWrapper>(mMockScheduler, mMockHal);
ASSERT_NE(mWrapper, nullptr);
@@ -119,9 +76,8 @@
protected:
std::shared_ptr<StrictMock<vibrator::MockCallbackScheduler>> mMockScheduler = nullptr;
std::unique_ptr<vibrator::ManagerHalWrapper> mWrapper = nullptr;
- sp<StrictMock<MockIVibratorManager>> mMockHal = nullptr;
- sp<StrictMock<MockIVibrator>> mMockVibrator = nullptr;
- sp<StrictMock<MockBinder>> mMockBinder = nullptr;
+ std::shared_ptr<StrictMock<MockIVibratorManager>> mMockHal = nullptr;
+ std::shared_ptr<StrictMock<vibrator::MockIVibrator>> mMockVibrator = nullptr;
};
// -------------------------------------------------------------------------------------------------
@@ -129,32 +85,13 @@
static const std::vector<int32_t> kVibratorIds = {1, 2};
static constexpr int kVibratorId = 1;
-ACTION(TriggerCallback) {
- if (arg0 != nullptr) {
- arg0->onComplete();
- }
-}
-
-TEST_F(VibratorManagerHalWrapperAidlTest, TestPing) {
- EXPECT_CALL(*mMockHal.get(), onAsBinder())
- .Times(Exactly(2))
- .WillRepeatedly(Return(mMockBinder.get()));
- EXPECT_CALL(*mMockBinder.get(), pingBinder())
- .Times(Exactly(2))
- .WillOnce(Return(android::OK))
- .WillRepeatedly(Return(android::DEAD_OBJECT));
-
- ASSERT_TRUE(mWrapper->ping().isOk());
- ASSERT_TRUE(mWrapper->ping().isFailed());
-}
-
TEST_F(VibratorManagerHalWrapperAidlTest, TestGetCapabilitiesDoesNotCacheFailedResult) {
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(3))
- .WillOnce(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(IVibratorManager::CAP_SYNC), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(IVibratorManager::CAP_SYNC),
+ Return(ndk::ScopedAStatus::ok())));
ASSERT_TRUE(mWrapper->getCapabilities().isUnsupported());
ASSERT_TRUE(mWrapper->getCapabilities().isFailed());
@@ -167,7 +104,8 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestGetCapabilitiesCachesResult) {
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(IVibratorManager::CAP_SYNC), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibratorManager::CAP_SYNC),
+ Return(ndk::ScopedAStatus::ok())));
std::vector<std::thread> threads;
for (int i = 0; i < 10; i++) {
@@ -187,10 +125,9 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestGetVibratorIdsDoesNotCacheFailedResult) {
EXPECT_CALL(*mMockHal.get(), getVibratorIds(_))
.Times(Exactly(3))
- .WillOnce(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(SetArgPointee<0>(kVibratorIds), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(SetArgPointee<0>(kVibratorIds), Return(ndk::ScopedAStatus::ok())));
ASSERT_TRUE(mWrapper->getVibratorIds().isUnsupported());
ASSERT_TRUE(mWrapper->getVibratorIds().isFailed());
@@ -203,7 +140,7 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestGetVibratorIdsCachesResult) {
EXPECT_CALL(*mMockHal.get(), getVibratorIds(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(kVibratorIds), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(kVibratorIds), Return(ndk::ScopedAStatus::ok())));
std::vector<std::thread> threads;
for (int i = 0; i < 10; i++) {
@@ -225,11 +162,11 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getVibratorIds(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(kVibratorIds), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(kVibratorIds), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getVibrator(Eq(kVibratorId), _))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<1>(mMockVibrator), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<1>(mMockVibrator), Return(ndk::ScopedAStatus::ok())));
}
auto result = mWrapper->getVibrator(kVibratorId);
@@ -241,7 +178,7 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestGetVibratorWithInvalidIdFails) {
EXPECT_CALL(*mMockHal.get(), getVibratorIds(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(kVibratorIds), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(kVibratorIds), Return(ndk::ScopedAStatus::ok())));
ASSERT_TRUE(mWrapper->getVibrator(0).isFailed());
}
@@ -249,20 +186,21 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestGetVibratorRecoversVibratorPointer) {
EXPECT_CALL(*mMockHal.get(), getVibratorIds(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(kVibratorIds), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(kVibratorIds), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getVibrator(Eq(kVibratorId), _))
.Times(Exactly(3))
.WillOnce(DoAll(SetArgPointee<1>(nullptr),
- Return(Status::fromExceptionCode(
- Status::Exception::EX_TRANSACTION_FAILED))))
- .WillRepeatedly(DoAll(SetArgPointee<1>(mMockVibrator), Return(Status())));
+ Return(ndk::ScopedAStatus::fromExceptionCode(EX_TRANSACTION_FAILED))))
+ // ndk::ScopedAStatus::ok() cannot be copy-constructed so can't use WillRepeatedly
+ .WillOnce(DoAll(SetArgPointee<1>(mMockVibrator), Return(ndk::ScopedAStatus::ok())))
+ .WillOnce(DoAll(SetArgPointee<1>(mMockVibrator), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockVibrator.get(), off())
.Times(Exactly(3))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_TRANSACTION_FAILED)))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_TRANSACTION_FAILED)))
- .WillRepeatedly(Return(Status()));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_TRANSACTION_FAILED)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_TRANSACTION_FAILED)))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
// Get vibrator controller is successful even if first getVibrator.
auto result = mWrapper->getVibrator(kVibratorId);
@@ -281,18 +219,19 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestPrepareSynced) {
EXPECT_CALL(*mMockHal.get(), getVibratorIds(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(kVibratorIds), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(kVibratorIds), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getVibrator(_, _))
.Times(Exactly(2))
- .WillRepeatedly(DoAll(SetArgPointee<1>(mMockVibrator), Return(Status())));
+ // ndk::ScopedAStatus::ok() cannot be copy-constructed so can't use WillRepeatedly
+ .WillOnce(DoAll(SetArgPointee<1>(mMockVibrator), Return(ndk::ScopedAStatus::ok())))
+ .WillOnce(DoAll(SetArgPointee<1>(mMockVibrator), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), prepareSynced(Eq(kVibratorIds)))
.Times(Exactly(3))
- .WillOnce(
- Return(Status::fromExceptionCode(Status::Exception::EX_UNSUPPORTED_OPERATION)))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(Return(Status()));
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_UNSUPPORTED_OPERATION)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
ASSERT_TRUE(mWrapper->getVibratorIds().isOk());
ASSERT_TRUE(mWrapper->prepareSynced(kVibratorIds).isUnsupported());
@@ -305,13 +244,13 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(IVibratorManager::CAP_TRIGGER_CALLBACK),
- Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibratorManager::CAP_TRIGGER_CALLBACK),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), triggerSynced(_))
.Times(Exactly(3))
- .WillOnce(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(DoAll(TriggerCallback(), Return(Status())));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(DoAll(vibrator::TriggerCallback(), Return(ndk::ScopedAStatus::ok())));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -328,11 +267,11 @@
InSequence seq;
EXPECT_CALL(*mMockHal.get(), getCapabilities(_))
.Times(Exactly(1))
- .WillRepeatedly(
- DoAll(SetArgPointee<0>(IVibratorManager::CAP_SYNC), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(IVibratorManager::CAP_SYNC),
+ Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), triggerSynced(Eq(nullptr)))
.Times(Exactly(1))
- .WillRepeatedly(Return(Status()));
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
}
std::unique_ptr<int32_t> callbackCounter = std::make_unique<int32_t>();
@@ -345,9 +284,9 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestCancelSynced) {
EXPECT_CALL(*mMockHal.get(), cancelSynced())
.Times(Exactly(3))
- .WillOnce(Return(Status::fromStatusT(UNKNOWN_TRANSACTION)))
- .WillOnce(Return(Status::fromExceptionCode(Status::Exception::EX_SECURITY)))
- .WillRepeatedly(Return(Status()));
+ .WillOnce(Return(ndk::ScopedAStatus::fromStatus(STATUS_UNKNOWN_TRANSACTION)))
+ .WillOnce(Return(ndk::ScopedAStatus::fromExceptionCode(EX_SECURITY)))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
ASSERT_TRUE(mWrapper->cancelSynced().isUnsupported());
ASSERT_TRUE(mWrapper->cancelSynced().isFailed());
@@ -357,13 +296,17 @@
TEST_F(VibratorManagerHalWrapperAidlTest, TestCancelSyncedReloadsAllControllers) {
EXPECT_CALL(*mMockHal.get(), getVibratorIds(_))
.Times(Exactly(1))
- .WillRepeatedly(DoAll(SetArgPointee<0>(kVibratorIds), Return(Status())));
+ .WillOnce(DoAll(SetArgPointee<0>(kVibratorIds), Return(ndk::ScopedAStatus::ok())));
EXPECT_CALL(*mMockHal.get(), getVibrator(_, _))
.Times(Exactly(2))
- .WillRepeatedly(DoAll(SetArgPointee<1>(mMockVibrator), Return(Status())));
+ // ndk::ScopedAStatus::ok() cannot be copy-constructed so can't use WillRepeatedly
+ .WillOnce(DoAll(SetArgPointee<1>(mMockVibrator), Return(ndk::ScopedAStatus::ok())))
+ .WillOnce(DoAll(SetArgPointee<1>(mMockVibrator), Return(ndk::ScopedAStatus::ok())));
- EXPECT_CALL(*mMockHal.get(), cancelSynced()).Times(Exactly(1)).WillRepeatedly(Return(Status()));
+ EXPECT_CALL(*mMockHal.get(), cancelSynced())
+ .Times(Exactly(1))
+ .WillOnce(Return(ndk::ScopedAStatus::ok()));
ASSERT_TRUE(mWrapper->getVibratorIds().isOk());
ASSERT_TRUE(mWrapper->cancelSynced().isOk());
diff --git a/services/vibratorservice/test/VibratorManagerHalWrapperLegacyTest.cpp b/services/vibratorservice/test/VibratorManagerHalWrapperLegacyTest.cpp
index 0850ef3..7877236 100644
--- a/services/vibratorservice/test/VibratorManagerHalWrapperLegacyTest.cpp
+++ b/services/vibratorservice/test/VibratorManagerHalWrapperLegacyTest.cpp
@@ -23,10 +23,12 @@
#include <vibratorservice/VibratorManagerHalWrapper.h>
-using android::hardware::vibrator::CompositeEffect;
-using android::hardware::vibrator::CompositePrimitive;
-using android::hardware::vibrator::Effect;
-using android::hardware::vibrator::EffectStrength;
+#include "test_mocks.h"
+
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
using std::chrono::milliseconds;
@@ -35,27 +37,16 @@
// -------------------------------------------------------------------------------------------------
-class MockHalController : public vibrator::HalController {
-public:
- MockHalController() = default;
- virtual ~MockHalController() = default;
-
- MOCK_METHOD(bool, init, (), (override));
- MOCK_METHOD(void, tryReconnect, (), (override));
-};
-
-// -------------------------------------------------------------------------------------------------
-
class VibratorManagerHalWrapperLegacyTest : public Test {
public:
void SetUp() override {
- mMockController = std::make_shared<StrictMock<MockHalController>>();
+ mMockController = std::make_shared<StrictMock<vibrator::MockHalController>>();
mWrapper = std::make_unique<vibrator::LegacyManagerHalWrapper>(mMockController);
ASSERT_NE(mWrapper, nullptr);
}
protected:
- std::shared_ptr<StrictMock<MockHalController>> mMockController = nullptr;
+ std::shared_ptr<StrictMock<vibrator::MockHalController>> mMockController = nullptr;
std::unique_ptr<vibrator::ManagerHalWrapper> mWrapper = nullptr;
};
diff --git a/services/vibratorservice/test/test_mocks.h b/services/vibratorservice/test/test_mocks.h
new file mode 100644
index 0000000..7882186
--- /dev/null
+++ b/services/vibratorservice/test/test_mocks.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2024 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.
+ */
+
+#ifndef VIBRATORSERVICE_UNITTEST_MOCKS_H_
+#define VIBRATORSERVICE_UNITTEST_MOCKS_H_
+
+#include <gmock/gmock.h>
+
+#include <aidl/android/hardware/vibrator/IVibrator.h>
+
+#include <vibratorservice/VibratorCallbackScheduler.h>
+#include <vibratorservice/VibratorHalController.h>
+#include <vibratorservice/VibratorHalWrapper.h>
+
+namespace android {
+
+namespace vibrator {
+
+using std::chrono::milliseconds;
+
+using namespace testing;
+
+using aidl::android::hardware::vibrator::Braking;
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::Effect;
+using aidl::android::hardware::vibrator::EffectStrength;
+using aidl::android::hardware::vibrator::IVibrator;
+using aidl::android::hardware::vibrator::IVibratorCallback;
+using aidl::android::hardware::vibrator::PrimitivePwle;
+
+// -------------------------------------------------------------------------------------------------
+
+class MockIVibrator : public IVibrator {
+public:
+ MockIVibrator() = default;
+
+ MOCK_METHOD(ndk::ScopedAStatus, getCapabilities, (int32_t * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, off, (), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, on,
+ (int32_t timeout, const std::shared_ptr<IVibratorCallback>& cb), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, perform,
+ (Effect e, EffectStrength s, const std::shared_ptr<IVibratorCallback>& cb,
+ int32_t* ret),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getSupportedEffects, (std::vector<Effect> * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, setAmplitude, (float amplitude), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, setExternalControl, (bool enabled), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getCompositionDelayMax, (int32_t * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getCompositionSizeMax, (int32_t * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getSupportedPrimitives, (std::vector<CompositePrimitive> * ret),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getPrimitiveDuration, (CompositePrimitive p, int32_t* ret),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, compose,
+ (const std::vector<CompositeEffect>& e,
+ const std::shared_ptr<IVibratorCallback>& cb),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, composePwle,
+ (const std::vector<PrimitivePwle>& e, const std::shared_ptr<IVibratorCallback>& cb),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getSupportedAlwaysOnEffects, (std::vector<Effect> * ret),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, alwaysOnEnable, (int32_t id, Effect e, EffectStrength s),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, alwaysOnDisable, (int32_t id), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getQFactor, (float* ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getResonantFrequency, (float* ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getFrequencyResolution, (float* ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getFrequencyMinimum, (float* ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getBandwidthAmplitudeMap, (std::vector<float> * ret),
+ (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getPwlePrimitiveDurationMax, (int32_t * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getPwleCompositionSizeMax, (int32_t * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getSupportedBraking, (std::vector<Braking> * ret), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getInterfaceVersion, (int32_t*), (override));
+ MOCK_METHOD(ndk::ScopedAStatus, getInterfaceHash, (std::string*), (override));
+ MOCK_METHOD(ndk::SpAIBinder, asBinder, (), (override));
+ MOCK_METHOD(bool, isRemote, (), (override));
+};
+
+// gmock requirement to provide a WithArg<0>(TriggerCallback()) matcher
+typedef void TriggerCallbackFunction(const std::shared_ptr<IVibratorCallback>&);
+
+class TriggerCallbackAction : public ActionInterface<TriggerCallbackFunction> {
+public:
+ explicit TriggerCallbackAction() {}
+
+ virtual Result Perform(const ArgumentTuple& args) {
+ const std::shared_ptr<IVibratorCallback>& callback = get<0>(args);
+ if (callback) {
+ callback->onComplete();
+ }
+ }
+};
+
+inline Action<TriggerCallbackFunction> TriggerCallback() {
+ return MakeAction(new TriggerCallbackAction());
+}
+
+// -------------------------------------------------------------------------------------------------
+
+class MockCallbackScheduler : public CallbackScheduler {
+public:
+ MOCK_METHOD(void, schedule, (std::function<void()> callback, std::chrono::milliseconds delay),
+ (override));
+};
+
+ACTION(TriggerSchedulerCallback) {
+ arg0();
+}
+
+// -------------------------------------------------------------------------------------------------
+
+class MockHalWrapper : public HalWrapper {
+public:
+ MockHalWrapper(std::shared_ptr<CallbackScheduler> scheduler) : HalWrapper(scheduler) {}
+ virtual ~MockHalWrapper() = default;
+
+ MOCK_METHOD(vibrator::HalResult<void>, ping, (), (override));
+ MOCK_METHOD(void, tryReconnect, (), (override));
+ MOCK_METHOD(vibrator::HalResult<void>, on,
+ (milliseconds timeout, const std::function<void()>& completionCallback),
+ (override));
+ MOCK_METHOD(vibrator::HalResult<void>, off, (), (override));
+ MOCK_METHOD(vibrator::HalResult<void>, setAmplitude, (float amplitude), (override));
+ MOCK_METHOD(vibrator::HalResult<void>, setExternalControl, (bool enabled), (override));
+ MOCK_METHOD(vibrator::HalResult<void>, alwaysOnEnable,
+ (int32_t id, Effect effect, EffectStrength strength), (override));
+ MOCK_METHOD(vibrator::HalResult<void>, alwaysOnDisable, (int32_t id), (override));
+ MOCK_METHOD(vibrator::HalResult<milliseconds>, performEffect,
+ (Effect effect, EffectStrength strength,
+ const std::function<void()>& completionCallback),
+ (override));
+ MOCK_METHOD(vibrator::HalResult<vibrator::Capabilities>, getCapabilitiesInternal, (),
+ (override));
+
+ CallbackScheduler* getCallbackScheduler() { return mCallbackScheduler.get(); }
+};
+
+class MockHalController : public vibrator::HalController {
+public:
+ MockHalController() = default;
+ virtual ~MockHalController() = default;
+
+ MOCK_METHOD(bool, init, (), (override));
+ MOCK_METHOD(void, tryReconnect, (), (override));
+};
+
+// -------------------------------------------------------------------------------------------------
+
+} // namespace vibrator
+
+} // namespace android
+
+#endif // VIBRATORSERVICE_UNITTEST_MOCKS_H_
diff --git a/services/vibratorservice/test/test_utils.h b/services/vibratorservice/test/test_utils.h
index 715c221..e99965c 100644
--- a/services/vibratorservice/test/test_utils.h
+++ b/services/vibratorservice/test/test_utils.h
@@ -17,7 +17,7 @@
#ifndef VIBRATORSERVICE_UNITTEST_UTIL_H_
#define VIBRATORSERVICE_UNITTEST_UTIL_H_
-#include <android/hardware/vibrator/IVibrator.h>
+#include <aidl/android/hardware/vibrator/IVibrator.h>
#include <vibratorservice/VibratorHalWrapper.h>
@@ -25,24 +25,12 @@
namespace vibrator {
-using ::android::hardware::vibrator::ActivePwle;
-using ::android::hardware::vibrator::Braking;
-using ::android::hardware::vibrator::BrakingPwle;
-using ::android::hardware::vibrator::CompositeEffect;
-using ::android::hardware::vibrator::CompositePrimitive;
-using ::android::hardware::vibrator::PrimitivePwle;
-
-// -------------------------------------------------------------------------------------------------
-
-class MockCallbackScheduler : public vibrator::CallbackScheduler {
-public:
- MOCK_METHOD(void, schedule, (std::function<void()> callback, std::chrono::milliseconds delay),
- (override));
-};
-
-ACTION(TriggerSchedulerCallback) {
- arg0();
-}
+using aidl::android::hardware::vibrator::ActivePwle;
+using aidl::android::hardware::vibrator::Braking;
+using aidl::android::hardware::vibrator::BrakingPwle;
+using aidl::android::hardware::vibrator::CompositeEffect;
+using aidl::android::hardware::vibrator::CompositePrimitive;
+using aidl::android::hardware::vibrator::PrimitivePwle;
// -------------------------------------------------------------------------------------------------