Only move from WIIMOTE_STATE_EXP_HANDSHAKE to WIIMOTE_STATE_EXP if the expansion's handshake code was successful.
This commit is contained in:
28
src/events.c
28
src/events.c
@@ -762,6 +762,7 @@ void handshake_expansion(struct wiimote_t* wm, byte* data, uint16_t len) {
|
|||||||
byte val = 0;
|
byte val = 0;
|
||||||
byte buf = 0x00;
|
byte buf = 0x00;
|
||||||
byte* handshake_buf;
|
byte* handshake_buf;
|
||||||
|
int gotIt = 0;
|
||||||
|
|
||||||
switch(wm->expansion_state) {
|
switch(wm->expansion_state) {
|
||||||
/* These two initialization writes disable the encryption */
|
/* These two initialization writes disable the encryption */
|
||||||
@@ -804,18 +805,24 @@ void handshake_expansion(struct wiimote_t* wm, byte* data, uint16_t len) {
|
|||||||
id = from_big_endian_uint32_t(data + 220);
|
id = from_big_endian_uint32_t(data + 220);
|
||||||
switch(id) {
|
switch(id) {
|
||||||
case EXP_ID_CODE_NUNCHUK:
|
case EXP_ID_CODE_NUNCHUK:
|
||||||
if (nunchuk_handshake(wm, &wm->exp.nunchuk, data, len))
|
if (nunchuk_handshake(wm, &wm->exp.nunchuk, data, len)) {
|
||||||
wm->event = WIIUSE_NUNCHUK_INSERTED;
|
wm->event = WIIUSE_NUNCHUK_INSERTED;
|
||||||
|
gotIt = 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXP_ID_CODE_CLASSIC_CONTROLLER:
|
case EXP_ID_CODE_CLASSIC_CONTROLLER:
|
||||||
if (classic_ctrl_handshake(wm, &wm->exp.classic, data, len))
|
if (classic_ctrl_handshake(wm, &wm->exp.classic, data, len)) {
|
||||||
wm->event = WIIUSE_CLASSIC_CTRL_INSERTED;
|
wm->event = WIIUSE_CLASSIC_CTRL_INSERTED;
|
||||||
|
gotIt = 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXP_ID_CODE_GUITAR:
|
case EXP_ID_CODE_GUITAR:
|
||||||
if (guitar_hero_3_handshake(wm, &wm->exp.gh3, data, len))
|
if (guitar_hero_3_handshake(wm, &wm->exp.gh3, data, len)) {
|
||||||
wm->event = WIIUSE_GUITAR_HERO_3_CTRL_INSERTED;
|
wm->event = WIIUSE_GUITAR_HERO_3_CTRL_INSERTED;
|
||||||
|
gotIt = 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXP_ID_CODE_MOTION_PLUS:
|
case EXP_ID_CODE_MOTION_PLUS:
|
||||||
@@ -823,11 +830,14 @@ void handshake_expansion(struct wiimote_t* wm, byte* data, uint16_t len) {
|
|||||||
case EXP_ID_CODE_MOTION_PLUS_NUNCHUK:
|
case EXP_ID_CODE_MOTION_PLUS_NUNCHUK:
|
||||||
/* wiiuse_motion_plus_handshake(wm, data, len); */
|
/* wiiuse_motion_plus_handshake(wm, data, len); */
|
||||||
wm->event = WIIUSE_MOTION_PLUS_ACTIVATED;
|
wm->event = WIIUSE_MOTION_PLUS_ACTIVATED;
|
||||||
|
gotIt = 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EXP_ID_CODE_WII_BOARD:
|
case EXP_ID_CODE_WII_BOARD:
|
||||||
if(wii_board_handshake(wm, &wm->exp.wb, data, len))
|
if(wii_board_handshake(wm, &wm->exp.wb, data, len)) {
|
||||||
wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED;
|
wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED;
|
||||||
|
gotIt = 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@@ -835,8 +845,12 @@ void handshake_expansion(struct wiimote_t* wm, byte* data, uint16_t len) {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
free(data);
|
free(data);
|
||||||
WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_EXP_HANDSHAKE);
|
if (gotIt) {
|
||||||
WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_EXP);
|
WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_EXP_HANDSHAKE);
|
||||||
|
WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_EXP);
|
||||||
|
} else {
|
||||||
|
WIIUSE_WARNING("Could not handshake with expansion id: 0x%x", id);
|
||||||
|
}
|
||||||
wiiuse_set_ir_mode(wm);
|
wiiuse_set_ir_mode(wm);
|
||||||
wiiuse_status(wm);
|
wiiuse_status(wm);
|
||||||
break;
|
break;
|
||||||
|
|||||||
Reference in New Issue
Block a user