Browse Source
Merge pull request #12702 from german77/android-input
Merge pull request #12702 from german77/android-input
input_common: Add android input enginepull/15/merge
committed by
GitHub
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 136 additions and 0 deletions
-
2src/input_common/CMakeLists.txt
-
48src/input_common/drivers/android.cpp
-
54src/input_common/drivers/android.h
-
3src/input_common/input_mapping.cpp
-
22src/input_common/main.cpp
-
7src/input_common/main.h
@ -0,0 +1,48 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
|
||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
|
||||
|
#include "input_common/drivers/android.h"
|
||||
|
|
||||
|
namespace InputCommon { |
||||
|
|
||||
|
Android::Android(std::string input_engine_) : InputEngine(std::move(input_engine_)) {} |
||||
|
|
||||
|
void Android::RegisterController(std::size_t controller_number) { |
||||
|
PreSetController(GetIdentifier(controller_number)); |
||||
|
} |
||||
|
|
||||
|
void Android::SetButtonState(std::size_t controller_number, int button_id, bool value) { |
||||
|
const auto identifier = GetIdentifier(controller_number); |
||||
|
SetButton(identifier, button_id, value); |
||||
|
} |
||||
|
|
||||
|
void Android::SetAxisState(std::size_t controller_number, int axis_id, float value) { |
||||
|
const auto identifier = GetIdentifier(controller_number); |
||||
|
SetAxis(identifier, axis_id, value); |
||||
|
} |
||||
|
|
||||
|
void Android::SetMotionState(std::size_t controller_number, u64 delta_timestamp, float gyro_x, |
||||
|
float gyro_y, float gyro_z, float accel_x, float accel_y, |
||||
|
float accel_z) { |
||||
|
const auto identifier = GetIdentifier(controller_number); |
||||
|
const BasicMotion motion_data{ |
||||
|
.gyro_x = gyro_x, |
||||
|
.gyro_y = gyro_y, |
||||
|
.gyro_z = gyro_z, |
||||
|
.accel_x = accel_x, |
||||
|
.accel_y = accel_y, |
||||
|
.accel_z = accel_z, |
||||
|
.delta_timestamp = delta_timestamp, |
||||
|
}; |
||||
|
SetMotion(identifier, 0, motion_data); |
||||
|
} |
||||
|
|
||||
|
PadIdentifier Android::GetIdentifier(std::size_t controller_number) const { |
||||
|
return { |
||||
|
.guid = Common::UUID{}, |
||||
|
.port = controller_number, |
||||
|
.pad = 0, |
||||
|
}; |
||||
|
} |
||||
|
|
||||
|
} // namespace InputCommon
|
||||
@ -0,0 +1,54 @@ |
|||||
|
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project |
||||
|
// SPDX-License-Identifier: GPL-3.0-or-later |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include "input_common/input_engine.h" |
||||
|
|
||||
|
namespace InputCommon { |
||||
|
|
||||
|
/** |
||||
|
* A virtual controller that is always assigned to the game input |
||||
|
*/ |
||||
|
class Android final : public InputEngine { |
||||
|
public: |
||||
|
explicit Android(std::string input_engine_); |
||||
|
|
||||
|
/** |
||||
|
* Registers controller number to accept new inputs |
||||
|
* @param controller_number the controller number that will take this action |
||||
|
*/ |
||||
|
void RegisterController(std::size_t controller_number); |
||||
|
|
||||
|
/** |
||||
|
* Sets the status of all buttons bound with the key to pressed |
||||
|
* @param controller_number the controller number that will take this action |
||||
|
* @param button_id the id of the button |
||||
|
* @param value indicates if the button is pressed or not |
||||
|
*/ |
||||
|
void SetButtonState(std::size_t controller_number, int button_id, bool value); |
||||
|
|
||||
|
/** |
||||
|
* Sets the status of a analog input to a specific player index |
||||
|
* @param controller_number the controller number that will take this action |
||||
|
* @param axis_id the id of the axis to move |
||||
|
* @param value the analog position of the axis |
||||
|
*/ |
||||
|
void SetAxisState(std::size_t controller_number, int axis_id, float value); |
||||
|
|
||||
|
/** |
||||
|
* Sets the status of the motion sensor to a specific player index |
||||
|
* @param controller_number the controller number that will take this action |
||||
|
* @param delta_timestamp time passed since last reading |
||||
|
* @param gyro_x,gyro_y,gyro_z the gyro sensor readings |
||||
|
* @param accel_x,accel_y,accel_z the accelerometer reading |
||||
|
*/ |
||||
|
void SetMotionState(std::size_t controller_number, u64 delta_timestamp, float gyro_x, |
||||
|
float gyro_y, float gyro_z, float accel_x, float accel_y, float accel_z); |
||||
|
|
||||
|
private: |
||||
|
/// Returns the correct identifier corresponding to the player index |
||||
|
PadIdentifier GetIdentifier(std::size_t controller_number) const; |
||||
|
}; |
||||
|
|
||||
|
} // namespace InputCommon |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue