blob: 48f0c771de206ae36f0fe3e650caeb2f1dfd753f [file] [log] [blame]
Austin Schuh812d0d12021-11-04 20:16:48 -07001// Copyright (c) FIRST and other WPILib contributors.
2// Open Source Software; you can modify and/or share it under the terms of
3// the WPILib BSD license file in the root directory of this project.
Brian Silverman8fce7482020-01-05 13:18:21 -08004
5#include "frc/Joystick.h"
6
7#include <cmath>
8
9#include <hal/FRCUsageReporting.h>
Austin Schuh812d0d12021-11-04 20:16:48 -070010#include <wpi/numbers>
Brian Silverman8fce7482020-01-05 13:18:21 -080011
Brian Silverman8fce7482020-01-05 13:18:21 -080012using namespace frc;
13
14Joystick::Joystick(int port) : GenericHID(port) {
15 m_axes[Axis::kX] = kDefaultXChannel;
16 m_axes[Axis::kY] = kDefaultYChannel;
17 m_axes[Axis::kZ] = kDefaultZChannel;
18 m_axes[Axis::kTwist] = kDefaultTwistChannel;
19 m_axes[Axis::kThrottle] = kDefaultThrottleChannel;
20
21 HAL_Report(HALUsageReporting::kResourceType_Joystick, port + 1);
22}
23
Austin Schuh812d0d12021-11-04 20:16:48 -070024void Joystick::SetXChannel(int channel) {
25 m_axes[Axis::kX] = channel;
26}
Brian Silverman8fce7482020-01-05 13:18:21 -080027
Austin Schuh812d0d12021-11-04 20:16:48 -070028void Joystick::SetYChannel(int channel) {
29 m_axes[Axis::kY] = channel;
30}
Brian Silverman8fce7482020-01-05 13:18:21 -080031
Austin Schuh812d0d12021-11-04 20:16:48 -070032void Joystick::SetZChannel(int channel) {
33 m_axes[Axis::kZ] = channel;
34}
Brian Silverman8fce7482020-01-05 13:18:21 -080035
Austin Schuh812d0d12021-11-04 20:16:48 -070036void Joystick::SetTwistChannel(int channel) {
37 m_axes[Axis::kTwist] = channel;
38}
Brian Silverman8fce7482020-01-05 13:18:21 -080039
40void Joystick::SetThrottleChannel(int channel) {
41 m_axes[Axis::kThrottle] = channel;
42}
43
Austin Schuh812d0d12021-11-04 20:16:48 -070044int Joystick::GetXChannel() const {
45 return m_axes[Axis::kX];
46}
Brian Silverman8fce7482020-01-05 13:18:21 -080047
Austin Schuh812d0d12021-11-04 20:16:48 -070048int Joystick::GetYChannel() const {
49 return m_axes[Axis::kY];
50}
Brian Silverman8fce7482020-01-05 13:18:21 -080051
Austin Schuh812d0d12021-11-04 20:16:48 -070052int Joystick::GetZChannel() const {
53 return m_axes[Axis::kZ];
54}
Brian Silverman8fce7482020-01-05 13:18:21 -080055
Austin Schuh812d0d12021-11-04 20:16:48 -070056int Joystick::GetTwistChannel() const {
57 return m_axes[Axis::kTwist];
58}
Brian Silverman8fce7482020-01-05 13:18:21 -080059
Austin Schuh812d0d12021-11-04 20:16:48 -070060int Joystick::GetThrottleChannel() const {
61 return m_axes[Axis::kThrottle];
62}
Brian Silverman8fce7482020-01-05 13:18:21 -080063
Austin Schuh812d0d12021-11-04 20:16:48 -070064double Joystick::GetX() const {
Brian Silverman8fce7482020-01-05 13:18:21 -080065 return GetRawAxis(m_axes[Axis::kX]);
66}
67
Austin Schuh812d0d12021-11-04 20:16:48 -070068double Joystick::GetY() const {
Brian Silverman8fce7482020-01-05 13:18:21 -080069 return GetRawAxis(m_axes[Axis::kY]);
70}
71
Austin Schuh812d0d12021-11-04 20:16:48 -070072double Joystick::GetZ() const {
73 return GetRawAxis(m_axes[Axis::kZ]);
74}
Brian Silverman8fce7482020-01-05 13:18:21 -080075
Austin Schuh812d0d12021-11-04 20:16:48 -070076double Joystick::GetTwist() const {
77 return GetRawAxis(m_axes[Axis::kTwist]);
78}
Brian Silverman8fce7482020-01-05 13:18:21 -080079
80double Joystick::GetThrottle() const {
81 return GetRawAxis(m_axes[Axis::kThrottle]);
82}
83
Austin Schuh812d0d12021-11-04 20:16:48 -070084bool Joystick::GetTrigger() const {
85 return GetRawButton(Button::kTrigger);
86}
Brian Silverman8fce7482020-01-05 13:18:21 -080087
88bool Joystick::GetTriggerPressed() {
89 return GetRawButtonPressed(Button::kTrigger);
90}
91
92bool Joystick::GetTriggerReleased() {
93 return GetRawButtonReleased(Button::kTrigger);
94}
95
Austin Schuh812d0d12021-11-04 20:16:48 -070096bool Joystick::GetTop() const {
97 return GetRawButton(Button::kTop);
98}
Brian Silverman8fce7482020-01-05 13:18:21 -080099
Austin Schuh812d0d12021-11-04 20:16:48 -0700100bool Joystick::GetTopPressed() {
101 return GetRawButtonPressed(Button::kTop);
102}
Brian Silverman8fce7482020-01-05 13:18:21 -0800103
Austin Schuh812d0d12021-11-04 20:16:48 -0700104bool Joystick::GetTopReleased() {
105 return GetRawButtonReleased(Button::kTop);
106}
Brian Silverman8fce7482020-01-05 13:18:21 -0800107
108double Joystick::GetMagnitude() const {
109 return std::sqrt(std::pow(GetX(), 2) + std::pow(GetY(), 2));
110}
111
112double Joystick::GetDirectionRadians() const {
113 return std::atan2(GetX(), -GetY());
114}
115
116double Joystick::GetDirectionDegrees() const {
Austin Schuh812d0d12021-11-04 20:16:48 -0700117 return (180 / wpi::numbers::pi) * GetDirectionRadians();
Brian Silverman8fce7482020-01-05 13:18:21 -0800118}