diff options
author | David Marcec <dmarcecguzman@gmail.com> | 2018-10-18 13:34:30 +0200 |
---|---|---|
committer | Zach Hilman <zachhilman@gmail.com> | 2018-11-19 05:21:33 +0100 |
commit | 0c3e7b708684fb17cb29c491fca46125d7d716b9 (patch) | |
tree | 2b0d5fa7202464a02dee2cc08e0155e43b2c2691 /src/core/hle/service/hid | |
parent | Added debugpad skeleton (diff) | |
download | yuzu-0c3e7b708684fb17cb29c491fca46125d7d716b9.tar yuzu-0c3e7b708684fb17cb29c491fca46125d7d716b9.tar.gz yuzu-0c3e7b708684fb17cb29c491fca46125d7d716b9.tar.bz2 yuzu-0c3e7b708684fb17cb29c491fca46125d7d716b9.tar.lz yuzu-0c3e7b708684fb17cb29c491fca46125d7d716b9.tar.xz yuzu-0c3e7b708684fb17cb29c491fca46125d7d716b9.tar.zst yuzu-0c3e7b708684fb17cb29c491fca46125d7d716b9.zip |
Diffstat (limited to 'src/core/hle/service/hid')
-rw-r--r-- | src/core/hle/service/hid/controllers/touchscreen.cpp | 7 | ||||
-rw-r--r-- | src/core/hle/service/hid/controllers/touchscreen.h | 12 |
2 files changed, 18 insertions, 1 deletions
diff --git a/src/core/hle/service/hid/controllers/touchscreen.cpp b/src/core/hle/service/hid/controllers/touchscreen.cpp index 43efef803..07244fe4e 100644 --- a/src/core/hle/service/hid/controllers/touchscreen.cpp +++ b/src/core/hle/service/hid/controllers/touchscreen.cpp @@ -41,7 +41,11 @@ void Controller_Touchscreen::OnUpdate(u8* data, std::size_t size) { const auto [x, y, pressed] = touch_device->GetStatus(); auto& touch_entry = cur_entry.states[0]; + touch_entry.attribute.raw = 0; if (pressed) { + if (cur_entry.entry_count == 0) { + touch_entry.attribute.start_touch.Assign(1); + } touch_entry.x = static_cast<u16>(x * Layout::ScreenUndocked::Width); touch_entry.y = static_cast<u16>(y * Layout::ScreenUndocked::Height); touch_entry.diameter_x = 15; @@ -53,6 +57,9 @@ void Controller_Touchscreen::OnUpdate(u8* data, std::size_t size) { touch_entry.finger = 0; cur_entry.entry_count = 1; } else { + if (cur_entry.entry_count == 1) { + touch_entry.attribute.end_touch.Assign(1); + } cur_entry.entry_count = 0; } diff --git a/src/core/hle/service/hid/controllers/touchscreen.h b/src/core/hle/service/hid/controllers/touchscreen.h index e5db6e6ba..94cd0eba9 100644 --- a/src/core/hle/service/hid/controllers/touchscreen.h +++ b/src/core/hle/service/hid/controllers/touchscreen.h @@ -4,6 +4,7 @@ #pragma once +#include "common/bit_field.h" #include "common/common_funcs.h" #include "common/common_types.h" #include "common/swap.h" @@ -29,9 +30,18 @@ public: void OnLoadInputDevices() override; private: + struct Attributes { + union { + u32 raw{}; + BitField<0, 1, u32_le> start_touch; + BitField<1, 1, u32_le> end_touch; + }; + }; + static_assert(sizeof(Attributes) == 0x4, "Attributes is an invalid size"); + struct TouchState { u64_le delta_time; - u32_le attribute; + Attributes attribute; u32_le finger; u32_le x; u32_le y; |