#define __KERNEL_STRICT_NAMES
#define _GNU_SOURCE
#include <linux/input.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define VOLUME_UP KEY_KPDOT
#define VOLUME_DOWN KEY_VOLUMEDOWN
#define WIFI_KEY KEY_W
#define UP_LEFT KEY_ENTER
#define UP_RIGHT KEY_ESC
#define DOWN_LEFT KEY_C
#define DOWN_RIGHT KEY_POWER
#define UP KEY_UP
#define DOWN KEY_DOWN
#define LEFT KEY_LEFT
#define RIGHT KEY_RIGHT
#define OK KEY_SPACE
//Numbers are KEY_KBX
#define KP0 KEY_KP0
#define KP1 KEY_KP1
#define KP2 KEY_KP2
#define KP3 KEY_KP3
#define KP4 KEY_KP4
#define KP5 KEY_KP5
#define KP6 KEY_KP6
#define KP7 KEY_KP7
#define KP8 KEY_KP8
#define KP9 KEY_KP9
#define DIESE KEY_KPDOT
#define STAR KEY_KPASTERISK
void
exec_cmd (int cmd)
{
//Code it yourself
}
int
main ()
{
int pid, state = 0, commande = 0;
struct input_event evenement;
int fd = open ("/dev/input/event7", O_RDONLY);
if (fd < 0)
{
perror ("Open input device");
return -1;
}
char *buf = malloc (512);
ioctl (fd, EVIOCGNAME (512), buf); //Should be omap-keypad or something like
printf("%s\n", buf);
free (buf);
ioctl(fd, EVIOCGRAB, 0);
while (1)
{
read (fd, &evenement, sizeof (evenement));
switch (evenement.code)
{
case STAR:
if (state == 4)
{
exec_cmd (commande);
}
state = 0;
commande = 0;
break;
case DIESE:
if (evenement.value == 1)
{
if (state == 0 || state == 1)
state++;
}
else
{
state = 0;
commande = 0;
}
break;
case KEY_KP0:
case KEY_KP1:
case KEY_KP2:
case KEY_KP3:
case KEY_KP4:
case KEY_KP5:
case KEY_KP6:
case KEY_KP7:
case KEY_KP8:
case KEY_KP9:
if (state >= 2 && state < 5)
{
int chiffre;
if (evenement.code == KP0)
chiffre = 0;
else if (evenement.code == KP1)
chiffre = 1;
else if (evenement.code == KP2)
chiffre = 2;
else if (evenement.code == KP3)
chiffre = 3;
else if (evenement.code == KP4)
chiffre = 4;
else if (evenement.code == KP5)
chiffre = 5;
else if (evenement.code == KP6)
chiffre = 6;
else if (evenement.code == KP7)
chiffre = 7;
else if (evenement.code == KP8)
chiffre = 8;
else if (evenement.code == KP9)
chiffre = 9;
int y = (4 - state); //4-state = 2-(state-2)
commande += pow (10, y) * chiffre;
state++;
}
else
{
state = 0;
commande = 0;
}
break;
default:
printf ("time (s): %d\ntype: %d\ncode: %d\nvalue: %d\n",
evenement.time.tv_sec, evenement.type, evenement.code,
evenement.value);
state = 0;
commande = 0;
break;
}
}
return 0;
}