Skip to content

Add support for two more axis - slider and dial #129

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 37 additions & 2 deletions Joystick/src/Joystick.cpp
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
#define JOYSTICK_INCLUDE_RX_AXIS B00001000
#define JOYSTICK_INCLUDE_RY_AXIS B00010000
#define JOYSTICK_INCLUDE_RZ_AXIS B00100000
#define JOYSTICK_INCLUDE_SLIDER_AXIS B01000000
#define JOYSTICK_INCLUDE_DIAL_AXIS B10000000

#define JOYSTICK_INCLUDE_RUDDER B00000001
#define JOYSTICK_INCLUDE_THROTTLE B00000010
Expand All @@ -52,6 +54,8 @@ Joystick_::Joystick_(
bool includeRxAxis,
bool includeRyAxis,
bool includeRzAxis,
bool includeSliderAxis,
bool includeDialAxis,
bool includeRudder,
bool includeThrottle,
bool includeAccelerator,
Expand All @@ -71,6 +75,8 @@ Joystick_::Joystick_(
_includeAxisFlags |= (includeRxAxis ? JOYSTICK_INCLUDE_RX_AXIS : 0);
_includeAxisFlags |= (includeRyAxis ? JOYSTICK_INCLUDE_RY_AXIS : 0);
_includeAxisFlags |= (includeRzAxis ? JOYSTICK_INCLUDE_RZ_AXIS : 0);
_includeAxisFlags |= (includeSliderAxis ? JOYSTICK_INCLUDE_SLIDER_AXIS : 0);
_includeAxisFlags |= (includeDialAxis ? JOYSTICK_INCLUDE_DIAL_AXIS : 0);
_includeSimulatorFlags = 0;
_includeSimulatorFlags |= (includeRudder ? JOYSTICK_INCLUDE_RUDDER : 0);
_includeSimulatorFlags |= (includeThrottle ? JOYSTICK_INCLUDE_THROTTLE : 0);
Expand All @@ -94,7 +100,9 @@ Joystick_::Joystick_(
+ (includeZAxis == true)
+ (includeRxAxis == true)
+ (includeRyAxis == true)
+ (includeRzAxis == true);
+ (includeRzAxis == true)
+ (includeSliderAxis == true)
+ (includeDialAxis == true);

uint8_t simulationCount = (includeRudder == true)
+ (includeThrottle == true)
Expand Down Expand Up @@ -351,6 +359,18 @@ Joystick_::Joystick_(
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x35;
}

if (includeSliderAxis == true) {
// USAGE (Slider)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x36;
}

if (includeDialAxis == true) {
// USAGE (Dial)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x37;
}

// INPUT (Data,Var,Abs)
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x81;
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x02;
Expand Down Expand Up @@ -460,6 +480,8 @@ Joystick_::Joystick_(
_xAxisRotation = 0;
_yAxisRotation = 0;
_zAxisRotation = 0;
_sliderAxis = 0;
_dialAxis = 0;
_throttle = 0;
_rudder = 0;
_accelerator = 0;
Expand Down Expand Up @@ -549,6 +571,17 @@ void Joystick_::setRzAxis(int16_t value)
if (_autoSendState) sendState();
}

void Joystick_::setSliderAxis(int16_t value)
{
_sliderAxis = value;
if (_autoSendState) sendState();
}
void Joystick_::setDialAxis(int16_t value)
{
_dialAxis = value;
if (_autoSendState) sendState();
}

void Joystick_::setRudder(int16_t value)
{
_rudder = value;
Expand Down Expand Up @@ -666,7 +699,9 @@ void Joystick_::sendState()
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_RX_AXIS, _xAxisRotation, _rxAxisMinimum, _rxAxisMaximum, &(data[index]));
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_RY_AXIS, _yAxisRotation, _ryAxisMinimum, _ryAxisMaximum, &(data[index]));
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_RZ_AXIS, _zAxisRotation, _rzAxisMinimum, _rzAxisMaximum, &(data[index]));

index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_SLIDER_AXIS, _sliderAxis, _sliderAxisMinimum, _sliderAxisMaximum, &(data[index]));
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_DIAL_AXIS, _dialAxis, _dialAxisMinimum, _dialAxisMaximum, &(data[index]));

// Set Simulation Values
index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_RUDDER, _rudder, _rudderMinimum, _rudderMaximum, &(data[index]));
index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_THROTTLE, _throttle, _throttleMinimum, _throttleMaximum, &(data[index]));
Expand Down
22 changes: 22 additions & 0 deletions Joystick/src/Joystick.h
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ class Joystick_
int16_t _xAxisRotation;
int16_t _yAxisRotation;
int16_t _zAxisRotation;
int16_t _sliderAxis;
int16_t _dialAxis;
int16_t _throttle;
int16_t _rudder;
int16_t _accelerator;
Expand Down Expand Up @@ -93,6 +95,10 @@ class Joystick_
int16_t _ryAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM;
int16_t _rzAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM;
int16_t _rzAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM;
int16_t _sliderAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM;
int16_t _sliderAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM;
int16_t _dialAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM;
int16_t _dialAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM;
int16_t _rudderMinimum = JOYSTICK_DEFAULT_SIMULATOR_MINIMUM;
int16_t _rudderMaximum = JOYSTICK_DEFAULT_SIMULATOR_MAXIMUM;
int16_t _throttleMinimum = JOYSTICK_DEFAULT_SIMULATOR_MINIMUM;
Expand Down Expand Up @@ -124,6 +130,8 @@ class Joystick_
bool includeRxAxis = true,
bool includeRyAxis = true,
bool includeRzAxis = true,
bool includeSliderAxis = true,
bool includeDialAxis = true,
bool includeRudder = true,
bool includeThrottle = true,
bool includeAccelerator = true,
Expand Down Expand Up @@ -164,6 +172,16 @@ class Joystick_
_rzAxisMinimum = minimum;
_rzAxisMaximum = maximum;
}
inline void setSliderAxisRange(int16_t minimum, int16_t maximum)
{
_sliderAxisMinimum = minimum;
_sliderAxisMaximum = maximum;
}
inline void setDialAxisRange(int16_t minimum, int16_t maximum)
{
_dialAxisMinimum = minimum;
_dialAxisMaximum = maximum;
}
inline void setRudderRange(int16_t minimum, int16_t maximum)
{
_rudderMinimum = minimum;
Expand Down Expand Up @@ -197,6 +215,10 @@ class Joystick_
void setRxAxis(int16_t value);
void setRyAxis(int16_t value);
void setRzAxis(int16_t value);

// Set Slider Values
void setSliderAxis(int16_t value);
void setDialAxis(int16_t value);

// Set Simuation Values
void setRudder(int16_t value);
Expand Down