Skip to content

Commit cedbda8

Browse files
laissandradeAndroid (Google) Code Review
authored andcommitted
Merge "Removing Vibrator HIDL HAL support from frameworks" into main
2 parents 872d84e + 2531e51 commit cedbda8

12 files changed

Lines changed: 38 additions & 1590 deletions

services/vibratorservice/Android.bp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,14 +42,9 @@ cc_library_shared {
4242

4343
shared_libs: [
4444
"libbinder_ndk",
45-
"libhidlbase",
4645
"liblog",
4746
"libutils",
4847
"android.hardware.vibrator-V3-ndk",
49-
"android.hardware.vibrator@1.0",
50-
"android.hardware.vibrator@1.1",
51-
"android.hardware.vibrator@1.2",
52-
"android.hardware.vibrator@1.3",
5348
],
5449

5550
cflags: [

services/vibratorservice/VibratorHalController.cpp

Lines changed: 6 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
#include <aidl/android/hardware/vibrator/IVibrator.h>
2020
#include <android/binder_manager.h>
21-
#include <android/hardware/vibrator/1.3/IVibrator.h>
22-
#include <hardware/vibrator.h>
2321

2422
#include <utils/Log.h>
2523

@@ -31,15 +29,10 @@ using aidl::android::hardware::vibrator::CompositeEffect;
3129
using aidl::android::hardware::vibrator::CompositePrimitive;
3230
using aidl::android::hardware::vibrator::Effect;
3331
using aidl::android::hardware::vibrator::EffectStrength;
32+
using aidl::android::hardware::vibrator::IVibrator;
3433

3534
using std::chrono::milliseconds;
3635

37-
namespace V1_0 = android::hardware::vibrator::V1_0;
38-
namespace V1_1 = android::hardware::vibrator::V1_1;
39-
namespace V1_2 = android::hardware::vibrator::V1_2;
40-
namespace V1_3 = android::hardware::vibrator::V1_3;
41-
namespace Aidl = aidl::android::hardware::vibrator;
42-
4336
namespace android {
4437

4538
namespace vibrator {
@@ -53,40 +46,19 @@ std::shared_ptr<HalWrapper> connectHal(std::shared_ptr<CallbackScheduler> schedu
5346
return nullptr;
5447
}
5548

56-
auto serviceName = std::string(Aidl::IVibrator::descriptor) + "/default";
49+
auto serviceName = std::string(IVibrator::descriptor) + "/default";
5750
if (AServiceManager_isDeclared(serviceName.c_str())) {
58-
std::shared_ptr<Aidl::IVibrator> hal = Aidl::IVibrator::fromBinder(
51+
std::shared_ptr<IVibrator> hal = IVibrator::fromBinder(
5952
ndk::SpAIBinder(AServiceManager_waitForService(serviceName.c_str())));
6053
if (hal) {
6154
ALOGV("Successfully connected to Vibrator HAL AIDL service.");
6255
return std::make_shared<AidlHalWrapper>(std::move(scheduler), std::move(hal));
6356
}
6457
}
6558

66-
sp<V1_0::IVibrator> halV1_0 = V1_0::IVibrator::getService();
67-
if (halV1_0 == nullptr) {
68-
ALOGV("Vibrator HAL service not available.");
69-
gHalExists = false;
70-
return nullptr;
71-
}
72-
73-
sp<V1_3::IVibrator> halV1_3 = V1_3::IVibrator::castFrom(halV1_0);
74-
if (halV1_3) {
75-
ALOGV("Successfully connected to Vibrator HAL v1.3 service.");
76-
return std::make_shared<HidlHalWrapperV1_3>(std::move(scheduler), halV1_3);
77-
}
78-
sp<V1_2::IVibrator> halV1_2 = V1_2::IVibrator::castFrom(halV1_0);
79-
if (halV1_2) {
80-
ALOGV("Successfully connected to Vibrator HAL v1.2 service.");
81-
return std::make_shared<HidlHalWrapperV1_2>(std::move(scheduler), halV1_2);
82-
}
83-
sp<V1_1::IVibrator> halV1_1 = V1_1::IVibrator::castFrom(halV1_0);
84-
if (halV1_1) {
85-
ALOGV("Successfully connected to Vibrator HAL v1.1 service.");
86-
return std::make_shared<HidlHalWrapperV1_1>(std::move(scheduler), halV1_1);
87-
}
88-
ALOGV("Successfully connected to Vibrator HAL v1.0 service.");
89-
return std::make_shared<HidlHalWrapperV1_0>(std::move(scheduler), halV1_0);
59+
ALOGV("Vibrator HAL service not available.");
60+
gHalExists = false;
61+
return nullptr;
9062
}
9163

9264
// -------------------------------------------------------------------------------------------------

services/vibratorservice/VibratorHalWrapper.cpp

Lines changed: 3 additions & 224 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#define LOG_TAG "VibratorHalWrapper"
1818

1919
#include <aidl/android/hardware/vibrator/IVibrator.h>
20-
#include <android/hardware/vibrator/1.3/IVibrator.h>
2120
#include <hardware/vibrator.h>
2221
#include <cmath>
2322

@@ -33,32 +32,18 @@ using aidl::android::hardware::vibrator::CompositePwleV2;
3332
using aidl::android::hardware::vibrator::Effect;
3433
using aidl::android::hardware::vibrator::EffectStrength;
3534
using aidl::android::hardware::vibrator::FrequencyAccelerationMapEntry;
35+
using aidl::android::hardware::vibrator::IVibrator;
3636
using aidl::android::hardware::vibrator::PrimitivePwle;
3737
using aidl::android::hardware::vibrator::VendorEffect;
3838

3939
using std::chrono::milliseconds;
4040

41-
namespace V1_0 = android::hardware::vibrator::V1_0;
42-
namespace V1_1 = android::hardware::vibrator::V1_1;
43-
namespace V1_2 = android::hardware::vibrator::V1_2;
44-
namespace V1_3 = android::hardware::vibrator::V1_3;
45-
namespace Aidl = aidl::android::hardware::vibrator;
46-
4741
namespace android {
4842

4943
namespace vibrator {
5044

5145
// -------------------------------------------------------------------------------------------------
5246

53-
template <class T>
54-
bool isStaticCastValid(Effect effect) {
55-
T castEffect = static_cast<T>(effect);
56-
auto iter = hardware::hidl_enum_range<T>();
57-
return castEffect >= *iter.begin() && castEffect <= *std::prev(iter.end());
58-
}
59-
60-
// -------------------------------------------------------------------------------------------------
61-
6247
Info HalWrapper::getInfo() {
6348
getCapabilities();
6449
getPrimitiveDurations();
@@ -261,7 +246,7 @@ void AidlHalWrapper::tryReconnect() {
261246
if (!result.isOk()) {
262247
return;
263248
}
264-
std::shared_ptr<Aidl::IVibrator> newHandle = result.value();
249+
std::shared_ptr<IVibrator> newHandle = result.value();
265250
if (newHandle) {
266251
std::lock_guard<std::mutex> lock(mHandleMutex);
267252
mHandle = std::move(newHandle);
@@ -514,219 +499,13 @@ AidlHalWrapper::getFrequencyToOutputAccelerationMapInternal() {
514499
frequencyToOutputAccelerationMap);
515500
}
516501

517-
std::shared_ptr<Aidl::IVibrator> AidlHalWrapper::getHal() {
518-
std::lock_guard<std::mutex> lock(mHandleMutex);
519-
return mHandle;
520-
}
521-
522-
// -------------------------------------------------------------------------------------------------
523-
524-
template <typename I>
525-
HalResult<void> HidlHalWrapper<I>::ping() {
526-
return HalResultFactory::fromReturn(getHal()->ping());
527-
}
528-
529-
template <typename I>
530-
void HidlHalWrapper<I>::tryReconnect() {
531-
sp<I> newHandle = I::tryGetService();
532-
if (newHandle) {
533-
std::lock_guard<std::mutex> lock(mHandleMutex);
534-
mHandle = std::move(newHandle);
535-
}
536-
}
537-
538-
template <typename I>
539-
HalResult<void> HidlHalWrapper<I>::on(milliseconds timeout,
540-
const std::function<void()>& completionCallback) {
541-
auto status = getHal()->on(timeout.count());
542-
auto ret = HalResultFactory::fromStatus(status.withDefault(V1_0::Status::UNKNOWN_ERROR));
543-
if (ret.isOk()) {
544-
mCallbackScheduler->schedule(completionCallback, timeout);
545-
}
546-
return ret;
547-
}
548-
549-
template <typename I>
550-
HalResult<void> HidlHalWrapper<I>::off() {
551-
auto status = getHal()->off();
552-
return HalResultFactory::fromStatus(status.withDefault(V1_0::Status::UNKNOWN_ERROR));
553-
}
554-
555-
template <typename I>
556-
HalResult<void> HidlHalWrapper<I>::setAmplitude(float amplitude) {
557-
uint8_t amp = static_cast<uint8_t>(amplitude * std::numeric_limits<uint8_t>::max());
558-
auto status = getHal()->setAmplitude(amp);
559-
return HalResultFactory::fromStatus(status.withDefault(V1_0::Status::UNKNOWN_ERROR));
560-
}
561-
562-
template <typename I>
563-
HalResult<void> HidlHalWrapper<I>::setExternalControl(bool) {
564-
ALOGV("Skipped setExternalControl because Vibrator HAL does not support it");
565-
return HalResult<void>::unsupported();
566-
}
567-
568-
template <typename I>
569-
HalResult<void> HidlHalWrapper<I>::alwaysOnEnable(int32_t, Effect, EffectStrength) {
570-
ALOGV("Skipped alwaysOnEnable because Vibrator HAL AIDL is not available");
571-
return HalResult<void>::unsupported();
572-
}
573-
574-
template <typename I>
575-
HalResult<void> HidlHalWrapper<I>::alwaysOnDisable(int32_t) {
576-
ALOGV("Skipped alwaysOnDisable because Vibrator HAL AIDL is not available");
577-
return HalResult<void>::unsupported();
578-
}
579-
580-
template <typename I>
581-
HalResult<Capabilities> HidlHalWrapper<I>::getCapabilitiesInternal() {
582-
hardware::Return<bool> result = getHal()->supportsAmplitudeControl();
583-
Capabilities capabilities =
584-
result.withDefault(false) ? Capabilities::AMPLITUDE_CONTROL : Capabilities::NONE;
585-
return HalResultFactory::fromReturn<Capabilities>(std::move(result), capabilities);
586-
}
587-
588-
template <typename I>
589-
template <typename T>
590-
HalResult<milliseconds> HidlHalWrapper<I>::performInternal(
591-
perform_fn<T> performFn, sp<I> handle, T effect, EffectStrength strength,
592-
const std::function<void()>& completionCallback) {
593-
V1_0::Status status;
594-
int32_t lengthMs;
595-
auto effectCallback = [&status, &lengthMs](V1_0::Status retStatus, uint32_t retLengthMs) {
596-
status = retStatus;
597-
lengthMs = retLengthMs;
598-
};
599-
600-
V1_0::EffectStrength effectStrength = static_cast<V1_0::EffectStrength>(strength);
601-
auto result = std::invoke(performFn, handle, effect, effectStrength, effectCallback);
602-
milliseconds length = milliseconds(lengthMs);
603-
604-
auto ret = HalResultFactory::fromReturn<milliseconds>(std::move(result), status, length);
605-
if (ret.isOk()) {
606-
mCallbackScheduler->schedule(completionCallback, length);
607-
}
608-
609-
return ret;
610-
}
611-
612-
template <typename I>
613-
sp<I> HidlHalWrapper<I>::getHal() {
502+
std::shared_ptr<IVibrator> AidlHalWrapper::getHal() {
614503
std::lock_guard<std::mutex> lock(mHandleMutex);
615504
return mHandle;
616505
}
617506

618507
// -------------------------------------------------------------------------------------------------
619508

620-
HalResult<milliseconds> HidlHalWrapperV1_0::performEffect(
621-
Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) {
622-
if (isStaticCastValid<V1_0::Effect>(effect)) {
623-
return performInternal(&V1_0::IVibrator::perform, getHal(),
624-
static_cast<V1_0::Effect>(effect), strength, completionCallback);
625-
}
626-
627-
ALOGV("Skipped performEffect because Vibrator HAL does not support effect %s",
628-
Aidl::toString(effect).c_str());
629-
return HalResult<milliseconds>::unsupported();
630-
}
631-
632-
// -------------------------------------------------------------------------------------------------
633-
634-
HalResult<milliseconds> HidlHalWrapperV1_1::performEffect(
635-
Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) {
636-
if (isStaticCastValid<V1_0::Effect>(effect)) {
637-
return performInternal(&V1_1::IVibrator::perform, getHal(),
638-
static_cast<V1_0::Effect>(effect), strength, completionCallback);
639-
}
640-
if (isStaticCastValid<V1_1::Effect_1_1>(effect)) {
641-
return performInternal(&V1_1::IVibrator::perform_1_1, getHal(),
642-
static_cast<V1_1::Effect_1_1>(effect), strength, completionCallback);
643-
}
644-
645-
ALOGV("Skipped performEffect because Vibrator HAL does not support effect %s",
646-
Aidl::toString(effect).c_str());
647-
return HalResult<milliseconds>::unsupported();
648-
}
649-
650-
// -------------------------------------------------------------------------------------------------
651-
652-
HalResult<milliseconds> HidlHalWrapperV1_2::performEffect(
653-
Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) {
654-
if (isStaticCastValid<V1_0::Effect>(effect)) {
655-
return performInternal(&V1_2::IVibrator::perform, getHal(),
656-
static_cast<V1_0::Effect>(effect), strength, completionCallback);
657-
}
658-
if (isStaticCastValid<V1_1::Effect_1_1>(effect)) {
659-
return performInternal(&V1_2::IVibrator::perform_1_1, getHal(),
660-
static_cast<V1_1::Effect_1_1>(effect), strength, completionCallback);
661-
}
662-
if (isStaticCastValid<V1_2::Effect>(effect)) {
663-
return performInternal(&V1_2::IVibrator::perform_1_2, getHal(),
664-
static_cast<V1_2::Effect>(effect), strength, completionCallback);
665-
}
666-
667-
ALOGV("Skipped performEffect because Vibrator HAL does not support effect %s",
668-
Aidl::toString(effect).c_str());
669-
return HalResult<milliseconds>::unsupported();
670-
}
671-
672-
// -------------------------------------------------------------------------------------------------
673-
674-
HalResult<void> HidlHalWrapperV1_3::setExternalControl(bool enabled) {
675-
auto result = getHal()->setExternalControl(static_cast<uint32_t>(enabled));
676-
return HalResultFactory::fromStatus(result.withDefault(V1_0::Status::UNKNOWN_ERROR));
677-
}
678-
679-
HalResult<milliseconds> HidlHalWrapperV1_3::performEffect(
680-
Effect effect, EffectStrength strength, const std::function<void()>& completionCallback) {
681-
if (isStaticCastValid<V1_0::Effect>(effect)) {
682-
return performInternal(&V1_3::IVibrator::perform, getHal(),
683-
static_cast<V1_0::Effect>(effect), strength, completionCallback);
684-
}
685-
if (isStaticCastValid<V1_1::Effect_1_1>(effect)) {
686-
return performInternal(&V1_3::IVibrator::perform_1_1, getHal(),
687-
static_cast<V1_1::Effect_1_1>(effect), strength, completionCallback);
688-
}
689-
if (isStaticCastValid<V1_2::Effect>(effect)) {
690-
return performInternal(&V1_3::IVibrator::perform_1_2, getHal(),
691-
static_cast<V1_2::Effect>(effect), strength, completionCallback);
692-
}
693-
if (isStaticCastValid<V1_3::Effect>(effect)) {
694-
return performInternal(&V1_3::IVibrator::perform_1_3, getHal(),
695-
static_cast<V1_3::Effect>(effect), strength, completionCallback);
696-
}
697-
698-
ALOGV("Skipped performEffect because Vibrator HAL does not support effect %s",
699-
Aidl::toString(effect).c_str());
700-
return HalResult<milliseconds>::unsupported();
701-
}
702-
703-
HalResult<Capabilities> HidlHalWrapperV1_3::getCapabilitiesInternal() {
704-
Capabilities capabilities = Capabilities::NONE;
705-
706-
sp<V1_3::IVibrator> hal = getHal();
707-
auto amplitudeResult = hal->supportsAmplitudeControl();
708-
if (!amplitudeResult.isOk()) {
709-
return HalResultFactory::fromReturn<Capabilities>(std::move(amplitudeResult), capabilities);
710-
}
711-
712-
auto externalControlResult = hal->supportsExternalControl();
713-
if (amplitudeResult.withDefault(false)) {
714-
capabilities |= Capabilities::AMPLITUDE_CONTROL;
715-
}
716-
if (externalControlResult.withDefault(false)) {
717-
capabilities |= Capabilities::EXTERNAL_CONTROL;
718-
719-
if (amplitudeResult.withDefault(false)) {
720-
capabilities |= Capabilities::EXTERNAL_AMPLITUDE_CONTROL;
721-
}
722-
}
723-
724-
return HalResultFactory::fromReturn<Capabilities>(std::move(externalControlResult),
725-
capabilities);
726-
}
727-
728-
// -------------------------------------------------------------------------------------------------
729-
730509
}; // namespace vibrator
731510

732511
}; // namespace android

0 commit comments

Comments
 (0)