Loading vibrator/aidl/android/hardware/vibrator/IVibrator.aidl +21 −6 Original line number Diff line number Diff line Loading @@ -31,16 +31,20 @@ interface IVibrator { */ const int CAP_PERFORM_CALLBACK = 1 << 1; /** * Whether setAmplitude is supported. * Whether setAmplitude is supported (when external control is disabled) */ const int CAP_AMPLITUDE_CONTROL = 1 << 2; /** * Whether setExternalControl is supported. */ const int CAP_EXTERNAL_CONTROL = 1 << 3; /** * Whether setAmplitude is supported (when external control is enabled) */ const int CAP_EXTERNAL_AMPLITUDE_CONTROL = 1 << 4; /** * Determine capabilities of the vibrator HAL (CAP_* values) * Determine capabilities of the vibrator HAL (CAP_* mask) */ int getCapabilities(); Loading @@ -55,7 +59,9 @@ interface IVibrator { * Turn on vibrator * * This function must only be called after the previous timeout has expired or * was canceled (through off()). * was canceled (through off()). A callback is only expected to be supported when * getCapabilities CAP_ON_CALLBACK is specified. * * @param timeoutMs number of milliseconds to vibrate. * @param callback A callback used to inform Frameworks of state change, if supported. */ Loading @@ -64,6 +70,9 @@ interface IVibrator { /** * Fire off a predefined haptic event. * * A callback is only expected to be supported when getCapabilities CAP_PERFORM_CALLBACK * is specified. * * @param effect The type of haptic event to trigger. * @param strength The intensity of haptic event to trigger. * @param callback A callback used to inform Frameworks of state change, if supported. Loading @@ -84,7 +93,11 @@ interface IVibrator { /** * Sets the motor's vibrational amplitude. * * Changes the force being produced by the underlying motor. * Changes the force being produced by the underlying motor. This may not be supported and * this support is reflected in getCapabilities (CAP_AMPLITUDE_CONTROL). When this device * is under external control (via setExternalControl), amplitude control may not be supported * even though it is supported normally. This can be checked with * CAP_EXTERNAL_AMPLITUDE_CONTROL. * * @param amplitude The unitless force setting. Note that this number must * be between 1 and 255, inclusive. If the motor does not Loading @@ -96,12 +109,14 @@ interface IVibrator { /** * Enables/disables control override of vibrator to audio. * * Support is reflected in getCapabilities (CAP_EXTERNAL_CONTROL). * * When this API is set, the vibrator control should be ceded to audio system * for haptic audio. While this is enabled, issuing of other commands to control * the vibrator is unsupported and the resulting behavior is undefined. Amplitude * control may or may not be supported and is reflected in the return value of * supportsAmplitudeControl() while this is enabled. When this is disabled, the * vibrator should resume to an off state. * getCapabilities (CAP_EXTERNAL_AMPLITUDE_CONTROL) while this is enabled. When this is * disabled, the vibrator should resume to an off state. * * @param enabled Whether external control should be enabled or disabled. */ Loading vibrator/aidl/default/Vibrator.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ namespace vibrator { ndk::ScopedAStatus Vibrator::getCapabilities(int32_t* _aidl_return) { LOG(INFO) << "Vibrator reporting capabilities"; *_aidl_return = IVibrator::CAP_ON_CALLBACK | IVibrator::CAP_PERFORM_CALLBACK | IVibrator::CAP_AMPLITUDE_CONTROL | IVibrator::CAP_EXTERNAL_CONTROL; IVibrator::CAP_AMPLITUDE_CONTROL | IVibrator::CAP_EXTERNAL_CONTROL | IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL; return ndk::ScopedAStatus::ok(); } Loading vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -221,6 +221,25 @@ TEST_P(VibratorAidl, ChangeVibrationExternalControl) { } } TEST_P(VibratorAidl, ExternalAmplitudeControl) { const bool supportsExternalAmplitudeControl = (capabilities & IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL) > 0; if (capabilities & IVibrator::CAP_EXTERNAL_CONTROL) { EXPECT_TRUE(vibrator->setExternalControl(true).isOk()); Status amplitudeStatus = vibrator->setAmplitude(128); if (supportsExternalAmplitudeControl) { EXPECT_TRUE(amplitudeStatus.isOk()); } else { EXPECT_EQ(amplitudeStatus.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION); } EXPECT_TRUE(vibrator->setExternalControl(false).isOk()); } else { EXPECT_FALSE(supportsExternalAmplitudeControl); } } TEST_P(VibratorAidl, ExternalControlUnsupportedMatchingCapabilities) { if ((capabilities & IVibrator::CAP_EXTERNAL_CONTROL) == 0) { EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, Loading Loading
vibrator/aidl/android/hardware/vibrator/IVibrator.aidl +21 −6 Original line number Diff line number Diff line Loading @@ -31,16 +31,20 @@ interface IVibrator { */ const int CAP_PERFORM_CALLBACK = 1 << 1; /** * Whether setAmplitude is supported. * Whether setAmplitude is supported (when external control is disabled) */ const int CAP_AMPLITUDE_CONTROL = 1 << 2; /** * Whether setExternalControl is supported. */ const int CAP_EXTERNAL_CONTROL = 1 << 3; /** * Whether setAmplitude is supported (when external control is enabled) */ const int CAP_EXTERNAL_AMPLITUDE_CONTROL = 1 << 4; /** * Determine capabilities of the vibrator HAL (CAP_* values) * Determine capabilities of the vibrator HAL (CAP_* mask) */ int getCapabilities(); Loading @@ -55,7 +59,9 @@ interface IVibrator { * Turn on vibrator * * This function must only be called after the previous timeout has expired or * was canceled (through off()). * was canceled (through off()). A callback is only expected to be supported when * getCapabilities CAP_ON_CALLBACK is specified. * * @param timeoutMs number of milliseconds to vibrate. * @param callback A callback used to inform Frameworks of state change, if supported. */ Loading @@ -64,6 +70,9 @@ interface IVibrator { /** * Fire off a predefined haptic event. * * A callback is only expected to be supported when getCapabilities CAP_PERFORM_CALLBACK * is specified. * * @param effect The type of haptic event to trigger. * @param strength The intensity of haptic event to trigger. * @param callback A callback used to inform Frameworks of state change, if supported. Loading @@ -84,7 +93,11 @@ interface IVibrator { /** * Sets the motor's vibrational amplitude. * * Changes the force being produced by the underlying motor. * Changes the force being produced by the underlying motor. This may not be supported and * this support is reflected in getCapabilities (CAP_AMPLITUDE_CONTROL). When this device * is under external control (via setExternalControl), amplitude control may not be supported * even though it is supported normally. This can be checked with * CAP_EXTERNAL_AMPLITUDE_CONTROL. * * @param amplitude The unitless force setting. Note that this number must * be between 1 and 255, inclusive. If the motor does not Loading @@ -96,12 +109,14 @@ interface IVibrator { /** * Enables/disables control override of vibrator to audio. * * Support is reflected in getCapabilities (CAP_EXTERNAL_CONTROL). * * When this API is set, the vibrator control should be ceded to audio system * for haptic audio. While this is enabled, issuing of other commands to control * the vibrator is unsupported and the resulting behavior is undefined. Amplitude * control may or may not be supported and is reflected in the return value of * supportsAmplitudeControl() while this is enabled. When this is disabled, the * vibrator should resume to an off state. * getCapabilities (CAP_EXTERNAL_AMPLITUDE_CONTROL) while this is enabled. When this is * disabled, the vibrator should resume to an off state. * * @param enabled Whether external control should be enabled or disabled. */ Loading
vibrator/aidl/default/Vibrator.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -27,7 +27,8 @@ namespace vibrator { ndk::ScopedAStatus Vibrator::getCapabilities(int32_t* _aidl_return) { LOG(INFO) << "Vibrator reporting capabilities"; *_aidl_return = IVibrator::CAP_ON_CALLBACK | IVibrator::CAP_PERFORM_CALLBACK | IVibrator::CAP_AMPLITUDE_CONTROL | IVibrator::CAP_EXTERNAL_CONTROL; IVibrator::CAP_AMPLITUDE_CONTROL | IVibrator::CAP_EXTERNAL_CONTROL | IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL; return ndk::ScopedAStatus::ok(); } Loading
vibrator/aidl/vts/VtsHalVibratorTargetTest.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -221,6 +221,25 @@ TEST_P(VibratorAidl, ChangeVibrationExternalControl) { } } TEST_P(VibratorAidl, ExternalAmplitudeControl) { const bool supportsExternalAmplitudeControl = (capabilities & IVibrator::CAP_EXTERNAL_AMPLITUDE_CONTROL) > 0; if (capabilities & IVibrator::CAP_EXTERNAL_CONTROL) { EXPECT_TRUE(vibrator->setExternalControl(true).isOk()); Status amplitudeStatus = vibrator->setAmplitude(128); if (supportsExternalAmplitudeControl) { EXPECT_TRUE(amplitudeStatus.isOk()); } else { EXPECT_EQ(amplitudeStatus.exceptionCode(), Status::EX_UNSUPPORTED_OPERATION); } EXPECT_TRUE(vibrator->setExternalControl(false).isOk()); } else { EXPECT_FALSE(supportsExternalAmplitudeControl); } } TEST_P(VibratorAidl, ExternalControlUnsupportedMatchingCapabilities) { if ((capabilities & IVibrator::CAP_EXTERNAL_CONTROL) == 0) { EXPECT_EQ(Status::EX_UNSUPPORTED_OPERATION, Loading