From fcab83dcb398ec904db22009d21fa2c1fa133ba1 Mon Sep 17 00:00:00 2001 From: Kristian Sloth Lauszus Date: Wed, 25 Mar 2015 01:16:41 +0100 Subject: [PATCH] Fixed some bugs in: https://github.com/felis/USB_Host_Shield_2.0/pull/135 --- XBOXONE.cpp | 27 ++++++++++----------------- XBOXONE.h | 4 ++-- keywords.txt | 1 - 3 files changed, 12 insertions(+), 20 deletions(-) diff --git a/XBOXONE.cpp b/XBOXONE.cpp index 9be283a0..2159c052 100644 --- a/XBOXONE.cpp +++ b/XBOXONE.cpp @@ -257,17 +257,11 @@ void XBOXONE::readReport() { if(readBuf == NULL) return; if(readBuf[0] == 0x07) { - // The XBOX button has a seperate message - if (readBuf[4] == 1) { + // The XBOX button has a separate message + if(readBuf[4] == 1) ButtonState |= XBOX_BUTTONS[XBOX]; - } - else { + else ButtonState &= ~XBOX_BUTTONS[XBOX]; - } - if(ButtonState != OldButtonState) { - ButtonClickState = ButtonState & ~OldButtonState; // Update click state variable - OldButtonState = ButtonState; - } } if(readBuf[0] != 0x20) { // Check if it's the correct report, otherwise return - the controller also sends different status reports #ifdef EXTRADEBUG @@ -277,7 +271,7 @@ void XBOXONE::readReport() { return; } - uint16_t xbox = ButtonState & XBOX_BUTTONS[XBOX]; // since the XBOX button is seperate, save it and add it back in + uint16_t xbox = ButtonState & XBOX_BUTTONS[XBOX]; // Since the XBOX button is separate, save it and add it back in // xbox button from before, dpad, abxy, start/back, sync, stick click, shoulder buttons ButtonState = xbox | (((uint16_t)readBuf[5] & 0xF) << 8) | (readBuf[4] & 0xF0) | (((uint16_t)readBuf[4] & 0x0C) << 10) | ((readBuf[4] & 0x01) << 3) | (((uint16_t)readBuf[5] & 0xC0) << 8) | ((readBuf[5] & 0x30) >> 4); @@ -296,15 +290,14 @@ void XBOXONE::readReport() { ButtonClickState = ButtonState & ~OldButtonState; // Update click state variable OldButtonState = ButtonState; } - // handle click detection for triggers - if (triggerValue[0] != triggerValueOld[0]) { - triggerValueOld[0] = triggerValue[0]; + + // Handle click detection for triggers + if(triggerValue[0] != 0 && triggerValueOld[0] == 0) L2Clicked = true; - } - if (triggerValue[1] != triggerValueOld[1]) { - triggerValueOld[1] = triggerValue[1]; + triggerValueOld[0] = triggerValue[0]; + if(triggerValue[1] != 0 && triggerValueOld[1] == 0) R2Clicked = true; - } + triggerValueOld[1] = triggerValue[1]; } void XBOXONE::printReport() { //Uncomment "#define PRINTREPORT" to print the report send by the Xbox ONE Controller diff --git a/XBOXONE.h b/XBOXONE.h index 7fab80ac..02efbf21 100644 --- a/XBOXONE.h +++ b/XBOXONE.h @@ -154,8 +154,8 @@ private: uint16_t OldButtonState; uint16_t ButtonClickState; int16_t hatValue[4]; - int16_t triggerValue[2]; - int16_t triggerValueOld[2]; + uint16_t triggerValue[2]; + uint16_t triggerValueOld[2]; bool L2Clicked; // These buttons are analog, so we use we use these bools to check if they where clicked or not bool R2Clicked; diff --git a/keywords.txt b/keywords.txt index 2d3931dc..bbbfb03e 100644 --- a/keywords.txt +++ b/keywords.txt @@ -56,7 +56,6 @@ get9DOFValues KEYWORD2 getStatus KEYWORD2 printStatusString KEYWORD2 getTemperature KEYWORD2 -getTrigger KEYWORD2 disconnect KEYWORD2 setAllOff KEYWORD2