Skip to content
Snippets Groups Projects
Select Git revision
  • 545d9434d8eb6ea6afac3cc026b2fd0a1dec4843
  • master default protected
  • rednatco-v2
  • rednatco
  • test
  • ntc-tube-uniform-color
  • ntc-tube-missing-atoms
  • restore-vertex-array-per-program
  • watlas2
  • dnatco_new
  • cleanup-old-nodejs
  • webmmb
  • fix_auth_seq_id
  • update_deps
  • ext_dev
  • ntc_balls
  • nci-2
  • plugin
  • bugfix-0.4.5
  • nci
  • servers
  • v0.5.0-dev.1
  • v0.4.5
  • v0.4.4
  • v0.4.3
  • v0.4.2
  • v0.4.1
  • v0.4.0
  • v0.3.12
  • v0.3.11
  • v0.3.10
  • v0.3.9
  • v0.3.8
  • v0.3.7
  • v0.3.6
  • v0.3.5
  • v0.3.4
  • v0.3.3
  • v0.3.2
  • v0.3.1
  • v0.3.0
41 results

controls.tsx

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;
    }