bool PathExists(const std::wstring& path) { base::ErrorMode error_mode(SEM_FAILCRITICALERRORS); auto file_attr = GetFileAttributes(GetExtendedLengthPath(path).c_str()); return file_attr != INVALID_FILE_ATTRIBUTES; }
/*! @brief Driver for Wiimote operation menu Handles parsing wiimote input to determine correct operating mode. This function will never exit once entered. */ ErrorID_t main_menu(cwiid_wiimote_t *wiimote, volatile WiimoteStatusDataType *wiimote_status) { ErrorID_t error; uint8_t menu_count; uint16_t last_button_state = 0; WII_OPERATE_STATE wii_operate_state = WII_OPERATE_INIT_MENU; write_status_led(STATUS_LED_OFF, 0); for (;;) { switch (wii_operate_state) { case WII_OPERATE_INIT_MENU: menu_count = 0; last_button_state = 0; wii_operate_state = WII_OPERATE_WAIT_FOR_BUTTON_PRESS; write_status_led(STATUS_LED_FLASH, 500); if (0 > cwiid_set_led(wiimote, CWIID_LED1_ON)) return WII_ERROR_TRANSMIT; if (0 > cwiid_enable(wiimote, CWIID_FLAG_MESG_IFC)) return WII_ERROR_TRANSMIT; if (0 > cwiid_set_rpt_mode(wiimote, CWIID_RPT_BTN)) return WII_ERROR_TRANSMIT; /* Menu */ debug_print("%s", MENU); set_lcd(0, "Connected."); set_lcd(1, "Select Mode."); break; case WII_OPERATE_WAIT_FOR_BUTTON_PRESS: error = wait_for_wiimotedata(wiimote_status, 2000); if (error == ERR_WII_DATA_TIMEOUT) { set_lcd(0, "Select Mode"); set_lcd(1, (char *) lcd_menu_strings[menu_count]); if (++menu_count >= MENU_ENTRIES) menu_count = 0; } else if (0 < error) { shutdown_application(error); } else if (wiimote_status->button_data != last_button_state) { last_button_state = wiimote_status->button_data; if (last_button_state & CWIID_BTN_A) // collect acceleration data { wii_operate_state = WII_OPERATE_DISPLAY_ACCELEROMETER_INFO; } else if (last_button_state & CWIID_BTN_B) // collect IR data { wii_operate_state = WII_OPERATE_DISPLAY_IR_STATUS; } else if (last_button_state & CWIID_BTN_HOME) // reset { shutdown_application(0); } else if (last_button_state & CWIID_BTN_PLUS) { sensor_cutoff_fwd += 5; if (sensor_cutoff_fwd > 100) sensor_cutoff_fwd = 100; #if REVERSE_SENSOR_PRESENT sensor_cutoff_rev += 5; if (sensor_cutoff_rev > 100) sensor_cutoff_rev = 100; #endif } else if (last_button_state & CWIID_BTN_MINUS) { sensor_cutoff_fwd -= 5; if (sensor_cutoff_fwd < 0) sensor_cutoff_fwd = 0; #if REVERSE_SENSOR_PRESENT sensor_cutoff_rev -= 5; if (sensor_cutoff_rev < 0) sensor_cutoff_rev = 0; #endif } else if (last_button_state & (CWIID_BTN_2 | CWIID_BTN_1)) { wii_operate_state = WII_OPERATE_DISPLAY_BUTTON_STATUS; } } break; case WII_OPERATE_DISPLAY_ACCELEROMETER_INFO: if (ERR_NONE != acceleration_mode(wiimote, wiimote_status)) wii_operate_state = WII_OPERATE_ERROR_STATE; else wii_operate_state = WII_OPERATE_INIT_MENU; break; case WII_OPERATE_DISPLAY_IR_STATUS: if (ERR_NONE != infrared_mode(wiimote, wiimote_status)) wii_operate_state = WII_OPERATE_ERROR_STATE; else wii_operate_state = WII_OPERATE_INIT_MENU; break; case WII_OPERATE_DISPLAY_BUTTON_STATUS: if (ERR_NONE != button_mode(wiimote, wiimote_status)) wii_operate_state = WII_OPERATE_ERROR_STATE; else wii_operate_state = WII_OPERATE_INIT_MENU; break; case WII_OPERATE_ERROR_STATE: if (ERR_NONE == error_mode(wiimote, wiimote_status)) wii_operate_state = WII_OPERATE_INIT_MENU; break; } } return ERR_NONE; }