From f2012e5aff21e1ba0d06bfab868191d221e8f7ed Mon Sep 17 00:00:00 2001
From: Narr the Reg <juangerman-13@hotmail.com>
Date: Thu, 25 Jan 2024 23:46:00 -0600
Subject: [PATCH] service: hid: Don't try to vibrate if device isn't
 initialized

---
 src/hid_core/resource_manager.cpp                   | 4 ++++
 src/hid_core/resources/vibration/vibration_base.cpp | 4 ++++
 src/hid_core/resources/vibration/vibration_base.h   | 1 +
 3 files changed, 9 insertions(+)

diff --git a/src/hid_core/resource_manager.cpp b/src/hid_core/resource_manager.cpp
index ca824b4a32..8ef0df020d 100644
--- a/src/hid_core/resource_manager.cpp
+++ b/src/hid_core/resource_manager.cpp
@@ -373,6 +373,10 @@ Result ResourceManager::SendVibrationValue(u64 aruid,
         device = GetNSVibrationDevice(handle);
     }
     if (device != nullptr) {
+        // Prevent sending vibrations to an inactive vibration handle
+        if (!device->IsActive()) {
+            return ResultSuccess;
+        }
         result = device->SendVibrationValue(value);
     }
     return result;
diff --git a/src/hid_core/resources/vibration/vibration_base.cpp b/src/hid_core/resources/vibration/vibration_base.cpp
index f28d304060..90bff88f4b 100644
--- a/src/hid_core/resources/vibration/vibration_base.cpp
+++ b/src/hid_core/resources/vibration/vibration_base.cpp
@@ -23,6 +23,10 @@ Result NpadVibrationBase::Deactivate() {
     return ResultSuccess;
 }
 
+bool NpadVibrationBase::IsActive() const {
+    return ref_counter > 0;
+}
+
 bool NpadVibrationBase::IsVibrationMounted() const {
     return is_mounted;
 }
diff --git a/src/hid_core/resources/vibration/vibration_base.h b/src/hid_core/resources/vibration/vibration_base.h
index 69c26e6690..8fe35634d7 100644
--- a/src/hid_core/resources/vibration/vibration_base.h
+++ b/src/hid_core/resources/vibration/vibration_base.h
@@ -21,6 +21,7 @@ public:
     virtual Result Activate();
     virtual Result Deactivate();
 
+    bool IsActive() const;
     bool IsVibrationMounted() const;
 
 protected: