int connectWiimote(wiimote** wiimotes) { int found = 0; int connected = 0; wiimote* wm; while(!found) { //Look for Wiimotes. Keep searching until one is found. Wiiuse provides no way to search forever, so search for 5 secs and repeat. found = wiiuse_find(wiimotes, MAX_WIIMOTES, 5); } connected = wiiuse_connect(wiimotes, MAX_WIIMOTES); wm = wiimotes[0]; if (connected) { EventClient.SendHELO("Wii Remote", ICON_PNG, NULL); wiiuse_set_leds(wm, WIIMOTE_LED_1); wiiuse_rumble(wm, 1); wiiuse_set_orient_threshold(wm,1); DisableMotionSensing(wm); #ifndef WIN32 usleep(200000); #else Sleep(200); #endif wiiuse_rumble(wm, 0); return 1; } return 0; }
int main(int argc, char** argv) { long timeout = 0; bool connected = 0; wiimote** wiimotes; wiimotes = wiiuse_init(MAX_WIIMOTES); CWiiController controller; wiimote* wm; { //Main Loop while (1) { if (!connected) connected = (connectWiimote(wiimotes)); wm = wiimotes[0]; // Only worry about 1 controller. No need for more? controller.m_buttonDownTime = getTicks() - timeout; //Handle ACC, Repeat, and IR outside of the Event loop so that buttons can be continuously sent if (timeout) { if ((controller.m_buttonDownTime > g_hold_button_timeout) && controller.m_holdableHeld) controller.handleACC(wm->orient.roll, wm->orient.pitch); if ((controller.m_buttonDownTime > g_repeat_rate) && controller.m_repeatableHeld) controller.handleRepeat(); } if (wiiuse_poll(wiimotes, MAX_WIIMOTES)) { for (int i = 0; i < MAX_WIIMOTES; ++i) //MAX_WIIMOTES hardcoded at 1. { switch (wiimotes[i]->event) { case WIIUSE_EVENT: controller.get_keys(wm); //Load up the CWiiController controller.handleKeyPress(); if (!controller.m_buttonHeld && (controller.m_holdableHeld || controller.m_repeatableHeld)) { //Prepare to repeat or hold. Do this only once. timeout = getTicks(); EnableMotionSensing(wm); controller.m_abs_roll = 0; controller.m_abs_pitch = 0; controller.m_start_roll = 0; controller.m_start_pitch = 0; } if (controller.m_buttonReleased) { DisableMotionSensing(wm); controller.m_currentAction = ACTION_NONE; } break; case WIIUSE_STATUS: break; case WIIUSE_DISCONNECT: case WIIUSE_UNEXPECTED_DISCONNECT: handle_disconnect(wm); connected = 0; break; case WIIUSE_READ_DATA: break; default: break; } } } } } wiiuse_cleanup(wiimotes, MAX_WIIMOTES); return 0; }