diff --git a/bin/jslisten b/bin/jslisten index c0aac55..ed51c82 100755 Binary files a/bin/jslisten and b/bin/jslisten differ diff --git a/etc/jslisten.cfg b/etc/jslisten.cfg index a98ed28..735a77a 100644 --- a/etc/jslisten.cfg +++ b/etc/jslisten.cfg @@ -4,3 +4,10 @@ button1=10 button2=11 button3=0 button4= + +[Add1] +program="/opt/bin/test2.sh" +button1=0 +button2=3 +button3= +button4= diff --git a/src/jslisten.c b/src/jslisten.c index e3dbf3b..8412e4e 100644 --- a/src/jslisten.c +++ b/src/jslisten.c @@ -57,19 +57,33 @@ //#define MY_LOG_LEVEL LOG_NOTICE //LOG_DEBUG //LOG_NOTICE #define INI_BUFFERSIZE 512 +#define MAX_HOTKEYS 99 //--------------------------------- // Global definitions //--------------------------------- -char iniFile[512]; +char iniFile[INI_BUFFERSIZE]; int joyFD; -long button1 = BUTTON_DEFINED_RANGE; // Default unassigned -long button2 = BUTTON_DEFINED_RANGE; // Default unassigned -long button3 = BUTTON_DEFINED_RANGE; // Default unassigned -long button4 = BUTTON_DEFINED_RANGE; // Default unassigned -int buttonActive = 0; -char swFilename[100]; +struct KeySet{ + // Set Default unassigned + long button1; + int button1Active; + long button2; + int button2Active; + long button3; + int button3Active; + long button4; + int button4Active; + int activeButtons; + int isTriggered; + char swFilename[100]; +}; + +struct KeySet myKeys[MAX_HOTKEYS]; + +int numHotkeys = 0; +//int buttonActive = 0; int logLevel = LOG_NOTICE; //--------------------------------- @@ -129,46 +143,49 @@ void readConfig(void) { /* section/key enumeration */ for (s = 0; ini_getsection(s, section, sizearray(section), iniFile) > 0; s++) { - for (k = 0; ini_getkey(section, k, str, sizearray(str), iniFile) > 0; k++) { - if ( strncmp("program", str, 7) == 0 ) { // Key found - n = ini_gets(section, str, "dummy", swFilename, sizearray(swFilename), iniFile); - if ( n > 5 && strncmp("dummy", swFilename, 5) != 0 ) { // Value is not empty - syslog(LOG_INFO, "Filename: %s\n", swFilename); - } - } - if ( strncmp("button1", str, 7) == 0 ) { // Key found - l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); - if ( buttonDefined(l) == true ) { // Value is not empty - syslog(LOG_INFO, "button1: %ld\n", l); - button1 = l; - buttonActive++; - } - } - if ( strncmp("button2", str, 7) == 0 ) { // Key found - l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); - if ( buttonDefined(l) == true ) { // Value is not empty - syslog(LOG_INFO, "button2: %ld\n", l); - button2 = l; - buttonActive++; - } - } - if ( strncmp("button3", str, 7) == 0 ) { // Key found - l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); - if ( buttonDefined(l) == true ) { // Value is not empty - syslog(LOG_INFO, "button3: %ld\n", l); - button3 = l; - buttonActive++; - } - } - if ( strncmp("button4", str, 7) == 0 ) { // Key found - l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); - if ( buttonDefined(l) == true ){ // Value is not empty - syslog(LOG_INFO, "button4: %ld\n", l); - button4 = l; - buttonActive++; - } - } - } /* for */ + if ( numHotkeys < MAX_HOTKEYS ) { + for (k = 0; ini_getkey(section, k, str, sizearray(str), iniFile) > 0; k++) { + if ( strncmp("program", str, 7) == 0 ) { // Key found + n = ini_gets(section, str, "dummy", myKeys[numHotkeys].swFilename, sizearray(myKeys[numHotkeys].swFilename), iniFile); + if ( n > 5 && strncmp("dummy", myKeys[numHotkeys].swFilename, 5) != 0 ) { // Value is not empty + syslog(LOG_INFO, "Filename: %s\n", myKeys[numHotkeys].swFilename); + } + } + if ( strncmp("button1", str, 7) == 0 ) { // Key found + l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); + if ( buttonDefined(l) == true ) { // Value is not empty + syslog(LOG_INFO, "button1: %ld\n", l); + myKeys[numHotkeys].button1 = l; + myKeys[numHotkeys].activeButtons++; + } + } + if ( strncmp("button2", str, 7) == 0 ) { // Key found + l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); + if ( buttonDefined(l) == true ) { // Value is not empty + syslog(LOG_INFO, "button2: %ld\n", l); + myKeys[numHotkeys].button2 = l; + myKeys[numHotkeys].activeButtons++; + } + } + if ( strncmp("button3", str, 7) == 0 ) { // Key found + l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); + if ( buttonDefined(l) == true ) { // Value is not empty + syslog(LOG_INFO, "button3: %ld\n", l); + myKeys[numHotkeys].button3 = l; + myKeys[numHotkeys].activeButtons++; + } + } + if ( strncmp("button4", str, 7) == 0 ) { // Key found + l = ini_getl(section, str, BUTTON_DEFINED_RANGE, iniFile); + if ( buttonDefined(l) == true ){ // Value is not empty + syslog(LOG_INFO, "button4: %ld\n", l); + myKeys[numHotkeys].button4 = l; + myKeys[numHotkeys].activeButtons++; + } + } + } /* for */ + } + numHotkeys++; // Remember how many sections we have } /* for */ } @@ -177,19 +194,84 @@ void readConfig(void) { //--------------------------------------------- int checkConfig(void) { int rc=0; - if ( sizearray(swFilename) < 3 ) { // no program make no sense - syslog(LOG_ERR, "err: no valid filename provided. Please check ini file\n"); - rc = 1; - } - if ( buttonDefined(button1) == false ) { // we need at least one button for tracking - syslog(LOG_ERR, "err: button assignment missing. Please set at least button1 in the ini file!\n"); - rc = 1; - } - syslog(LOG_INFO, "Active assigned buttons: %d\n", buttonActive); + int i; + for (i=0;i -1 ) { // We have found one key section syslog(LOG_INFO, "Swtching mode. ...\n"); - // reset state, so we call only once - button1State = 0; - button2State = 0; - button3State = 0; - button4State = 0; - int rc = system(swFilename); + // call external program + int rc = system(myKeys[needTrigger].swFilename); if ( rc == 0 ) { syslog(LOG_INFO, "Call succesfull\n"); }else{ syslog(LOG_INFO, "Call failed\n"); } + // reset state, so we call only once + resetHotkeys(); } } @@ -500,6 +547,22 @@ int main(int argc, char* argv[]) { signal(SIGTERM, signal_callback_handler); signal(SIGHUP, signal_callback_handler); + + // Init Defaults + int i; + for (i=0;i 1 ) { if (strncmp(argv[1], "--debug", 7) == 0) {