diff --git a/README b/README index 9520066..8f73091 100644 --- a/README +++ b/README @@ -2,7 +2,8 @@ This program can change the colors on your MSI steelseries keyboard. The keyboar Prerequisites (tested on Ubuntu 14.04 only): -Qt 5 +Qt 5.2 or later (Ubuntu includes Qt 5.2.1) +libhidapi-dev libhidapi-libusb0 To build: diff --git a/main.cpp b/main.cpp index 0d33660..7add537 100644 --- a/main.cpp +++ b/main.cpp @@ -8,10 +8,95 @@ */ #include +#include +#include #include "keyboard.h" +enum CommandLineParseResult +{ + CommandLineOk, + CommandLineError, + CommandLineVersionRequested, + CommandLineHelpRequested +}; + + +CommandLineParseResult parseCommandLine(QCommandLineParser &parser, QString *errorMessage) { + QCommandLineOption helpOption = parser.addHelpOption(); + QCommandLineOption versionOption = parser.addVersionOption(); + + QCommandLineOption mode(QStringList() << "m" << "mode", "set color mode: normal, gaming, breathe, demo, wave"); + QCommandLineOption color(QStringList() << "c" << "color", "set a color using the format: region,color,intensity"); + + parser.addOption(mode); + parser.addOption(color); + + if(!parser.parse(QCoreApplication::arguments())) { + *errorMessage = parser.errorText(); + return CommandLineError; + } + + if(parser.isSet(versionOption)) + return CommandLineVersionRequested; + + if(parser.isSet(helpOption)) + return CommandLineHelpRequested; + + return CommandLineOk; +} + int main(int argc, char *argv[]) { QCoreApplication app(argc, argv); + app.setApplicationName("msi-keyboard"); + app.setApplicationVersion("1.0"); + + QCommandLineParser parser; + parser.setApplicationDescription("Keyboard color changer for MSI steelseries keyboards"); + + QString errorMessage; + + switch(parseCommandLine(parser, &errorMessage)) { + case CommandLineOk: + break; + case CommandLineError: + fputs(qPrintable(errorMessage), stderr); + fputs("\n\n", stderr); + fputs(qPrintable(parser.helpText()), stderr); + return 1; + case CommandLineVersionRequested: + printf("%s %s\n", qPrintable(QCoreApplication::applicationName()), + qPrintable(QCoreApplication::applicationVersion())); + return 0; + case CommandLineHelpRequested: + { + std::cout << qPrintable(parser.helpText()) << std::endl; + + QStringList regions = QStringList() << "left" << "middle" << "right"; + QStringList colors = QStringList() << "off" << "red" << "orange" << "yellow" << "green" << "sky" << "blue" << "purple" << "white"; + QStringList intensities = QStringList() << "high" << "medium" << "low" << "light"; + + QString colorHelp = QString(R"(Available regions: + +%1 + +Available colors: + +%2 + +Available intensities: + +%3 + +Example: + +%4 +)").arg(regions.join('\n')).arg(colors.join('\n')).arg(intensities.join('\n')).arg(QString(argv[0]) + " -m normal -c left,red,high -c middle,purple,high -c right,sky,high"); + + std::cout << qPrintable(colorHelp) << std::endl; + + return 0; + } + } Keyboard k; k.setMode(MODE_NORMAL); diff --git a/msi-keyboard.pro b/msi-keyboard.pro index b685aaf..7a65459 100644 --- a/msi-keyboard.pro +++ b/msi-keyboard.pro @@ -9,4 +9,6 @@ QT -= gui SOURCES += main.cpp keyboard.cpp HEADERS += keyboard.h +QMAKE_CXXFLAGS += -std=c++11 + unix:LIBS += -lhidapi-libusb