Rémi Bernon : windows.gaming.input: Implement IForceFeedbackEffect_(Start|Stop).

Alexandre Julliard julliard at winehq.org
Thu May 19 16:15:12 CDT 2022


Module: wine
Branch: master
Commit: b2b1e6a4388b46d54971ca000690c77bdf544534
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=b2b1e6a4388b46d54971ca000690c77bdf544534

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Fri Apr 29 14:01:32 2022 +0200

windows.gaming.input: Implement IForceFeedbackEffect_(Start|Stop).

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 =




More information about the wine-cvs mailing list