@@ -92,13 +92,13 @@ static u32 __wpad_idletimeout = 300;
9292static vu32 __wpads_active = 0 ;
9393static vu32 __wpads_used = 0 ;
9494static wiimote * * __wpads = NULL ;
95- static wiimote_listen __wpads_listen [WPAD_MAX_DEVICES ];
96- static WPADData wpaddata [WPAD_MAX_DEVICES ];
97- static struct _wpad_cb __wpdcb [WPAD_MAX_DEVICES ];
98- static conf_pads __wpad_devs ;
99- static conf_pad_guests __wpad_guests ;
100- static struct linkkey_info __wpad_keys [CONF_PAD_MAX_REGISTERED ];
101- static struct linkkey_info __wpad_guest_keys [CONF_PAD_ACTIVE_AND_OTHER ];
95+ static wiimote_listen __wpads_listen [WPAD_MAX_DEVICES ] = { 0 } ;
96+ static WPADData wpaddata [WPAD_MAX_DEVICES ] = { 0 } ;
97+ static struct _wpad_cb __wpdcb [WPAD_MAX_DEVICES ] = { 0 } ;
98+ static conf_pads __wpad_devs = { 0 } ;
99+ static conf_pad_guests __wpad_guests = { 0 } ;
100+ static struct linkkey_info __wpad_keys [CONF_PAD_MAX_REGISTERED ] = { 0 } ;
101+ static struct linkkey_info __wpad_guest_keys [CONF_PAD_ACTIVE_AND_OTHER ] = { 0 } ;
102102
103103static sem_t __wpad_confsave_sem ;
104104static bool __wpad_confsave_thread_running = false;
@@ -818,6 +818,23 @@ static void __wpad_hostsyncbuttonCB(u32 held)
818818 _CPU_ISR_Restore (level );
819819}
820820
821+ static s32 GetActiveSlot (struct bd_addr * pad_addr )
822+ {
823+ int i ;
824+ int slot = CONF_PAD_MAX_ACTIVE ;
825+ struct bd_addr bdaddr ;
826+
827+ for (i = 0 ; i < CONF_PAD_MAX_ACTIVE ; i ++ ) {
828+ BD_ADDR_FROM_BYTES (& bdaddr ,__wpad_devs .active [i ].bdaddr );
829+ if (bd_addr_cmp (pad_addr ,& bdaddr )) {
830+ slot = i ;
831+ break ;
832+ }
833+ }
834+
835+ return slot ;
836+ }
837+
821838s32 __wpad_read_remote_name_finished (s32 result ,void * userdata )
822839{
823840 u32 level ;
@@ -832,18 +849,12 @@ s32 __wpad_read_remote_name_finished(s32 result,void *userdata)
832849 if (!strncmp ("Nintendo RVL-" , (char * )info -> name , 13 )) {
833850 // Found Wii accessory, is it controller or something else?
834851 if (!strncmp ("Nintendo RVL-CNT-" , (char * )info -> name , 17 )) {
835- // Check active list
836- for (i = 0 ; i < CONF_PAD_MAX_ACTIVE ; i ++ ) {
837- BD_ADDR_FROM_BYTES (& (bdaddr ),__wpad_devs .active [i ].bdaddr );
838- if (bd_addr_cmp (& info -> bdaddr ,& bdaddr )) {
839- WIIUSE_DEBUG ("Wiimote already active in slot %d" , i );
840- slot = i ;
841- break ;
842- }
843- }
844-
845- // Not active, try to make active
846- if (slot >= CONF_PAD_MAX_ACTIVE ) {
852+ slot = GetActiveSlot (& info -> bdaddr );
853+ if (slot < CONF_PAD_MAX_ACTIVE ) {
854+ WIIUSE_DEBUG ("Wiimote already active in slot %d" , slot );
855+ } else {
856+ // Not active, try to make active
857+ slot = WPAD_MAX_DEVICES ;
847858 for (i = 0 ; i < CONF_PAD_MAX_ACTIVE ; i ++ ) {
848859 if (!(__wpads_used & (1 <<i ))) {
849860 WIIUSE_DEBUG ("Attempting to connect to Wiimote using slot %d" , i );
@@ -855,7 +866,7 @@ s32 __wpad_read_remote_name_finished(s32 result,void *userdata)
855866 } else {
856867 // Check for balance board
857868 BD_ADDR_FROM_BYTES (& (bdaddr ),__wpad_devs .balance_board .bdaddr );
858- if (bd_addr_cmp (& info -> bdaddr ,& bdaddr )) {
869+ if (bd_addr_cmp (& info -> bdaddr ,& bdaddr )) {
859870 WIIUSE_DEBUG ("Balance Board already registered" );
860871 slot = WPAD_BALANCE_BOARD ;
861872 }
@@ -888,23 +899,6 @@ s32 __wpad_read_remote_name_finished(s32 result,void *userdata)
888899 return result ;
889900}
890901
891- static s32 GetActiveSlot (struct bd_addr * pad_addr )
892- {
893- int i ;
894- int slot = CONF_PAD_MAX_ACTIVE ;
895- struct bd_addr bdaddr ;
896-
897- for (i = 0 ; i < CONF_PAD_MAX_ACTIVE ; i ++ ) {
898- BD_ADDR_FROM_BYTES (& bdaddr ,__wpad_devs .active [i ].bdaddr );
899- if (bd_addr_cmp (pad_addr ,& bdaddr )) {
900- slot = i ;
901- break ;
902- }
903- }
904-
905- return slot ;
906- }
907-
908902static s32 GetRegisteredSlot (struct bd_addr * pad_addr )
909903{
910904 int i ;
@@ -1732,8 +1726,10 @@ s32 WPAD_Shutdown(void)
17321726 BTE_Close ();
17331727
17341728 __wpad_confsave_thread_stop ();
1735- CONF_SetPadGuestDevices (& __wpad_guests );
1736- CONF_SaveChanges ();
1729+ if (__wpads_inited != WPAD_STATE_DISABLED ) {
1730+ CONF_SetPadGuestDevices (& __wpad_guests );
1731+ CONF_SaveChanges ();
1732+ }
17371733
17381734 __wpads_inited = WPAD_STATE_DISABLED ;
17391735 SYS_RemoveAlarm (__wpad_timer );
0 commit comments