blob: a7dcfc0588d533ecb1714ae8d1060171bf4bfc18 [file] [log] [blame]
Brian Silverman41cdd3e2019-01-19 19:48:58 -08001/*----------------------------------------------------------------------------*/
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -08002/* Copyright (c) 2016-2019 FIRST. All Rights Reserved. */
Brian Silverman41cdd3e2019-01-19 19:48:58 -08003/* 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
James Kuszmaul4b81d302019-12-14 20:53:14 -080010#include <hal/DriverStation.h>
11#include <hal/FRCUsageReporting.h>
Brian Silverman41cdd3e2019-01-19 19:48:58 -080012
13#include "frc/DriverStation.h"
14#include "frc/WPIErrors.h"
15
16using namespace frc;
17
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080018GenericHID::GenericHID(int port) : m_ds(&DriverStation::GetInstance()) {
Brian Silverman41cdd3e2019-01-19 19:48:58 -080019 if (port >= DriverStation::kJoystickPorts) {
20 wpi_setWPIError(BadJoystickIndex);
21 }
22 m_port = port;
23}
24
25bool GenericHID::GetRawButton(int button) const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080026 return m_ds->GetStickButton(m_port, button);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080027}
28
29bool GenericHID::GetRawButtonPressed(int button) {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080030 return m_ds->GetStickButtonPressed(m_port, button);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080031}
32
33bool GenericHID::GetRawButtonReleased(int button) {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080034 return m_ds->GetStickButtonReleased(m_port, button);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080035}
36
37double GenericHID::GetRawAxis(int axis) const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080038 return m_ds->GetStickAxis(m_port, axis);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080039}
40
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080041int GenericHID::GetPOV(int pov) const { return m_ds->GetStickPOV(m_port, pov); }
Brian Silverman41cdd3e2019-01-19 19:48:58 -080042
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080043int GenericHID::GetAxisCount() const { return m_ds->GetStickAxisCount(m_port); }
Brian Silverman41cdd3e2019-01-19 19:48:58 -080044
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080045int GenericHID::GetPOVCount() const { return m_ds->GetStickPOVCount(m_port); }
Brian Silverman41cdd3e2019-01-19 19:48:58 -080046
47int GenericHID::GetButtonCount() const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080048 return m_ds->GetStickButtonCount(m_port);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080049}
50
51GenericHID::HIDType GenericHID::GetType() const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080052 return static_cast<HIDType>(m_ds->GetJoystickType(m_port));
Brian Silverman41cdd3e2019-01-19 19:48:58 -080053}
54
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080055std::string GenericHID::GetName() const {
56 return m_ds->GetJoystickName(m_port);
57}
Brian Silverman41cdd3e2019-01-19 19:48:58 -080058
59int GenericHID::GetAxisType(int axis) const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080060 return m_ds->GetJoystickAxisType(m_port, axis);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080061}
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}