Skip to content

Commit 76c9567

Browse files
authored
Merge branch 'master' into wiimote-inquiryex
2 parents 5f4d001 + 6059843 commit 76c9567

6 files changed

Lines changed: 76 additions & 15 deletions

File tree

gc/wiiuse/wiiuse.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -720,8 +720,8 @@ WIIUSE_EXPORT extern const char* wiiuse_version();
720720
#ifndef GEKKO
721721
WIIUSE_EXPORT extern struct wiimote_t** wiiuse_init(int wiimotes);
722722
#else
723-
WIIUSE_EXPORT extern int wiiuse_accept(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err));
724-
WIIUSE_EXPORT extern int wiiuse_connect(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err));
723+
WIIUSE_EXPORT extern int wiiuse_accept(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, const u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err));
724+
WIIUSE_EXPORT extern int wiiuse_connect(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, const u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err));
725725
WIIUSE_EXPORT extern struct wiimote_t** wiiuse_init(int wiimotes, wii_event_cb event_cb);
726726
WIIUSE_EXPORT extern void wiiuse_sensorbar_enable(int enable);
727727
#endif

libogc/console.c

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ PrintConsole defaultConsole =
129129
256 //number of characters in the font set
130130
},
131131
(u16*)NULL,
132+
0,0, //con_xres con_yres
133+
0, //con_stride
134+
0,0, //target_x target_y
135+
0, //tgt_stride
132136
0,0, //cursorX cursorY
133137
0,0, //prevcursorX prevcursorY
134138
80, //console width
@@ -138,9 +142,9 @@ PrintConsole defaultConsole =
138142
80, //window width
139143
30, //window height
140144
3, //tab size
141-
7, // foreground color
142-
0, // background color
143-
0, // flags
145+
7, //foreground color
146+
0, //background color
147+
0, //flags
144148
0, //print callback
145149
false //console initialized
146150
};
@@ -151,6 +155,7 @@ PrintConsole* currentConsole = &currentCopy;
151155

152156
static inline void *__console_offset_by_pixels(void *ptr, s32 dy_pixels, u32 stride_bytes, s32 dx_pixels)
153157
{
158+
if (ptr == NULL) return NULL;
154159
const s32 dy_bytes = dy_pixels * stride_bytes;
155160
const s32 dx_bytes = dx_pixels * VI_DISPLAY_PIX_SZ;
156161
return (u8 *)ptr + dy_bytes + dx_bytes;
@@ -248,6 +253,7 @@ static void __console_drawc(int c)
248253
if (c<0 || c>con->font.numChars) return;
249254

250255
ptr = __console_get_cursor_start_ptr();
256+
if( ptr == NULL ) return;
251257

252258
pbits = &con->font.gfx[c * FONT_YSIZE];
253259
// con_stride is in bytes, but we increment ptr which is an int pointer
@@ -366,6 +372,7 @@ static void __console_clear_line(int line, int from, int to)
366372
}
367373

368374
p = __console_get_window_start_ptr();
375+
if( p == NULL ) return;
369376
p = __console_offset_by_cursor(p, line, con->con_stride, from);
370377

371378
// Clears 1 line of pixels at a time
@@ -397,6 +404,7 @@ static void __console_clear(void)
397404

398405
//get console pointer
399406
p = __console_get_window_start_ptr();
407+
if( p == NULL ) return;
400408

401409
// Clears 1 line of pixels at a time
402410
for(u16 ycnt = 0; ycnt < view_height; ycnt++)
@@ -810,6 +818,7 @@ void newRow()
810818
if( currentConsole->cursorY > currentConsole->windowHeight)
811819
{
812820
u8* ptr = __console_get_window_start_ptr();
821+
if( ptr == NULL ) return;
813822

814823
// Each window line is currentConsole->windowWidth * FONT_XSIZE * VI_DISPLAY_PIX_SZ bytes wide
815824
const u32 line_width = currentConsole->windowWidth * FONT_XSIZE * VI_DISPLAY_PIX_SZ;
@@ -905,6 +914,7 @@ ssize_t __console_write(struct _reent *r,void *fd,const char *ptr, size_t len)
905914

906915
if(!currentConsole) return -1;
907916
if(!tmp || len<=0) return -1;
917+
if( __console_get_cursor_start_ptr() == NULL ) return -1;
908918

909919
while(i<len) {
910920

@@ -1073,6 +1083,13 @@ s32 CON_InitEx(GXRModeObj *rmode, s32 conXOrigin,s32 conYOrigin,s32 conWidth,s32
10731083
VIDEO_SetPostRetraceCallback(NULL);
10741084
if(_console_buffer)
10751085
free(_console_buffer);
1086+
1087+
// clip console to framebuffer size
1088+
if(rmode->fbWidth < conXOrigin + conWidth)
1089+
conWidth = rmode->fbWidth - conXOrigin;
1090+
1091+
if(rmode->xfbHeight < conYOrigin + conHeight)
1092+
conHeight = rmode->xfbHeight - conYOrigin;
10761093

10771094
// force conWidth, conHeight to be multiples of font size
10781095
conWidth = (conWidth / FONT_XSIZE) * FONT_XSIZE;

libogc/system.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ extern void __reset(u32 reset_code);
205205

206206
extern u32 __IPC_ClntInit(void);
207207
extern u32 __PADDisableRecalibration(s32 disable);
208+
extern u32 __WPADClearActiveList(void);
208209

209210
extern void __console_init_ex(void *conbuffer,int tgt_xstart,int tgt_ystart,int tgt_stride,int con_xres,int con_yres,int con_stride);
210211

@@ -1189,8 +1190,15 @@ void SYS_ResetSystem(s32 reset,u32 reset_code,s32 force_menu)
11891190

11901191
__dsp_shutdown();
11911192

1192-
if(reset==SYS_SHUTDOWN) {
1193-
ret = __PADDisableRecalibration(TRUE);
1193+
switch(reset) {
1194+
case SYS_SHUTDOWN:
1195+
ret = __PADDisableRecalibration(TRUE);
1196+
break;
1197+
case SYS_POWEROFF:
1198+
case SYS_POWEROFF_STANDBY:
1199+
case SYS_POWEROFF_IDLE:
1200+
__WPADClearActiveList();
1201+
break;
11941202
}
11951203

11961204
while(__call_resetfuncs(FALSE)==0);

wiiuse/io_wii.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ void __wiiuse_sensorbar_enable(int enable)
161161
IRQ_Restore(level);
162162
}
163163

164-
int wiiuse_accept(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err))
164+
int wiiuse_accept(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, const u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err))
165165
{
166166
s32 err;
167167

@@ -205,7 +205,7 @@ int wiiuse_accept(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, u8 *name
205205
return 0;
206206
}
207207

208-
int wiiuse_connect(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err))
208+
int wiiuse_connect(struct wiimote_listen_t *wml, struct bd_addr *bdaddr, const u8 *name, struct wiimote_t *(*assign_cb)(wiimote_listen *wml, u8 err))
209209
{
210210
s32 err;
211211

wiiuse/nunchuk.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,11 @@ int nunchuk_handshake(struct wiimote_t *wm,struct nunchuk_t *nc,ubyte *data,uwor
5555
nc->accel_calib.cal_zero.x = (data[offset + 0]<<2)|((data[offset + 3]>>4)&3);
5656
nc->accel_calib.cal_zero.y = (data[offset + 1]<<2)|((data[offset + 3]>>2)&3);
5757
nc->accel_calib.cal_zero.z = (data[offset + 2]<<2)|(data[offset + 3]&3);
58-
nc->accel_calib.cal_g.x = (data[offset + 4]<<2)|((data[offset + 7]>>4)&3);
59-
nc->accel_calib.cal_g.y = (data[offset + 5]<<2)|((data[offset + 7]>>2)&3);
60-
nc->accel_calib.cal_g.z = (data[offset + 6]<<2)|(data[offset + 7]&3);
58+
59+
nc->accel_calib.cal_g.x = (((data[offset + 4]<<2)|((data[offset + 7]>>4)&3)) - nc->accel_calib.cal_zero.x);
60+
nc->accel_calib.cal_g.y = (((data[offset + 5]<<2)|((data[offset + 7]>>2)&3)) - nc->accel_calib.cal_zero.y);
61+
nc->accel_calib.cal_g.z = (((data[offset + 6]<<2)|(data[offset + 7]&3)) - nc->accel_calib.cal_zero.z);
62+
6163
nc->js.max.x = data[offset + 8];
6264
nc->js.min.x = data[offset + 9];
6365
nc->js.center.x = data[offset + 10];

wiiuse/wpad.c

Lines changed: 37 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,40 @@ static s32 __wpad_onreset(s32 final)
138138
return 1;
139139
}
140140

141+
u32 __WPADClearActiveList(void)
142+
{
143+
u32 level,ret;
144+
145+
_CPU_ISR_Disable(level);
146+
147+
if(CONF_GetPadDevices(&__wpad_devs) < 0) {
148+
ret = 1;
149+
goto err;
150+
}
151+
152+
__wpads_active = 0;
153+
__wpads_used = 0;
154+
memset(__wpad_devs.active,0,sizeof(__wpad_devs.active));
155+
memset(&__wpad_guests,0,sizeof(__wpad_guests));
156+
memset(__wpad_guest_keys,0,sizeof(__wpad_guest_keys));
157+
158+
if(CONF_SetPadDevices(&__wpad_devs) < 0) {
159+
ret = 1;
160+
goto err;
161+
}
162+
163+
if(CONF_SetPadGuestDevices(&__wpad_guests) < 0) {
164+
ret = 1;
165+
goto err;
166+
}
167+
168+
ret = CONF_SaveChanges();
169+
170+
err:
171+
_CPU_ISR_Restore(level);
172+
return ret;
173+
}
174+
141175
static void __wpad_def_powcb(s32 chan)
142176
{
143177
SYS_DoPowerCB();
@@ -941,7 +975,7 @@ static s8 __wpad_connreqCB(void *arg,struct bd_addr *pad_addr,u8 *cod,u8 link_ty
941975
int slot = WPAD_MAX_DEVICES;
942976
int confslot = CONF_PAD_MAX_ACTIVE;
943977
struct bd_addr bdaddr;
944-
u8 *name = NULL;
978+
const u8 *name = NULL;
945979

946980
WIIUSE_INFO("__wpad_connreqCB");
947981
_CPU_ISR_Disable(level);
@@ -952,7 +986,7 @@ static s8 __wpad_connreqCB(void *arg,struct bd_addr *pad_addr,u8 *cod,u8 link_ty
952986
confslot = GetActiveSlot(pad_addr);
953987
if (confslot < CONF_PAD_MAX_ACTIVE) {
954988
BD_ADDR_FROM_BYTES(&bdaddr,__wpad_devs.active[confslot].bdaddr);
955-
name = (u8 *)__wpad_devs.active[confslot].name;
989+
name = (const u8 *)__wpad_devs.active[confslot].name;
956990
WIIUSE_INFO("Active pad '%s' found in slot %d", name, confslot);
957991
if (!(__wpads_used & (1<<confslot)) || bd_addr_cmp(pad_addr,&bdaddr))
958992
slot = confslot;
@@ -964,7 +998,7 @@ static s8 __wpad_connreqCB(void *arg,struct bd_addr *pad_addr,u8 *cod,u8 link_ty
964998
for(i=0; i<CONF_PAD_MAX_REGISTERED; i++) {
965999
BD_ADDR_FROM_BYTES(&bdaddr,__wpad_devs.registered[i].bdaddr);
9661000
if(bd_addr_cmp(pad_addr,&bdaddr)) {
967-
name = (u8 *)__wpad_devs.registered[i].name;
1001+
name = (const u8 *)__wpad_devs.registered[i].name;
9681002
WIIUSE_INFO("Registered pad '%s' found in slot %d", name, i);
9691003

9701004
// Not active, try to make active

0 commit comments

Comments
 (0)