Files
a4tech-bloody-linux-driver/main.cpp
homayk228 d72842f2b3 [ADD] Added support for RT7 and DPI change
DPI change - not fully done, still need some work for most dpi's, but 100-300 and 3200 should work!
2025-11-26 23:11:53 +07:00

214 lines
6.2 KiB
C++

#include <iostream>
#include "Mouse.h"
#include <cstring>
int main() {
Mouse m;
int address, level, DPI_level;
int default_dpi = 3200;
m.init();
do {
m.listDevices();
std::cout << "Enter device address: ";
std::cin >> address;
}while(!m.selectDevice(address));
std::cout<<"Current backlight level: "<<(int)m.getBackLightLevel()<<std::endl;
do {
std::cout << "Select backlight level(0-3):";
std::cin >> level;
}while(m.setBackLightLevel(level) < 0);
uint8_t data[72] = {A4TECH_MAGIC, DPI_SET_OPCODE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x1a,0x88,0x02,0x00, };
do {
std::cout << "Select DPI(100-4000):";
std::cin >> DPI_level;
}while(DPI_level < 0 || DPI_level > 4000);
switch(DPI_level){
case 100:
printf("Setting it to 100, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 200:
printf("Setting it to 200, boss\n");
memcpy(data + 10, (uint8_t[]){0x10, 0x10, 0x81}, 3);
break;
case 300:
printf("Setting it to 300, boss\n");
memcpy(data + 10, (uint8_t[]){0x10, 0x10, 0x81}, 3);
break;
case 400:
printf("Setting it to 400, boss\n"); //остановился здесь(3200 тоже прописал)
memcpy(data + 10, (uint8_t[]){0x0d, 0x0d, 0x82}, 3);
break;
case 500:
printf("Setting it to 500, boss\n");
memcpy(data + 10, (uint8_t[]){0x10, 0x10, 0x82}, 3);
break;
case 600:
printf("Setting it to 600, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 700:
printf("Setting it to 700, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 800:
printf("Setting it to 800, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 900:
printf("Setting it to 900, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1000:
printf("Setting it to 1000, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1100:
printf("Setting it to 1100, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1200:
printf("Setting it to 1200, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1300:
printf("Setting it to 1300, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1400:
printf("Setting it to 1400, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1500:
printf("Setting it to 1500, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1600:
printf("Setting it to 1600, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1700:
printf("Setting it to 1700, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1800:
printf("Setting it to 1800, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 1900:
printf("Setting it to 1900, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2000:
printf("Setting it to 2000, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2100:
printf("Setting it to 2100, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2200:
printf("Setting it to 2200, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2300:
printf("Setting it to 2300, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2400:
printf("Setting it to 2400, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2500:
printf("Setting it to 2500, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2600:
printf("Setting it to 2600, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2700:
printf("Setting it to 2700, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2800:
printf("Setting it to 2800, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 2900:
printf("Setting it to 2900, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3000:
printf("Setting it to 3000, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3100:
printf("Setting it to 3100, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3200:
printf("Setting it to 3200, boss\n");
memcpy(data + 10, (uint8_t[]){0x1a, 0x1a, 0x88}, 3);
break;
case 3300:
printf("Setting it to 3300, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3400:
printf("Setting it to 3400, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3500:
printf("Setting it to 3500, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3600:
printf("Setting it to 3600, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3700:
printf("Setting it to 3700, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3800:
printf("Setting it to 3800, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 3900:
printf("Setting it to 3900, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
case 4000:
printf("Setting it to 4000, boss\n");
memcpy(data + 10, (uint8_t[]){0x07, 0x07, 0x81}, 3);
break;
default:
printf("Setting it to %d, boss\n", default_dpi);
break;
}
//uint8_t data[72] = {A4TECH_MAGIC, DPI_SET_OPCODE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x1a,0x88,0x02,0x00, };
int error = m.writeToMouse(data, sizeof(data));
printf("Code: %d\n", error);
/*for(int x = 0; x<71; x++){
std::cout<<(int)data[x]<<std::endl;
}*/
//uint8_t request[72] = {A4TECH_MAGIC, DPI_SET_OPCODE,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1a,0x1a,0x88,0x02,0x00};
//uint8_t response[72];
//m.readFromMouse(request, sizeof(request), response, sizeof(response));
//for(int x = 0; x < 71; x++){
// std::cout<<(int)response[x]<<std::endl;
//}
//std::cout<<"Current backlight level: "<<(int)m.getBackLightLevel()<<std::endl;
return 0;
}