#include <stdio.h>
#include <linux/input.h>
#include <fcntl.h>
#include <unistd.h>
#include <string.h>
char *GetKeyboardEventNum(char *kybName)
{
char *p;
char name[64];
char buf[256] = {
0,
};
int fd = 0;
int i;
for (i = 0; i < 32; i++)
{
sprintf(name, "/dev/input/event%d", i);
if ((fd = open(name, O_RDONLY, 0)) >= 0)
{
ioctl(fd, EVIOCGNAME(sizeof(buf)), buf);
if (strstr(buf, kybName))
{
close(fd);
p = name;
return p;
}
close(fd);
}
}
return "";
}
typedef void (*func)(int);
extern void GetKeyBoard(func callback);
void GetKeyBoard(func callback)
{
int keys_fd;
char ret[2];
struct input_event t;
char *DEV_PATH = GetKeyboardEventNum("SIGMACHIP USB Keyboard");
keys_fd = open(DEV_PATH, O_RDONLY);
if (keys_fd <= 0)
{
return -1;
}
while (1)
{
if (
read(keys_fd, &t, sizeof(t)) == sizeof(t))
{
if (t.type == EV_KEY)
{
if (t.value == 1)
{
printf("key %d\n", t.code);
callback(t.code);
}
}
}
}
close(keys_fd);
}