void InputManager::init() { if(initialized()) deinit(); SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, Settings::getInstance()->getBool("BackgroundJoystickInput") ? "1" : "0"); SDL_InitSubSystem(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); // first, open all currently present joysticks int numJoysticks = SDL_NumJoysticks(); for(int i = 0; i < numJoysticks; i++) { addJoystickByDeviceIndex(i); } mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, "Keyboard", KEYBOARD_GUID_STRING); loadInputConfig(mKeyboardInputConfig); SDL_USER_CECBUTTONDOWN = SDL_RegisterEvents(2); SDL_USER_CECBUTTONUP = SDL_USER_CECBUTTONDOWN + 1; CECInput::init(); mCECInputConfig = new InputConfig(DEVICE_CEC, "CEC", CEC_GUID_STRING); loadInputConfig(mCECInputConfig); }
void InputManager::addJoystickByDeviceIndex(int id) { assert(id >= 0 && id < SDL_NumJoysticks()); // open joystick & add to our list SDL_Joystick* joy = SDL_JoystickOpen(id); assert(joy); // add it to our list so we can close it again later SDL_JoystickID joyId = SDL_JoystickInstanceID(joy); mJoysticks[joyId] = joy; char guid[65]; SDL_JoystickGetGUIDString(SDL_JoystickGetGUID(joy), guid, 65); // create the InputConfig mInputConfigs[joyId] = new InputConfig(joyId, SDL_JoystickName(joy), guid); if(!loadInputConfig(mInputConfigs[joyId])) { LOG(LogInfo) << "Added unconfigured joystick " << SDL_JoystickName(joy) << " (GUID: " << guid << ", instance ID: " << joyId << ", device index: " << id << ")."; }else{ LOG(LogInfo) << "Added known joystick " << SDL_JoystickName(joy) << " (instance ID: " << joyId << ", device index: " << id << ")"; } // set up the prevAxisValues int numAxes = SDL_JoystickNumAxes(joy); mPrevAxisValues[joyId] = new int[numAxes]; std::fill(mPrevAxisValues[joyId], mPrevAxisValues[joyId] + numAxes, 0); //initialize array to 0 }
void InputManager::init() { if(initialized()) deinit(); SDL_SetHint(SDL_HINT_JOYSTICK_ALLOW_BACKGROUND_EVENTS, Settings::getInstance()->getBool("BackgroundJoystickInput") ? "1" : "0"); SDL_InitSubSystem(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); // first, open all currently present joysticks this->addAllJoysticks(); mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, -1, "Keyboard", KEYBOARD_GUID_STRING, 0); loadInputConfig(mKeyboardInputConfig); }
void InputManager::init() { if(initialized()) deinit(); SDL_InitSubSystem(SDL_INIT_JOYSTICK); SDL_JoystickEventState(SDL_ENABLE); // first, open all currently present joysticks int numJoysticks = SDL_NumJoysticks(); for(int i = 0; i < numJoysticks; i++) { addJoystickByDeviceIndex(i); } mKeyboardInputConfig = new InputConfig(DEVICE_KEYBOARD, "Keyboard", KEYBOARD_GUID_STRING); loadInputConfig(mKeyboardInputConfig); }
void InputManager::writeDeviceConfig(InputConfig* config) { assert(initialized()); std::string path = getConfigPath(); pugi::xml_document doc; if(fs::exists(path)) { // merge files pugi::xml_parse_result result = doc.load_file(path.c_str()); if(!result) { LOG(LogError) << "Error parsing input config: " << result.description(); } else { // successfully loaded, delete the old entry if it exists pugi::xml_node root = doc.child("inputList"); if(root) { // if inputAction @type=onfinish is set, let onfinish command take care for creating input configuration. // we just put the input configuration into a temporary input config file. pugi::xml_node actionnode = root.find_child_by_attribute("inputAction", "type", "onfinish"); if(actionnode) { path = getTemporaryConfigPath(); doc.reset(); root = doc.append_child("inputList"); root.append_copy(actionnode); } else { pugi::xml_node oldEntry = root.find_child_by_attribute("inputConfig", "deviceGUID", config->getDeviceGUIDString().c_str()); if(oldEntry) { root.remove_child(oldEntry); } oldEntry = root.find_child_by_attribute("inputConfig", "deviceName", config->getDeviceName().c_str()); if(oldEntry) { root.remove_child(oldEntry); } } } } } pugi::xml_node root = doc.child("inputList"); if(!root) root = doc.append_child("inputList"); config->writeToXML(root); doc.save_file(path.c_str()); // execute any onFinish commands and re-load the config for changes doOnFinish(); loadInputConfig(config); }