Fixed duplicate controllers showing up on the Steam Controller wireless dongle

This commit is contained in:
Sam Lantinga
2024-11-14 14:19:16 -08:00
parent fe3566ca46
commit f0b61c69e7

View File

@@ -967,6 +967,7 @@ static bool UpdateSteamControllerState(const uint8_t *pData, int nDataSize, Stea
typedef struct typedef struct
{ {
bool connected;
bool report_sensors; bool report_sensors;
uint32_t update_rate_in_us; uint32_t update_rate_in_us;
Uint64 sensor_timestamp; Uint64 sensor_timestamp;
@@ -1028,10 +1029,11 @@ static bool HIDAPI_DriverSteam_InitDevice(SDL_HIDAPI_Device *device)
return SDL_SetError("Failed to send ID_DONGLE_GET_WIRELESS_STATE request"); return SDL_SetError("Failed to send ID_DONGLE_GET_WIRELESS_STATE request");
} }
// We will enumerate any attached controllers in UpdateDevices() // We will enumerate any attached controllers in UpdateDevice()
return true; return true;
} else { } else {
// Wired and BLE controllers are always connected if HIDAPI can see them // Wired and BLE controllers are always connected if HIDAPI can see them
ctx->connected = true;
return HIDAPI_JoystickConnected(device, NULL); return HIDAPI_JoystickConnected(device, NULL);
} }
} }
@@ -1242,22 +1244,24 @@ static bool HIDAPI_DriverSteam_UpdateDevice(SDL_HIDAPI_Device *device)
} }
ctx->m_last_state = ctx->m_state; ctx->m_last_state = ctx->m_state;
} else if (joystick && D0G_IS_WIRELESS_DISCONNECT(pPacket, nPacketLength)) { } else if (ctx->connected && D0G_IS_WIRELESS_DISCONNECT(pPacket, nPacketLength)) {
// Controller has disconnected from the wireless dongle // Controller has disconnected from the wireless dongle
HIDAPI_JoystickDisconnected(device, device->joysticks[0]); HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
joystick = NULL; joystick = NULL;
} else if (!joystick && D0G_IS_WIRELESS_CONNECT(pPacket, nPacketLength)) { ctx->connected = false;
} else if (!ctx->connected && D0G_IS_WIRELESS_CONNECT(pPacket, nPacketLength)) {
// Controller has connected to the wireless dongle // Controller has connected to the wireless dongle
if (!HIDAPI_JoystickConnected(device, NULL)) { if (!HIDAPI_JoystickConnected(device, NULL)) {
return false; return false;
} }
joystick = SDL_GetJoystickFromID(device->joysticks[0]); joystick = SDL_GetJoystickFromID(device->joysticks[0]);
ctx->connected = true;
} }
if (r <= 0) { if (r <= 0) {
// Failed to read from controller // Failed to read from controller
if (joystick) { if (ctx->connected) {
HIDAPI_JoystickDisconnected(device, device->joysticks[0]); HIDAPI_JoystickDisconnected(device, device->joysticks[0]);
} }
return false; return false;