@@ -40,7 +40,8 @@ struct sio2man_internal_data
4040 int m_intr_sema ;
4141 int m_transfer_semaphore ;
4242 // Unofficial: backwards compatibility for libraries using 1.3 SDK
43- int m_sdk13x_flag ;
43+ int m_sdk13x_curflag ;
44+ int m_sdk13x_totalflag ;
4445 sio2_mtap_change_slot_cb_t m_mtap_change_slot_cb ;
4546 sio2_mtap_get_slot_max_cb_t m_mtap_get_slot_max_cb ;
4647 sio2_mtap_get_slot_max2_cb_t m_mtap_get_slot_max2_cb ;
@@ -311,7 +312,8 @@ int _start(int ac, char **av)
311312 if ( g_sio2man_data .m_inited )
312313 return 1 ;
313314 g_sio2man_data .m_inited = 1 ;
314- g_sio2man_data .m_sdk13x_flag = 0 ;
315+ g_sio2man_data .m_sdk13x_curflag = 0 ;
316+ g_sio2man_data .m_sdk13x_totalflag = 3 ;
315317 // Unofficial: remove unneeded thread priority argument handler
316318 // Unofficial: use setters instead of setting variable directly
317319 sio2_mtap_change_slot_set (NULL );
@@ -409,7 +411,7 @@ int sio2_transfer(sio2_transfer_data_t *td)
409411 sio2_set_ctrl_1 ();
410412 sio2_wait_for_intr ();
411413 recv_td (td );
412- if ( g_sio2man_data .m_sdk13x_flag )
414+ if ( g_sio2man_data .m_sdk13x_curflag )
413415 sio2_transfer_reset ();
414416#ifdef SIO2LOG
415417 log_flush (0 );
@@ -426,18 +428,24 @@ void sio2_pad_transfer_init(void)
426428#ifdef SIO2LOG
427429 log_default (LOG_PAD_READY );
428430#endif
429- g_sio2man_data .m_sdk13x_flag = 0 ;
431+ g_sio2man_data .m_sdk13x_curflag = 0 ;
430432}
431433
432434void sio2_pad_transfer_init_possiblysdk13x (void )
433435{
434436 sio2_pad_transfer_init ();
435- g_sio2man_data .m_sdk13x_flag = 1 ;
437+ g_sio2man_data .m_sdk13x_curflag |= g_sio2man_data .m_sdk13x_totalflag & 1 ;
438+ }
439+
440+ void sio2_mc_transfer_init_possiblysdk13x (void )
441+ {
442+ sio2_pad_transfer_init ();
443+ g_sio2man_data .m_sdk13x_curflag |= g_sio2man_data .m_sdk13x_totalflag & 2 ;
436444}
437445
438446void sio2_transfer_reset (void )
439447{
440- g_sio2man_data .m_sdk13x_flag = 0 ;
448+ g_sio2man_data .m_sdk13x_curflag = 0 ;
441449 SignalSema (g_sio2man_data .m_transfer_semaphore );
442450#ifdef SIO2LOG
443451 log_default (LOG_RESET );
@@ -491,7 +499,7 @@ void sio2_mtap_update_slots_set(sio2_mtap_update_slots_t cb)
491499
492500int sio2_mtap_change_slot (s32 * arg )
493501{
494- g_sio2man_data .m_sdk13x_flag = 0 ;
502+ g_sio2man_data .m_sdk13x_totalflag &= ~ g_sio2man_data . m_sdk13x_curflag ;
495503 // Unofficial: unconditionally call callback
496504 return g_sio2man_data .m_mtap_change_slot_cb (arg );
497505}
0 commit comments