Skip to content

Commit fed9cd3

Browse files
committed
Reduced global memory usage by 9 bytes per joystick
1 parent f6f6856 commit fed9cd3

File tree

2 files changed

+57
-51
lines changed

2 files changed

+57
-51
lines changed

Joystick/src/Joystick.cpp

Lines changed: 55 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,19 @@
2828
#define JOYSTICK_SIMULATOR_MINIMUM -32767
2929
#define JOYSTICK_SIMULATOR_MAXIMUM 32767
3030

31+
#define JOYSTICK_INCLUDE_X_AXIS B00000001
32+
#define JOYSTICK_INCLUDE_Y_AXIS B00000010
33+
#define JOYSTICK_INCLUDE_Z_AXIS B00000100
34+
#define JOYSTICK_INCLUDE_RX_AXIS B00001000
35+
#define JOYSTICK_INCLUDE_RY_AXIS B00010000
36+
#define JOYSTICK_INCLUDE_RZ_AXIS B00100000
37+
38+
#define JOYSTICK_INCLUDE_RUDDER B00000001
39+
#define JOYSTICK_INCLUDE_THROTTLE B00000010
40+
#define JOYSTICK_INCLUDE_ACCELERATOR B00000100
41+
#define JOYSTICK_INCLUDE_BRAKE B00001000
42+
#define JOYSTICK_INCLUDE_STEERING B00010000
43+
3144
Joystick_::Joystick_(
3245
uint8_t hidReportId,
3346
uint8_t buttonCount,
@@ -50,18 +63,20 @@ Joystick_::Joystick_(
5063
// Save Joystick Settings
5164
_buttonCount = buttonCount;
5265
_hatSwitchCount = hatSwitchCount;
53-
_includeXAxis = includeXAxis;
54-
_includeYAxis = includeYAxis;
55-
_includeZAxis = includeZAxis;
56-
_includeRxAxis = includeRxAxis;
57-
_includeRyAxis = includeRyAxis;
58-
_includeRzAxis = includeRzAxis;
59-
_includeRudder = includeRudder;
60-
_includeThrottle = includeThrottle;
61-
_includeAccelerator = includeAccelerator;
62-
_includeBrake = includeBrake;
63-
_includeSteering = includeSteering;
64-
66+
_includeAxisFlags = 0;
67+
_includeAxisFlags |= (includeXAxis ? JOYSTICK_INCLUDE_X_AXIS : 0);
68+
_includeAxisFlags |= (includeYAxis ? JOYSTICK_INCLUDE_Y_AXIS : 0);
69+
_includeAxisFlags |= (includeZAxis ? JOYSTICK_INCLUDE_Z_AXIS : 0);
70+
_includeAxisFlags |= (includeRxAxis ? JOYSTICK_INCLUDE_RX_AXIS : 0);
71+
_includeAxisFlags |= (includeRyAxis ? JOYSTICK_INCLUDE_RY_AXIS : 0);
72+
_includeAxisFlags |= (includeRzAxis ? JOYSTICK_INCLUDE_RZ_AXIS : 0);
73+
_includeSimulatorFlags = 0;
74+
_includeSimulatorFlags |= (includeRudder ? JOYSTICK_INCLUDE_RUDDER : 0);
75+
_includeSimulatorFlags |= (includeThrottle ? JOYSTICK_INCLUDE_THROTTLE : 0);
76+
_includeSimulatorFlags |= (includeAccelerator ? JOYSTICK_INCLUDE_ACCELERATOR : 0);
77+
_includeSimulatorFlags |= (includeBrake ? JOYSTICK_INCLUDE_BRAKE : 0);
78+
_includeSimulatorFlags |= (includeSteering ? JOYSTICK_INCLUDE_STEERING : 0);
79+
6580
// Build Joystick HID Report Description
6681

6782
// Button Calculations
@@ -73,12 +88,12 @@ Joystick_::Joystick_(
7388
}
7489

7590
// Axis Calculations
76-
uint8_t axisCount = (_includeXAxis == true)
77-
+ (_includeYAxis == true)
78-
+ (_includeZAxis == true)
79-
+ (_includeRxAxis == true)
80-
+ (_includeRyAxis == true)
81-
+ (_includeRzAxis == true);
91+
uint8_t axisCount = (includeXAxis == true)
92+
+ (includeYAxis == true)
93+
+ (includeZAxis == true)
94+
+ (includeRxAxis == true)
95+
+ (includeRyAxis == true)
96+
+ (includeRzAxis == true);
8297

8398
uint8_t simulationCount = (includeRudder == true)
8499
+ (includeThrottle == true)
@@ -299,37 +314,37 @@ Joystick_::Joystick_(
299314
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xA1;
300315
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x00;
301316

302-
if (_includeXAxis == true) {
317+
if (includeXAxis == true) {
303318
// USAGE (X)
304319
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
305320
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x30;
306321
}
307322

308-
if (_includeYAxis == true) {
323+
if (includeYAxis == true) {
309324
// USAGE (Y)
310325
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
311326
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x31;
312327
}
313328

314-
if (_includeZAxis == true) {
329+
if (includeZAxis == true) {
315330
// USAGE (Z)
316331
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
317332
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x32;
318333
}
319334

320-
if (_includeRxAxis == true) {
335+
if (includeRxAxis == true) {
321336
// USAGE (Rx)
322337
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
323338
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x33;
324339
}
325340

326-
if (_includeRyAxis == true) {
341+
if (includeRyAxis == true) {
327342
// USAGE (Ry)
328343
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
329344
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x34;
330345
}
331346

332-
if (_includeRzAxis == true) {
347+
if (includeRzAxis == true) {
333348
// USAGE (Rz)
334349
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
335350
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x35;
@@ -372,31 +387,31 @@ Joystick_::Joystick_(
372387
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xA1;
373388
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x00;
374389

375-
if (_includeRudder == true) {
390+
if (includeRudder == true) {
376391
// USAGE (Rudder)
377392
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
378393
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xBA;
379394
}
380395

381-
if (_includeThrottle == true) {
396+
if (includeThrottle == true) {
382397
// USAGE (Throttle)
383398
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
384399
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xBB;
385400
}
386401

387-
if (_includeAccelerator == true) {
402+
if (includeAccelerator == true) {
388403
// USAGE (Accelerator)
389404
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
390405
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xC4;
391406
}
392407

393-
if (_includeBrake == true) {
408+
if (includeBrake == true) {
394409
// USAGE (Brake)
395410
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
396411
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xC5;
397412
}
398413

399-
if (_includeSteering == true) {
414+
if (includeSteering == true) {
400415
// USAGE (Steering)
401416
tempHidReportDescriptor[hidReportDescriptorSize++] = 0x09;
402417
tempHidReportDescriptor[hidReportDescriptorSize++] = 0xC8;
@@ -654,19 +669,19 @@ void Joystick_::sendState()
654669
} // Hat Switches
655670

656671
// Set Axis Values
657-
index += buildAndSetAxisValue(_includeXAxis, _xAxis, _xAxisMinimum, _xAxisMaximum, &(data[index]));
658-
index += buildAndSetAxisValue(_includeYAxis, _yAxis, _yAxisMinimum, _yAxisMaximum, &(data[index]));
659-
index += buildAndSetAxisValue(_includeZAxis, _zAxis, _zAxisMinimum, _zAxisMaximum, &(data[index]));
660-
index += buildAndSetAxisValue(_includeRxAxis, _xAxisRotation, _rxAxisMinimum, _rxAxisMaximum, &(data[index]));
661-
index += buildAndSetAxisValue(_includeRyAxis, _yAxisRotation, _ryAxisMinimum, _ryAxisMaximum, &(data[index]));
662-
index += buildAndSetAxisValue(_includeRzAxis, _zAxisRotation, _rzAxisMinimum, _rzAxisMaximum, &(data[index]));
672+
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_X_AXIS, _xAxis, _xAxisMinimum, _xAxisMaximum, &(data[index]));
673+
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_Y_AXIS, _yAxis, _yAxisMinimum, _yAxisMaximum, &(data[index]));
674+
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_Z_AXIS, _zAxis, _zAxisMinimum, _zAxisMaximum, &(data[index]));
675+
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_RX_AXIS, _xAxisRotation, _rxAxisMinimum, _rxAxisMaximum, &(data[index]));
676+
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_RY_AXIS, _yAxisRotation, _ryAxisMinimum, _ryAxisMaximum, &(data[index]));
677+
index += buildAndSetAxisValue(_includeAxisFlags & JOYSTICK_INCLUDE_RZ_AXIS, _zAxisRotation, _rzAxisMinimum, _rzAxisMaximum, &(data[index]));
663678

664679
// Set Simulation Values
665-
index += buildAndSetSimulationValue(_includeRudder, _rudder, _rudderMinimum, _rudderMaximum, &(data[index]));
666-
index += buildAndSetSimulationValue(_includeThrottle, _throttle, _throttleMinimum, _throttleMaximum, &(data[index]));
667-
index += buildAndSetSimulationValue(_includeAccelerator, _accelerator, _acceleratorMinimum, _acceleratorMaximum, &(data[index]));
668-
index += buildAndSetSimulationValue(_includeBrake, _brake, _brakeMinimum, _brakeMaximum, &(data[index]));
669-
index += buildAndSetSimulationValue(_includeSteering, _steering, _steeringMinimum, _steeringMaximum, &(data[index]));
680+
index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_RUDDER, _rudder, _rudderMinimum, _rudderMaximum, &(data[index]));
681+
index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_THROTTLE, _throttle, _throttleMinimum, _throttleMaximum, &(data[index]));
682+
index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_ACCELERATOR, _accelerator, _acceleratorMinimum, _acceleratorMaximum, &(data[index]));
683+
index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_BRAKE, _brake, _brakeMinimum, _brakeMaximum, &(data[index]));
684+
index += buildAndSetSimulationValue(_includeSimulatorFlags & JOYSTICK_INCLUDE_STEERING, _steering, _steeringMinimum, _steeringMaximum, &(data[index]));
670685

671686
DynamicHID().SendReport(_hidReportId, data, _hidReportSize);
672687
}

Joystick/src/Joystick.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,17 +73,8 @@ class Joystick_
7373
uint8_t _buttonCount;
7474
uint8_t _buttonValuesArraySize = 0;
7575
uint8_t _hatSwitchCount;
76-
bool _includeXAxis;
77-
bool _includeYAxis;
78-
bool _includeZAxis;
79-
bool _includeRxAxis;
80-
bool _includeRyAxis;
81-
bool _includeRzAxis;
82-
bool _includeRudder;
83-
bool _includeThrottle;
84-
bool _includeAccelerator;
85-
bool _includeBrake;
86-
bool _includeSteering;
76+
uint8_t _includeAxisFlags;
77+
uint8_t _includeSimulatorFlags;
8778
int16_t _xAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM;
8879
int16_t _xAxisMaximum = JOYSTICK_DEFAULT_AXIS_MAXIMUM;
8980
int16_t _yAxisMinimum = JOYSTICK_DEFAULT_AXIS_MINIMUM;

0 commit comments

Comments
 (0)