diff --git a/README.md b/README.md
index 6bffe8f..7094223 100644
--- a/README.md
+++ b/README.md
@@ -63,6 +63,19 @@ Linux led controller for Logitech G213, G410, G610, G810 and G910 Keyboards.
`echo -e "k w ff0000\nk a ff0000\nk s ff0000\nk d ff0000\nc" | g810-led -pp # Set multiple keys`
+## Testing unsuported keyboards :
+Start by retrieve the VendorID and the ProductID of your keyboard with lsusb.
+`lsusb`
+Sample return :
+`Bus 001 Device 001: ID 046d:c331 Logitech, Inc.`
+In this sample VendorID is 046d and ProductID is c331. Now test your keyboard with all supported protocol :
+`g810-led -dv 046d -dp c331 -tuk 1 -a 000000`
+If your keyboard set all key to off you have found the protocol (1), if not continue.
+`g810-led -dv 046d -dp c331 -tuk 2 -a 000000`
+If your keyboard set all key to off you have found the protocol (2), if not continue.
+`g810-led -dv 046d -dp c331 -tuk 3 -a 000000`
+If your keyboard set all key to off you have found the protocol (3), if not, need new dump.
+
## Building and linking against the libg810-led library :
Include in implementing source files.
```cpp
diff --git a/src/classes/Keyboard.cpp b/src/classes/Keyboard.cpp
index 2ecaceb..bb13e7c 100644
--- a/src/classes/Keyboard.cpp
+++ b/src/classes/Keyboard.cpp
@@ -21,6 +21,15 @@ LedKeyboard::~LedKeyboard() {
}
+bool LedKeyboard::overrideKeyboard(uint16_t vendorID, uint16_t productID, KeyboardModel model) {
+ if(model==KeyboardModel::unknown) return false;
+ SupportedKeyboards = {
+ { vendorID, productID, (u_int16_t)model }
+ };
+ return true;
+}
+
+
vector LedKeyboard::listKeyboards() {
vector deviceList;
diff --git a/src/classes/Keyboard.h b/src/classes/Keyboard.h
index b87698d..b98e969 100644
--- a/src/classes/Keyboard.h
+++ b/src/classes/Keyboard.h
@@ -16,7 +16,7 @@ class LedKeyboard {
private:
- const std::vector> SupportedKeyboards = {
+ std::vector> SupportedKeyboards = {
{ 0x46d, 0xc336, (u_int16_t)KeyboardModel::g213 },
{ 0x46d, 0xc330, (u_int16_t)KeyboardModel::g410 },
{ 0x46d, 0xc333, (u_int16_t)KeyboardModel::g610 },
@@ -27,7 +27,6 @@ class LedKeyboard {
{ 0x46d, 0xc335, (u_int16_t)KeyboardModel::g910 }
};
-
enum class KeyAddressGroup : uint8_t {
logo = 0x00,
indicators,
@@ -135,6 +134,8 @@ class LedKeyboard {
~LedKeyboard();
+ bool overrideKeyboard(uint16_t vendorID, uint16_t productID, KeyboardModel model);
+
std::vector listKeyboards();
bool isOpen();
diff --git a/src/helpers/help.cpp b/src/helpers/help.cpp
index 573b188..404fd0e 100644
--- a/src/helpers/help.cpp
+++ b/src/helpers/help.cpp
@@ -53,19 +53,21 @@ namespace help {
cout<<" -dv\t\t\t\t\tDevice vendor ID, such as 046d for Logitech. Can be omitted to match any vendor ID"< deviceList = kbd.listKeyboards();
- if (deviceList.empty()) return 1;
+ if (deviceList.empty()) {
+ std::cout<<"Matching or compatible device not found !"<::iterator iterator;
for (iterator = deviceList.begin(); iterator != deviceList.end(); iterator++) {
@@ -267,17 +270,34 @@ int main(int argc, char **argv) {
serial = argv[argIndex + 1];
argIndex += 2;
continue;
- }
- else if (argc > (argIndex + 1) && arg == "-dv"){
+ } else if (argc > (argIndex + 1) && arg == "-dv"){
if (! utils::parseUInt16(argv[argIndex + 1], vendorID)) return 1;
argIndex += 2;
continue;
- }
- else if (argc > (argIndex + 1) && arg == "-dp"){
+ } else if (argc > (argIndex + 1) && arg == "-dp"){
if (! utils::parseUInt16(argv[argIndex + 1], productID)) return 1;
argIndex += 2;
continue;
+ } else if (argc > (argIndex + 1) && arg == "-tuk"){
+ uint8_t kbdProtocol = 0;
+ if (! utils::parseUInt8(argv[argIndex + 1], kbdProtocol)) return 1;
+ switch(kbdProtocol) {
+ case 1:
+ kbd.overrideKeyboard(vendorID, productID, LedKeyboard::KeyboardModel::g810);
+ break;
+ case 2:
+ kbd.overrideKeyboard(vendorID, productID, LedKeyboard::KeyboardModel::g910);
+ break;
+ case 3:
+ kbd.overrideKeyboard(vendorID, productID, LedKeyboard::KeyboardModel::g213);
+ break;
+ default:
+ break;
+ }
+ argIndex += 2;
+ continue;
}
+
//Commands that do not need to initialize a specific device
if (arg == "--help" || arg == "-h") {help::usage(argv[0]); return 0;}
@@ -288,10 +308,10 @@ int main(int argc, char **argv) {
//Initialize the device for use
if (!kbd.open(vendorID, productID, serial)) {
- std::cout << "Matching or compatible device not found" << std::endl;
+ std::cout << "Matching or compatible device not found !" << std::endl;
return 2;
}
-
+
// Command arguments, these will cause parsing to ignore anything beyond the command and its arguments
if (arg == "-c") return commit(kbd);
else if (arg == "--print-device") {printDeviceInfo(kbd.getCurrentDevice()); return 0;}