120 lines
3.0 KiB
C++
120 lines
3.0 KiB
C++
#ifndef USB_GAMEPAD_H
|
|
#define USB_GAMEPAD_H
|
|
|
|
#include <WString.h>
|
|
|
|
#ifndef GAMEPAD_CLASS
|
|
#define GAMEPAD_CLASS DebugGamepad
|
|
#endif
|
|
|
|
#include "../common.h"
|
|
|
|
void print_axis(int16_t i) {
|
|
char buf[6];
|
|
sprintf(buf, i < 0 ? "%05d" : "+%05d", i);
|
|
Serial.print(buf);
|
|
}
|
|
|
|
void print_trigger(char i) {
|
|
char buf[4] = {0}; // why the hell is this initializer required...
|
|
// todo: probably not right
|
|
sprintf(buf, "%03u", (uint8_t)i);
|
|
Serial.print(buf);
|
|
}
|
|
|
|
class DebugGamepad : public AbstractGamepad {
|
|
public:
|
|
DebugGamepad() : AbstractGamepad() {
|
|
}
|
|
|
|
virtual void begin(void) {
|
|
Serial.begin(115200);
|
|
Serial.println("DebugGamepad.begin");
|
|
}
|
|
|
|
virtual void setAxis(const uint8_t cIdx, int16_t x, int16_t y, int16_t z, int16_t rZ, char rX, char rY, signed char hat) {
|
|
Serial.print("DebugGamepad.setAxis ");
|
|
Serial.print(cIdx);
|
|
Serial.print(" b: ");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_A) ? "A" : "-");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_B) ? "B" : "-");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_X) ? "X" : "-");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_Y) ? "Y" : "-");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_SELECT) ? "SL" : "--");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_START) ? "ST" : "--");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_MENU) ? "M" : "-");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_TL) ? "TL" : "--");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_TR) ? "TR" : "--");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_TL2) ? "TL2" : "---");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_TR2) ? "TR2" : "---");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_THUMBL) ? "THL" : "---");
|
|
Serial.print("+");
|
|
Serial.print(this->isPressed(cIdx, BUTTON_THUMBR) ? "THR" : "---");
|
|
Serial.print(" h: ");
|
|
switch (hat) {
|
|
case DPAD_CENTER:
|
|
Serial.print("--");
|
|
break;
|
|
case DPAD_UP:
|
|
Serial.print("U-");
|
|
break;
|
|
case DPAD_UP_RIGHT:
|
|
Serial.print("UR");
|
|
break;
|
|
case DPAD_RIGHT:
|
|
Serial.print("-R");
|
|
break;
|
|
case DPAD_DOWN_RIGHT:
|
|
Serial.print("DR");
|
|
break;
|
|
case DPAD_DOWN:
|
|
Serial.print("D-");
|
|
break;
|
|
case DPAD_DOWN_LEFT:
|
|
Serial.print("DL");
|
|
break;
|
|
case DPAD_LEFT:
|
|
Serial.print("-L");
|
|
break;
|
|
case DPAD_UP_LEFT:
|
|
Serial.print("UL");
|
|
break;
|
|
default:
|
|
Serial.print("++");
|
|
break;
|
|
}
|
|
Serial.print(" X,Y: ");
|
|
print_axis(x);
|
|
Serial.print(",");
|
|
print_axis(y);
|
|
Serial.print(" Z,RZ: ");
|
|
print_axis(z);
|
|
Serial.print(",");
|
|
print_axis(rZ);
|
|
Serial.print(" rx: ");
|
|
print_trigger(rX);
|
|
Serial.print(" ry: ");
|
|
print_trigger(rY);
|
|
Serial.println();
|
|
AbstractGamepad::setAxis(cIdx, x, y, z, rZ, rX, rY, hat);
|
|
}
|
|
|
|
virtual void sendHidReport(const uint8_t cIdx, const void* d, int len) {
|
|
Serial.print("DebugGamepad.sendHidReport: ");
|
|
Serial.println(cIdx);
|
|
}
|
|
};
|
|
|
|
#endif // USB_GAMEPAD_H
|