diff --git a/ControllerUSB/include/Controllers/XboxController.h b/ControllerUSB/include/Controllers/XboxController.h index cbb087b..7536f85 100644 --- a/ControllerUSB/include/Controllers/XboxController.h +++ b/ControllerUSB/include/Controllers/XboxController.h @@ -22,16 +22,17 @@ struct XboxButtonData uint8_t reserved; - bool a; - bool b; - bool x; - bool y; + //These are analog + uint8_t a; + uint8_t b; + uint8_t x; + uint8_t y; - bool black_buttton; - bool white_button; + uint8_t black_buttton; + uint8_t white_button; - bool trigger_left; - bool trigger_right; + uint8_t trigger_left; + uint8_t trigger_right; int16_t stick_left_x; int16_t stick_left_y; diff --git a/ControllerUSB/source/Controllers/XboxController.cpp b/ControllerUSB/source/Controllers/XboxController.cpp index 258fd40..2e77d75 100644 --- a/ControllerUSB/source/Controllers/XboxController.cpp +++ b/ControllerUSB/source/Controllers/XboxController.cpp @@ -102,11 +102,22 @@ Status XboxController::GetInput() Status rc = m_inPipe->Read(input_bytes, sizeof(input_bytes)); if (S_SUCCEEDED(rc)) + { m_buttonData = *reinterpret_cast(input_bytes); + } return rc; } +float XboxController::NormalizeTrigger(uint8_t value) +{ + uint8_t deadzone = (UINT8_MAX * _xboxControllerConfig.triggerDeadzonePercent) / 100; + //If the given value is below the trigger zone, save the calc and return 0, otherwise adjust the value to the deadzone + return value < deadzone + ? 0 + : static_cast(value - deadzone) / (UINT8_MAX - deadzone); +} + void XboxController::NormalizeAxis(int16_t x, int16_t y, uint8_t deadzonePercent, @@ -147,8 +158,8 @@ NormalizedButtonData XboxController::GetNormalizedButtonData() { NormalizedButtonData normalData; - normalData.triggers[0] = m_buttonData.trigger_left; - normalData.triggers[1] = m_buttonData.trigger_right; + normalData.triggers[0] = NormalizeTrigger(m_buttonData.trigger_left); + normalData.triggers[1] = NormalizeTrigger(m_buttonData.trigger_right); NormalizeAxis(m_buttonData.stick_left_x, m_buttonData.stick_left_y, _xboxControllerConfig.leftStickDeadzonePercent, &normalData.sticks[0].axis_x, &normalData.sticks[0].axis_y); @@ -156,24 +167,24 @@ NormalizedButtonData XboxController::GetNormalizedButtonData() &normalData.sticks[1].axis_x, &normalData.sticks[1].axis_y); bool buttons[NUM_CONTROLLERBUTTONS]{ - m_buttonData.y, - m_buttonData.b, - m_buttonData.a, - m_buttonData.x, + m_buttonData.y != 0, + m_buttonData.b != 0, + m_buttonData.a != 0, + m_buttonData.x != 0, m_buttonData.stick_left_click, m_buttonData.stick_right_click, false, false, - m_buttonData.trigger_left, - m_buttonData.trigger_right, + m_buttonData.trigger_left != 0, + m_buttonData.trigger_right != 0, m_buttonData.back, m_buttonData.start, m_buttonData.dpad_up, m_buttonData.dpad_right, m_buttonData.dpad_down, m_buttonData.dpad_left, - m_buttonData.white_button, - m_buttonData.black_buttton, + m_buttonData.white_button != 0, + m_buttonData.black_buttton != 0, }; for (int i = 0; i != NUM_CONTROLLERBUTTONS; ++i)