summaryrefslogtreecommitdiff
path: root/src/hid_core/resources/vibration
diff options
context:
space:
mode:
authorGravatar Narr the Reg2024-01-10 22:06:54 -0600
committerGravatar german772024-01-15 23:15:40 -0600
commit2cacb9d48c98603176e52ecc94f2374a934797fb (patch)
tree12badf5b4eede22b22dece03a9074197ec631a1e /src/hid_core/resources/vibration
parentMerge pull request #12686 from szepeviktor/typos3 (diff)
downloadyuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar.gz
yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.tar.xz
yuzu-2cacb9d48c98603176e52ecc94f2374a934797fb.zip
service: hid: Fully implement abstract vibration
Diffstat (limited to 'src/hid_core/resources/vibration')
-rw-r--r--src/hid_core/resources/vibration/gc_vibration_device.cpp56
-rw-r--r--src/hid_core/resources/vibration/gc_vibration_device.h10
-rw-r--r--src/hid_core/resources/vibration/n64_vibration_device.cpp57
-rw-r--r--src/hid_core/resources/vibration/n64_vibration_device.h8
-rw-r--r--src/hid_core/resources/vibration/vibration_base.cpp4
-rw-r--r--src/hid_core/resources/vibration/vibration_base.h10
-rw-r--r--src/hid_core/resources/vibration/vibration_device.cpp72
-rw-r--r--src/hid_core/resources/vibration/vibration_device.h16
8 files changed, 194 insertions, 39 deletions
diff --git a/src/hid_core/resources/vibration/gc_vibration_device.cpp b/src/hid_core/resources/vibration/gc_vibration_device.cpp
index f01f81b9a..ad42b9d66 100644
--- a/src/hid_core/resources/vibration/gc_vibration_device.cpp
+++ b/src/hid_core/resources/vibration/gc_vibration_device.cpp
@@ -1,6 +1,7 @@
1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#include "hid_core/frontend/emulated_controller.h"
4#include "hid_core/hid_result.h" 5#include "hid_core/hid_result.h"
5#include "hid_core/resources/npad/npad_types.h" 6#include "hid_core/resources/npad/npad_types.h"
6#include "hid_core/resources/npad/npad_vibration.h" 7#include "hid_core/resources/npad/npad_vibration.h"
@@ -10,24 +11,25 @@ namespace Service::HID {
10 11
11NpadGcVibrationDevice::NpadGcVibrationDevice() {} 12NpadGcVibrationDevice::NpadGcVibrationDevice() {}
12 13
13Result NpadGcVibrationDevice::IncrementRefCounter() { 14Result NpadGcVibrationDevice::Activate() {
14 if (ref_counter == 0 && is_mounted) { 15 if (ref_counter == 0 && is_mounted) {
15 f32 volume = 1.0f; 16 f32 volume = 1.0f;
16 const auto result = vibration_handler->GetVibrationVolume(volume); 17 const auto result = vibration_handler->GetVibrationVolume(volume);
17 if (result.IsSuccess()) { 18 if (result.IsSuccess()) {
18 // TODO: SendVibrationGcErmCommand 19 xcd_handle->SetVibration(adapter_slot, Core::HID::VibrationGcErmCommand::Stop);
19 } 20 }
20 } 21 }
22
21 ref_counter++; 23 ref_counter++;
22 return ResultSuccess; 24 return ResultSuccess;
23} 25}
24 26
25Result NpadGcVibrationDevice::DecrementRefCounter() { 27Result NpadGcVibrationDevice::Deactivate() {
26 if (ref_counter == 1 && !is_mounted) { 28 if (ref_counter == 1 && is_mounted) {
27 f32 volume = 1.0f; 29 f32 volume = 1.0f;
28 const auto result = vibration_handler->GetVibrationVolume(volume); 30 const auto result = vibration_handler->GetVibrationVolume(volume);
29 if (result.IsSuccess()) { 31 if (result.IsSuccess()) {
30 // TODO: SendVibrationGcErmCommand 32 xcd_handle->SetVibration(adapter_slot, Core::HID::VibrationGcErmCommand::Stop);
31 } 33 }
32 } 34 }
33 35
@@ -38,6 +40,48 @@ Result NpadGcVibrationDevice::DecrementRefCounter() {
38 return ResultSuccess; 40 return ResultSuccess;
39} 41}
40 42
43Result NpadGcVibrationDevice::Mount(IAbstractedPad& abstracted_pad, u32 slot,
44 NpadVibration* handler) {
45 if (!abstracted_pad.internal_flags.is_connected) {
46 return ResultSuccess;
47 }
48
49 // TODO: This device doesn't use a xcd handle instead has an GC adapter handle. This is just to
50 // keep compatibility with the front end.
51 xcd_handle = abstracted_pad.xcd_handle;
52 adapter_slot = slot;
53 vibration_handler = handler;
54 is_mounted = true;
55
56 if (ref_counter == 0) {
57 return ResultSuccess;
58 }
59
60 f32 volume{1.0f};
61 const auto result = vibration_handler->GetVibrationVolume(volume);
62 if (result.IsSuccess()) {
63 xcd_handle->SetVibration(adapter_slot, Core::HID::VibrationGcErmCommand::Stop);
64 }
65
66 return ResultSuccess;
67}
68
69Result NpadGcVibrationDevice::Unmount() {
70 if (ref_counter == 0 || !is_mounted) {
71 is_mounted = false;
72 return ResultSuccess;
73 }
74
75 f32 volume{1.0f};
76 const auto result = vibration_handler->GetVibrationVolume(volume);
77 if (result.IsSuccess()) {
78 xcd_handle->SetVibration(adapter_slot, Core::HID::VibrationGcErmCommand::Stop);
79 }
80
81 is_mounted = false;
82 return ResultSuccess;
83}
84
41Result NpadGcVibrationDevice::SendVibrationGcErmCommand(Core::HID::VibrationGcErmCommand command) { 85Result NpadGcVibrationDevice::SendVibrationGcErmCommand(Core::HID::VibrationGcErmCommand command) {
42 if (!is_mounted) { 86 if (!is_mounted) {
43 return ResultSuccess; 87 return ResultSuccess;
@@ -55,7 +99,7 @@ Result NpadGcVibrationDevice::SendVibrationGcErmCommand(Core::HID::VibrationGcEr
55 return ResultSuccess; 99 return ResultSuccess;
56 } 100 }
57 } 101 }
58 // TODO: SendVibrationGcErmCommand 102 xcd_handle->SetVibration(adapter_slot, command);
59 return ResultSuccess; 103 return ResultSuccess;
60} 104}
61 105
diff --git a/src/hid_core/resources/vibration/gc_vibration_device.h b/src/hid_core/resources/vibration/gc_vibration_device.h
index 87abca57d..c624cbb28 100644
--- a/src/hid_core/resources/vibration/gc_vibration_device.h
+++ b/src/hid_core/resources/vibration/gc_vibration_device.h
@@ -20,12 +20,18 @@ class NpadGcVibrationDevice final : public NpadVibrationBase {
20public: 20public:
21 explicit NpadGcVibrationDevice(); 21 explicit NpadGcVibrationDevice();
22 22
23 Result IncrementRefCounter() override; 23 Result Activate() override;
24 Result DecrementRefCounter() override; 24 Result Deactivate() override;
25
26 Result Mount(IAbstractedPad& abstracted_pad, u32 slot, NpadVibration* handler);
27 Result Unmount();
25 28
26 Result SendVibrationGcErmCommand(Core::HID::VibrationGcErmCommand command); 29 Result SendVibrationGcErmCommand(Core::HID::VibrationGcErmCommand command);
27 30
28 Result GetActualVibrationGcErmCommand(Core::HID::VibrationGcErmCommand& out_command); 31 Result GetActualVibrationGcErmCommand(Core::HID::VibrationGcErmCommand& out_command);
29 Result SendVibrationNotificationPattern(Core::HID::VibrationGcErmCommand command); 32 Result SendVibrationNotificationPattern(Core::HID::VibrationGcErmCommand command);
33
34private:
35 u32 adapter_slot;
30}; 36};
31} // namespace Service::HID 37} // namespace Service::HID
diff --git a/src/hid_core/resources/vibration/n64_vibration_device.cpp b/src/hid_core/resources/vibration/n64_vibration_device.cpp
index 639f87abf..94ad37c8f 100644
--- a/src/hid_core/resources/vibration/n64_vibration_device.cpp
+++ b/src/hid_core/resources/vibration/n64_vibration_device.cpp
@@ -1,6 +1,7 @@
1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#include "hid_core/frontend/emulated_controller.h"
4#include "hid_core/hid_result.h" 5#include "hid_core/hid_result.h"
5#include "hid_core/resources/npad/npad_types.h" 6#include "hid_core/resources/npad/npad_types.h"
6#include "hid_core/resources/npad/npad_vibration.h" 7#include "hid_core/resources/npad/npad_vibration.h"
@@ -10,12 +11,12 @@ namespace Service::HID {
10 11
11NpadN64VibrationDevice::NpadN64VibrationDevice() {} 12NpadN64VibrationDevice::NpadN64VibrationDevice() {}
12 13
13Result NpadN64VibrationDevice::IncrementRefCounter() { 14Result NpadN64VibrationDevice::Activate() {
14 if (ref_counter == 0 && is_mounted) { 15 if (ref_counter == 0 && is_mounted) {
15 f32 volume = 1.0f; 16 f32 volume = 1.0f;
16 const auto result = vibration_handler->GetVibrationVolume(volume); 17 const auto result = vibration_handler->GetVibrationVolume(volume);
17 if (result.IsSuccess()) { 18 if (result.IsSuccess()) {
18 // TODO: SendVibrationInBool 19 xcd_handle->SetVibration(false);
19 } 20 }
20 } 21 }
21 22
@@ -23,19 +24,12 @@ Result NpadN64VibrationDevice::IncrementRefCounter() {
23 return ResultSuccess; 24 return ResultSuccess;
24} 25}
25 26
26Result NpadN64VibrationDevice::DecrementRefCounter() { 27Result NpadN64VibrationDevice::Deactivate() {
27 if (ref_counter == 1) { 28 if (ref_counter == 1 && is_mounted) {
28 if (!is_mounted) {
29 ref_counter = 0;
30 if (is_mounted != false) {
31 // TODO: SendVibrationInBool
32 }
33 return ResultSuccess;
34 }
35 f32 volume = 1.0f; 29 f32 volume = 1.0f;
36 const auto result = vibration_handler->GetVibrationVolume(volume); 30 const auto result = vibration_handler->GetVibrationVolume(volume);
37 if (result.IsSuccess()) { 31 if (result.IsSuccess()) {
38 // TODO 32 xcd_handle->SetVibration(false);
39 } 33 }
40 } 34 }
41 35
@@ -46,6 +40,43 @@ Result NpadN64VibrationDevice::DecrementRefCounter() {
46 return ResultSuccess; 40 return ResultSuccess;
47} 41}
48 42
43Result NpadN64VibrationDevice::Mount(IAbstractedPad& abstracted_pad, NpadVibration* handler) {
44 if (!abstracted_pad.internal_flags.is_connected) {
45 return ResultSuccess;
46 }
47 xcd_handle = abstracted_pad.xcd_handle;
48 vibration_handler = handler;
49 is_mounted = true;
50
51 if (ref_counter == 0) {
52 return ResultSuccess;
53 }
54
55 f32 volume{1.0f};
56 const auto result = vibration_handler->GetVibrationVolume(volume);
57 if (result.IsSuccess()) {
58 xcd_handle->SetVibration(false);
59 }
60
61 return ResultSuccess;
62}
63
64Result NpadN64VibrationDevice::Unmount() {
65 if (ref_counter == 0 || !is_mounted) {
66 is_mounted = false;
67 return ResultSuccess;
68 }
69
70 f32 volume{1.0f};
71 const auto result = vibration_handler->GetVibrationVolume(volume);
72 if (result.IsSuccess()) {
73 xcd_handle->SetVibration(false);
74 }
75
76 is_mounted = false;
77 return ResultSuccess;
78}
79
49Result NpadN64VibrationDevice::SendValueInBool(bool is_vibrating) { 80Result NpadN64VibrationDevice::SendValueInBool(bool is_vibrating) {
50 if (ref_counter < 1) { 81 if (ref_counter < 1) {
51 return ResultVibrationNotInitialized; 82 return ResultVibrationNotInitialized;
@@ -56,7 +87,7 @@ Result NpadN64VibrationDevice::SendValueInBool(bool is_vibrating) {
56 if (result.IsError()) { 87 if (result.IsError()) {
57 return result; 88 return result;
58 } 89 }
59 // TODO: SendVibrationInBool 90 xcd_handle->SetVibration(false);
60 } 91 }
61 return ResultSuccess; 92 return ResultSuccess;
62} 93}
diff --git a/src/hid_core/resources/vibration/n64_vibration_device.h b/src/hid_core/resources/vibration/n64_vibration_device.h
index 54e6efc1a..09de7701c 100644
--- a/src/hid_core/resources/vibration/n64_vibration_device.h
+++ b/src/hid_core/resources/vibration/n64_vibration_device.h
@@ -14,14 +14,18 @@
14 14
15namespace Service::HID { 15namespace Service::HID {
16class NpadVibration; 16class NpadVibration;
17struct IAbstractedPad;
17 18
18/// Handles Npad request from HID interfaces 19/// Handles Npad request from HID interfaces
19class NpadN64VibrationDevice final : public NpadVibrationBase { 20class NpadN64VibrationDevice final : public NpadVibrationBase {
20public: 21public:
21 explicit NpadN64VibrationDevice(); 22 explicit NpadN64VibrationDevice();
22 23
23 Result IncrementRefCounter() override; 24 Result Activate() override;
24 Result DecrementRefCounter() override; 25 Result Deactivate() override;
26
27 Result Mount(IAbstractedPad& abstracted_pad, NpadVibration* handler);
28 Result Unmount();
25 29
26 Result SendValueInBool(bool is_vibrating); 30 Result SendValueInBool(bool is_vibrating);
27 Result SendVibrationNotificationPattern(u32 pattern); 31 Result SendVibrationNotificationPattern(u32 pattern);
diff --git a/src/hid_core/resources/vibration/vibration_base.cpp b/src/hid_core/resources/vibration/vibration_base.cpp
index 350f349c2..f28d30406 100644
--- a/src/hid_core/resources/vibration/vibration_base.cpp
+++ b/src/hid_core/resources/vibration/vibration_base.cpp
@@ -10,12 +10,12 @@ namespace Service::HID {
10 10
11NpadVibrationBase::NpadVibrationBase() {} 11NpadVibrationBase::NpadVibrationBase() {}
12 12
13Result NpadVibrationBase::IncrementRefCounter() { 13Result NpadVibrationBase::Activate() {
14 ref_counter++; 14 ref_counter++;
15 return ResultSuccess; 15 return ResultSuccess;
16} 16}
17 17
18Result NpadVibrationBase::DecrementRefCounter() { 18Result NpadVibrationBase::Deactivate() {
19 if (ref_counter > 0) { 19 if (ref_counter > 0) {
20 ref_counter--; 20 ref_counter--;
21 } 21 }
diff --git a/src/hid_core/resources/vibration/vibration_base.h b/src/hid_core/resources/vibration/vibration_base.h
index c6c5fc4d9..69c26e669 100644
--- a/src/hid_core/resources/vibration/vibration_base.h
+++ b/src/hid_core/resources/vibration/vibration_base.h
@@ -6,6 +6,10 @@
6#include "common/common_types.h" 6#include "common/common_types.h"
7#include "core/hle/result.h" 7#include "core/hle/result.h"
8 8
9namespace Core::HID {
10class EmulatedController;
11}
12
9namespace Service::HID { 13namespace Service::HID {
10class NpadVibration; 14class NpadVibration;
11 15
@@ -14,13 +18,13 @@ class NpadVibrationBase {
14public: 18public:
15 explicit NpadVibrationBase(); 19 explicit NpadVibrationBase();
16 20
17 virtual Result IncrementRefCounter(); 21 virtual Result Activate();
18 virtual Result DecrementRefCounter(); 22 virtual Result Deactivate();
19 23
20 bool IsVibrationMounted() const; 24 bool IsVibrationMounted() const;
21 25
22protected: 26protected:
23 u64 xcd_handle{}; 27 Core::HID::EmulatedController* xcd_handle{nullptr};
24 s32 ref_counter{}; 28 s32 ref_counter{};
25 bool is_mounted{}; 29 bool is_mounted{};
26 NpadVibration* vibration_handler{nullptr}; 30 NpadVibration* vibration_handler{nullptr};
diff --git a/src/hid_core/resources/vibration/vibration_device.cpp b/src/hid_core/resources/vibration/vibration_device.cpp
index 888c3a7ed..08b14591f 100644
--- a/src/hid_core/resources/vibration/vibration_device.cpp
+++ b/src/hid_core/resources/vibration/vibration_device.cpp
@@ -1,6 +1,7 @@
1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project 1// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-3.0-or-later 2// SPDX-License-Identifier: GPL-3.0-or-later
3 3
4#include "hid_core/frontend/emulated_controller.h"
4#include "hid_core/hid_result.h" 5#include "hid_core/hid_result.h"
5#include "hid_core/resources/npad/npad_types.h" 6#include "hid_core/resources/npad/npad_types.h"
6#include "hid_core/resources/npad/npad_vibration.h" 7#include "hid_core/resources/npad/npad_vibration.h"
@@ -10,12 +11,30 @@ namespace Service::HID {
10 11
11NpadVibrationDevice::NpadVibrationDevice() {} 12NpadVibrationDevice::NpadVibrationDevice() {}
12 13
13Result NpadVibrationDevice::IncrementRefCounter() { 14Result NpadVibrationDevice::Activate() {
15 if (ref_counter == 0 && is_mounted) {
16 f32 volume = 1.0f;
17 const auto result = vibration_handler->GetVibrationVolume(volume);
18 if (result.IsSuccess()) {
19 xcd_handle->SetVibration(device_index, Core::HID::DEFAULT_VIBRATION_VALUE);
20 // TODO: SendNotificationPattern;
21 }
22 }
23
14 ref_counter++; 24 ref_counter++;
15 return ResultSuccess; 25 return ResultSuccess;
16} 26}
17 27
18Result NpadVibrationDevice::DecrementRefCounter() { 28Result NpadVibrationDevice::Deactivate() {
29 if (ref_counter == 1 && is_mounted) {
30 f32 volume = 1.0f;
31 const auto result = vibration_handler->GetVibrationVolume(volume);
32 if (result.IsSuccess()) {
33 xcd_handle->SetVibration(device_index, Core::HID::DEFAULT_VIBRATION_VALUE);
34 // TODO: SendNotificationPattern;
35 }
36 }
37
19 if (ref_counter > 0) { 38 if (ref_counter > 0) {
20 ref_counter--; 39 ref_counter--;
21 } 40 }
@@ -23,6 +42,45 @@ Result NpadVibrationDevice::DecrementRefCounter() {
23 return ResultSuccess; 42 return ResultSuccess;
24} 43}
25 44
45Result NpadVibrationDevice::Mount(IAbstractedPad& abstracted_pad, Core::HID::DeviceIndex index,
46 NpadVibration* handler) {
47 if (!abstracted_pad.internal_flags.is_connected) {
48 return ResultSuccess;
49 }
50 xcd_handle = abstracted_pad.xcd_handle;
51 device_index = index;
52 vibration_handler = handler;
53 is_mounted = true;
54
55 if (ref_counter == 0) {
56 return ResultSuccess;
57 }
58
59 f32 volume{1.0f};
60 const auto result = vibration_handler->GetVibrationVolume(volume);
61 if (result.IsSuccess()) {
62 xcd_handle->SetVibration(false);
63 }
64
65 return ResultSuccess;
66}
67
68Result NpadVibrationDevice::Unmount() {
69 if (ref_counter == 0 || !is_mounted) {
70 is_mounted = false;
71 return ResultSuccess;
72 }
73
74 f32 volume{1.0f};
75 const auto result = vibration_handler->GetVibrationVolume(volume);
76 if (result.IsSuccess()) {
77 xcd_handle->SetVibration(device_index, Core::HID::DEFAULT_VIBRATION_VALUE);
78 }
79
80 is_mounted = false;
81 return ResultSuccess;
82}
83
26Result NpadVibrationDevice::SendVibrationValue(const Core::HID::VibrationValue& value) { 84Result NpadVibrationDevice::SendVibrationValue(const Core::HID::VibrationValue& value) {
27 if (ref_counter == 0) { 85 if (ref_counter == 0) {
28 return ResultVibrationNotInitialized; 86 return ResultVibrationNotInitialized;
@@ -37,7 +95,7 @@ Result NpadVibrationDevice::SendVibrationValue(const Core::HID::VibrationValue&
37 return result; 95 return result;
38 } 96 }
39 if (volume <= 0.0f) { 97 if (volume <= 0.0f) {
40 // TODO: SendVibrationValue 98 xcd_handle->SetVibration(device_index, Core::HID::DEFAULT_VIBRATION_VALUE);
41 return ResultSuccess; 99 return ResultSuccess;
42 } 100 }
43 101
@@ -45,7 +103,7 @@ Result NpadVibrationDevice::SendVibrationValue(const Core::HID::VibrationValue&
45 vibration_value.high_amplitude *= volume; 103 vibration_value.high_amplitude *= volume;
46 vibration_value.low_amplitude *= volume; 104 vibration_value.low_amplitude *= volume;
47 105
48 // TODO: SendVibrationValue 106 xcd_handle->SetVibration(device_index, vibration_value);
49 return ResultSuccess; 107 return ResultSuccess;
50} 108}
51 109
@@ -63,11 +121,11 @@ Result NpadVibrationDevice::SendVibrationNotificationPattern([[maybe_unused]] u3
63 pattern = 0; 121 pattern = 0;
64 } 122 }
65 123
66 // return xcd_handle->SendVibrationNotificationPattern(pattern); 124 // TODO: SendVibrationNotificationPattern;
67 return ResultSuccess; 125 return ResultSuccess;
68} 126}
69 127
70Result NpadVibrationDevice::GetActualVibrationValue(Core::HID::VibrationValue& out_value) { 128Result NpadVibrationDevice::GetActualVibrationValue(Core::HID::VibrationValue& out_value) const {
71 if (ref_counter < 1) { 129 if (ref_counter < 1) {
72 return ResultVibrationNotInitialized; 130 return ResultVibrationNotInitialized;
73 } 131 }
@@ -77,7 +135,7 @@ Result NpadVibrationDevice::GetActualVibrationValue(Core::HID::VibrationValue& o
77 return ResultSuccess; 135 return ResultSuccess;
78 } 136 }
79 137
80 // TODO: SendVibrationValue 138 out_value = xcd_handle->GetActualVibrationValue(device_index);
81 return ResultSuccess; 139 return ResultSuccess;
82} 140}
83 141
diff --git a/src/hid_core/resources/vibration/vibration_device.h b/src/hid_core/resources/vibration/vibration_device.h
index 3574ad60b..c2f9891d3 100644
--- a/src/hid_core/resources/vibration/vibration_device.h
+++ b/src/hid_core/resources/vibration/vibration_device.h
@@ -12,6 +12,10 @@
12#include "hid_core/resources/npad/npad_types.h" 12#include "hid_core/resources/npad/npad_types.h"
13#include "hid_core/resources/vibration/vibration_base.h" 13#include "hid_core/resources/vibration/vibration_base.h"
14 14
15namespace Core::HID {
16enum class DeviceIndex : u8;
17}
18
15namespace Service::HID { 19namespace Service::HID {
16class NpadVibration; 20class NpadVibration;
17 21
@@ -20,16 +24,20 @@ class NpadVibrationDevice final : public NpadVibrationBase {
20public: 24public:
21 explicit NpadVibrationDevice(); 25 explicit NpadVibrationDevice();
22 26
23 Result IncrementRefCounter(); 27 Result Activate();
24 Result DecrementRefCounter(); 28 Result Deactivate();
29
30 Result Mount(IAbstractedPad& abstracted_pad, Core::HID::DeviceIndex index,
31 NpadVibration* handler);
32 Result Unmount();
25 33
26 Result SendVibrationValue(const Core::HID::VibrationValue& value); 34 Result SendVibrationValue(const Core::HID::VibrationValue& value);
27 Result SendVibrationNotificationPattern(u32 pattern); 35 Result SendVibrationNotificationPattern(u32 pattern);
28 36
29 Result GetActualVibrationValue(Core::HID::VibrationValue& out_value); 37 Result GetActualVibrationValue(Core::HID::VibrationValue& out_value) const;
30 38
31private: 39private:
32 u32 device_index{}; 40 Core::HID::DeviceIndex device_index{};
33}; 41};
34 42
35} // namespace Service::HID 43} // namespace Service::HID