Merge "vibrator: Async Callback API Example"
am: 7e6b36a327
Change-Id: Ic1903d2e4be6ecfc79d5ac1eaaaf404364da7522
This commit is contained in:
commit
41076fe0eb
8 changed files with 58 additions and 22 deletions
|
@ -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
|
|
@ -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",
|
||||
],
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
|
@ -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>
|
|
@ -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() {
|
Loading…
Reference in a new issue