blob: 6c186eb9426e42adf91791383df87a8940e26e41 [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/GenericHID.h"
6
7#include <hal/DriverStation.h>
Brian Silverman8fce7482020-01-05 13:18:21 -08008
9#include "frc/DriverStation.h"
Austin Schuh812d0d12021-11-04 20:16:48 -070010#include "frc/Errors.h"
Brian Silverman8fce7482020-01-05 13:18:21 -080011
12using namespace frc;
13
Austin Schuh812d0d12021-11-04 20:16:48 -070014GenericHID::GenericHID(int port) {
15 if (port < 0 || port >= DriverStation::kJoystickPorts) {
16 throw FRC_MakeError(warn::BadJoystickIndex, "port {} out of range", port);
Brian Silverman8fce7482020-01-05 13:18:21 -080017 }
18 m_port = port;
19}
20
21bool GenericHID::GetRawButton(int button) const {
Austin Schuh812d0d12021-11-04 20:16:48 -070022 return DriverStation::GetStickButton(m_port, button);
Brian Silverman8fce7482020-01-05 13:18:21 -080023}
24
25bool GenericHID::GetRawButtonPressed(int button) {
Austin Schuh812d0d12021-11-04 20:16:48 -070026 return DriverStation::GetStickButtonPressed(m_port, button);
Brian Silverman8fce7482020-01-05 13:18:21 -080027}
28
29bool GenericHID::GetRawButtonReleased(int button) {
Austin Schuh812d0d12021-11-04 20:16:48 -070030 return DriverStation::GetStickButtonReleased(m_port, button);
Brian Silverman8fce7482020-01-05 13:18:21 -080031}
32
33double GenericHID::GetRawAxis(int axis) const {
Austin Schuh812d0d12021-11-04 20:16:48 -070034 return DriverStation::GetStickAxis(m_port, axis);
Brian Silverman8fce7482020-01-05 13:18:21 -080035}
36
Austin Schuh812d0d12021-11-04 20:16:48 -070037int GenericHID::GetPOV(int pov) const {
38 return DriverStation::GetStickPOV(m_port, pov);
39}
Brian Silverman8fce7482020-01-05 13:18:21 -080040
Austin Schuh812d0d12021-11-04 20:16:48 -070041int GenericHID::GetAxisCount() const {
42 return DriverStation::GetStickAxisCount(m_port);
43}
Brian Silverman8fce7482020-01-05 13:18:21 -080044
Austin Schuh812d0d12021-11-04 20:16:48 -070045int GenericHID::GetPOVCount() const {
46 return DriverStation::GetStickPOVCount(m_port);
47}
Brian Silverman8fce7482020-01-05 13:18:21 -080048
49int GenericHID::GetButtonCount() const {
Austin Schuh812d0d12021-11-04 20:16:48 -070050 return DriverStation::GetStickButtonCount(m_port);
Brian Silverman8fce7482020-01-05 13:18:21 -080051}
52
Austin Schuh1e69f942020-11-14 15:06:14 -080053bool GenericHID::IsConnected() const {
Austin Schuh812d0d12021-11-04 20:16:48 -070054 return DriverStation::IsJoystickConnected(m_port);
Austin Schuh1e69f942020-11-14 15:06:14 -080055}
56
Brian Silverman8fce7482020-01-05 13:18:21 -080057GenericHID::HIDType GenericHID::GetType() const {
Austin Schuh812d0d12021-11-04 20:16:48 -070058 return static_cast<HIDType>(DriverStation::GetJoystickType(m_port));
Brian Silverman8fce7482020-01-05 13:18:21 -080059}
60
61std::string GenericHID::GetName() const {
Austin Schuh812d0d12021-11-04 20:16:48 -070062 return DriverStation::GetJoystickName(m_port);
Brian Silverman8fce7482020-01-05 13:18:21 -080063}
64
65int GenericHID::GetAxisType(int axis) const {
Austin Schuh812d0d12021-11-04 20:16:48 -070066 return DriverStation::GetJoystickAxisType(m_port, axis);
Brian Silverman8fce7482020-01-05 13:18:21 -080067}
68
Austin Schuh812d0d12021-11-04 20:16:48 -070069int GenericHID::GetPort() const {
70 return m_port;
71}
Brian Silverman8fce7482020-01-05 13:18:21 -080072
73void GenericHID::SetOutput(int outputNumber, bool value) {
74 m_outputs =
75 (m_outputs & ~(1 << (outputNumber - 1))) | (value << (outputNumber - 1));
76
77 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
78}
79
80void GenericHID::SetOutputs(int value) {
81 m_outputs = value;
82 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
83}
84
85void GenericHID::SetRumble(RumbleType type, double value) {
Austin Schuh812d0d12021-11-04 20:16:48 -070086 if (value < 0) {
Brian Silverman8fce7482020-01-05 13:18:21 -080087 value = 0;
Austin Schuh812d0d12021-11-04 20:16:48 -070088 } else if (value > 1) {
Brian Silverman8fce7482020-01-05 13:18:21 -080089 value = 1;
Austin Schuh812d0d12021-11-04 20:16:48 -070090 }
Brian Silverman8fce7482020-01-05 13:18:21 -080091 if (type == kLeftRumble) {
92 m_leftRumble = value * 65535;
93 } else {
94 m_rightRumble = value * 65535;
95 }
96 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
97}