diff --git a/src/command_line_options.cpp b/src/command_line_options.cpp index 5806897..17596ce 100644 --- a/src/command_line_options.cpp +++ b/src/command_line_options.cpp @@ -27,7 +27,8 @@ CommandLineOptions* command_line_options = 0; CommandLineOptions::CommandLineOptions() { - daemon = false; + mode = RUN_DEFAULT; + verbose = false; silent = false; quiet = false; @@ -99,7 +100,7 @@ void set_ui_axis_map(AxisEvent* ui_axis_map, const std::string& str) } void -CommandLineOptions::parse_args(Xboxdrv& xboxdrv, int argc, char** argv) +CommandLineOptions::parse_args(int argc, char** argv) { CommandLineOptions& opts = *this; @@ -135,7 +136,7 @@ CommandLineOptions::parse_args(Xboxdrv& xboxdrv, int argc, char** argv) strcmp(argv[i], "-D") == 0) { opts.silent = true; - opts.daemon = true; + opts.mode = RUN_DAEMON; } else if (strcmp(argv[i], "--test-rumble") == 0 || strcmp(argv[i], "-R") == 0) @@ -538,8 +539,7 @@ CommandLineOptions::parse_args(Xboxdrv& xboxdrv, int argc, char** argv) else if (strcmp(argv[i], "--list-controller") == 0 || strcmp(argv[i], "-L") == 0) { - xboxdrv.list_controller(); - exit(EXIT_SUCCESS); + opts.mode = RUN_LIST_CONTROLLER; } else if (strcmp(argv[i], "--help-devices") == 0) { diff --git a/src/command_line_options.hpp b/src/command_line_options.hpp index 5aa688a..bb92013 100644 --- a/src/command_line_options.hpp +++ b/src/command_line_options.hpp @@ -36,7 +36,11 @@ class Xboxdrv; class CommandLineOptions { public: - bool daemon; + enum { RUN_DEFAULT, + RUN_DAEMON, + RUN_LIST_CONTROLLER + } mode; + bool verbose; bool silent; bool quiet; @@ -70,7 +74,7 @@ public: public: CommandLineOptions(); - void parse_args(Xboxdrv& xboxdrv, int argc, char** argv); + void parse_args(int argc, char** argv); void print_command_line_help(int argc, char** argv) const; void print_led_help() const; diff --git a/src/xboxdrv.cpp b/src/xboxdrv.cpp index 1769f09..3658942 100644 --- a/src/xboxdrv.cpp +++ b/src/xboxdrv.cpp @@ -630,28 +630,40 @@ Xboxdrv::main(int argc, char** argv) signal(SIGINT, on_sigint); CommandLineOptions opts; - opts.parse_args(*this, argc, argv); + opts.parse_args(argc, argv); command_line_options = &opts; - if (opts.daemon) + switch(opts.mode) { - pid_t pid = fork(); - - if (pid < 0) exit(EXIT_FAILURE); /* fork error */ - if (pid > 0) exit(EXIT_SUCCESS); /* parent exits */ - - pid_t sid = setsid(); - std::cout << "Sid: " << sid << std::endl; - if (chdir("/") != 0) + case CommandLineOptions::RUN_DEFAULT: { - throw std::runtime_error(strerror(errno)); + run_main(opts); } + break; - run_main(opts); - } - else - { - run_main(opts); + case CommandLineOptions::RUN_DAEMON: + { + pid_t pid = fork(); + + if (pid < 0) exit(EXIT_FAILURE); /* fork error */ + if (pid > 0) exit(EXIT_SUCCESS); /* parent exits */ + + pid_t sid = setsid(); + std::cout << "Sid: " << sid << std::endl; + if (chdir("/") != 0) + { + throw std::runtime_error(strerror(errno)); + } + + run_main(opts); + } + break; + + case CommandLineOptions::RUN_LIST_CONTROLLER: + { + list_controller(); + } + break; } } catch(std::exception& err) diff --git a/src/xboxdrv.hpp b/src/xboxdrv.hpp index 9ceb4e2..217ef9e 100644 --- a/src/xboxdrv.hpp +++ b/src/xboxdrv.hpp @@ -35,6 +35,7 @@ private: void controller_loop(GamepadType type, uInput* uinput, XboxGenericController* controller, const CommandLineOptions& opts); + void list_controller(); bool find_controller_by_path(const char* busid, const char* devid,struct usb_device** xbox_device) const; void find_controller(struct usb_device*& dev, @@ -46,8 +47,6 @@ private: bool find_xbox360_controller(int id, struct usb_device** xbox_device, XPadDevice* type) const; public: - void list_controller(); - int main(int argc, char** argv); };