From 6da095af71ec38f246aef8fa9fc10a79544483e5 Mon Sep 17 00:00:00 2001 From: Ingo Ruhnke <grumbel@gmx.de> Date: Sat, 29 Jan 2011 18:42:38 +0100 Subject: [PATCH] Added [controllerN/configN/buttonmap], ... sections --- TODO | 10 +--- src/command_line_options.cpp | 91 ++++++++++++++++++++++++++++++++++++ src/command_line_options.hpp | 20 ++++++-- 3 files changed, 110 insertions(+), 11 deletions(-) diff --git a/TODO b/TODO index 133b6fb..2b0edd9 100644 --- a/TODO +++ b/TODO @@ -62,14 +62,8 @@ Stuff to do before 0.7.1 release: * valgrind before release -* allow named sections in INI files (start numbering at 0 or 1?): - - [controller1/modifier] - [controller1/config1/modifier] - [controller2/modifier] - [controller2/modifier] - [controller3/config1/modifier] - [controller3/config2/modifier] +* allow named sections in INI files (start numbering at 0 or 1, + calibration is missing) * check how daemon reacts on suspend - suspending the computer leads to LIBUSB_ERROR_IO, unplugging the diff --git a/src/command_line_options.cpp b/src/command_line_options.cpp index ea24114..38f27cb 100644 --- a/src/command_line_options.cpp +++ b/src/command_line_options.cpp @@ -21,6 +21,7 @@ #include <fstream> #include <iostream> #include <boost/bind.hpp> +#include <boost/format.hpp> #include <boost/tokenizer.hpp> #include "evdev_helper.hpp" @@ -391,6 +392,33 @@ CommandLineParser::init_ini(Options* opts) m_ini.section("calibration", boost::bind(&CommandLineParser::set_calibration, this, _1, _2)); m_ini.section("axis-sensitivity", boost::bind(&CommandLineParser::set_axis_sensitivity, this, _1, _2)); + for(int controller = 0; controller <= 9; ++controller) + { + for(int config = 0; config <= 9; ++config) + { + m_ini.section((boost::format("controller%d/config%d/modifier") % controller % config).str(), + boost::bind(&CommandLineParser::set_modifier_n, this, controller, config, _1, _2)); + m_ini.section((boost::format("controller%d/config%d/ui-buttonmap") % controller % config).str(), + boost::bind(&CommandLineParser::set_ui_buttonmap_n, this, controller, config, _1, _2)); + m_ini.section((boost::format("controller%d/config%d/ui-axismap") % controller % config).str(), + boost::bind(&CommandLineParser::set_ui_axismap_n, this, controller, config, _1, _2)); + + m_ini.section((boost::format("controller%d/config%d/buttonmap") % controller % config).str(), + boost::bind(&CommandLineParser::set_buttonmap_n, this, controller, config, _1, _2)); + m_ini.section((boost::format("controller%d/config%d/axismap") % controller % config).str(), + boost::bind(&CommandLineParser::set_axismap_n, this, controller, config, _1, _2)); + + m_ini.section((boost::format("controller%d/config%d/autofire") % controller % config).str(), + boost::bind(&CommandLineParser::set_autofire_n, this, controller, config, _1, _2)); + m_ini.section((boost::format("controller%d/config%d/relative-axis") % controller % config).str(), + boost::bind(&CommandLineParser::set_relative_axis_n, this, controller, config, _1, _2)); + m_ini.section((boost::format("controller%d/config%d/calibration") % controller % config).str(), + boost::bind(&CommandLineParser::set_calibration_n, this, controller, config, _1, _2)); + m_ini.section((boost::format("controller%d/config%d/axis-sensitivity") % controller % config).str(), + boost::bind(&CommandLineParser::set_axis_sensitivity_n, this, controller, config, _1, _2)); + } + } + m_ini.section("evdev-absmap", boost::bind(&CommandLineParser::set_evdev_absmap, this, _1, _2)); m_ini.section("evdev-keymap", boost::bind(&CommandLineParser::set_evdev_keymap, this, _1, _2)); } @@ -1121,4 +1149,67 @@ CommandLineParser::read_alt_config_file(Options* opts, const std::string& filena read_config_file(opts, filename); } +void +CommandLineParser::set_ui_buttonmap_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .uinput.set_ui_buttonmap(name, value); +} + +void +CommandLineParser::set_ui_axismap_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .uinput.set_ui_axismap(name, value); +} + +void +CommandLineParser::set_modifier_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .modifier.push_back(ModifierPtr(Modifier::from_string(name, value))); +} + +void +CommandLineParser::set_axismap_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .axismap->add(AxisMapping::from_string(name, value)); +} + +void +CommandLineParser::set_buttonmap_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .buttonmap->add(ButtonMapping::from_string(name, value)); +} + +void +CommandLineParser::set_relative_axis_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .relative_axis_map[string2axis(name)] = AxisFilterPtr(new RelativeAxisFilter(boost::lexical_cast<int>(value))); +} + +void +CommandLineParser::set_autofire_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .autofire_map[string2btn(name)] = ButtonFilterPtr(new AutofireButtonFilter(boost::lexical_cast<int>(value), 0)); +} + +void +CommandLineParser::set_calibration_n(int controller, int config, const std::string& name, const std::string& value) +{ + // FIXME: not implemented + assert(!"implement me"); +} + +void +CommandLineParser::set_axis_sensitivity_n(int controller, int config, const std::string& name, const std::string& value) +{ + m_options->controller_slots[controller].get_options(config) + .sensitivity_map[string2axis(name)] = AxisFilterPtr(new SensitivityAxisFilter(boost::lexical_cast<float>(value))); +} + /* EOF */ diff --git a/src/command_line_options.hpp b/src/command_line_options.hpp index 6734003..5612d9c 100644 --- a/src/command_line_options.hpp +++ b/src/command_line_options.hpp @@ -53,20 +53,34 @@ private: void set_axismap(const std::string& name, const std::string& value); void set_buttonmap(const std::string& name, const std::string& value); - void set_evdev_absmap(const std::string& name, const std::string& value); - void set_evdev_keymap(const std::string& name, const std::string& value); - void set_relative_axis(const std::string& name, const std::string& value); void set_autofire(const std::string& name, const std::string& value); void set_calibration(const std::string& name, const std::string& value); void set_axis_sensitivity(const std::string& name, const std::string& value); + + void set_ui_buttonmap_n(int controller, int config, const std::string& name, const std::string& value); + void set_ui_axismap_n(int controller, int config, const std::string& name, const std::string& value); + void set_modifier_n(int controller, int config, const std::string& name, const std::string& value); + + void set_axismap_n(int controller, int config, const std::string& name, const std::string& value); + void set_buttonmap_n(int controller, int config, const std::string& name, const std::string& value); + + void set_relative_axis_n(int controller, int config, const std::string& name, const std::string& value); + void set_autofire_n(int controller, int config, const std::string& name, const std::string& value); + void set_calibration_n(int controller, int config, const std::string& name, const std::string& value); + void set_axis_sensitivity_n(int controller, int config, const std::string& name, const std::string& value); + + void set_deadzone(const std::string& value); void set_deadzone_trigger(const std::string& value); void set_square_axis(); void set_four_way_restrictor(); void set_dpad_rotation(const std::string& value); + void set_evdev_absmap(const std::string& name, const std::string& value); + void set_evdev_keymap(const std::string& name, const std::string& value); + void read_config_file(Options* opts, const std::string& filename); void read_alt_config_file(Options* opts, const std::string& filename);