blob: 504d6691f10aebe361bf7d2f3fbdd3d9d69ddfae [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
10#include <hal/HAL.h>
11
12#include "frc/DriverStation.h"
13#include "frc/WPIErrors.h"
14
15using namespace frc;
16
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080017GenericHID::GenericHID(int port) : m_ds(&DriverStation::GetInstance()) {
Brian Silverman41cdd3e2019-01-19 19:48:58 -080018 if (port >= DriverStation::kJoystickPorts) {
19 wpi_setWPIError(BadJoystickIndex);
20 }
21 m_port = port;
22}
23
24bool GenericHID::GetRawButton(int button) const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080025 return m_ds->GetStickButton(m_port, button);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080026}
27
28bool GenericHID::GetRawButtonPressed(int button) {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080029 return m_ds->GetStickButtonPressed(m_port, button);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080030}
31
32bool GenericHID::GetRawButtonReleased(int button) {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080033 return m_ds->GetStickButtonReleased(m_port, button);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080034}
35
36double GenericHID::GetRawAxis(int axis) const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080037 return m_ds->GetStickAxis(m_port, axis);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080038}
39
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080040int GenericHID::GetPOV(int pov) const { return m_ds->GetStickPOV(m_port, pov); }
Brian Silverman41cdd3e2019-01-19 19:48:58 -080041
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080042int GenericHID::GetAxisCount() const { return m_ds->GetStickAxisCount(m_port); }
Brian Silverman41cdd3e2019-01-19 19:48:58 -080043
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080044int GenericHID::GetPOVCount() const { return m_ds->GetStickPOVCount(m_port); }
Brian Silverman41cdd3e2019-01-19 19:48:58 -080045
46int GenericHID::GetButtonCount() const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080047 return m_ds->GetStickButtonCount(m_port);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080048}
49
50GenericHID::HIDType GenericHID::GetType() const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080051 return static_cast<HIDType>(m_ds->GetJoystickType(m_port));
Brian Silverman41cdd3e2019-01-19 19:48:58 -080052}
53
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080054std::string GenericHID::GetName() const {
55 return m_ds->GetJoystickName(m_port);
56}
Brian Silverman41cdd3e2019-01-19 19:48:58 -080057
58int GenericHID::GetAxisType(int axis) const {
James Kuszmaul4f3ad3c2019-12-01 16:35:21 -080059 return m_ds->GetJoystickAxisType(m_port, axis);
Brian Silverman41cdd3e2019-01-19 19:48:58 -080060}
61
62int GenericHID::GetPort() const { return m_port; }
63
64void GenericHID::SetOutput(int outputNumber, bool value) {
65 m_outputs =
66 (m_outputs & ~(1 << (outputNumber - 1))) | (value << (outputNumber - 1));
67
68 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
69}
70
71void GenericHID::SetOutputs(int value) {
72 m_outputs = value;
73 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
74}
75
76void GenericHID::SetRumble(RumbleType type, double value) {
77 if (value < 0)
78 value = 0;
79 else if (value > 1)
80 value = 1;
81 if (type == kLeftRumble) {
82 m_leftRumble = value * 65535;
83 } else {
84 m_rightRumble = value * 65535;
85 }
86 HAL_SetJoystickOutputs(m_port, m_outputs, m_leftRumble, m_rightRumble);
87}