Move M913 and M686 keycodes to a new class
This commit is contained in:
parent
aa26e97806
commit
4ba501c093
12 changed files with 94 additions and 47 deletions
|
@ -30,6 +30,8 @@ target_sources(mouse_m908
|
||||||
include/load_config.h
|
include/load_config.h
|
||||||
include/rd_mouse.cpp
|
include/rd_mouse.cpp
|
||||||
include/rd_mouse.h
|
include/rd_mouse.h
|
||||||
|
include/rd_mouse_wireless.cpp
|
||||||
|
include/rd_mouse_wireless.h
|
||||||
include/generic/constructor.cpp
|
include/generic/constructor.cpp
|
||||||
include/generic/data.cpp
|
include/generic/data.cpp
|
||||||
include/generic/getters.cpp
|
include/generic/getters.cpp
|
||||||
|
|
|
@ -62,22 +62,6 @@ std::map< int, std::array<uint8_t, 3> > mouse_m686::_c_keyboard_key_buttons = {
|
||||||
{ 11, {0x02, 0x60, 0x87} }, // button_dpi_down
|
{ 11, {0x02, 0x60, 0x87} }, // button_dpi_down
|
||||||
};
|
};
|
||||||
|
|
||||||
std::map< std::string, std::array<uint8_t, 4> > mouse_m686::_c_keycodes = {
|
|
||||||
{ "left", { 0x01, 0x01, 0x00, 0x53 } },
|
|
||||||
{ "right", { 0x01, 0x02, 0x00, 0x52 } },
|
|
||||||
{ "middle", { 0x01, 0x04, 0x00, 0x50 } },
|
|
||||||
{ "backward", { 0x01, 0x08, 0x00, 0x4c } },
|
|
||||||
{ "forward", { 0x01, 0x10, 0x00, 0x44 } },
|
|
||||||
{ "led_toggle", { 0x08, 0x00, 0x00, 0x4d } },
|
|
||||||
{ "report_rate", { 0x07, 0x00, 0x00, 0x4e } },
|
|
||||||
{ "dpi-", { 0x02, 0x03, 0x00, 0x50 } },
|
|
||||||
{ "dpi+", { 0x02, 0x02, 0x00, 0x51 } },
|
|
||||||
{ "dpi-cycle", { 0x02, 0x01, 0x00, 0x52 } },
|
|
||||||
{ "default", { 0x05, 0x00, 0x00, 0x50 } },
|
|
||||||
{ "none", { 0x00, 0x00, 0x00, 0x55 } },
|
|
||||||
{ "profile_switch", { 0x09, 0x00, 0x00, 0x4c } },
|
|
||||||
};
|
|
||||||
|
|
||||||
/* see documentation/m913-key-press.txt for a description of these packets, partially generated with:
|
/* see documentation/m913-key-press.txt for a description of these packets, partially generated with:
|
||||||
#!/usr/bin/env julia
|
#!/usr/bin/env julia
|
||||||
for i in [0:25;]
|
for i in [0:25;]
|
||||||
|
|
|
@ -302,7 +302,7 @@ int mouse_m686::_i_decode_button_mapping( const std::array<uint8_t, 4>& bytes, s
|
||||||
std::stringstream mapping_stream;
|
std::stringstream mapping_stream;
|
||||||
|
|
||||||
// known keycode ?
|
// known keycode ?
|
||||||
for( auto keycode : _c_keycodes ){
|
for( auto keycode : rd_mouse_wireless::_c_keycodes ){
|
||||||
if(
|
if(
|
||||||
bytes.at(0) == keycode.second.at(0) &&
|
bytes.at(0) == keycode.second.at(0) &&
|
||||||
bytes.at(1) == keycode.second.at(1) &&
|
bytes.at(1) == keycode.second.at(1) &&
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#ifndef MOUSE_M686
|
#ifndef MOUSE_M686
|
||||||
#define MOUSE_M686
|
#define MOUSE_M686
|
||||||
|
|
||||||
|
#include "../rd_mouse_wireless.h"
|
||||||
|
|
||||||
#include <libusb.h>
|
#include <libusb.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
@ -54,7 +56,7 @@
|
||||||
* - \_s\_* for variables that describe the settings on the mouse
|
* - \_s\_* for variables that describe the settings on the mouse
|
||||||
* - \_c\_* for constants like keycodes, USB data, minimum and maximum values, etc. (these are not neccessarily defined as const)
|
* - \_c\_* for constants like keycodes, USB data, minimum and maximum values, etc. (these are not neccessarily defined as const)
|
||||||
*/
|
*/
|
||||||
class mouse_m686 : public rd_mouse{
|
class mouse_m686 : public rd_mouse, protected rd_mouse_wireless {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -311,8 +313,6 @@ class mouse_m686 : public rd_mouse{
|
||||||
|
|
||||||
/// DPI → bytecode
|
/// DPI → bytecode
|
||||||
static std::map< int, std::array<uint8_t,3> > _c_dpi_codes;
|
static std::map< int, std::array<uint8_t,3> > _c_dpi_codes;
|
||||||
/// Values/keycodes of mouse buttons and special button functions
|
|
||||||
static std::map< std::string, std::array<uint8_t, 4> > _c_keycodes;
|
|
||||||
/// Used to identify buttons when mapping buttons to keyboard keys
|
/// Used to identify buttons when mapping buttons to keyboard keys
|
||||||
static std::map< int, std::array<uint8_t, 3> > _c_keyboard_key_buttons;
|
static std::map< int, std::array<uint8_t, 3> > _c_keyboard_key_buttons;
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ int mouse_m686::set_key_mapping( rd_profile profile, int key, std::string mappin
|
||||||
if( _c_keyboard_key_packets.find(mapping) != _c_keyboard_key_packets.end() ){ // keyboard key
|
if( _c_keyboard_key_packets.find(mapping) != _c_keyboard_key_packets.end() ){ // keyboard key
|
||||||
|
|
||||||
// the button gets mapped as "default"
|
// the button gets mapped as "default"
|
||||||
_s_keymap_data[rd_profile_to_m686_profile(profile)][key] = _c_keycodes["default"];
|
_s_keymap_data[rd_profile_to_m686_profile(profile)][key] = rd_mouse_wireless::_c_keycodes["default"];
|
||||||
|
|
||||||
// and additional packets are sent
|
// and additional packets are sent
|
||||||
_s_keyboard_key_packets.push_back(_c_keyboard_key_packets[mapping]);
|
_s_keyboard_key_packets.push_back(_c_keyboard_key_packets[mapping]);
|
||||||
|
@ -186,9 +186,9 @@ int mouse_m686::set_key_mapping( rd_profile profile, int key, std::string mappin
|
||||||
_s_keyboard_key_packets.back()[4] = _c_keyboard_key_buttons[key][1];
|
_s_keyboard_key_packets.back()[4] = _c_keyboard_key_buttons[key][1];
|
||||||
_s_keyboard_key_packets.back()[16] = _c_keyboard_key_buttons[key][2];
|
_s_keyboard_key_packets.back()[16] = _c_keyboard_key_buttons[key][2];
|
||||||
|
|
||||||
}else if( _c_keycodes.find(mapping) != _c_keycodes.end() ){ // mouse buttons, special functions, ...
|
}else if( rd_mouse_wireless::_c_keycodes.find(mapping) != rd_mouse_wireless::_c_keycodes.end() ){ // mouse buttons, special functions, ...
|
||||||
|
|
||||||
_s_keymap_data[rd_profile_to_m686_profile(profile)][key] = _c_keycodes[mapping];
|
_s_keymap_data[rd_profile_to_m686_profile(profile)][key] = rd_mouse_wireless::_c_keycodes[mapping];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,22 +70,6 @@ std::map< int, std::array<uint8_t, 3> > mouse_m913::_c_keyboard_key_buttons = {
|
||||||
{ 15, {0x02, 0xe0, 0x07} }, // button_12
|
{ 15, {0x02, 0xe0, 0x07} }, // button_12
|
||||||
};
|
};
|
||||||
|
|
||||||
std::map< std::string, std::array<uint8_t, 4> > mouse_m913::_c_keycodes = {
|
|
||||||
{ "left", { 0x01, 0x01, 0x00, 0x53 } },
|
|
||||||
{ "right", { 0x01, 0x02, 0x00, 0x52 } },
|
|
||||||
{ "middle", { 0x01, 0x04, 0x00, 0x50 } },
|
|
||||||
{ "backward", { 0x01, 0x08, 0x00, 0x4c } },
|
|
||||||
{ "forward", { 0x01, 0x10, 0x00, 0x44 } },
|
|
||||||
{ "led_toggle", { 0x08, 0x00, 0x00, 0x4d } },
|
|
||||||
{ "report_rate", { 0x07, 0x00, 0x00, 0x4e } },
|
|
||||||
{ "dpi-", { 0x02, 0x03, 0x00, 0x50 } },
|
|
||||||
{ "dpi+", { 0x02, 0x02, 0x00, 0x51 } },
|
|
||||||
{ "dpi-cycle", { 0x02, 0x01, 0x00, 0x52 } },
|
|
||||||
{ "default", { 0x05, 0x00, 0x00, 0x50 } },
|
|
||||||
{ "none", { 0x00, 0x00, 0x00, 0x55 } },
|
|
||||||
{ "profile_switch", { 0x09, 0x00, 0x00, 0x4c } },
|
|
||||||
};
|
|
||||||
|
|
||||||
/* see documentation/m913-key-press.txt for a description of these packets, partially generated with:
|
/* see documentation/m913-key-press.txt for a description of these packets, partially generated with:
|
||||||
#!/usr/bin/env julia
|
#!/usr/bin/env julia
|
||||||
for i in [0:25;]
|
for i in [0:25;]
|
||||||
|
|
|
@ -302,7 +302,7 @@ int mouse_m913::_i_decode_button_mapping( const std::array<uint8_t, 4>& bytes, s
|
||||||
std::stringstream mapping_stream;
|
std::stringstream mapping_stream;
|
||||||
|
|
||||||
// known keycode ?
|
// known keycode ?
|
||||||
for( auto keycode : _c_keycodes ){
|
for( auto keycode : rd_mouse_wireless::_c_keycodes ){
|
||||||
if(
|
if(
|
||||||
bytes.at(0) == keycode.second.at(0) &&
|
bytes.at(0) == keycode.second.at(0) &&
|
||||||
bytes.at(1) == keycode.second.at(1) &&
|
bytes.at(1) == keycode.second.at(1) &&
|
||||||
|
|
|
@ -20,6 +20,8 @@
|
||||||
#ifndef MOUSE_M913
|
#ifndef MOUSE_M913
|
||||||
#define MOUSE_M913
|
#define MOUSE_M913
|
||||||
|
|
||||||
|
#include "../rd_mouse_wireless.h"
|
||||||
|
|
||||||
#include <libusb.h>
|
#include <libusb.h>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <array>
|
#include <array>
|
||||||
|
@ -54,7 +56,7 @@
|
||||||
* - \_s\_* for variables that describe the settings on the mouse
|
* - \_s\_* for variables that describe the settings on the mouse
|
||||||
* - \_c\_* for constants like keycodes, USB data, minimum and maximum values, etc. (these are not neccessarily defined as const)
|
* - \_c\_* for constants like keycodes, USB data, minimum and maximum values, etc. (these are not neccessarily defined as const)
|
||||||
*/
|
*/
|
||||||
class mouse_m913 : public rd_mouse{
|
class mouse_m913 : public rd_mouse, protected rd_mouse_wireless {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -311,8 +313,6 @@ class mouse_m913 : public rd_mouse{
|
||||||
|
|
||||||
/// DPI → bytecode
|
/// DPI → bytecode
|
||||||
static std::map< int, std::array<uint8_t,3> > _c_dpi_codes;
|
static std::map< int, std::array<uint8_t,3> > _c_dpi_codes;
|
||||||
/// Values/keycodes of mouse buttons and special button functions
|
|
||||||
static std::map< std::string, std::array<uint8_t, 4> > _c_keycodes;
|
|
||||||
/// Used to identify buttons when mapping buttons to keyboard keys
|
/// Used to identify buttons when mapping buttons to keyboard keys
|
||||||
static std::map< int, std::array<uint8_t, 3> > _c_keyboard_key_buttons;
|
static std::map< int, std::array<uint8_t, 3> > _c_keyboard_key_buttons;
|
||||||
|
|
||||||
|
|
|
@ -178,7 +178,7 @@ int mouse_m913::set_key_mapping( rd_profile profile, int key, std::string mappin
|
||||||
if( _c_keyboard_key_packets.find(mapping) != _c_keyboard_key_packets.end() ){ // keyboard key
|
if( _c_keyboard_key_packets.find(mapping) != _c_keyboard_key_packets.end() ){ // keyboard key
|
||||||
|
|
||||||
// the button gets mapped as "default"
|
// the button gets mapped as "default"
|
||||||
_s_keymap_data[rd_profile_to_m913_profile(profile)][key] = _c_keycodes["default"];
|
_s_keymap_data[rd_profile_to_m913_profile(profile)][key] = rd_mouse_wireless::_c_keycodes["default"];
|
||||||
|
|
||||||
// and additional packets are sent
|
// and additional packets are sent
|
||||||
_s_keyboard_key_packets.push_back(_c_keyboard_key_packets[mapping]);
|
_s_keyboard_key_packets.push_back(_c_keyboard_key_packets[mapping]);
|
||||||
|
@ -186,9 +186,9 @@ int mouse_m913::set_key_mapping( rd_profile profile, int key, std::string mappin
|
||||||
_s_keyboard_key_packets.back()[4] = _c_keyboard_key_buttons[key][1];
|
_s_keyboard_key_packets.back()[4] = _c_keyboard_key_buttons[key][1];
|
||||||
_s_keyboard_key_packets.back()[16] = _c_keyboard_key_buttons[key][2];
|
_s_keyboard_key_packets.back()[16] = _c_keyboard_key_buttons[key][2];
|
||||||
|
|
||||||
}else if( _c_keycodes.find(mapping) != _c_keycodes.end() ){ // mouse buttons, special functions, ...
|
}else if( rd_mouse_wireless::_c_keycodes.find(mapping) != rd_mouse_wireless::_c_keycodes.end() ){ // mouse buttons, special functions, ...
|
||||||
|
|
||||||
_s_keymap_data[rd_profile_to_m913_profile(profile)][key] = _c_keycodes[mapping];
|
_s_keymap_data[rd_profile_to_m913_profile(profile)][key] = rd_mouse_wireless::_c_keycodes[mapping];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
35
include/rd_mouse_wireless.cpp
Normal file
35
include/rd_mouse_wireless.cpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* 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 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "rd_mouse_wireless.h"
|
||||||
|
|
||||||
|
std::map< std::string, std::array<uint8_t, 4> > rd_mouse_wireless::_c_keycodes = {
|
||||||
|
{ "left", { 0x01, 0x01, 0x00, 0x53 } },
|
||||||
|
{ "right", { 0x01, 0x02, 0x00, 0x52 } },
|
||||||
|
{ "middle", { 0x01, 0x04, 0x00, 0x50 } },
|
||||||
|
{ "backward", { 0x01, 0x08, 0x00, 0x4c } },
|
||||||
|
{ "forward", { 0x01, 0x10, 0x00, 0x44 } },
|
||||||
|
{ "led_toggle", { 0x08, 0x00, 0x00, 0x4d } },
|
||||||
|
{ "report_rate", { 0x07, 0x00, 0x00, 0x4e } },
|
||||||
|
{ "dpi-", { 0x02, 0x03, 0x00, 0x50 } },
|
||||||
|
{ "dpi+", { 0x02, 0x02, 0x00, 0x51 } },
|
||||||
|
{ "dpi-cycle", { 0x02, 0x01, 0x00, 0x52 } },
|
||||||
|
{ "default", { 0x05, 0x00, 0x00, 0x50 } },
|
||||||
|
{ "none", { 0x00, 0x00, 0x00, 0x55 } },
|
||||||
|
{ "profile_switch", { 0x09, 0x00, 0x00, 0x4c } },
|
||||||
|
};
|
39
include/rd_mouse_wireless.h
Normal file
39
include/rd_mouse_wireless.h
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
/*
|
||||||
|
* 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 3 of the License, 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., 51 Franklin Street, Fifth Floor, Boston,
|
||||||
|
* MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef RD_MOUSE_WIRELESS
|
||||||
|
#define RD_MOUSE_WIRELESS
|
||||||
|
|
||||||
|
#include <array>
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This class holds data that is shared between the wireless mice.
|
||||||
|
*/
|
||||||
|
class rd_mouse_wireless{
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
/// Values/keycodes of mouse buttons and special button functions
|
||||||
|
static std::map< std::string, std::array<uint8_t, 4> > _c_keycodes;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
5
makefile
5
makefile
|
@ -14,7 +14,7 @@ LIBS != pkg-config --libs libusb-1.0
|
||||||
VERSION_STRING = "\"3.2\""
|
VERSION_STRING = "\"3.2\""
|
||||||
|
|
||||||
# compile
|
# compile
|
||||||
build: m607 m686 m908 m709 m711 m715 m719 m721 m913 m990 m990chroma generic data_rd.o rd_mouse.o load_config.o mouse_m908.o
|
build: m607 m686 m908 m709 m711 m715 m719 m721 m913 m990 m990chroma generic data_rd.o rd_mouse.o rd_mouse_wireless.o load_config.o mouse_m908.o
|
||||||
$(CC) *.o -o mouse_m908 $(LIBS) $(CC_OPTIONS)
|
$(CC) *.o -o mouse_m908 $(LIBS) $(CC_OPTIONS)
|
||||||
|
|
||||||
# copy all files to their correct location
|
# copy all files to their correct location
|
||||||
|
@ -110,6 +110,9 @@ data_rd.o:
|
||||||
rd_mouse.o:
|
rd_mouse.o:
|
||||||
$(CC) -c include/rd_mouse.cpp $(CC_OPTIONS)
|
$(CC) -c include/rd_mouse.cpp $(CC_OPTIONS)
|
||||||
|
|
||||||
|
rd_mouse_wireless.o:
|
||||||
|
$(CC) -c include/rd_mouse_wireless.cpp $(CC_OPTIONS)
|
||||||
|
|
||||||
constructor_m607.o:
|
constructor_m607.o:
|
||||||
$(CC) -c include/m607/constructor.cpp $(CC_OPTIONS) -o constructor_m607.o
|
$(CC) -c include/m607/constructor.cpp $(CC_OPTIONS) -o constructor_m607.o
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue