diff --git a/src/events.c b/src/events.c index 6e06b5f..c856a2a 100644 --- a/src/events.c +++ b/src/events.c @@ -762,6 +762,7 @@ void handshake_expansion(struct wiimote_t* wm, byte* data, uint16_t len) { byte val = 0; byte buf = 0x00; byte* handshake_buf; + int gotIt = 0; switch(wm->expansion_state) { /* 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); switch(id) { 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; + gotIt = 1; + } break; 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; + gotIt = 1; + } break; 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; + gotIt = 1; + } break; 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: /* wiiuse_motion_plus_handshake(wm, data, len); */ wm->event = WIIUSE_MOTION_PLUS_ACTIVATED; + gotIt = 1; break; case EXP_ID_CODE_WII_BOARD: - if(wii_board_handshake(wm, &wm->exp.wb, data, len)) - wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED; + if(wii_board_handshake(wm, &wm->exp.wb, data, len)) { + wm->event = WIIUSE_WII_BOARD_CTRL_INSERTED; + gotIt = 1; + } break; default: @@ -835,8 +845,12 @@ void handshake_expansion(struct wiimote_t* wm, byte* data, uint16_t len) { break; } free(data); - WIIMOTE_DISABLE_STATE(wm,WIIMOTE_STATE_EXP_HANDSHAKE); - WIIMOTE_ENABLE_STATE(wm,WIIMOTE_STATE_EXP); + if (gotIt) { + 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_status(wm); break;