@@ -219,6 +219,7 @@ void XInputGamepad::setButton(XInputControl button, boolean state) {
219219 if (state) { tx[buttonData->index ] |= buttonData->mask ; } // Press
220220 else { tx[buttonData->index ] &= ~(buttonData->mask ); } // Release
221221 newData = true ;
222+ autosend ();
222223 }
223224 else {
224225 Range * triggerRange = getRangeFromEnum (button);
@@ -236,10 +237,16 @@ void XInputGamepad::setDpad(boolean up, boolean down, boolean left, boolean righ
236237 if (up && down) { down = false ; } // Up + Down = Up
237238 if (left && right) { left = false ; right = false ; } // Left + Right = Neutral
238239
240+ const boolean autoSendTemp = autoSendOption; // Save autosend state
241+ autoSendOption = false ; // Disable temporarily
242+
239243 setDpad (DPAD_UP, up);
240244 setDpad (DPAD_DOWN, down);
241245 setDpad (DPAD_LEFT, left);
242246 setDpad (DPAD_RIGHT, right);
247+
248+ autoSendOption = autoSendTemp; // Re-enable from option
249+ autosend ();
243250}
244251
245252void XInputGamepad::setTrigger (XInputControl trigger, int32_t val) {
@@ -251,6 +258,7 @@ void XInputGamepad::setTrigger(XInputControl trigger, int32_t val) {
251258
252259 tx[triggerData->index ] = val;
253260 newData = true ;
261+ autosend ();
254262}
255263
256264void XInputGamepad::setJoystick (XInputControl joy, int32_t x, int32_t y) {
@@ -269,12 +277,18 @@ void XInputGamepad::setJoystick(XInputControl joy, int32_t x, int32_t y) {
269277 tx[joyData->y_high ] = highByte (y);
270278
271279 newData = true ;
280+ autosend ();
272281}
273282
274283void XInputGamepad::releaseAll () {
275284 const uint8_t offset = 2 ; // Skip message type and packet size
276285 memset (tx + offset, 0x00 , sizeof (tx) - offset); // Clear TX array
277286 newData = true ; // Data changed and is unsent
287+ autosend ();
288+ }
289+
290+ void XInputGamepad::setAutoSend (boolean a) {
291+ autoSendOption = a;
278292}
279293
280294boolean XInputGamepad::getButton (XInputControl button) const {
@@ -467,8 +481,9 @@ void XInputGamepad::reset() {
467481 setTriggerRange (XInputMap_Trigger::range.min , XInputMap_Trigger::range.max );
468482 setJoystickRange (XInputMap_Joystick::range.min , XInputMap_Joystick::range.max );
469483
470- // Clear user-set receive callback
484+ // Clear user-set options
471485 recvCallback = nullptr ;
486+ autoSendOption = true ;
472487}
473488
474489void XInputGamepad::printDebug (Print &output) const {
0 commit comments