Skip to content
Snippets Groups Projects
Select Git revision
  • 5b557ca0b5dba4949cb34289924254849eddb37c
  • master default protected
  • devel
  • hruska-feature-clients-api
  • malostik-#5066-deduplicate-idea-ids
  • warden-postgresql-port
  • hruska-feature-#6799-filter-keys
  • hruska-feature-5066-duplicateIdeaID
  • warden-client-3.0-beta3
  • warden-server-3.0-beta3
  • warden-client-2.2-final
  • warden-server-2.2-final
  • warden-client-3.0-beta2
  • warden-server-3.0-beta2
  • warden-client-2.2
  • warden-server-2.2-patch3
  • warden-client-3.0-beta1
  • warden-server-3.0-beta1
  • warden-server-2.2-patch1
  • warden-client-3.0-beta0
  • warden-server-3.0-beta0
  • warden-server-2.2
  • warden-server-2.1-patch1
  • warden-client-2.1
  • warden-server-2.1
  • warden-server-2.1-beta6
  • warden-server-2.1-beta5
  • warden-server-2.1-beta4
28 results

WardenStatus.pm

Blame
  • findpowermate.c 1.14 KiB
    #include <linux/input.h>
    #include <string.h>
    #include <errno.h>
    #include <stdio.h>
    #include <unistd.h>
    #include <fcntl.h>
    #include "findpowermate.h"
    
    #define NUM_VALID_PREFIXES 2
    
    static const char *valid_prefix[NUM_VALID_PREFIXES] = {
      "Griffin PowerMate",
      "Griffin SoundKnob"
    };
    
    #define NUM_EVENT_DEVICES 16
    
    int open_powermate(const char *dev, int mode)
    {
      int fd = open(dev, mode);
      int i;
      char name[255];
    
      if(fd < 0){
        fprintf(stderr, "Unable to open \"%s\": %s\n", dev, strerror(errno));
        return -1;
      }
    
      if(ioctl(fd, EVIOCGNAME(sizeof(name)), name) < 0){
        fprintf(stderr, "\"%s\": EVIOCGNAME failed: %s\n", dev, strerror(errno));
        close(fd);
        return -1;
      }
    
      // it's the correct device if the prefix matches what we expect it to be:
      for(i=0; i<NUM_VALID_PREFIXES; i++)
        if(!strncasecmp(name, valid_prefix[i], strlen(valid_prefix[i])))
          return fd;
    
      close(fd);
      return -1;
    }
    
    int find_powermate(int mode)
    {
      char devname[256];
      int i, r;
    
      for(i=0; i<NUM_EVENT_DEVICES; i++){
        sprintf(devname, "/dev/input/event%d", i);
        r = open_powermate(devname, mode);
        if(r >= 0)
          return r;
      }
    
      return -1;
    }