41
41
#define JOYSTICK_INCLUDE_BRAKE B00001000
42
42
#define JOYSTICK_INCLUDE_STEERING B00010000
43
43
44
+ #define JOYSTICK_VALUE_RANGE_CHECK (value, l, g ) if (((value) < min((l), (g))) || ((value) > max ((l), (g)))) return
45
+
44
46
Joystick_::Joystick_(
45
47
uint8_t hidReportId,
46
48
uint8_t joystickType,
@@ -519,79 +521,79 @@ void Joystick_::releaseButton(uint8_t button)
519
521
520
522
void Joystick_::setXAxis (int16_t value)
521
523
{
522
- if (( value < _xAxisMinimum) || (value > _xAxisMaximum)) return ;
524
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _xAxisMinimum, _xAxisMaximum);
523
525
524
526
_xAxis = value;
525
527
if (_autoSendState) sendState ();
526
528
}
527
529
void Joystick_::setYAxis (int16_t value)
528
530
{
529
- if (( value < _yAxisMinimum) || (value > _yAxisMaximum)) return ;
531
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _yAxisMinimum, _yAxisMaximum);
530
532
531
533
_yAxis = value;
532
534
if (_autoSendState) sendState ();
533
535
}
534
536
void Joystick_::setZAxis (int16_t value)
535
537
{
536
- if (( value < _zAxisMinimum) || (value > _zAxisMaximum)) return ;
538
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _zAxisMinimum, _zAxisMaximum);
537
539
538
540
_zAxis = value;
539
541
if (_autoSendState) sendState ();
540
542
}
541
543
542
544
void Joystick_::setRxAxis (int16_t value)
543
545
{
544
- if (( value < _rxAxisMinimum) || (value > _rxAxisMaximum)) return ;
546
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _rxAxisMinimum, _rxAxisMaximum);
545
547
546
548
_xAxisRotation = value;
547
549
if (_autoSendState) sendState ();
548
550
}
549
551
void Joystick_::setRyAxis (int16_t value)
550
552
{
551
- if (( value < _ryAxisMinimum) || (value > _ryAxisMaximum)) return ;
553
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _ryAxisMinimum, _ryAxisMaximum);
552
554
553
555
_yAxisRotation = value;
554
556
if (_autoSendState) sendState ();
555
557
}
556
558
void Joystick_::setRzAxis (int16_t value)
557
559
{
558
- if (( value < _rzAxisMinimum) || (value > _rzAxisMaximum)) return ;
560
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _rzAxisMinimum, _rzAxisMaximum);
559
561
560
562
_zAxisRotation = value;
561
563
if (_autoSendState) sendState ();
562
564
}
563
565
564
566
void Joystick_::setRudder (int16_t value)
565
567
{
566
- if (( value < _rudderMinimum) || (value > _rudderMaximum)) return ;
568
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _rudderMinimum, _rudderMaximum);
567
569
568
570
_rudder = value;
569
571
if (_autoSendState) sendState ();
570
572
}
571
573
void Joystick_::setThrottle (int16_t value)
572
574
{
573
- if (( value < _throttleMinimum) || (value > _throttleMaximum)) return ;
575
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _throttleMinimum, _throttleMaximum);
574
576
575
577
_throttle = value;
576
578
if (_autoSendState) sendState ();
577
579
}
578
580
void Joystick_::setAccelerator (int16_t value)
579
581
{
580
- if (( value < _acceleratorMinimum) || (value > _acceleratorMaximum)) return ;
582
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _acceleratorMinimum, _acceleratorMaximum);
581
583
582
584
_accelerator = value;
583
585
if (_autoSendState) sendState ();
584
586
}
585
587
void Joystick_::setBrake (int16_t value)
586
588
{
587
- if (( value < _brakeMinimum) || (value > _brakeMaximum)) return ;
589
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _brakeMinimum, _brakeMaximum);
588
590
589
591
_brake = value;
590
592
if (_autoSendState) sendState ();
591
593
}
592
594
void Joystick_::setSteering (int16_t value)
593
595
{
594
- if (( value < _steeringMinimum) || (value > _steeringMaximum)) return ;
596
+ JOYSTICK_VALUE_RANGE_CHECK ( value, _steeringMinimum, _steeringMaximum);
595
597
596
598
_steering = value;
597
599
if (_autoSendState) sendState ();
@@ -612,7 +614,14 @@ int Joystick_::buildAndSet16BitValue(bool includeValue, int16_t value, int16_t v
612
614
uint8_t lowByte;
613
615
614
616
if (includeValue == true ) {
615
- convertedValue = map (value, valueMinimum, valueMaximum, actualMinimum, actualMaximum);
617
+
618
+ if (valueMinimum > valueMaximum) {
619
+ // Values go from a larger number to a smaller number (e.g. 1024 to 0)
620
+ convertedValue = map (valueMinimum - value, valueMaximum, valueMinimum, actualMinimum, actualMaximum);
621
+ } else {
622
+ // Values go from a smaller number to a larger number (e.g. 0 to 1024)
623
+ convertedValue = map (value, valueMinimum, valueMaximum, actualMinimum, actualMaximum);
624
+ }
616
625
617
626
highByte = (uint8_t )(convertedValue >> 8 );
618
627
lowByte = (uint8_t )(convertedValue & 0x00FF );
0 commit comments