@@ -54,6 +54,32 @@ static __inline__ void __wiiuse_push_command(struct wiimote_t *wm,struct cmd_blk
5454 _CPU_ISR_Restore (level );
5555}
5656
57+ void wiiuse_cleanup (struct wiimote_t * * wm , int wiimotes )
58+ {
59+ int i = 0 ;
60+
61+ if (!wm )
62+ return ;
63+
64+ for (; i < wiimotes ; ++ i ) {
65+ if (wm [i ]) {
66+ if (wm [i ]-> queue_buffer ) {
67+ free (wm [i ]-> queue_buffer );
68+ wm [i ]-> queue_buffer = NULL ;
69+ }
70+
71+ if (wm [i ]-> sock ) {
72+ bte_free (wm [i ]-> sock );
73+ wm [i ]-> sock = NULL ;
74+ }
75+
76+ free (wm [i ]);
77+ }
78+ }
79+
80+ free (wm );
81+ }
82+
5783#ifndef GEKKO
5884struct wiimote_t * * wiiuse_init (int wiimotes ) {
5985#else
@@ -66,14 +92,14 @@ struct wiimote_t** wiiuse_init(int wiimotes, wii_event_cb event_cb) {
6692 return NULL ;
6793
6894 if (!__wm ) {
69- __wm = __lwp_wkspace_allocate (sizeof (struct wiimote_t * ) * wiimotes );
95+ __wm = malloc (sizeof (struct wiimote_t * ) * wiimotes );
7096 if (!__wm ) return NULL ;
7197 memset (__wm , 0 , sizeof (struct wiimote_t * ) * wiimotes );
7298 }
7399
74100 for (i = 0 ; i < wiimotes ; ++ i ) {
75101 if (!__wm [i ])
76- __wm [i ] = __lwp_wkspace_allocate (sizeof (struct wiimote_t ));
102+ __wm [i ] = malloc (sizeof (struct wiimote_t ));
77103
78104 memset (__wm [i ], 0 , sizeof (struct wiimote_t ));
79105 __wm [i ]-> unid = i ;
@@ -88,7 +114,10 @@ struct wiimote_t** wiiuse_init(int wiimotes, wii_event_cb event_cb) {
88114 __wm [i ]-> sock = NULL ;
89115 __wm [i ]-> bdaddr = * BD_ADDR_ANY ;
90116 __wm [i ]-> event_cb = event_cb ;
91- wiiuse_init_cmd_queue (__wm [i ]);
117+ if (wiiuse_init_cmd_queue (__wm [i ])) {
118+ WIIUSE_ERROR ("Could not allocate command queue" );
119+ return NULL ;
120+ }
92121 #elif defined(unix )
93122 __wm [i ]-> bdaddr = * BDADDR_ANY ;
94123 __wm [i ]-> out_sock = -1 ;
0 commit comments