58 int8_t XBOXONESParser::getButtonIndexXboxOneS(
ButtonEnum b) {
80 const int8_t index = getButtonIndexXboxOneS(b);
if (index < 0)
return 0;
85 else if (index <=
LEFT)
88 return xboxButtonState;
93 const int8_t index = getButtonIndexXboxOneS(b);
if (index < 0)
return 0;
107 bool click = xboxbuttonClickState;
108 xboxbuttonClickState = 0;
112 bool click = buttonClickState.
val & mask;
113 buttonClickState.
val &= ~mask;
118 return xboxOneSData.
hatValue[(uint8_t)a] - 32768;
122 if (len > 1 && buf) {
125 for (uint8_t i = 0; i < len; i++) {
126 D_PrintHex<uint8_t > (buf[i], 0x80);
132 memcpy(&xboxOneSData, buf + 1, min((uint8_t)(len - 1),
MFK_CASTUINT8T sizeof(xboxOneSData)));
133 else if (buf[0] == 0x02) {
134 xboxButtonState = buf[1];
135 if(xboxButtonState != xboxOldButtonState) {
136 xboxbuttonClickState = xboxButtonState & ~xboxOldButtonState;
137 xboxOldButtonState = xboxButtonState;
140 }
else if (buf[0] == 0x04)
143 #ifdef DEBUG_USB_HOST
144 Notify(
PSTR(
"\r\nUnknown report id: "), 0x80);
145 D_PrintHex<uint8_t > (buf[0], 0x80);
150 if (xboxOneSData.
btn.
val != oldButtonState.
val) {
151 buttonClickState.
val = xboxOneSData.
btn.
val & ~oldButtonState.
val;
152 oldButtonState.
val = xboxOneSData.
btn.
val;
158 if (checkDpad(
RIGHT))
159 newDpad |= 1 <<
RIGHT;
161 newDpad |= 1 <<
DOWN;
163 newDpad |= 1 <<
LEFT;
164 if (newDpad != oldDpad) {
165 buttonClickState.
dpad = newDpad & ~oldDpad;
171 if(xboxOneSData.
trigger[0] != 0 && triggerOld[0] == 0)
173 triggerOld[0] = xboxOneSData.
trigger[0];
174 if(xboxOneSData.
trigger[1] != 0 && triggerOld[1] == 0)
176 triggerOld[1] = xboxOneSData.
trigger[1];
182 for (i = 0; i <
sizeof(xboxOneSData.
hatValue) /
sizeof(xboxOneSData.
hatValue[0]); i++)
185 oldButtonState.
val = 0;
186 for (i = 0; i <
sizeof(xboxOneSData.
trigger) /
sizeof(xboxOneSData.
trigger[0]); i++)
191 buttonClickState.
dpad = 0;
212 buf[0] = 1 << 3 | 1 << 2 | 1 << 1 | 1 << 0 ;
213 buf[1] = leftTrigger;
214 buf[2] = rightTrigger;