Skip to content

Commit 3cb9d09

Browse files
committed
Properly wait for USB to close
1 parent 57f2921 commit 3cb9d09

5 files changed

Lines changed: 35 additions & 23 deletions

File tree

gc/bte/bte.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ typedef s32 (*btecallback)(s32 result,void *userdata);
141141

142142
void BTE_Init(void);
143143
void BTE_Shutdown(void);
144-
void BTE_Stop(void);
144+
void BTE_Close(void);
145145
s32 BTE_InitCore(btecallback cb);
146146
s32 BTE_ApplyPatch(btecallback cb);
147147
s32 BTE_InitSub(btecallback cb);

lwbt/bte.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ void BTE_Init(void)
399399
SYS_SetPeriodicAlarm(btstate.timer_svc,&tb,&tb,bt_alarmhandler, NULL);
400400
}
401401

402-
void BTE_Stop(void)
402+
void BTE_Close(void)
403403
{
404404
u32 level;
405405

@@ -425,6 +425,7 @@ void BTE_Shutdown(void)
425425
hci_cmd_complete(__bte_shutdown_finished);
426426
hci_reset();
427427
__bte_waitcmdfinish(&btstate);
428+
LWP_CloseQueue(btstate.hci_cmdq);
428429
_CPU_ISR_Restore(level);
429430

430431
physbusif_shutdown();

lwbt/physbusif.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -299,7 +299,9 @@ void physbusif_close(void)
299299
void physbusif_shutdown(void)
300300
{
301301
if(__usbdev.openstate!=0x0004) return;
302-
USB_CloseDeviceAsync(&__usbdev.fd,__usb_closeCB,NULL);
302+
//USB_CloseDeviceAsync(&__usbdev.fd,__usb_closeCB,NULL);
303+
USB_CloseDevice(&__usbdev.fd);
304+
__usbdev.fd = -1;
303305
}
304306

305307
void physbusif_reset_all(void)

wiiuse/io_wii.c

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ static s32 __wiiuse_disconnected(void *arg,struct bte_pcb *pcb,u8 err)
5555

5656
bte_free(wml->sock);
5757
wml->sock = NULL;
58-
58+
5959
wml->wm = NULL;
6060
return ERR_OK;
6161
}
@@ -131,25 +131,28 @@ int wiiuse_register(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, struct
131131
bd_addr_set(&(wml->bdaddr),bdaddr);
132132
memset(wml->name, 0, sizeof(wml->name));
133133
wml->assign_cb = assign_cb;
134-
if(wml->sock==NULL)
134+
135+
if(wml->sock!=NULL)
135136
{
136-
printf("wml->sock was null\n");
137-
wml->sock = bte_new();
137+
printf("wiiuse_register: wml->sock was not NULL!\n");
138+
return 0;
138139
}
139-
else
140+
141+
wml->sock = bte_new();
142+
if (wml->sock==NULL)
140143
{
141-
printf("err: %d / state: %d / bdaddr: %02x:%02x:%02x:%02x:%02x:%02x\n", wml->sock->err, wml->sock->state, wml->sock->bdaddr.addr[5], wml->sock->bdaddr.addr[4], wml->sock->bdaddr.addr[3], wml->sock->bdaddr.addr[2], wml->sock->bdaddr.addr[1], wml->sock->bdaddr.addr[0]);
142-
bte_free(wml->sock);
143-
wml->sock = bte_new();
144+
printf("wiiuse_register: bte_new failed to alloc new sock\n");
145+
return 0;
144146
}
145-
147+
146148
bte_arg(wml->sock,wml);
147149
bte_received(wml->sock,__wiiuse_receive);
148150
bte_disconnected(wml->sock,__wiiuse_disconnected);
149151

150152
err = bte_registerdeviceasync(wml->sock,bdaddr,__wiiuse_connected);
151153
if(err==ERR_OK) return 1;
152-
154+
155+
printf("wiiuse_register: bte_registerdeviceasync failed(%d)\n", err);
153156
return 0;
154157
}
155158

@@ -166,9 +169,20 @@ int wiiuse_connect(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, u8 *nam
166169
strncpy((char *)wml->name, (char *)name, sizeof(wml->name));
167170
wml->name[sizeof(wml->name) - 1] = 0x00;
168171
wml->assign_cb = assign_cb;
169-
if(wml->sock==NULL)
170-
wml->sock = bte_new();
171172

173+
if(wml->sock!=NULL)
174+
{
175+
printf("wiiuse_connect: wml->sock was not NULL!\n");
176+
return 0;
177+
}
178+
179+
wml->sock = bte_new();
180+
if (wml->sock==NULL)
181+
{
182+
printf("wiiuse_connect: bte_new failed to alloc new sock\n");
183+
return 0;
184+
}
185+
172186
bte_arg(wml->sock,wml);
173187
bte_received(wml->sock,__wiiuse_receive);
174188
bte_disconnected(wml->sock,__wiiuse_disconnected);
@@ -177,7 +191,8 @@ int wiiuse_connect(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, u8 *nam
177191

178192
err = bte_connectdeviceasync(wml->sock,bdaddr,__wiiuse_connected);
179193
if(err==ERR_OK) return 1;
180-
194+
195+
printf("wiiuse_connect: bte_registerdeviceasync failed(%d)\n", err);
181196
return 0;
182197
}
183198

wiiuse/wpad.c

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1695,7 +1695,7 @@ s32 WPAD_Shutdown(void)
16951695
printf("WPAD_Shutdown\n");
16961696

16971697
_CPU_ISR_Disable(level);
1698-
BTE_Stop();
1698+
BTE_Close();
16991699

17001700
CONF_SetPadDevices(&__wpad_devs);
17011701
CONF_SetPadGuestDevices(&__wpad_guests);
@@ -1708,17 +1708,11 @@ s32 WPAD_Shutdown(void)
17081708
SYS_RemoveAlarm(wpdcb->sound_alarm);
17091709
bte_free(__wpads_listen[i].sock);
17101710
__wpads_listen[i].sock = NULL;
1711-
//__wpad_disconnect(wpdcb);
17121711
}
17131712

17141713
__wiiuse_sensorbar_enable(0);
17151714
_CPU_ISR_Restore(level);
17161715

1717-
/*while(__wpads_used) {
1718-
usleep(50);
1719-
if(++cnt > 3000) break;
1720-
}*/
1721-
17221716
BTE_Shutdown();
17231717

17241718
return err;

0 commit comments

Comments
 (0)