diff --git a/vibrator/1.3/example/android.hardware.vibrator@1.3-service.example.rc b/vibrator/1.3/example/android.hardware.vibrator@1.3-service.example.rc deleted file mode 100644 index ed7a562cfc..0000000000 --- a/vibrator/1.3/example/android.hardware.vibrator@1.3-service.example.rc +++ /dev/null @@ -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 diff --git a/vibrator/1.3/example/Android.bp b/vibrator/1.x/example/Android.bp similarity index 81% rename from vibrator/1.3/example/Android.bp rename to vibrator/1.x/example/Android.bp index 07f1c26db3..afbbb759ac 100644 --- a/vibrator/1.3/example/Android.bp +++ b/vibrator/1.x/example/Android.bp @@ -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", ], } diff --git a/vibrator/1.3/example/OWNERS b/vibrator/1.x/example/OWNERS similarity index 100% rename from vibrator/1.3/example/OWNERS rename to vibrator/1.x/example/OWNERS diff --git a/vibrator/1.3/example/Vibrator.cpp b/vibrator/1.x/example/Vibrator.cpp similarity index 86% rename from vibrator/1.3/example/Vibrator.cpp rename to vibrator/1.x/example/Vibrator.cpp index b529437108..4dd1cb90b6 100644 --- a/vibrator/1.3/example/Vibrator.cpp +++ b/vibrator/1.x/example/Vibrator.cpp @@ -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 Vibrator::setExternalControl(bool enabled) { } } -Return Vibrator::perform_1_3(Effect effect, EffectStrength strength, perform_cb _hidl_cb) { +Return Vibrator::perform_1_3(V1_3::Effect effect, EffectStrength strength, + perform_cb _hidl_cb) { + return perform(effect, strength, _hidl_cb); +} + +// Methods from ::android::hardware::vibrator::V1_4::IVibrator follow. + +Return> Vibrator::getCapabilities() { + return Capabilities::ON_COMPLETION_CALLBACK | Capabilities::PERFORM_COMPLETION_CALLBACK; +} + +Return Vibrator::on_1_4(uint32_t timeoutMs, const sp& callback) { + mCallback = callback; + return on(timeoutMs); +} + +Return Vibrator::perform_1_4(V1_3::Effect effect, EffectStrength strength, + const sp& callback, perform_cb _hidl_cb) { + mCallback = callback; return perform(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 diff --git a/vibrator/1.3/example/Vibrator.h b/vibrator/1.x/example/Vibrator.h similarity index 75% rename from vibrator/1.3/example/Vibrator.h rename to vibrator/1.x/example/Vibrator.h index 5180774552..ff634315ec 100644 --- a/vibrator/1.3/example/Vibrator.h +++ b/vibrator/1.x/example/Vibrator.h @@ -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 +#include #include 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 supportsExternalControl() override; Return setExternalControl(bool enabled) override; - Return perform_1_3(Effect effect, EffectStrength strength, perform_cb _hidl_cb) override; + Return perform_1_3(V1_3::Effect effect, EffectStrength strength, + perform_cb _hidl_cb) override; + + // Methods from ::android::hardware::vibrator::V1_4::IVibrator follow. + Return> getCapabilities() override; + Return on_1_4(uint32_t timeoutMs, const sp& callback) override; + Return perform_1_4(V1_3::Effect effect, EffectStrength strength, + const sp& callback, perform_cb _hidl_cb) override; private: Return 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 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 diff --git a/vibrator/1.x/example/android.hardware.vibrator@1.x-service.example.rc b/vibrator/1.x/example/android.hardware.vibrator@1.x-service.example.rc new file mode 100644 index 0000000000..4893db6b90 --- /dev/null +++ b/vibrator/1.x/example/android.hardware.vibrator@1.x-service.example.rc @@ -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 diff --git a/vibrator/1.3/example/android.hardware.vibrator@1.3-service.example.xml b/vibrator/1.x/example/android.hardware.vibrator@1.x-service.example.xml similarity index 90% rename from vibrator/1.3/example/android.hardware.vibrator@1.3-service.example.xml rename to vibrator/1.x/example/android.hardware.vibrator@1.x-service.example.xml index 172aa2178c..ebc8c4bcb8 100644 --- a/vibrator/1.3/example/android.hardware.vibrator@1.3-service.example.xml +++ b/vibrator/1.x/example/android.hardware.vibrator@1.x-service.example.xml @@ -2,7 +2,7 @@ android.hardware.vibrator hwbinder - 1.3 + 1.4 IVibrator default diff --git a/vibrator/1.3/example/service.cpp b/vibrator/1.x/example/service.cpp similarity index 82% rename from vibrator/1.3/example/service.cpp rename to vibrator/1.x/example/service.cpp index 449996e280..13c66912e8 100644 --- a/vibrator/1.3/example/service.cpp +++ b/vibrator/1.x/example/service.cpp @@ -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 +#include #include #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() {