From b2b1e6a4388b46d54971ca000690c77bdf544534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Bernon?= Date: Fri, 29 Apr 2022 14:01:32 +0200 Subject: [PATCH] windows.gaming.input: Implement IForceFeedbackEffect_(Start|Stop). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: RĂ©mi Bernon Signed-off-by: Alexandre Julliard --- dlls/dinput/tests/force_feedback.c | 18 ---------------- dlls/windows.gaming.input/force_feedback.c | 25 ++++++++++++++++++---- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/dlls/dinput/tests/force_feedback.c b/dlls/dinput/tests/force_feedback.c index c471a80de00..182bb9919bb 100644 --- a/dlls/dinput/tests/force_feedback.c +++ b/dlls/dinput/tests/force_feedback.c @@ -5596,7 +5596,6 @@ static void test_windows_gaming_input(void) .report_id = 2, .report_len = 4, .report_buf = {2,0x01,0x01,0x01}, - .todo = TRUE, }; struct hid_expect expect_effect_stop = { @@ -5604,7 +5603,6 @@ static void test_windows_gaming_input(void) .report_id = 2, .report_len = 4, .report_buf = {2,0x01,0x03,0x00}, - .todo = TRUE, }; struct hid_expect expect_unload[] = { @@ -6103,20 +6101,16 @@ static void test_windows_gaming_input(void) set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, expect_unload, sizeof(expect_unload) ); @@ -6200,20 +6194,16 @@ static void test_windows_gaming_input(void) set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, expect_unload, sizeof(expect_unload) ); @@ -6299,20 +6289,16 @@ static void test_windows_gaming_input(void) set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, expect_unload, sizeof(expect_unload) ); @@ -6377,20 +6363,16 @@ static void test_windows_gaming_input(void) set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_start, sizeof(expect_effect_start) ); hr = IForceFeedbackEffect_Start( effect ); - todo_wine ok( hr == S_OK, "Start returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, &expect_effect_stop, sizeof(expect_effect_stop) ); hr = IForceFeedbackEffect_Stop( effect ); - todo_wine ok( hr == S_OK, "Stop returned %#lx\n", hr ); set_hid_expect( file, expect_unload, sizeof(expect_unload) ); diff --git a/dlls/windows.gaming.input/force_feedback.c b/dlls/windows.gaming.input/force_feedback.c index dd10f86bd3e..51d02171001 100644 --- a/dlls/windows.gaming.input/force_feedback.c +++ b/dlls/windows.gaming.input/force_feedback.c @@ -242,14 +242,31 @@ static HRESULT WINAPI effect_get_State( IForceFeedbackEffect *iface, ForceFeedba static HRESULT WINAPI effect_Start( IForceFeedbackEffect *iface ) { - FIXME( "iface %p stub!\n", iface ); - return E_NOTIMPL; + struct effect *impl = impl_from_IForceFeedbackEffect( iface ); + HRESULT hr = E_UNEXPECTED; + DWORD flags = 0; + + TRACE( "iface %p.\n", iface ); + + EnterCriticalSection( &impl->cs ); + if (impl->effect) hr = IDirectInputEffect_Start( impl->effect, impl->repeat_count, flags ); + LeaveCriticalSection( &impl->cs ); + + return hr; } static HRESULT WINAPI effect_Stop( IForceFeedbackEffect *iface ) { - FIXME( "iface %p stub!\n", iface ); - return E_NOTIMPL; + struct effect *impl = impl_from_IForceFeedbackEffect( iface ); + HRESULT hr = E_UNEXPECTED; + + TRACE( "iface %p.\n", iface ); + + EnterCriticalSection( &impl->cs ); + if (impl->effect) hr = IDirectInputEffect_Stop( impl->effect ); + LeaveCriticalSection( &impl->cs ); + + return hr; } static const struct IForceFeedbackEffectVtbl effect_vtbl =