Skip to content

Commit 2e01538

Browse files
committed
API Demo: set D-Pad to player number
Testing the received data and callback
1 parent 98ea8e9 commit 2e01538

1 file changed

Lines changed: 35 additions & 10 deletions

File tree

extras/API-Demo/API-Demo.ino

Lines changed: 35 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,38 +44,63 @@
4444
#else
4545

4646
uint8_t txData[20] = { 0x00, 0x14, 0x00 };
47-
uint8_t rxData[8] = { 0x00 };
48-
4947
boolean buttonState = false;
5048

49+
volatile uint8_t rxData[8] = { 0x00 };
50+
volatile uint8_t playerNum = 0;
51+
5152
void setup() {
5253
while (!XInputUSB::connected()) {} // wait for connection
5354
XInputUSB::setRecvCallback(receiveCallback);
5455
}
5556

5657
void loop() {
58+
// Set D-PAD based on player number (test receive)
59+
const uint8_t pNum = playerNum;
60+
if (pNum != 0) {
61+
setPlayerControl(pNum);
62+
playerNum = 0;
63+
}
64+
65+
// Toggle button 'A' (test send)
5766
buttonState = !buttonState;
58-
setButtonA(txData, buttonState);
67+
setButtonA(buttonState);
5968
XInputUSB::send(txData, sizeof(txData));
6069

6170
delay(1000);
6271
}
6372

64-
void setButtonA(uint8_t * ptr, boolean state) {
65-
const uint8_t ButtonIndex = 3;
66-
const uint8_t ButtonPosition = 4;
67-
73+
void setButton(uint8_t index, uint8_t position, uint8_t state) {
6874
if (state == true) {
69-
ptr[ButtonIndex] |= (1 << ButtonPosition);
75+
txData[index] |= (1 << position);
7076
}
7177
else {
72-
ptr[ButtonIndex] &= ~(1 << ButtonPosition);
78+
txData[index] &= ~(1 << position);
7379
}
7480
}
7581

82+
void setButtonA(boolean state) {
83+
setButton(3, 4, state);
84+
}
85+
86+
void setPlayerControl(uint8_t num) {
87+
// Player 1: Dpad Up
88+
// Player 2; Dpad Down
89+
// Player 3: Dpad Left
90+
// Player 4: Dpad Right
91+
setButton(2, num - 1, true);
92+
}
93+
7694
void receiveCallback() {
7795
if (XInputUSB::available() > 0) {
78-
XInputUSB::recv(rxData, sizeof(rxData));
96+
const int success = XInputUSB::recv((uint8_t*) rxData, sizeof(rxData));
97+
98+
if (success > 0 && rxData[0] == 0x01) { // LED Packet
99+
uint8_t ledPattern = rxData[2];
100+
if (ledPattern >= 2 && ledPattern <= 9) { // Player # Pattern
101+
playerNum = ((ledPattern - 2) % 4) + 1; // Player # 1-4
102+
}
103+
}
79104
}
80105
}
81106

0 commit comments

Comments
 (0)