blob: a7dcfc0588d533ecb1714ae8d1060171bf4bfc18 [file] [log] [blame]
Brian Silverman8fce7482020-01-05 13:18:21 -08001/*----------------------------------------------------------------------------*/
2/* Copyright (c) 2016-2019 FIRST. All Rights Reserved. */
3/* Open Source Software - may be modified and shared by FRC teams. The code */
4/* must be accompanied by the FIRST BSD license file in the root directory of */
5/* the project. */
6/*----------------------------------------------------------------------------*/
7
8#include "frc/GenericHID.h"
9
10#include <hal/DriverStation.h>
11#include <hal/FRCUsageReporting.h>
12
13#include "frc/DriverStation.h"
14#include "frc/WPIErrors.h"
15
16using namespace frc;
17
18GenericHID::GenericHID(int port) : m_ds(&DriverStation::GetInstance()) {
19 if (port >= DriverStation::kJoystickPorts) {
20 wpi_setWPIError(BadJoystickIndex);
21 }
22 m_port = port;
23}
24
25bool GenericHID::GetRawButton(int button) const {
26 return m_ds->GetStickButton(m_port, button);
27}
28
29bool GenericHID::GetRawButtonPressed(int button) {
30 return m_ds->GetStickButtonPressed(m_port, button);
31}
32
33bool GenericHID::GetRawButtonReleased(int button) {
34 return m_ds->GetStickButtonReleased(m_port, button);
35}
36
37double GenericHID::GetRawAxis(int axis) const {
38 return m_ds->GetStickAxis(m_port, axis);
39}
40
41int GenericHID::GetPOV(int pov) const { return m_ds->GetStickPOV(m_port, pov); }
42
43int GenericHID::GetAxisCount() const { return m_ds->GetStickAxisCount(m_port); }
44
45int GenericHID::GetPOVCount() const { return m_ds->GetStickPOVCount(m_port); }
46
47int GenericHID::GetButtonCount() const {
48 return m_ds->GetStickButtonCount(m_port);
49}
50
51GenericHID::HIDType GenericHID::GetType() const {
52 return static_cast<HIDType>(m_ds->GetJoystickType(m_port));
53}
54
55std::string GenericHID::GetName() const {
56 return m_ds->GetJoystickName(m_port);
57}
58
59int GenericHID::GetAxisType(int axis) const {
60 return m_ds->GetJoystickAxisType(m_port, axis);
61}
62
63int GenericHID::GetPort() const { return m_port; }
64
65void GenericHID::SetOutput(int outputNumber, bool value) {
66 m_outputs =
67 (m_outputs & ~(1 << (outputNumber - 1))) | (value << (outputNumber - 1));
68
69 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
70}
71
72void GenericHID::SetOutputs(int value) {
73 m_outputs = value;
74 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
75}
76
77void GenericHID::SetRumble(RumbleType type, double value) {
78 if (value < 0)
79 value = 0;
80 else if (value > 1)
81 value = 1;
82 if (type == kLeftRumble) {
83 m_leftRumble = value * 65535;
84 } else {
85 m_rightRumble = value * 65535;
86 }
87 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
88}