Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 714220ef authored by Harpreet \"Eli\" Sangha's avatar Harpreet \"Eli\" Sangha
Browse files

vibrator: Async Callback API Example



Bug: 136220871
Test: VTS Tests
Change-Id: I338f16d72cd7b1ba60ddf812e4cb87a6011de752
Merged-In: I338f16d72cd7b1ba60ddf812e4cb87a6011de752
Signed-off-by: default avatarHarpreet \"Eli\" Sangha <eliptus@google.com>
parent e0525f95
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -14,11 +14,11 @@
// limitations under the License.

cc_binary {
    name: "android.hardware.vibrator@1.3-service.example",
    name: "android.hardware.vibrator@1.x-service.example",
    vendor: true,
    relative_install_path: "hw",
    init_rc: ["android.hardware.vibrator@1.3-service.example.rc"],
    vintf_fragments: ["android.hardware.vibrator@1.3-service.example.xml"],
    init_rc: ["android.hardware.vibrator@1.x-service.example.rc"],
    vintf_fragments: ["android.hardware.vibrator@1.x-service.example.xml"],
    srcs: ["service.cpp", "Vibrator.cpp"],
    cflags: ["-Wall", "-Werror"],
    shared_libs: [
@@ -29,5 +29,6 @@ cc_binary {
        "android.hardware.vibrator@1.1",
        "android.hardware.vibrator@1.2",
        "android.hardware.vibrator@1.3",
        "android.hardware.vibrator@1.4",
    ],
}
+29 −3
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@
namespace android {
namespace hardware {
namespace vibrator {
namespace V1_3 {
namespace V1_4 {
namespace implementation {

static constexpr uint32_t MS_PER_S = 1000;
@@ -100,7 +100,25 @@ Return<Status> Vibrator::setExternalControl(bool enabled) {
    }
}

Return<void> Vibrator::perform_1_3(Effect effect, EffectStrength strength, perform_cb _hidl_cb) {
Return<void> Vibrator::perform_1_3(V1_3::Effect effect, EffectStrength strength,
                                   perform_cb _hidl_cb) {
    return perform<decltype(effect)>(effect, strength, _hidl_cb);
}

// Methods from ::android::hardware::vibrator::V1_4::IVibrator follow.

Return<hidl_bitfield<Capabilities>> Vibrator::getCapabilities() {
    return Capabilities::ON_COMPLETION_CALLBACK | Capabilities::PERFORM_COMPLETION_CALLBACK;
}

Return<Status> Vibrator::on_1_4(uint32_t timeoutMs, const sp<IVibratorCallback>& callback) {
    mCallback = callback;
    return on(timeoutMs);
}

Return<void> Vibrator::perform_1_4(V1_3::Effect effect, EffectStrength strength,
                                   const sp<IVibratorCallback>& callback, perform_cb _hidl_cb) {
    mCallback = callback;
    return perform<decltype(effect)>(effect, strength, _hidl_cb);
}

@@ -148,6 +166,14 @@ Status Vibrator::enable(bool enabled) {
        return Status::UNSUPPORTED_OPERATION;
    } else {
        ALOGI("Enabled: %s -> %s\n", mEnabled ? "true" : "false", enabled ? "true" : "false");
        if (mEnabled && !enabled) {
            if (auto callback = mCallback) {
                mCallback = nullptr;
                if (auto ret = callback->onComplete(); !ret.isOk()) {
                    ALOGE("Failed completion callback: %s", ret.description().c_str());
                }
            }
        }
        mEnabled = enabled;
        return Status::OK;
    }
@@ -271,7 +297,7 @@ uint8_t Vibrator::strengthToAmplitude(EffectStrength strength, Status* status) {
}

}  // namespace implementation
}  // namespace V1_3
}  // namespace V1_4
}  // namespace vibrator
}  // namespace hardware
}  // namespace android
+16 −7
Original line number Diff line number Diff line
@@ -13,20 +13,21 @@
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#ifndef ANDROID_HARDWARE_VIBRATOR_V1_3_VIBRATOR_H
#define ANDROID_HARDWARE_VIBRATOR_V1_3_VIBRATOR_H
#ifndef ANDROID_HARDWARE_VIBRATOR_V1_x_VIBRATOR_H
#define ANDROID_HARDWARE_VIBRATOR_V1_x_VIBRATOR_H

#include <android/hardware/vibrator/1.3/IVibrator.h>
#include <android/hardware/vibrator/1.4/IVibrator.h>
#include <hidl/Status.h>

namespace android {
namespace hardware {
namespace vibrator {
namespace V1_3 {
namespace V1_4 {
namespace implementation {

using android::hardware::vibrator::V1_0::EffectStrength;
using android::hardware::vibrator::V1_0::Status;
using android::hardware::vibrator::V1_3::Effect;

class Vibrator : public IVibrator {
  public:
@@ -51,7 +52,14 @@ class Vibrator : public IVibrator {
    // Methods from ::android::hardware::vibrator::V1_3::IVibrator follow.
    Return<bool> supportsExternalControl() override;
    Return<Status> setExternalControl(bool enabled) override;
    Return<void> perform_1_3(Effect effect, EffectStrength strength, perform_cb _hidl_cb) override;
    Return<void> perform_1_3(V1_3::Effect effect, EffectStrength strength,
                             perform_cb _hidl_cb) override;

    // Methods from ::android::hardware::vibrator::V1_4::IVibrator follow.
    Return<hidl_bitfield<Capabilities>> getCapabilities() override;
    Return<Status> on_1_4(uint32_t timeoutMs, const sp<IVibratorCallback>& callback) override;
    Return<void> perform_1_4(V1_3::Effect effect, EffectStrength strength,
                             const sp<IVibratorCallback>& callback, perform_cb _hidl_cb) override;

  private:
    Return<void> perform(Effect effect, EffectStrength strength, perform_cb _hidl_cb);
@@ -72,11 +80,12 @@ class Vibrator : public IVibrator {
    bool mExternalControl{false};
    std::mutex mMutex;
    timer_t mTimer{nullptr};
    sp<IVibratorCallback> mCallback{nullptr};
};
}  // namespace implementation
}  // namespace V1_3
}  // namespace V1_4
}  // namespace vibrator
}  // namespace hardware
}  // namespace android

#endif  // ANDROID_HARDWARE_VIBRATOR_V1_3_VIBRATOR_H
#endif  // ANDROID_HARDWARE_VIBRATOR_V1_x_VIBRATOR_H
+4 −0
Original line number Diff line number Diff line
service vendor.vibrator-1-3 /vendor/bin/hw/android.hardware.vibrator@1.3-service.example
service vendor.vibrator-1-x /vendor/bin/hw/android.hardware.vibrator@1.x-service.example
    class hal
    user system
    group system
Loading