Analog move: not blocking handler
This commit is contained in:
parent
5375443e6f
commit
a9377f1639
100
YAOCMouse.ino
100
YAOCMouse.ino
@ -27,6 +27,12 @@ const byte mouseStates[4][2] = {
|
||||
{1, 0}
|
||||
};
|
||||
|
||||
uint64_t lastHandleMicros = 0;
|
||||
int8_t Xchange = 0;
|
||||
int8_t Ychange = 0;
|
||||
byte Xdir = 0;
|
||||
byte Ydir = 0;
|
||||
|
||||
class MouseRptParser : public MouseReportParser
|
||||
{
|
||||
protected:
|
||||
@ -78,7 +84,7 @@ void amigaYpulse(int8_t count) {
|
||||
return;
|
||||
|
||||
if (mouseYworking)
|
||||
return;
|
||||
return;
|
||||
|
||||
mouseYworking = true;
|
||||
byte mapped = map(abs(count), 0, 127, 1, MOUSE_SCALE_MAX);
|
||||
@ -135,10 +141,97 @@ void amigaXpulse(int8_t count) {
|
||||
}
|
||||
}
|
||||
|
||||
void processXTableIndex(bool dir) {
|
||||
if (dir) {
|
||||
mouseXTableIndex++;
|
||||
|
||||
if (mouseXTableIndex > 3) {
|
||||
mouseXTableIndex = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mouseXTableIndex--;
|
||||
|
||||
if (mouseXTableIndex < 0) {
|
||||
mouseXTableIndex = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void processYTableIndex(bool dir) {
|
||||
if (dir) {
|
||||
mouseYTableIndex++;
|
||||
|
||||
if (mouseYTableIndex > 3) {
|
||||
mouseYTableIndex = 0;
|
||||
}
|
||||
}
|
||||
else {
|
||||
mouseYTableIndex--;
|
||||
|
||||
if (mouseYTableIndex < 0) {
|
||||
mouseYTableIndex = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void writeAnalogPorts() {
|
||||
digitalWrite(PIN_MOUSE_H, mouseStates[mouseXTableIndex][0]);
|
||||
digitalWrite(PIN_MOUSE_HQ, mouseStates[mouseXTableIndex][1]);
|
||||
digitalWrite(PIN_MOUSE_V, mouseStates[mouseYTableIndex][0]);
|
||||
digitalWrite(PIN_MOUSE_VQ, mouseStates[mouseYTableIndex][1]);
|
||||
}
|
||||
|
||||
void handleAnalogMove() {
|
||||
// Do nothing if no change
|
||||
if ((Xchange == 0) && (Ychange == 0)) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (lastHandleMicros + MOUSE_PULSE_DELAY > micros()) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (Xchange > 0) {
|
||||
processXTableIndex(Xdir);
|
||||
Xchange--;
|
||||
}
|
||||
|
||||
if (Ychange > 0) {
|
||||
processYTableIndex(Ydir);
|
||||
Ychange--;
|
||||
}
|
||||
|
||||
writeAnalogPorts();
|
||||
|
||||
lastHandleMicros = micros();
|
||||
}
|
||||
|
||||
void MouseRptParser::OnMouseMove(MOUSEINFO *mi)
|
||||
{
|
||||
amigaYpulse(mi->dY);
|
||||
amigaXpulse(mi->dX);
|
||||
//amigaYpulse(mi->dY);
|
||||
//amigaXpulse(mi->dX);
|
||||
|
||||
//return;
|
||||
|
||||
if ((Xchange != 0) || (Ychange != 0)) {
|
||||
Serial.println("Too FAST");
|
||||
Serial.print("X: ");
|
||||
Serial.println(Xchange);
|
||||
Serial.print("Y: ");
|
||||
Serial.println(Ychange);
|
||||
}
|
||||
|
||||
if (mi->dX != 0) {
|
||||
Xchange += map(abs(mi->dX), 0, 127, 1, MOUSE_SCALE_MAX);
|
||||
}
|
||||
|
||||
if (mi->dY != 0) {
|
||||
Ychange += map(abs(mi->dY), 0, 127, 1, MOUSE_SCALE_MAX);
|
||||
}
|
||||
|
||||
Xdir = mi->dX < 0 ? true : false;
|
||||
Ydir = mi->dY < 0 ? true : false;
|
||||
};
|
||||
|
||||
|
||||
@ -192,4 +285,5 @@ void setup() {
|
||||
|
||||
void loop() {
|
||||
Usb.Task();
|
||||
handleAnalogMove();
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user