// VBA-M, A Nintendo Handheld Console Emulator // Copyright (C) 2008 VBA-M development team // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2, or(at your option) // any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software Foundation, // Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef VBAM_SDL_INPUT_H #define VBAM_SDL_INPUT_H #include enum EKey { KEY_LEFT, KEY_RIGHT, KEY_UP, KEY_DOWN, KEY_BUTTON_A, KEY_BUTTON_B, KEY_BUTTON_START, KEY_BUTTON_SELECT, KEY_BUTTON_L, KEY_BUTTON_R, KEY_BUTTON_SPEED, KEY_BUTTON_CAPTURE, KEY_BUTTON_AUTO_A, KEY_BUTTON_AUTO_B }; enum EPad { PAD_MAIN, PAD_1 = PAD_MAIN, PAD_2, PAD_3, PAD_4, PAD_DEFAULT }; /** * Init the joysticks needed by the keymap. Verify that the keymap is compatible * with the joysticks. If it's not the case, revert to the default keymap. */ void inputInitJoysticks(); /** * Define which key controls an emulated joypad button * @param pad Emulated joypad index (there may be up to 4 joypads for the SGB) * @param key Emulated joypad button * @param code Code defining an actual joypad / keyboard button */ void inputSetKeymap(EPad pad, EKey key, uint32_t code); /** * Get which key is associated to which emulated joypad button * @param pad Emulated joypad index (there may be up to 4 joypads for the SGB) * @param key Emulated joypad button * @retunr Code defining an actual joypad / keyboard button */ uint32_t inputGetKeymap(EPad pad, EKey key); /** * Define which keys control motion detection emulation * @param key Emulated joypad button * @param code Code defining an actual joypad / keyboard button */ void inputSetMotionKeymap(EKey key, uint32_t code); /** * Toggle Auto fire for the specified button. Only A, B, R, L are supported. * @param key Emulated joypad button * @return Auto fire enabled */ bool inputToggleAutoFire(EKey key); /** * Get Auto fire status for the specified button. Only A, B, R, L are supported. * @param key Emulated joypad button * @return Auto fire enabled */ bool inputGetAutoFire(EKey key); /** * Update the emulated pads state with a SDL event * @param SDL_Event An event that has just occured */ void inputProcessSDLEvent(const SDL_Event &event); /** * Get the keymap code corresponding to a SDL event * @param SDL_Event An event that has just occured * @return Keymap code */ uint32_t inputGetEventCode(const SDL_Event &event); /** * Read the state of an emulated joypad * @param which Emulated joypad index * @return Joypad state */ uint32_t inputReadJoypad(int which); /** * Compute the motion sensor X and Y values */ void inputUpdateMotionSensor(); /** * Get the motion sensor X value * @return motion sensor X value */ int inputGetSensorX(); /** * Get the motion sensor Y value * @return motion sensor Y value */ int inputGetSensorY(); /** * Set which joypad configuration use when the core doesn't ask for a specific * pad */ void inputSetDefaultJoypad(EPad pad); #endif // VBAM_SDL_INPUT_H