Merge "vibrator: Async Callback API Example"

am: 7e6b36a327

Change-Id: Ic1903d2e4be6ecfc79d5ac1eaaaf404364da7522
This commit is contained in:
Harpreet \"Eli\" Sangha 2019-10-18 12:40:10 -07:00 committed by android-build-merger
commit 41076fe0eb
8 changed files with 58 additions and 22 deletions

View file

@ -1,4 +0,0 @@
service vendor.vibrator-1-3 /vendor/bin/hw/android.hardware.vibrator@1.3-service.example
class hal
user system
group system

View file

@ -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",
],
}

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,4 @@
service vendor.vibrator-1-x /vendor/bin/hw/android.hardware.vibrator@1.x-service.example
class hal
user system
group system

View file

@ -2,7 +2,7 @@
<hal format="hidl">
<name>android.hardware.vibrator</name>
<transport>hwbinder</transport>
<version>1.3</version>
<version>1.4</version>
<interface>
<name>IVibrator</name>
<instance>default</instance>

View file

@ -13,17 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#define LOG_TAG "android.hardware.vibrator@1.3-service.example"
#define LOG_TAG "android.hardware.vibrator@1.x-service.example"
#include <android/hardware/vibrator/1.3/IVibrator.h>
#include <android/hardware/vibrator/1.4/IVibrator.h>
#include <hidl/HidlTransportSupport.h>
#include "Vibrator.h"
using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::hardware::vibrator::V1_3::IVibrator;
using android::hardware::vibrator::V1_3::implementation::Vibrator;
using android::hardware::vibrator::V1_4::IVibrator;
using android::hardware::vibrator::V1_4::implementation::Vibrator;
using namespace android;
status_t registerVibratorService() {