diff --git a/app/src/main/cpp/skyline/services/hid/IHidServer.cpp b/app/src/main/cpp/skyline/services/hid/IHidServer.cpp index 8e834294..587db7f2 100644 --- a/app/src/main/cpp/skyline/services/hid/IHidServer.cpp +++ b/app/src/main/cpp/skyline/services/hid/IHidServer.cpp @@ -10,12 +10,15 @@ using namespace skyline::input; namespace skyline::service::hid { IHidServer::IHidServer(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager, { {0x0, SFUNC(IHidServer::CreateAppletResource)}, + {0x1, SFUNC(IHidServer::ActivateDebugPad)}, + {0xB, SFUNC(IHidServer::ActivateTouchScreen)}, {0x64, SFUNC(IHidServer::SetSupportedNpadStyleSet)}, - {0x64, SFUNC(IHidServer::GetSupportedNpadStyleSet)}, + {0x65, SFUNC(IHidServer::GetSupportedNpadStyleSet)}, {0x66, SFUNC(IHidServer::SetSupportedNpadIdType)}, {0x67, SFUNC(IHidServer::ActivateNpad)}, {0x68, SFUNC(IHidServer::DeactivateNpad)}, {0x6A, SFUNC(IHidServer::AcquireNpadStyleSetUpdateEventHandle)}, + {0x6C, SFUNC(IHidServer::GetPlayerLedPattern)}, {0x6D, SFUNC(IHidServer::ActivateNpadWithRevision)}, {0x78, SFUNC(IHidServer::SetNpadJoyHoldType)}, {0x79, SFUNC(IHidServer::GetNpadJoyHoldType)}, @@ -31,6 +34,15 @@ namespace skyline::service::hid { return {}; } + Result IHidServer::ActivateDebugPad(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + return {}; + } + + Result IHidServer::ActivateTouchScreen(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + state.input->touch.Activate(); + return {}; + } + Result IHidServer::SetSupportedNpadStyleSet(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { auto styleSet = request.Pop(); std::lock_guard lock(state.input->npad.mutex); @@ -80,6 +92,33 @@ namespace skyline::service::hid { return {}; } + Result IHidServer::GetPlayerLedPattern(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + auto id = request.Pop(); + response.Push([id] { + switch (id) { + case NpadId::Player1: + return 0b0001; + case NpadId::Player2: + return 0b0011; + case NpadId::Player3: + return 0b0111; + case NpadId::Player4: + return 0b1111; + case NpadId::Player5: + return 0b1001; + case NpadId::Player6: + return 0b0101; + case NpadId::Player7: + return 0b1101; + case NpadId::Player8: + return 0b0110; + default: + return 0b0000; + } + }()); + return {}; + } + Result IHidServer::ActivateNpadWithRevision(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { state.input->npad.Activate(); return {}; diff --git a/app/src/main/cpp/skyline/services/hid/IHidServer.h b/app/src/main/cpp/skyline/services/hid/IHidServer.h index 3c753733..d4a2e08c 100644 --- a/app/src/main/cpp/skyline/services/hid/IHidServer.h +++ b/app/src/main/cpp/skyline/services/hid/IHidServer.h @@ -20,6 +20,16 @@ namespace skyline::service::hid { */ Result CreateAppletResource(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** + * @brief This would activate the debug pad (if hid:dbg was used) on a development device + */ + Result ActivateDebugPad(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + /** + * @brief This activates the touch screen (if it's disabled, it is enabled by default) + */ + Result ActivateTouchScreen(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** * @brief This sets the style of controllers supported (https://switchbrew.org/wiki/HID_services#SetSupportedNpadStyleSet) */ @@ -50,6 +60,11 @@ namespace skyline::service::hid { */ Result AcquireNpadStyleSetUpdateEventHandle(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** + * @brief This requests the LED pattern which represents a particular Player + */ + Result GetPlayerLedPattern(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + /** * @brief This requests the activation of controllers with a specific HID revision (https://switchbrew.org/wiki/HID_services#ActivateNpadWithRevision) */ diff --git a/app/src/main/java/emu/skyline/MainActivity.kt b/app/src/main/java/emu/skyline/MainActivity.kt index 00081ec5..0b5b3085 100644 --- a/app/src/main/java/emu/skyline/MainActivity.kt +++ b/app/src/main/java/emu/skyline/MainActivity.kt @@ -173,15 +173,15 @@ class MainActivity : AppCompatActivity() { settings_fab.setOnClickListener { startActivityForResult(Intent(this, SettingsActivity::class.java), 3) } - open_fab.setOnClickListener { startActivity(Intent(this, LogActivity::class.java)) } - - log_fab.setOnClickListener { + open_fab.setOnClickListener { startActivityForResult(Intent(Intent.ACTION_OPEN_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) type = "*/*" }, 2) } + log_fab.setOnClickListener { startActivity(Intent(this, LogActivity::class.java)) } + setupAppList() app_list.addOnScrollListener(object : RecyclerView.OnScrollListener() {