Add some additionally debugging, fix the 'ole broken switch statement.
This commit is contained in:
parent
a69c2d3364
commit
e09c21edf1
31
Button.cpp
31
Button.cpp
|
@ -48,10 +48,11 @@ PassthruButton::PassthruButton(uint8_t pin, uint8_t vbutton, bool pullup, Mux* m
|
|||
this->type = BUTTON_PASSTHRU;
|
||||
}
|
||||
|
||||
void PassthruButton::Update(Joystick* js) {
|
||||
if (!BouncerUpdate()) return;
|
||||
bool PassthruButton::Update(Joystick* js) {
|
||||
if (!BouncerUpdate()) return false;
|
||||
if (On()) js->PressButton(vbutton);
|
||||
else js->ReleaseButton(vbutton);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -60,8 +61,8 @@ LatchedButton::LatchedButton(uint8_t pin, uint8_t vbutton, bool pullup, Mux* mux
|
|||
this->pressed = false;
|
||||
}
|
||||
|
||||
void LatchedButton::Update(Joystick* js) {
|
||||
if (!BouncerUpdate()) return;
|
||||
bool LatchedButton::Update(Joystick* js) {
|
||||
if (!BouncerUpdate()) return false;
|
||||
|
||||
if (On()) {
|
||||
if (!pressed) {
|
||||
|
@ -72,6 +73,8 @@ void LatchedButton::Update(Joystick* js) {
|
|||
pressed = false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -88,8 +91,8 @@ PulsedButton::PulsedButton(uint8_t pin, uint8_t vbutton, bool double_action, boo
|
|||
}
|
||||
}
|
||||
|
||||
void PulsedButton::Update(Joystick* js) {
|
||||
if (!BouncerUpdate()) return;
|
||||
bool PulsedButton::Update(Joystick* js) {
|
||||
if (!BouncerUpdate()) return false;
|
||||
|
||||
switch(type) {
|
||||
case BUTTON_PULSED:
|
||||
|
@ -103,6 +106,8 @@ void PulsedButton::Update(Joystick* js) {
|
|||
else js->PressButton(vbutton2);
|
||||
break;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void PulsedButton::ReleaseButtons(Joystick* js) {
|
||||
|
@ -119,11 +124,19 @@ EncoderButton::EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton) : Butt
|
|||
this->last_value = encoder->read();
|
||||
}
|
||||
|
||||
void EncoderButton::Update(Joystick* js) {
|
||||
bool EncoderButton::Update(Joystick* js) {
|
||||
bool changed = false;
|
||||
long new_value = encoder->read();
|
||||
if (new_value > last_value) js->PressButton(vbutton);
|
||||
else if (new_value < last_value) js->PressButton(vbutton2);
|
||||
if (new_value > last_value) {
|
||||
js->PressButton(vbutton);
|
||||
changed = true;
|
||||
}
|
||||
else if (new_value < last_value) {
|
||||
js->PressButton(vbutton2);
|
||||
changed = true;
|
||||
}
|
||||
last_value = new_value;
|
||||
return changed;
|
||||
}
|
||||
|
||||
void EncoderButton::ReleaseButtons(Joystick* js) {
|
||||
|
|
11
Button.h
11
Button.h
|
@ -25,7 +25,7 @@ enum ButtonType {
|
|||
class Button {
|
||||
public:
|
||||
Button(uint8_t vbutton);
|
||||
virtual void Update(Joystick* js) = 0;
|
||||
virtual bool Update(Joystick* js) = 0;
|
||||
virtual void ReleaseButtons(Joystick* js);
|
||||
ButtonType type;
|
||||
|
||||
|
@ -41,7 +41,6 @@ class Button {
|
|||
class SwitchButton : public Button {
|
||||
public:
|
||||
SwitchButton(uint8_t pin, uint8_t vbutton, bool pullup, Mux* mux);
|
||||
virtual void Update(Joystick* js) = 0;
|
||||
bool BouncerUpdate(); // returns true if the pin's status has changed
|
||||
bool On();
|
||||
|
||||
|
@ -55,13 +54,13 @@ class SwitchButton : public Button {
|
|||
class PassthruButton : public SwitchButton {
|
||||
public:
|
||||
PassthruButton(uint8_t pin, uint8_t vbutton, bool pullup = true, Mux* mux = NULL);
|
||||
void Update(Joystick* js);
|
||||
bool Update(Joystick* js);
|
||||
};
|
||||
|
||||
class LatchedButton : public SwitchButton {
|
||||
public:
|
||||
LatchedButton(uint8_t pin, uint8_t vbutton, bool pullup = true, Mux* mux = NULL);
|
||||
void Update(Joystick* js);
|
||||
bool Update(Joystick* js);
|
||||
|
||||
protected:
|
||||
bool pressed;
|
||||
|
@ -70,7 +69,7 @@ class LatchedButton : public SwitchButton {
|
|||
class PulsedButton : public SwitchButton {
|
||||
public:
|
||||
PulsedButton(uint8_t pin, uint8_t vbutton, bool double_action = false, bool split = false, bool pullup = true, Mux* mux = NULL);
|
||||
void Update(Joystick* js);
|
||||
bool Update(Joystick* js);
|
||||
void ReleaseButtons(Joystick* js);
|
||||
|
||||
protected:
|
||||
|
@ -82,7 +81,7 @@ class PulsedButton : public SwitchButton {
|
|||
class EncoderButton : public Button {
|
||||
public:
|
||||
EncoderButton(uint8_t pin1, uint8_t pin2, uint8_t vbutton);
|
||||
void Update(Joystick* js);
|
||||
bool Update(Joystick* js);
|
||||
void ReleaseButtons(Joystick* js);
|
||||
|
||||
protected:
|
||||
|
|
17
Joystick.cpp
17
Joystick.cpp
|
@ -2,6 +2,7 @@
|
|||
#include "Button.h"
|
||||
#include <Mux.h>
|
||||
#include <Arduino.h>
|
||||
#include <stdio.h>
|
||||
|
||||
using namespace admux;
|
||||
|
||||
|
@ -45,21 +46,30 @@ void Joystick::AddButton(uint8_t pin, ButtonType type, bool pullup, Mux* mux) {
|
|||
case BUTTON_PASSTHRU:
|
||||
button = new PassthruButton(pin, _virtual_buttons, pullup, mux);
|
||||
_virtual_buttons++;
|
||||
break;
|
||||
case BUTTON_PULSED:
|
||||
button = new PulsedButton(pin, _virtual_buttons, false, false, pullup, mux);
|
||||
_virtual_buttons++;
|
||||
break;
|
||||
case BUTTON_PULSED_DOUBLE_ACTION:
|
||||
button = new PulsedButton(pin, _virtual_buttons, true, false, pullup, mux);
|
||||
_virtual_buttons++;
|
||||
break;
|
||||
case BUTTON_PULSED_DOUBLE_ACTION_SPLIT:
|
||||
button = new PulsedButton(pin, _virtual_buttons, true, true, pullup, mux);
|
||||
_virtual_buttons += 2;
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
_buttons[_num_buttons] = button;
|
||||
_num_buttons++;
|
||||
if (_debug) {
|
||||
char buffer[100];
|
||||
sprintf(buffer, "Added button %d of type %d", _num_buttons - 1, button->type);
|
||||
Serial.println(buffer);
|
||||
}
|
||||
if (type & _BUTTON_PULSED_TYPES) _have_pulsed_button = true;
|
||||
}
|
||||
|
||||
|
@ -90,7 +100,12 @@ void Joystick::Update() {
|
|||
JoyReport oldReport = _joyReport;
|
||||
|
||||
for (uint8_t i = 0; i < _num_buttons; i++) {
|
||||
_buttons[i]->Update(this);
|
||||
bool changed = _buttons[i]->Update(this);
|
||||
if (changed && _debug) {
|
||||
char buffer[25];
|
||||
sprintf(buffer, "Button %d changed state.", i);
|
||||
Serial.println(buffer);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: implement this and also refactor it into a class or classes
|
||||
|
|
|
@ -46,8 +46,11 @@ class Joystick {
|
|||
// Add an analog axis to the joystick. THIS METHOD IS NOT CURRENTLY TESTED OR SUPPORTED. It might work, but probably not.
|
||||
void AddAxis(uint8_t pin);
|
||||
|
||||
|
||||
// These members should not be used by end users; todo: remember how friend classes work
|
||||
void PressButton(uint8_t button);
|
||||
void ReleaseButton(uint8_t button);
|
||||
bool _debug;
|
||||
|
||||
private:
|
||||
void SetAxis(uint8_t axis, int16_t value);
|
||||
|
@ -66,7 +69,6 @@ class Joystick {
|
|||
uint8_t _num_axes;
|
||||
|
||||
JoyReport _joyReport;
|
||||
bool _debug;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue
Block a user