From e7032d9e641f99366242000fbc9ca59a55d1a95f Mon Sep 17 00:00:00 2001
From: ameerj <52414509+ameerj@users.noreply.github.com>
Date: Sun, 25 Dec 2022 14:00:20 -0500
Subject: [PATCH] hidbus: Use ReadBufferSpan

---
 src/core/hle/service/hid/controllers/npad.cpp | 5 +++--
 src/core/hle/service/hid/controllers/npad.h   | 3 ++-
 src/core/hle/service/hid/hid.cpp              | 2 +-
 src/core/hle/service/hid/hidbus.cpp           | 2 +-
 src/core/hle/service/hid/hidbus/hidbus_base.h | 3 ++-
 src/core/hle/service/hid/hidbus/ringcon.cpp   | 2 +-
 src/core/hle/service/hid/hidbus/ringcon.h     | 3 ++-
 src/core/hle/service/hid/hidbus/starlink.cpp  | 2 +-
 src/core/hle/service/hid/hidbus/starlink.h    | 2 +-
 src/core/hle/service/hid/hidbus/stubbed.cpp   | 2 +-
 src/core/hle/service/hid/hidbus/stubbed.h     | 2 +-
 11 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/core/hle/service/hid/controllers/npad.cpp b/src/core/hle/service/hid/controllers/npad.cpp
index df63083a8..713f8e0c6 100644
--- a/src/core/hle/service/hid/controllers/npad.cpp
+++ b/src/core/hle/service/hid/controllers/npad.cpp
@@ -737,11 +737,12 @@ Core::HID::NpadStyleTag Controller_NPad::GetSupportedStyleSet() const {
     return hid_core.GetSupportedStyleTag();
 }
 
-void Controller_NPad::SetSupportedNpadIdTypes(const u8* const data, std::size_t length) {
+void Controller_NPad::SetSupportedNpadIdTypes(std::span<const u8> data) {
+    const auto length = data.size();
     ASSERT(length > 0 && (length % sizeof(u32)) == 0);
     supported_npad_id_types.clear();
     supported_npad_id_types.resize(length / sizeof(u32));
-    std::memcpy(supported_npad_id_types.data(), data, length);
+    std::memcpy(supported_npad_id_types.data(), data.data(), length);
 }
 
 void Controller_NPad::GetSupportedNpadIdTypes(u32* data, std::size_t max_length) {
diff --git a/src/core/hle/service/hid/controllers/npad.h b/src/core/hle/service/hid/controllers/npad.h
index 988ac8ec4..1f7d33459 100644
--- a/src/core/hle/service/hid/controllers/npad.h
+++ b/src/core/hle/service/hid/controllers/npad.h
@@ -6,6 +6,7 @@
 #include <array>
 #include <atomic>
 #include <mutex>
+#include <span>
 
 #include "common/bit_field.h"
 #include "common/common_types.h"
@@ -95,7 +96,7 @@ public:
     void SetSupportedStyleSet(Core::HID::NpadStyleTag style_set);
     Core::HID::NpadStyleTag GetSupportedStyleSet() const;
 
-    void SetSupportedNpadIdTypes(const u8* const data, std::size_t length);
+    void SetSupportedNpadIdTypes(std::span<const u8> data);
     void GetSupportedNpadIdTypes(u32* data, std::size_t max_length);
     std::size_t GetSupportedNpadIdTypesSize() const;
 
diff --git a/src/core/hle/service/hid/hid.cpp b/src/core/hle/service/hid/hid.cpp
index 80db6af06..294fe927b 100644
--- a/src/core/hle/service/hid/hid.cpp
+++ b/src/core/hle/service/hid/hid.cpp
@@ -1026,7 +1026,7 @@ void Hid::SetSupportedNpadIdType(Kernel::HLERequestContext& ctx) {
     const auto applet_resource_user_id{rp.Pop<u64>()};
 
     applet_resource->GetController<Controller_NPad>(HidController::NPad)
-        .SetSupportedNpadIdTypes(ctx.ReadBufferSpan().data(), ctx.GetReadBufferSize());
+        .SetSupportedNpadIdTypes(ctx.ReadBufferSpan());
 
     LOG_DEBUG(Service_HID, "called, applet_resource_user_id={}", applet_resource_user_id);
 
diff --git a/src/core/hle/service/hid/hidbus.cpp b/src/core/hle/service/hid/hidbus.cpp
index e5e50845f..abc15c34e 100644
--- a/src/core/hle/service/hid/hidbus.cpp
+++ b/src/core/hle/service/hid/hidbus.cpp
@@ -351,7 +351,7 @@ void HidBus::GetExternalDeviceId(Kernel::HLERequestContext& ctx) {
 
 void HidBus::SendCommandAsync(Kernel::HLERequestContext& ctx) {
     IPC::RequestParser rp{ctx};
-    const auto data = ctx.ReadBuffer();
+    const auto data = ctx.ReadBufferSpan();
     const auto bus_handle_{rp.PopRaw<BusHandle>()};
 
     LOG_DEBUG(Service_HID,
diff --git a/src/core/hle/service/hid/hidbus/hidbus_base.h b/src/core/hle/service/hid/hidbus/hidbus_base.h
index d3960f506..65e301137 100644
--- a/src/core/hle/service/hid/hidbus/hidbus_base.h
+++ b/src/core/hle/service/hid/hidbus/hidbus_base.h
@@ -4,6 +4,7 @@
 #pragma once
 
 #include <array>
+#include <span>
 #include "common/common_types.h"
 #include "core/hle/result.h"
 
@@ -150,7 +151,7 @@ public:
     }
 
     // Assigns a command from data
-    virtual bool SetCommand(const std::vector<u8>& data) {
+    virtual bool SetCommand(std::span<const u8> data) {
         return {};
     }
 
diff --git a/src/core/hle/service/hid/hidbus/ringcon.cpp b/src/core/hle/service/hid/hidbus/ringcon.cpp
index 57f1a2a26..7ab3903dc 100644
--- a/src/core/hle/service/hid/hidbus/ringcon.cpp
+++ b/src/core/hle/service/hid/hidbus/ringcon.cpp
@@ -112,7 +112,7 @@ std::vector<u8> RingController::GetReply() const {
     }
 }
 
-bool RingController::SetCommand(const std::vector<u8>& data) {
+bool RingController::SetCommand(std::span<const u8> data) {
     if (data.size() < 4) {
         LOG_ERROR(Service_HID, "Command size not supported {}", data.size());
         command = RingConCommands::Error;
diff --git a/src/core/hle/service/hid/hidbus/ringcon.h b/src/core/hle/service/hid/hidbus/ringcon.h
index b37df50ac..8e195ca79 100644
--- a/src/core/hle/service/hid/hidbus/ringcon.h
+++ b/src/core/hle/service/hid/hidbus/ringcon.h
@@ -4,6 +4,7 @@
 #pragma once
 
 #include <array>
+#include <span>
 
 #include "common/common_types.h"
 #include "core/hle/service/hid/hidbus/hidbus_base.h"
@@ -31,7 +32,7 @@ public:
     u8 GetDeviceId() const override;
 
     // Assigns a command from data
-    bool SetCommand(const std::vector<u8>& data) override;
+    bool SetCommand(std::span<const u8> data) override;
 
     // Returns a reply from a command
     std::vector<u8> GetReply() const override;
diff --git a/src/core/hle/service/hid/hidbus/starlink.cpp b/src/core/hle/service/hid/hidbus/starlink.cpp
index dd439f60a..d0e760314 100644
--- a/src/core/hle/service/hid/hidbus/starlink.cpp
+++ b/src/core/hle/service/hid/hidbus/starlink.cpp
@@ -42,7 +42,7 @@ std::vector<u8> Starlink::GetReply() const {
     return {};
 }
 
-bool Starlink::SetCommand(const std::vector<u8>& data) {
+bool Starlink::SetCommand(std::span<const u8> data) {
     LOG_ERROR(Service_HID, "Command not implemented");
     return false;
 }
diff --git a/src/core/hle/service/hid/hidbus/starlink.h b/src/core/hle/service/hid/hidbus/starlink.h
index 0b1b7ba49..07c800e6e 100644
--- a/src/core/hle/service/hid/hidbus/starlink.h
+++ b/src/core/hle/service/hid/hidbus/starlink.h
@@ -29,7 +29,7 @@ public:
     u8 GetDeviceId() const override;
 
     // Assigns a command from data
-    bool SetCommand(const std::vector<u8>& data) override;
+    bool SetCommand(std::span<const u8> data) override;
 
     // Returns a reply from a command
     std::vector<u8> GetReply() const override;
diff --git a/src/core/hle/service/hid/hidbus/stubbed.cpp b/src/core/hle/service/hid/hidbus/stubbed.cpp
index e477443e3..07632c872 100644
--- a/src/core/hle/service/hid/hidbus/stubbed.cpp
+++ b/src/core/hle/service/hid/hidbus/stubbed.cpp
@@ -43,7 +43,7 @@ std::vector<u8> HidbusStubbed::GetReply() const {
     return {};
 }
 
-bool HidbusStubbed::SetCommand(const std::vector<u8>& data) {
+bool HidbusStubbed::SetCommand(std::span<const u8> data) {
     LOG_ERROR(Service_HID, "Command not implemented");
     return false;
 }
diff --git a/src/core/hle/service/hid/hidbus/stubbed.h b/src/core/hle/service/hid/hidbus/stubbed.h
index 91165ceff..38eaa0ecc 100644
--- a/src/core/hle/service/hid/hidbus/stubbed.h
+++ b/src/core/hle/service/hid/hidbus/stubbed.h
@@ -29,7 +29,7 @@ public:
     u8 GetDeviceId() const override;
 
     // Assigns a command from data
-    bool SetCommand(const std::vector<u8>& data) override;
+    bool SetCommand(std::span<const u8> data) override;
 
     // Returns a reply from a command
     std::vector<u8> GetReply() const override;