input_common: Reset GC sticks center by measuring multiple packets
This commit is contained in:
parent
cd80471c90
commit
729545a946
|
@ -155,8 +155,12 @@ void Adapter::UpdateStateAxes(std::size_t port, const AdapterPayload& adapter_pa
|
||||||
for (const PadAxes axis : axes) {
|
for (const PadAxes axis : axes) {
|
||||||
const auto index = static_cast<std::size_t>(axis);
|
const auto index = static_cast<std::size_t>(axis);
|
||||||
const u8 axis_value = adapter_payload[offset + 3 + index];
|
const u8 axis_value = adapter_payload[offset + 3 + index];
|
||||||
if (pads[port].axis_origin[index] == 255) {
|
if (pads[port].reset_origin_counter <= 18) {
|
||||||
|
if (pads[port].axis_origin[index] != axis_value) {
|
||||||
|
pads[port].reset_origin_counter = 0;
|
||||||
|
}
|
||||||
pads[port].axis_origin[index] = axis_value;
|
pads[port].axis_origin[index] = axis_value;
|
||||||
|
pads[port].reset_origin_counter++;
|
||||||
}
|
}
|
||||||
pads[port].axis_values[index] =
|
pads[port].axis_values[index] =
|
||||||
static_cast<s16>(axis_value - pads[port].axis_origin[index]);
|
static_cast<s16>(axis_value - pads[port].axis_origin[index]);
|
||||||
|
@ -375,7 +379,7 @@ void Adapter::ResetDevice(std::size_t port) {
|
||||||
pads[port].buttons = 0;
|
pads[port].buttons = 0;
|
||||||
pads[port].last_button = PadButton::Undefined;
|
pads[port].last_button = PadButton::Undefined;
|
||||||
pads[port].axis_values.fill(0);
|
pads[port].axis_values.fill(0);
|
||||||
pads[port].axis_origin.fill(255);
|
pads[port].reset_origin_counter = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Adapter::Reset() {
|
void Adapter::Reset() {
|
||||||
|
|
|
@ -70,6 +70,7 @@ struct GCController {
|
||||||
PadButton last_button{};
|
PadButton last_button{};
|
||||||
std::array<s16, 6> axis_values{};
|
std::array<s16, 6> axis_values{};
|
||||||
std::array<u8, 6> axis_origin{};
|
std::array<u8, 6> axis_origin{};
|
||||||
|
u8 reset_origin_counter{};
|
||||||
};
|
};
|
||||||
|
|
||||||
class Adapter {
|
class Adapter {
|
||||||
|
|
Reference in New Issue