summaryrefslogtreecommitdiffstats
path: root/src/input_common/drivers
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/input_common/drivers/camera.cpp82
-rw-r--r--src/input_common/drivers/camera.h29
-rw-r--r--src/input_common/drivers/sdl_driver.cpp15
-rw-r--r--src/input_common/drivers/sdl_driver.h6
-rw-r--r--src/input_common/drivers/tas_input.cpp2
-rw-r--r--src/input_common/drivers/udp_client.cpp5
-rw-r--r--src/input_common/drivers/udp_client.h5
7 files changed, 130 insertions, 14 deletions
diff --git a/src/input_common/drivers/camera.cpp b/src/input_common/drivers/camera.cpp
new file mode 100644
index 000000000..dceea67e0
--- /dev/null
+++ b/src/input_common/drivers/camera.cpp
@@ -0,0 +1,82 @@
+// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include <fmt/format.h>
+
+#include "common/param_package.h"
+#include "input_common/drivers/camera.h"
+
+namespace InputCommon {
+constexpr PadIdentifier identifier = {
+ .guid = Common::UUID{},
+ .port = 0,
+ .pad = 0,
+};
+
+Camera::Camera(std::string input_engine_) : InputEngine(std::move(input_engine_)) {
+ PreSetController(identifier);
+}
+
+void Camera::SetCameraData(std::size_t width, std::size_t height, std::vector<u32> data) {
+ const std::size_t desired_width = getImageWidth();
+ const std::size_t desired_height = getImageHeight();
+ status.data.resize(desired_width * desired_height);
+
+ // Resize image to desired format
+ for (std::size_t y = 0; y < desired_height; y++) {
+ for (std::size_t x = 0; x < desired_width; x++) {
+ const std::size_t pixel_index = y * desired_width + x;
+ const std::size_t old_x = width * x / desired_width;
+ const std::size_t old_y = height * y / desired_height;
+ const std::size_t data_pixel_index = old_y * width + old_x;
+ status.data[pixel_index] = static_cast<u8>(data[data_pixel_index] & 0xFF);
+ }
+ }
+
+ SetCamera(identifier, status);
+}
+
+std::size_t Camera::getImageWidth() const {
+ switch (status.format) {
+ case Common::Input::CameraFormat::Size320x240:
+ return 320;
+ case Common::Input::CameraFormat::Size160x120:
+ return 160;
+ case Common::Input::CameraFormat::Size80x60:
+ return 80;
+ case Common::Input::CameraFormat::Size40x30:
+ return 40;
+ case Common::Input::CameraFormat::Size20x15:
+ return 20;
+ case Common::Input::CameraFormat::None:
+ default:
+ return 0;
+ }
+}
+
+std::size_t Camera::getImageHeight() const {
+ switch (status.format) {
+ case Common::Input::CameraFormat::Size320x240:
+ return 240;
+ case Common::Input::CameraFormat::Size160x120:
+ return 120;
+ case Common::Input::CameraFormat::Size80x60:
+ return 60;
+ case Common::Input::CameraFormat::Size40x30:
+ return 30;
+ case Common::Input::CameraFormat::Size20x15:
+ return 15;
+ case Common::Input::CameraFormat::None:
+ default:
+ return 0;
+ }
+}
+
+Common::Input::CameraError Camera::SetCameraFormat(
+ [[maybe_unused]] const PadIdentifier& identifier_,
+ const Common::Input::CameraFormat camera_format) {
+ status.format = camera_format;
+ return Common::Input::CameraError::None;
+}
+
+} // namespace InputCommon
diff --git a/src/input_common/drivers/camera.h b/src/input_common/drivers/camera.h
new file mode 100644
index 000000000..b8a7c75e5
--- /dev/null
+++ b/src/input_common/drivers/camera.h
@@ -0,0 +1,29 @@
+// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include "input_common/input_engine.h"
+
+namespace InputCommon {
+
+/**
+ * A button device factory representing a keyboard. It receives keyboard events and forward them
+ * to all button devices it created.
+ */
+class Camera final : public InputEngine {
+public:
+ explicit Camera(std::string input_engine_);
+
+ void SetCameraData(std::size_t width, std::size_t height, std::vector<u32> data);
+
+ std::size_t getImageWidth() const;
+ std::size_t getImageHeight() const;
+
+ Common::Input::CameraError SetCameraFormat(const PadIdentifier& identifier_,
+ Common::Input::CameraFormat camera_format) override;
+
+ Common::Input::CameraStatus status{};
+};
+
+} // namespace InputCommon
diff --git a/src/input_common/drivers/sdl_driver.cpp b/src/input_common/drivers/sdl_driver.cpp
index 446c027d3..de388ec4c 100644
--- a/src/input_common/drivers/sdl_driver.cpp
+++ b/src/input_common/drivers/sdl_driver.cpp
@@ -1,6 +1,5 @@
-// Copyright 2018 Citra Emulator Project
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
+// SPDX-FileCopyrightText: 2018 Citra Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
#include "common/logging/log.h"
#include "common/math_util.h"
@@ -438,10 +437,17 @@ SDLDriver::SDLDriver(std::string input_engine_) : InputEngine(std::move(input_en
using namespace std::chrono_literals;
while (initialized) {
SDL_PumpEvents();
- SendVibrations();
std::this_thread::sleep_for(1ms);
}
});
+ vibration_thread = std::thread([this] {
+ Common::SetCurrentThreadName("yuzu:input:SDL_Vibration");
+ using namespace std::chrono_literals;
+ while (initialized) {
+ SendVibrations();
+ std::this_thread::sleep_for(10ms);
+ }
+ });
}
// Because the events for joystick connection happens before we have our event watcher added, we
// can just open all the joysticks right here
@@ -457,6 +463,7 @@ SDLDriver::~SDLDriver() {
initialized = false;
if (start_thread) {
poll_thread.join();
+ vibration_thread.join();
SDL_QuitSubSystem(SDL_INIT_JOYSTICK | SDL_INIT_GAMECONTROLLER);
}
}
diff --git a/src/input_common/drivers/sdl_driver.h b/src/input_common/drivers/sdl_driver.h
index 0846fbb50..fc3a44572 100644
--- a/src/input_common/drivers/sdl_driver.h
+++ b/src/input_common/drivers/sdl_driver.h
@@ -1,6 +1,5 @@
-// Copyright 2018 Citra Emulator Project
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
+// SPDX-FileCopyrightText: 2018 Citra Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
@@ -128,5 +127,6 @@ private:
std::atomic<bool> initialized = false;
std::thread poll_thread;
+ std::thread vibration_thread;
};
} // namespace InputCommon
diff --git a/src/input_common/drivers/tas_input.cpp b/src/input_common/drivers/tas_input.cpp
index 66dbefe00..21c6ed405 100644
--- a/src/input_common/drivers/tas_input.cpp
+++ b/src/input_common/drivers/tas_input.cpp
@@ -1,5 +1,5 @@
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
-// SPDX-License-Identifier: GPL-2.0-or-later.
+// SPDX-License-Identifier: GPL-2.0-or-later
#include <cstring>
#include <fmt/format.h>
diff --git a/src/input_common/drivers/udp_client.cpp b/src/input_common/drivers/udp_client.cpp
index 825262a07..808b21069 100644
--- a/src/input_common/drivers/udp_client.cpp
+++ b/src/input_common/drivers/udp_client.cpp
@@ -1,6 +1,5 @@
-// Copyright 2018 Citra Emulator Project
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
+// SPDX-FileCopyrightText: 2018 Citra Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
#include <random>
#include <boost/asio.hpp>
diff --git a/src/input_common/drivers/udp_client.h b/src/input_common/drivers/udp_client.h
index dece2a45b..cea9f579a 100644
--- a/src/input_common/drivers/udp_client.h
+++ b/src/input_common/drivers/udp_client.h
@@ -1,6 +1,5 @@
-// Copyright 2018 Citra Emulator Project
-// Licensed under GPLv2 or any later version
-// Refer to the license.txt file included.
+// SPDX-FileCopyrightText: 2018 Citra Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once