1
0
mirror of https://github.com/MatMoul/g810-led.git synced 2024-12-23 09:16:11 +00:00

Move keyboard detection to Keyboard.cpp

This commit is contained in:
MatMoul 2016-11-12 00:34:59 +01:00
parent 30855c4c75
commit 31144f67ce
3 changed files with 32 additions and 49 deletions

View File

@ -9,12 +9,35 @@ bool Keyboard::isAttached() {
return m_isAttached; return m_isAttached;
} }
bool Keyboard::attach(int lg_pid) { bool Keyboard::attach() {
if (m_isAttached == true) return false; if (m_isAttached == true) return false;
int r; int r;
r = libusb_init(&ctx); r = libusb_init(&ctx);
if (r < 0) return false; if (r < 0) return false;
dev_handle = libusb_open_device_with_vid_pid(ctx, 0x046d, lg_pid);
libusb_device **devs;
ssize_t cnt = libusb_get_device_list(ctx, &devs);
if(cnt < 0) return false;
int pid = 0;
for(ssize_t i = 0; i < cnt; i++) {
libusb_device *device = devs[i];
libusb_device_descriptor desc = {0};
libusb_get_device_descriptor(device, &desc);
if (desc.idVendor == 0x046d) {
if (desc.idProduct == 0xc331) { pid = desc.idProduct; break; } // G810
if (desc.idProduct == 0xc337) { pid = desc.idProduct; break; } // G810
if (desc.idProduct == 0xc330) { pid = desc.idProduct; break; } // G410
if (desc.idProduct == 0xc333) { pid = desc.idProduct; break; } // G610
}
}
libusb_free_device_list(devs, 1);
if (pid == 0) {
libusb_exit(ctx);
ctx = NULL;
return false;
}
dev_handle = libusb_open_device_with_vid_pid(ctx, 0x046d, pid);
if (dev_handle == NULL) { if (dev_handle == NULL) {
libusb_exit(ctx); libusb_exit(ctx);
ctx = NULL; ctx = NULL;

View File

@ -35,7 +35,7 @@ class Keyboard {
struct KeyValue { KeyAddress key; KeyColors colors; }; struct KeyValue { KeyAddress key; KeyColors colors; };
bool isAttached(); bool isAttached();
bool attach(int lg_pid); bool attach();
bool detach(); bool detach();
bool commit(); bool commit();
bool getKeyAddress(Key key, KeyAddress &keyAddress); bool getKeyAddress(Key key, KeyAddress &keyAddress);

View File

@ -1,21 +1,12 @@
#include <iostream>
#include <iomanip>
#include <map> #include <map>
#include <string>
#include <vector> #include <vector>
#include <algorithm>
#include <fstream> #include <fstream>
#include <string>
#include "/usr/include/libusb-1.0/libusb.h"
#include "classes/Keyboard.h" #include "classes/Keyboard.h"
using namespace std; using namespace std;
int lg_pid;
void usage() { void usage() {
string appname = "g810-led"; string appname = "g810-led";
if (lg_pid == 0xc330) appname = "g410-led";
cout<<appname<<" Usages :\n"; cout<<appname<<" Usages :\n";
cout<<"-----------------\n"; cout<<"-----------------\n";
cout<<"\n"; cout<<"\n";
@ -51,7 +42,6 @@ void usage() {
void listkeys() { void listkeys() {
string appname = "g810-led"; string appname = "g810-led";
if (lg_pid == 0xc330) appname = "g410-led";
cout<<appname<<" Keys in groups :\n"; cout<<appname<<" Keys in groups :\n";
cout<<"-------------------------\n"; cout<<"-------------------------\n";
cout<<"\n"; cout<<"\n";
@ -139,7 +129,7 @@ void listkeys() {
int commit() { int commit() {
Keyboard lg_kbd; Keyboard lg_kbd;
lg_kbd.attach(lg_pid); lg_kbd.attach();
lg_kbd.commit(); lg_kbd.commit();
lg_kbd.detach(); lg_kbd.detach();
@ -150,7 +140,7 @@ int setStartupEffect(string effect) {
Keyboard lg_kbd; Keyboard lg_kbd;
Keyboard::PowerOnEffect powerOnEffect; Keyboard::PowerOnEffect powerOnEffect;
if (lg_kbd.parsePowerOnEffect(effect, powerOnEffect) == true) { if (lg_kbd.parsePowerOnEffect(effect, powerOnEffect) == true) {
lg_kbd.attach(lg_pid); lg_kbd.attach();
lg_kbd.setPowerOnEffect(powerOnEffect); lg_kbd.setPowerOnEffect(powerOnEffect);
lg_kbd.commit(); lg_kbd.commit();
lg_kbd.detach(); lg_kbd.detach();
@ -168,7 +158,7 @@ int setKey(string key, string color, bool commit) {
Keyboard::KeyValue keyValue; Keyboard::KeyValue keyValue;
keyValue.key = keyAddress; keyValue.key = keyAddress;
keyValue.colors = colors; keyValue.colors = colors;
lg_kbd.attach(lg_pid); lg_kbd.attach();
lg_kbd.setKey(keyValue); lg_kbd.setKey(keyValue);
if (commit == true) lg_kbd.commit(); if (commit == true) lg_kbd.commit();
lg_kbd.detach(); lg_kbd.detach();
@ -182,7 +172,7 @@ int setAllKeys(string color, bool commit) {
Keyboard lg_kbd; Keyboard lg_kbd;
Keyboard::KeyColors colors; Keyboard::KeyColors colors;
if (lg_kbd.parseColor(color, colors) == true) { if (lg_kbd.parseColor(color, colors) == true) {
lg_kbd.attach(lg_pid); lg_kbd.attach();
lg_kbd.setAllKeys(colors); lg_kbd.setAllKeys(colors);
if (commit == true) lg_kbd.commit(); if (commit == true) lg_kbd.commit();
lg_kbd.detach(); lg_kbd.detach();
@ -197,7 +187,7 @@ int setGroupKeys(string groupKeys, string color, bool commit) {
if (lg_kbd.parseKeyGroup(groupKeys, keyGroup) == true) { if (lg_kbd.parseKeyGroup(groupKeys, keyGroup) == true) {
Keyboard::KeyColors colors; Keyboard::KeyColors colors;
if (lg_kbd.parseColor(color, colors) == true) { if (lg_kbd.parseColor(color, colors) == true) {
lg_kbd.attach(lg_pid); lg_kbd.attach();
lg_kbd.setGroupKeys(keyGroup, colors); lg_kbd.setGroupKeys(keyGroup, colors);
if (commit == true) lg_kbd.commit(); if (commit == true) lg_kbd.commit();
lg_kbd.detach(); lg_kbd.detach();
@ -226,7 +216,7 @@ int loadProfile(string profileFile) {
map<string, string> var; map<string, string> var;
vector<Keyboard::KeyValue> keys; vector<Keyboard::KeyValue> keys;
lg_kbd.attach(lg_pid); lg_kbd.attach();
while (!file.eof()) { while (!file.eof()) {
getline(file, line); getline(file, line);
@ -294,40 +284,10 @@ int loadProfile(string profileFile) {
return 1; return 1;
} }
void findG810() {
libusb_device **devs;
libusb_context *ctx = NULL;
int r;
ssize_t cnt;
r = libusb_init(&ctx);
if(r < 0) return;
cnt = libusb_get_device_list(ctx, &devs);
if(cnt < 0) return;
ssize_t i;
for(i = 0; i < cnt; i++) {
libusb_device *device = devs[i];
libusb_device_descriptor desc = {0};
libusb_get_device_descriptor(device, &desc);
if (desc.idVendor == 0x046d) {
if (desc.idProduct == 0xc331) { lg_pid=0xc331; break; }
if (desc.idProduct == 0xc337) { lg_pid=0xc337; break; }
}
}
libusb_free_device_list(devs, 1);
libusb_exit(ctx);
}
int main(int argc, char *argv[]) { int main(int argc, char *argv[]) {
string str = argv[0]; string str = argv[0];
size_t split = str.find_last_of("/\\"); size_t split = str.find_last_of("/\\");
str = str.substr(split + 1); str = str.substr(split + 1);
if (str == "g410-led") lg_pid=0xc330;
else findG810();
if (argc > 1) { if (argc > 1) {
string argCmd = argv[1]; string argCmd = argv[1];
if (argCmd == "-h" || argCmd == "--help") { usage(); return 0; } if (argCmd == "-h" || argCmd == "--help") { usage(); return 0; }