main.c
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <time.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/types.h>
#include <linux/hidraw.h>
#include <linux/input.h>
#include <linux/types.h>
static uint32_t get_ticks(void)
{
struct timeval tv = {0};
static struct timeval init_tv = {0};
gettimeofday(&tv, 0);
if (init_tv.tv_sec == 0) {
init_tv = tv;
}
return ((tv.tv_sec - init_tv.tv_sec) * 1000000) + tv.tv_usec - init_tv.tv_usec;
}
int main(int argc, char **argv)
{
uint8_t buf[255] = {0};
struct hidraw_devinfo info = {0};
int fd = -1, x = 0, r = 0, desc_size = 0;
struct hidraw_report_descriptor rpt_desc = {0};
fd = open("/dev/hidraw3", O_RDWR);
if (fd < 0) {
printf("failed to open device\n");
return -1;
}
ioctl(fd, HIDIOCGRDESCSIZE, &desc_size);
rpt_desc.size = desc_size;
ioctl(fd, HIDIOCGRDESC, &rpt_desc);
ioctl(fd, HIDIOCGRAWNAME(sizeof(buf)), buf);
ioctl(fd, HIDIOCGRAWPHYS(sizeof(buf)), buf);
ioctl(fd, HIDIOCGRAWINFO, &info);
buf[0] = 0x9;
buf[1] = 0xff;
buf[2] = 0xff;
buf[3] = 0xff;
ioctl(fd, HIDIOCSFEATURE(4), buf);
buf[0] = 0x9;
ioctl(fd, HIDIOCGFEATURE(sizeof(buf)), buf);
get_ticks();
for (x = 0; x < 1000; x++) {
r = read(fd, buf, 64);
if (r == 64) {
for (int x = 0; x < 64; x++) {
printf("%04d, ", (uint8_t)buf[x]);
}
printf("\n");
}
}
printf("elapsed time: %dus\n", get_ticks());
close(fd);
return 0;
}