dartsboard2key その1

ラズベリーパイのshでsleep0.5が効くことを確認

$ while :; do date; sleep 0.5; done
2013年  9月 12日 木曜日 23:03:36 JST
2013年  9月 12日 木曜日 23:03:36 JST
2013年  9月 12日 木曜日 23:03:37 JST
2013年  9月 12日 木曜日 23:03:37 JST
2013年  9月 12日 木曜日 23:03:38 JST
2013年  9月 12日 木曜日 23:03:38 JST
2013年  9月 12日 木曜日 23:03:39 JST
2013年  9月 12日 木曜日 23:03:40 JST
2013年  9月 12日 木曜日 23:03:40 JST
2013年  9月 12日 木曜日 23:03:41 JST
2013年  9月 12日 木曜日 23:03:41 JST
2013年  9月 12日 木曜日 23:03:42 JST

writekeyevent.c

# include <stdio.h>
# include <stdlib.h>
# include <linux/input.h>
# include <sys/time.h>

void write_key_event(int code, int value, int fd)
{
  struct input_event key_event;

  gettimeofday(&key_event.time, NULL);
  key_event.type = EV_KEY;
  key_event.code = code;
  key_event.value = value;
  write(fd, &key_event, sizeof(key_event));
}

main( int argc, char **argv ) {
  int code ;
  code = atoi( argv[1] ) ;
  write_key_event(code, 1, 1);
  write_key_event(code, 0, 1);

  printf( "%d\n", code ) ;
  exit(EXIT_SUCCESS);
}
  • event1はキーボードとすれば
$ ./writekeyevent 30 >/dev/input/event1
  • で「a」が押されたことになる
    • これはこれで危険なわけだが

dartsboard2key.sh

  • 本当はCで全部書きたいところだが、スキルが足らんのでしかたなくshで
    • とりあえず動けばよし
いろいろと試行誤したコード
#SEGMENT=`hexdump -C -n 16 /dev/input/event1 | head -n 1 | cut -d\  -f16`
#echo cat /dev/input/event0 | od -tx1 -w32 -An -v
#SEGMENT=$(cat /dev/input/event0 | od -tx1 | cut -d\  -f14)
まだまだ途中
#!/bin/sh

while :
do
  SEGMENT=`hexdump -d -n 16 /dev/input/event0 | head -n 1 | cut -d\  -f22-23`
  VALUE=`expr $SEGMENT / 1`;
  case $VALUE in
    91) echo "z" ;;
    90) echo "x" ;;
    89) echo "c" ;;
    *) echo $SEGMENT ;;
  esac
done