This commit is contained in:
Kristian Sloth Lauszus 2015-03-25 01:16:41 +01:00
parent 199612e93e
commit fcab83dcb3
3 changed files with 12 additions and 20 deletions

View file

@ -257,18 +257,12 @@ void XBOXONE::readReport() {
if(readBuf == NULL) if(readBuf == NULL)
return; return;
if(readBuf[0] == 0x07) { if(readBuf[0] == 0x07) {
// The XBOX button has a seperate message // The XBOX button has a separate message
if (readBuf[4] == 1) { if(readBuf[4] == 1)
ButtonState |= XBOX_BUTTONS[XBOX]; ButtonState |= XBOX_BUTTONS[XBOX];
} else
else {
ButtonState &= ~XBOX_BUTTONS[XBOX]; 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 if(readBuf[0] != 0x20) { // Check if it's the correct report, otherwise return - the controller also sends different status reports
#ifdef EXTRADEBUG #ifdef EXTRADEBUG
Notify(PSTR("\r\nXbox Poll: "), 0x80); Notify(PSTR("\r\nXbox Poll: "), 0x80);
@ -277,7 +271,7 @@ void XBOXONE::readReport() {
return; 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 // 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); 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 ButtonClickState = ButtonState & ~OldButtonState; // Update click state variable
OldButtonState = ButtonState; OldButtonState = ButtonState;
} }
// handle click detection for triggers
if (triggerValue[0] != triggerValueOld[0]) { // Handle click detection for triggers
triggerValueOld[0] = triggerValue[0]; if(triggerValue[0] != 0 && triggerValueOld[0] == 0)
L2Clicked = true; L2Clicked = true;
} triggerValueOld[0] = triggerValue[0];
if (triggerValue[1] != triggerValueOld[1]) { if(triggerValue[1] != 0 && triggerValueOld[1] == 0)
triggerValueOld[1] = triggerValue[1];
R2Clicked = true; R2Clicked = true;
} triggerValueOld[1] = triggerValue[1];
} }
void XBOXONE::printReport() { //Uncomment "#define PRINTREPORT" to print the report send by the Xbox ONE Controller void XBOXONE::printReport() { //Uncomment "#define PRINTREPORT" to print the report send by the Xbox ONE Controller

View file

@ -154,8 +154,8 @@ private:
uint16_t OldButtonState; uint16_t OldButtonState;
uint16_t ButtonClickState; uint16_t ButtonClickState;
int16_t hatValue[4]; int16_t hatValue[4];
int16_t triggerValue[2]; uint16_t triggerValue[2];
int16_t triggerValueOld[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 L2Clicked; // These buttons are analog, so we use we use these bools to check if they where clicked or not
bool R2Clicked; bool R2Clicked;

View file

@ -56,7 +56,6 @@ get9DOFValues KEYWORD2
getStatus KEYWORD2 getStatus KEYWORD2
printStatusString KEYWORD2 printStatusString KEYWORD2
getTemperature KEYWORD2 getTemperature KEYWORD2
getTrigger KEYWORD2
disconnect KEYWORD2 disconnect KEYWORD2
setAllOff KEYWORD2 setAllOff KEYWORD2