Add initial support for actual DPI values for the M711
This commit is contained in:
parent
3db937dba3
commit
74d64a2dc4
4 changed files with 147 additions and 0 deletions
include/m711
|
@ -39,6 +39,106 @@ std::map< int, std::string > mouse_m711::_c_button_names = {
|
|||
{ 6, "scroll_up" },
|
||||
{ 7, "scroll_down" } };
|
||||
|
||||
// Mapping of real DPI values to bytecode
|
||||
std::map< unsigned int, std::array<uint8_t, 2> > mouse_m711::_c_dpi_codes = {
|
||||
{ 100, {0x2, 0x00} },
|
||||
{ 200, {0x4, 0x00} },
|
||||
{ 300, {0x6, 0x00} },
|
||||
{ 400, {0x9, 0x00} },
|
||||
{ 500, {0xb, 0x00} },
|
||||
|
||||
// copied from the M908
|
||||
/*
|
||||
{ 600, {0xd, 0x00} },
|
||||
{ 700, {0xf, 0x00} },
|
||||
{ 800, {0x12, 0x00} },
|
||||
{ 900, {0x14, 0x00} },
|
||||
{ 1000, {0x16, 0x00} },
|
||||
{ 1100, {0x18, 0x00} },
|
||||
{ 1200, {0x1b, 0x00} },
|
||||
{ 1300, {0x1d, 0x00} },
|
||||
{ 1400, {0x1f, 0x00} },
|
||||
{ 1500, {0x21, 0x00} },
|
||||
{ 1600, {0x24, 0x00} },
|
||||
{ 1700, {0x26, 0x00} },
|
||||
{ 1800, {0x28, 0x00} },
|
||||
{ 1900, {0x2b, 0x00} },
|
||||
{ 2000, {0x2d, 0x00} },
|
||||
{ 2100, {0x2f, 0x00} },
|
||||
{ 2200, {0x31, 0x00} },
|
||||
{ 2300, {0x34, 0x00} },
|
||||
{ 2400, {0x36, 0x00} },
|
||||
{ 2500, {0x38, 0x00} },
|
||||
{ 2600, {0x3a, 0x00} },
|
||||
{ 2700, {0x3d, 0x00} },
|
||||
{ 2800, {0x3f, 0x00} },
|
||||
{ 2900, {0x41, 0x00} },
|
||||
{ 3000, {0x43, 0x00} },
|
||||
{ 3100, {0x46, 0x00} },
|
||||
{ 3200, {0x48, 0x00} },
|
||||
{ 3300, {0x4a, 0x00} },
|
||||
{ 3400, {0x4d, 0x00} },
|
||||
{ 3500, {0x4f, 0x00} },
|
||||
{ 3600, {0x51, 0x00} },
|
||||
{ 3700, {0x53, 0x00} },
|
||||
{ 3800, {0x56, 0x00} },
|
||||
{ 3900, {0x58, 0x00} },
|
||||
{ 4000, {0x5a, 0x00} },
|
||||
{ 4100, {0x5c, 0x00} },
|
||||
{ 4200, {0x5f, 0x00} },
|
||||
{ 4300, {0x61, 0x00} },
|
||||
{ 4400, {0x63, 0x00} },
|
||||
{ 4500, {0x66, 0x00} },
|
||||
{ 4600, {0x68, 0x00} },
|
||||
{ 4700, {0x6a, 0x00} },
|
||||
{ 4800, {0x6c, 0x00} },
|
||||
{ 4900, {0x6f, 0x00} },
|
||||
{ 5000, {0x71, 0x00} },
|
||||
{ 5100, {0x73, 0x00} },
|
||||
{ 5200, {0x75, 0x00} },
|
||||
{ 5300, {0x78, 0x00} },
|
||||
{ 5400, {0x7a, 0x00} },
|
||||
{ 5500, {0x7c, 0x00} },
|
||||
{ 5600, {0x7f, 0x00} },
|
||||
{ 5700, {0x81, 0x00} },
|
||||
{ 5800, {0x83, 0x00} },
|
||||
{ 5900, {0x85, 0x00} },
|
||||
{ 6000, {0x87, 0x00} },
|
||||
{ 6100, {0x8a, 0x00} },
|
||||
{ 6200, {0x8c, 0x00} },
|
||||
{ 6400, {0x48, 0x01} },
|
||||
{ 6600, {0x4a, 0x01} },
|
||||
{ 6800, {0x4d, 0x01} },
|
||||
{ 7000, {0x4f, 0x01} },
|
||||
{ 7200, {0x51, 0x01} },
|
||||
{ 7400, {0x53, 0x01} },
|
||||
{ 7600, {0x56, 0x01} },
|
||||
{ 7800, {0x58, 0x01} },
|
||||
{ 8000, {0x5a, 0x01} },
|
||||
{ 8200, {0x5c, 0x01} },
|
||||
{ 8400, {0x5f, 0x01} },
|
||||
{ 8600, {0x61, 0x01} },
|
||||
{ 8800, {0x63, 0x01} },
|
||||
{ 9000, {0x66, 0x01} },
|
||||
{ 9200, {0x68, 0x01} },
|
||||
{ 9400, {0x6a, 0x01} },
|
||||
{ 9600, {0x6c, 0x01} },
|
||||
{ 9800, {0x6f, 0x01} },
|
||||
{ 10000, {0x71, 0x01} },
|
||||
{ 10200, {0x73, 0x01} },
|
||||
{ 10400, {0x75, 0x01} },
|
||||
{ 10600, {0x78, 0x01} },
|
||||
{ 10800, {0x7a, 0x01} },
|
||||
{ 11000, {0x7c, 0x01} },
|
||||
{ 11200, {0x7f, 0x01} },
|
||||
{ 11400, {0x81, 0x01} },
|
||||
{ 11600, {0x83, 0x01} },
|
||||
{ 11800, {0x85, 0x01} },
|
||||
{ 12000, {0x87, 0x01} },
|
||||
{ 12200, {0x8a, 0x01} },
|
||||
{ 12400, {0x8c, 0x01} }*/
|
||||
};
|
||||
|
||||
//usb data packets
|
||||
uint8_t mouse_m711::_c_data_s_profile[6][16] = {
|
||||
{0x02, 0xf3, 0x2c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
||||
|
|
|
@ -156,3 +156,28 @@ int mouse_m711::print_settings( std::ostream& output ){
|
|||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mouse_m711::_i_decode_dpi( std::array<uint8_t, 2>& dpi_bytes, std::string& dpi_string ){
|
||||
|
||||
// is dpi value known?
|
||||
for( auto dpi_value : _c_dpi_codes ){
|
||||
|
||||
if( dpi_value.second[0] == dpi_bytes[0] && dpi_value.second[1] == dpi_bytes[1] ){
|
||||
dpi_string = std::to_string( dpi_value.first );
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// unknown dpi value
|
||||
std::stringstream conversion_stream;
|
||||
|
||||
conversion_stream << std::setfill('0') << std::hex;
|
||||
conversion_stream << "0x";
|
||||
conversion_stream << std::setw(2) << (int)dpi_bytes[0] << std::setw(2) << (int)dpi_bytes[1];
|
||||
conversion_stream << std::setfill(' ') << std::setw(0) << std::dec;
|
||||
|
||||
dpi_string = conversion_stream.str();
|
||||
|
||||
return 0;
|
||||
}
|
|
@ -258,6 +258,9 @@ class mouse_m711 : public rd_mouse{
|
|||
|
||||
/// Names of the physical buttons
|
||||
static std::map< int, std::string > _c_button_names;
|
||||
|
||||
/// Mapping of real DPI values to bytecode
|
||||
static std::map< unsigned int, std::array<uint8_t, 2> > _c_dpi_codes;
|
||||
|
||||
/// The model name
|
||||
static const std::string _c_name;
|
||||
|
@ -307,6 +310,12 @@ class mouse_m711 : public rd_mouse{
|
|||
static uint8_t _c_data_read_2[85][64];
|
||||
/// Used to read the settings, part 3/3
|
||||
static uint8_t _c_data_read_3[46][16];
|
||||
|
||||
/** Convert raw dpi bytes to a string representation (doesn't validate dpi value)
|
||||
* This function overloads the implementation from rd_mouse and supports actual DPI values.
|
||||
* \return 0 if no error
|
||||
*/
|
||||
static int _i_decode_dpi( std::array<uint8_t, 2>& dpi_bytes, std::string& dpi_string );
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -117,6 +117,19 @@ int mouse_m711::set_dpi( rd_profile profile, int level, std::string dpi ){
|
|||
return 0;
|
||||
|
||||
}
|
||||
|
||||
// check format: 1234 (real DPI)
|
||||
else if( std::regex_match( dpi, std::regex("[[:digit:]]+") ) ){
|
||||
|
||||
if( _c_dpi_codes.find( std::stoi(dpi) ) != _c_dpi_codes.end() ){
|
||||
|
||||
_s_dpi_levels[profile][level][0] = _c_dpi_codes.at( std::stoi(dpi) )[0];
|
||||
_s_dpi_levels[profile][level][1] = _c_dpi_codes.at( std::stoi(dpi) )[1];
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue