@@ -196,19 +196,19 @@ static bool GetReply(SDL_HIDAPI_Device* device, Uint8 command, Uint8* data, size
196196 return false;
197197}
198198
199- static bool SDL_HIDAPI_Flydigi_SendHeartbeat (SDL_HIDAPI_Device * device )
199+ static bool SDL_HIDAPI_Flydigi_SendAcquireRequest (SDL_HIDAPI_Device * device , bool acquire )
200200{
201- const Uint8 acquireControllerCmd [] = { FLYDIGI_V2_CMD_REPORT_ID , FLYDIGI_V2_MAGIC1 , FLYDIGI_V2_MAGIC2 , FLYDIGI_V2_ACQUIRE_CONTROLLER_COMMAND , 23 , 1 , 83 , 68 , 76 , 0 };
201+ const Uint8 acquireControllerCmd [] = {
202+ FLYDIGI_V2_CMD_REPORT_ID ,
203+ FLYDIGI_V2_MAGIC1 ,
204+ FLYDIGI_V2_MAGIC2 ,
205+ FLYDIGI_V2_ACQUIRE_CONTROLLER_COMMAND ,
206+ 23 ,
207+ acquire ? 1 : 0 ,
208+ 83 , 68 , 76 , 0
209+ };
202210 if (SDL_hid_write (device -> dev , acquireControllerCmd , sizeof (acquireControllerCmd )) < 0 ) {
203- return SDL_SetError ("Couldn't enable input reports" );
204- }
205-
206- Uint8 acquireControllerData [USB_PACKET_LENGTH ];
207- if (!GetReply (device , FLYDIGI_V2_ACQUIRE_CONTROLLER_COMMAND , acquireControllerData , sizeof (acquireControllerData ))) {
208- return SDL_SetError ("Controller acquiring is not supported" );
209- }
210- if (acquireControllerData [6 ] != 1 ) {
211- return SDL_SetError ("Controller acquiring is disabled" );
211+ return SDL_SetError ("Couldn't send acquire command" );
212212 }
213213 return true;
214214}
@@ -243,7 +243,16 @@ static bool HIDAPI_DriverFlydigi_InitControllerV2(SDL_HIDAPI_Device *device)
243243
244244 ctx -> last_heartbeat = SDL_GetTicks ();
245245
246- return SDL_HIDAPI_Flydigi_SendHeartbeat (device );
246+ if (!SDL_HIDAPI_Flydigi_SendAcquireRequest (device , true)) {
247+ return false;
248+ }
249+ if (!GetReply (device , FLYDIGI_V2_ACQUIRE_CONTROLLER_COMMAND , data , sizeof (data ))) {
250+ return SDL_SetError ("Controller acquiring is not supported" );
251+ }
252+ if (data [6 ] != 1 ) {
253+ return SDL_SetError ("Controller acquiring is disabled" );
254+ }
255+ return true;
247256}
248257
249258static void HIDAPI_DriverFlydigi_UpdateDeviceIdentity (SDL_HIDAPI_Device * device )
@@ -770,6 +779,14 @@ static bool HIDAPI_DriverFlydigi_UpdateDevice(SDL_HIDAPI_Device *device)
770779 return false;
771780 }
772781
782+ if (device -> vendor_id == USB_VENDOR_FLYDIGI_V2 ) {
783+ Uint64 now = SDL_GetTicks ();
784+ if (now >= (ctx -> last_heartbeat + FLYDIGI_ACQUIRE_CONTROLLER_HEARTBEAT_TIME )) {
785+ SDL_HIDAPI_Flydigi_SendAcquireRequest (device , true);
786+ ctx -> last_heartbeat = now ;
787+ }
788+ }
789+
773790 while ((size = SDL_hid_read_timeout (device -> dev , data , sizeof (data ), 0 )) > 0 ) {
774791#ifdef DEBUG_FLYDIGI_PROTOCOL
775792 HIDAPI_DumpPacket ("Flydigi packet: size = %d" , data , size );
@@ -784,18 +801,6 @@ static bool HIDAPI_DriverFlydigi_UpdateDevice(SDL_HIDAPI_Device *device)
784801 }
785802 }
786803
787- if (device -> vendor_id == USB_VENDOR_FLYDIGI_V2 ) {
788- Uint64 now = SDL_GetTicks ();
789- if (now >= (ctx -> last_heartbeat + FLYDIGI_ACQUIRE_CONTROLLER_HEARTBEAT_TIME )) {
790- if (!SDL_HIDAPI_Flydigi_SendHeartbeat (device )) {
791- // We can no longer acquire the device, mark it as disconnected
792- HIDAPI_JoystickDisconnected (device , device -> joysticks [0 ]);
793- return false;
794- }
795- ctx -> last_heartbeat = now ;
796- }
797- }
798-
799804 if (size < 0 ) {
800805 // Read error, device is disconnected
801806 HIDAPI_JoystickDisconnected (device , device -> joysticks [0 ]);
@@ -805,8 +810,7 @@ static bool HIDAPI_DriverFlydigi_UpdateDevice(SDL_HIDAPI_Device *device)
805810
806811static void HIDAPI_DriverFlydigi_CloseJoystick (SDL_HIDAPI_Device * device , SDL_Joystick * joystick )
807812{
808- const Uint8 acquireControllerCmd [] = { FLYDIGI_V2_CMD_REPORT_ID , FLYDIGI_V2_MAGIC1 , FLYDIGI_V2_MAGIC2 , FLYDIGI_V2_ACQUIRE_CONTROLLER_COMMAND , 23 , 0 , 83 , 68 , 76 , 0 };
809- SDL_hid_write (device -> dev , acquireControllerCmd , sizeof (acquireControllerCmd ));
813+ SDL_HIDAPI_Flydigi_SendAcquireRequest (device , false);
810814}
811815
812816static void HIDAPI_DriverFlydigi_FreeDevice (SDL_HIDAPI_Device * device )
0 commit comments