| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
- // SPDX-License-Identifier: GPL-3.0-or-later
- #pragma once
- #include "hid_core/hid_result.h"
- #include "hid_core/hid_types.h"
- namespace Service::HID {
- constexpr bool IsNpadIdValid(const Core::HID::NpadIdType npad_id) {
- switch (npad_id) {
- case Core::HID::NpadIdType::Player1:
- case Core::HID::NpadIdType::Player2:
- case Core::HID::NpadIdType::Player3:
- case Core::HID::NpadIdType::Player4:
- case Core::HID::NpadIdType::Player5:
- case Core::HID::NpadIdType::Player6:
- case Core::HID::NpadIdType::Player7:
- case Core::HID::NpadIdType::Player8:
- case Core::HID::NpadIdType::Other:
- case Core::HID::NpadIdType::Handheld:
- return true;
- default:
- return false;
- }
- }
- constexpr Result IsSixaxisHandleValid(const Core::HID::SixAxisSensorHandle& handle) {
- const auto npad_id = IsNpadIdValid(static_cast<Core::HID::NpadIdType>(handle.npad_id));
- const bool device_index = handle.device_index < Core::HID::DeviceIndex::MaxDeviceIndex;
- if (!npad_id) {
- return ResultInvalidNpadId;
- }
- if (!device_index) {
- return NpadDeviceIndexOutOfRange;
- }
- return ResultSuccess;
- }
- constexpr Result IsVibrationHandleValid(const Core::HID::VibrationDeviceHandle& handle) {
- switch (handle.npad_type) {
- case Core::HID::NpadStyleIndex::Fullkey:
- case Core::HID::NpadStyleIndex::Handheld:
- case Core::HID::NpadStyleIndex::JoyconDual:
- case Core::HID::NpadStyleIndex::JoyconLeft:
- case Core::HID::NpadStyleIndex::JoyconRight:
- case Core::HID::NpadStyleIndex::GameCube:
- case Core::HID::NpadStyleIndex::N64:
- case Core::HID::NpadStyleIndex::SystemExt:
- case Core::HID::NpadStyleIndex::System:
- // These support vibration
- break;
- default:
- return ResultVibrationInvalidStyleIndex;
- }
- if (!IsNpadIdValid(static_cast<Core::HID::NpadIdType>(handle.npad_id))) {
- return ResultVibrationInvalidNpadId;
- }
- if (handle.device_index >= Core::HID::DeviceIndex::MaxDeviceIndex) {
- return ResultVibrationDeviceIndexOutOfRange;
- }
- return ResultSuccess;
- }
- /// Converts a Core::HID::NpadIdType to an array index.
- constexpr size_t NpadIdTypeToIndex(Core::HID::NpadIdType npad_id_type) {
- switch (npad_id_type) {
- case Core::HID::NpadIdType::Player1:
- return 0;
- case Core::HID::NpadIdType::Player2:
- return 1;
- case Core::HID::NpadIdType::Player3:
- return 2;
- case Core::HID::NpadIdType::Player4:
- return 3;
- case Core::HID::NpadIdType::Player5:
- return 4;
- case Core::HID::NpadIdType::Player6:
- return 5;
- case Core::HID::NpadIdType::Player7:
- return 6;
- case Core::HID::NpadIdType::Player8:
- return 7;
- case Core::HID::NpadIdType::Handheld:
- return 8;
- case Core::HID::NpadIdType::Other:
- return 9;
- default:
- return 8;
- }
- }
- /// Converts an array index to a Core::HID::NpadIdType
- constexpr Core::HID::NpadIdType IndexToNpadIdType(size_t index) {
- switch (index) {
- case 0:
- return Core::HID::NpadIdType::Player1;
- case 1:
- return Core::HID::NpadIdType::Player2;
- case 2:
- return Core::HID::NpadIdType::Player3;
- case 3:
- return Core::HID::NpadIdType::Player4;
- case 4:
- return Core::HID::NpadIdType::Player5;
- case 5:
- return Core::HID::NpadIdType::Player6;
- case 6:
- return Core::HID::NpadIdType::Player7;
- case 7:
- return Core::HID::NpadIdType::Player8;
- case 8:
- return Core::HID::NpadIdType::Handheld;
- case 9:
- return Core::HID::NpadIdType::Other;
- default:
- return Core::HID::NpadIdType::Invalid;
- }
- }
- constexpr Core::HID::NpadStyleSet GetStylesetByIndex(std::size_t index) {
- switch (index) {
- case 0:
- return Core::HID::NpadStyleSet::Fullkey;
- case 1:
- return Core::HID::NpadStyleSet::Handheld;
- case 2:
- return Core::HID::NpadStyleSet::JoyDual;
- case 3:
- return Core::HID::NpadStyleSet::JoyLeft;
- case 4:
- return Core::HID::NpadStyleSet::JoyRight;
- case 5:
- return Core::HID::NpadStyleSet::Palma;
- default:
- return Core::HID::NpadStyleSet::None;
- }
- }
- } // namespace Service::HID
|