Add --model option, add M709 as valid argument

This commit is contained in:
dokutan 2020-07-12 22:02:29 +02:00
parent 4857517565
commit d4531da71a
6 changed files with 95 additions and 10 deletions

View file

@ -24,7 +24,7 @@
// usb device vars
const uint16_t mouse_m709::_c_mouse_vid = 0x04d9;
const uint16_t mouse_m709::_c_mouse_pid = 0xfc4d;
const uint16_t mouse_m709::_c_mouse_pid = 0xfc2a;
// Names of the physical buttons
std::map< int, std::string > mouse_m709::_c_button_names = {

View file

@ -36,5 +36,6 @@ void print_help(){
std::cout << "-v --version\n\tPrint version.\n";
std::cout << "-R --read=arg\n\tRead settings from the mouse and print configuration to the specified file (\"-\" = stdout).\n";
std::cout << "-D --dump=arg\n\tRead settings from the mouse and dump the raw data to the specified file (\"-\" = stdout).\n";
std::cout << "-M --model=arg\n\tSpecifies the mouse model (709, 908).\n";
//std::cout << "-r --repeat\n\tSets number of times the macro will be repeated (1-255).\n";
}

View file

@ -95,5 +95,6 @@ class rd_mouse{
// include header files for the individual models TODO!
#include "m908/mouse_m908.h"
#include "m709/mouse_m709.h"
#endif

View file

@ -13,7 +13,7 @@ LIBS != pkg-config --libs libusb-1.0
VERSION_STRING = "\"2.1\""
# compile
build: m908 data_rd.o load_config.o mouse_m908.o
build: m908 m709 data_rd.o load_config.o mouse_m908.o
$(CC) *.o -o mouse_m908 $(LIBS) $(CC_OPTIONS)
# copy all files to their correct location
@ -69,6 +69,8 @@ hpkg:
# targets for different mice
m908: constructor_m908.o data_m908.o getters_m908.o helpers_m908.o setters_m908.o writers_m908.o readers_m908.o
m709: constructor_m709.o data_m709.o getters_m709.o helpers_m709.o setters_m709.o writers_m709.o readers_m709.o
# individual files
mouse_m908.o:
$(CC) -c mouse_m908.cpp $(CC_OPTIONS) -D VERSION_STRING=$(VERSION_STRING)
@ -99,3 +101,24 @@ writers_m908.o:
readers_m908.o:
$(CC) -c include/m908/readers.cpp $(CC_OPTIONS) -o readers_m908.o
constructor_m709.o:
$(CC) -c include/m709/constructor.cpp $(CC_OPTIONS) -o constructor_m709.o
data_m709.o:
$(CC) -c include/m709/data.cpp $(CC_OPTIONS) -o data_m709.o
getters_m709.o:
$(CC) -c include/m709/getters.cpp $(CC_OPTIONS) -o getters_m709.o
helpers_m709.o:
$(CC) -c include/m709/helpers.cpp $(CC_OPTIONS) -o helpers_m709.o
setters_m709.o:
$(CC) -c include/m709/setters.cpp $(CC_OPTIONS) -o setters_m709.o
writers_m709.o:
$(CC) -c include/m709/writers.cpp $(CC_OPTIONS) -o writers_m709.o
readers_m709.o:
$(CC) -c include/m709/readers.cpp $(CC_OPTIONS) -o readers_m709.o

View file

@ -49,6 +49,9 @@ Read settings from the mouse and print the configuration to the specfied file. U
.TP
\fB\-D\fR, \fB\-\-dump\fR=\fIFILE\fR
Read settings from the mouse and dump the raw data to the specfied file. Uses stdout when \fIFILE\fR is "-". Only useful for debugging and development.
.TP
\fB\-M\fR, \fB\-\-model\fR=\fINAME\fR
Specifies the model of the mouse (709, 908).
.SH EXAMPLES
To send the configuration from example.ini
.PP

View file

@ -39,7 +39,7 @@
// this function checks its arguments and opens the mouse accordingly
// (with vid and pid or with bus and device)
int open_mouse_wrapper( mouse_m908 &m, const bool flag_bus, const bool flag_device,
template< typename T >int open_mouse_wrapper( T &m, const bool flag_bus, const bool flag_device,
const std::string &string_bus, const std::string &string_device ){
int open_return = 0; // open_mouse() return value
@ -71,6 +71,7 @@ int open_mouse_wrapper( mouse_m908 &m, const bool flag_bus, const bool flag_devi
std::cout << "Couldn't open mouse.\n";
std::cout << "- Check hardware and permissions (maybe you need to be root?)\n";
std::cout << "- Try with or without the --kernel-driver option\n";
std::cout << "- Try with the --model option\n";
std::cout << "- Try with the --bus and --device options\n";
std::cout << "If nothing works please report this as a bug.\n";
return 1;
@ -79,9 +80,16 @@ int open_mouse_wrapper( mouse_m908 &m, const bool flag_bus, const bool flag_devi
return 0;
}
int main( int argc, char **argv ){
// function to perform all actions on the mouse
template< typename T > int perform_actions(
bool flag_config, bool flag_profile, bool flag_macro, bool flag_number,
bool flag_bus, bool flag_device, bool flag_kernel_driver,
bool flag_dump_settings, bool flag_read_settings,
std::string string_config, std::string string_profile, std::string string_macro,
std::string string_number, std::string string_bus, std::string string_device,
std::string string_dump, std::string string_read );
mouse_m908 m;
int main( int argc, char **argv ){
// if no arguments: print help
if( argc == 1 ){
@ -103,6 +111,7 @@ int main( int argc, char **argv ){
{"version", no_argument, 0, 'v'},
{"dump", required_argument, 0, 'D'},
{"read", required_argument, 0, 'R'},
{"model", required_argument, 0, 'M'},
{0, 0, 0, 0}
};
@ -120,11 +129,11 @@ int main( int argc, char **argv ){
//std::string string_repeat;
std::string string_bus, string_device;
std::string string_dump, string_read;
std::string string_model = "908";
//parse command line options
int c, option_index = 0;
//while( (c = getopt_long( argc, argv, "hc:p:m:n:b:d:kvr:",
while( (c = getopt_long( argc, argv, "hc:p:m:n:b:d:kvD:R:",
while( (c = getopt_long( argc, argv, "hc:p:m:n:b:d:kvD:R:M:",
long_options, &option_index ) ) != -1 ){
switch( c ){
@ -174,6 +183,9 @@ int main( int argc, char **argv ){
flag_read_settings = true;
string_read = optarg;
break;
case 'M':
string_model = optarg;
break;
case '?':
break;
default:
@ -181,13 +193,58 @@ int main( int argc, char **argv ){
}
}
// set whether to detach kernel driver
m.set_detach_kernel_driver( !flag_kernel_driver );
// print version if requested
if( flag_version )
std::cout << "Version: " << VERSION_STRING << "\n";
// parse model → call perform_actions()
if( string_model == "908" ){
return perform_actions< mouse_m908 >(
flag_config, flag_profile, flag_macro, flag_number,
flag_bus, flag_device, flag_kernel_driver,
flag_dump_settings, flag_read_settings,
string_config, string_profile, string_macro,
string_number, string_bus, string_device,
string_dump, string_read );
}else if( string_model == "709" ){
return perform_actions< mouse_m709 >(
flag_config, flag_profile, flag_macro, flag_number,
flag_bus, flag_device, flag_kernel_driver,
flag_dump_settings, flag_read_settings,
string_config, string_profile, string_macro,
string_number, string_bus, string_device,
string_dump, string_read );
}else{
std::cout << "Unknown model, valid options are:\n";
std::cout << "709\n908\n";
return 1;
}
return 0;
}
template< typename T > int perform_actions(
bool flag_config, bool flag_profile, bool flag_macro, bool flag_number,
bool flag_bus, bool flag_device, bool flag_kernel_driver,
bool flag_dump_settings, bool flag_read_settings,
std::string string_config, std::string string_profile, std::string string_macro,
std::string string_number, std::string string_bus, std::string string_device,
std::string string_dump, std::string string_read ){
// create mouse object
T m;
// set whether to detach kernel driver
m.set_detach_kernel_driver( !flag_kernel_driver );
// read settings and dump raw data
if( flag_dump_settings ){