#include "hidjoystickrptparser.h" JoystickReportParser::JoystickReportParser(JoystickEvents *evt) : joyEvents(evt), oldHat(0xDE), oldButtons(0) { for (uint8_t i=0; iOnGamePadChanged((const GamePadEventData*)buf); for (uint8_t i=0; iOnHatSwitch(hat); oldHat = hat; } uint16_t buttons = (0x0000 | buf[6]); buttons <<= 4; buttons |= (buf[5] >> 4); uint16_t changes = (buttons ^ oldButtons); // Calling Button Event Handler for every button changed if (changes) { for (uint8_t i=0; i<0x0C; i++) { uint16_t mask = (0x0001 << i); if (((mask & changes) > 0) && joyEvents) if ((buttons & mask) > 0) joyEvents->OnButtonDn(i+1); else joyEvents->OnButtonUp(i+1); } oldButtons = buttons; } } void JoystickEvents::OnGamePadChanged(const GamePadEventData *evt) { Serial.print("X: "); PrintHex(evt->X, 0x80); Serial.print("\tY: "); PrintHex(evt->Y, 0x80); Serial.print("\tZ: "); PrintHex(evt->Z1, 0x80); Serial.print("\tZ: "); PrintHex(evt->Z2, 0x80); Serial.print("\tRz: "); PrintHex(evt->Rz, 0x80); Serial.println(""); } void JoystickEvents::OnHatSwitch(uint8_t hat) { Serial.print("Hat Switch: "); PrintHex(hat, 0x80); Serial.println(""); } void JoystickEvents::OnButtonUp(uint8_t but_id) { Serial.print("Up: "); Serial.println(but_id, DEC); } void JoystickEvents::OnButtonDn(uint8_t but_id) { Serial.print("Dn: "); Serial.println(but_id, DEC); }