|
|
|
@ -3,6 +3,7 @@
|
|
|
|
|
// Refer to the license.txt file included.
|
|
|
|
|
|
|
|
|
|
#include "common/settings.h"
|
|
|
|
|
#include "core/core.h"
|
|
|
|
|
#include "core/core_timing.h"
|
|
|
|
|
#include "core/hle/service/hid/controllers/console_sixaxis.h"
|
|
|
|
|
|
|
|
|
@ -10,7 +11,10 @@ namespace Service::HID {
|
|
|
|
|
constexpr std::size_t SHARED_MEMORY_OFFSET = 0x3C200;
|
|
|
|
|
|
|
|
|
|
Controller_ConsoleSixAxis::Controller_ConsoleSixAxis(Core::System& system_)
|
|
|
|
|
: ControllerBase{system_} {}
|
|
|
|
|
: ControllerBase{system_} {
|
|
|
|
|
console = system.HIDCore().GetEmulatedConsole();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Controller_ConsoleSixAxis::~Controller_ConsoleSixAxis() = default;
|
|
|
|
|
|
|
|
|
|
void Controller_ConsoleSixAxis::OnInit() {}
|
|
|
|
@ -38,25 +42,21 @@ void Controller_ConsoleSixAxis::OnUpdate(const Core::Timing::CoreTiming& core_ti
|
|
|
|
|
cur_entry.sampling_number2 = cur_entry.sampling_number;
|
|
|
|
|
|
|
|
|
|
// Try to read sixaxis sensor states
|
|
|
|
|
MotionDevice motion_device{};
|
|
|
|
|
const auto& device = motions[0];
|
|
|
|
|
if (device) {
|
|
|
|
|
std::tie(motion_device.accel, motion_device.gyro, motion_device.rotation,
|
|
|
|
|
motion_device.orientation, motion_device.quaternion) = device->GetStatus();
|
|
|
|
|
console_six_axis.is_seven_six_axis_sensor_at_rest = motion_device.gyro.Length2() < 0.0001f;
|
|
|
|
|
}
|
|
|
|
|
const auto motion_status = console->GetMotion();
|
|
|
|
|
|
|
|
|
|
cur_entry.accel = motion_device.accel;
|
|
|
|
|
console_six_axis.is_seven_six_axis_sensor_at_rest = motion_status.is_at_rest;
|
|
|
|
|
|
|
|
|
|
cur_entry.accel = motion_status.accel;
|
|
|
|
|
// Zero gyro values as they just mess up with the camera
|
|
|
|
|
// Note: Probably a correct sensivity setting must be set
|
|
|
|
|
cur_entry.gyro = {};
|
|
|
|
|
cur_entry.quaternion = {
|
|
|
|
|
{
|
|
|
|
|
motion_device.quaternion.xyz.y,
|
|
|
|
|
motion_device.quaternion.xyz.x,
|
|
|
|
|
-motion_device.quaternion.w,
|
|
|
|
|
motion_status.quaternion.xyz.y,
|
|
|
|
|
motion_status.quaternion.xyz.x,
|
|
|
|
|
-motion_status.quaternion.w,
|
|
|
|
|
},
|
|
|
|
|
-motion_device.quaternion.xyz.z,
|
|
|
|
|
-motion_status.quaternion.xyz.z,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
console_six_axis.sampling_number++;
|
|
|
|
@ -70,13 +70,6 @@ void Controller_ConsoleSixAxis::OnUpdate(const Core::Timing::CoreTiming& core_ti
|
|
|
|
|
std::memcpy(transfer_memory, &seven_six_axis, sizeof(seven_six_axis));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Controller_ConsoleSixAxis::OnLoadInputDevices() {
|
|
|
|
|
const auto player = Settings::values.players.GetValue()[0];
|
|
|
|
|
std::transform(player.motions.begin() + Settings::NativeMotion::MOTION_HID_BEGIN,
|
|
|
|
|
player.motions.begin() + Settings::NativeMotion::MOTION_HID_END, motions.begin(),
|
|
|
|
|
Input::CreateDevice<Input::MotionDevice>);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void Controller_ConsoleSixAxis::SetTransferMemoryPointer(u8* t_mem) {
|
|
|
|
|
is_transfer_memory_set = true;
|
|
|
|
|
transfer_memory = t_mem;
|
|
|
|
|