]> git.itanic.dy.fi Git - glucose/commitdiff
Refactor hiddev functions out from main.c
authorTimo Kokkonen <kaapeli@itanic.dy.fi>
Wed, 27 Apr 2011 18:09:18 +0000 (21:09 +0300)
committerTimo Kokkonen <kaapeli@itanic.dy.fi>
Wed, 27 Apr 2011 18:09:18 +0000 (21:09 +0300)
Signed-off-by: Timo Kokkonen <kaapeli@itanic.dy.fi>
Makefile
hiddev.c [new file with mode: 0644]
hiddev.h [new file with mode: 0644]
main.c

index c5f7cb7d25ba1953edfcdee94fc0412f413e96d0..2846968800feffc1e487cdba1e8ee7315af192b7 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -2,7 +2,7 @@ CC = gcc
 LD = ld
 CFLAGS = -Wall -O2 -g
 
-GLUCOSE_OBJS = main.o
+GLUCOSE_OBJS = main.o hiddev.o
 
 ALL_OBJS = $(GLUCOSE_OBJS)
 ALL_DEBS = $(shell echo " "$(ALL_OBJS) | sed -e "s,[^ ]*\.a,,g" -e     \
diff --git a/hiddev.c b/hiddev.c
new file mode 100644 (file)
index 0000000..237b2ba
--- /dev/null
+++ b/hiddev.c
@@ -0,0 +1,137 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <sys/ioctl.h>
+#include <linux/hiddev.h>
+#include <errno.h>
+#include <string.h>
+#include <fcntl.h>
+
+#include "hiddev.h"
+
+#define PRINT_FIELD(field) printf(#field ": %04x\n", field)
+
+int hiddev_read(unsigned char *data, int bufsize, int fd)
+{
+       struct hiddev_event readBuffer[READ_BUFFER_LENGTH];
+       int ret, n, i;
+
+       ret = read(fd, readBuffer, sizeof(readBuffer));
+       if (ret < 0)
+               return ret;
+
+       n = ret / sizeof(readBuffer[0]);
+       for (i = 0; i < n && i < bufsize; i++)
+               data[i] = readBuffer[i].value;
+       return n;
+}
+
+int hiddev_write(const unsigned char data[64], int fd , int usage_code)
+{
+       int rc = 0, uindex, error;
+
+       struct hiddev_usage_ref uref;
+       struct hiddev_report_info rinfo;
+
+       uref.report_id = *data++;
+       uref.report_type = HID_REPORT_TYPE_OUTPUT;
+       uref.field_index = 0;
+
+       uref.usage_code = usage_code;
+
+       for (uindex = 0; uindex < 63; uindex++) {
+               uref.usage_index = uindex;
+               uref.value = *data++;
+
+               rc = ioctl(fd, HIDIOCSUSAGE, &uref);
+               if (rc != 0)
+                       goto err;
+       }
+
+       rinfo.report_type = HID_REPORT_TYPE_OUTPUT;
+       rinfo.report_id =  0x0;
+       rinfo.num_fields = 1;
+
+       rc = ioctl(fd, HIDIOCSREPORT, &rinfo);
+       if (rc != 0)
+               goto err2;
+
+       return 0;
+err2:
+       printf("HIDIOCSREPORT\n");
+err:
+       error = errno;
+       printf("Error in IOCTL: %s\n", strerror(error));
+
+       return rc;
+}
+
+static int get_usagecode(int fd)
+{
+       struct hiddev_usage_ref uref;
+       int rc, error;
+
+       uref.report_type = HID_REPORT_TYPE_OUTPUT;
+       uref.report_id = 0x0;
+       uref.field_index = 0;
+       uref.usage_index = 0;
+
+       rc = ioctl(fd, HIDIOCGUCODE, &uref);
+       if (rc < 0) {
+               error = errno;
+               printf("Error gettin usage code: %s\n", strerror(error));
+               return rc;
+       }
+
+       return uref.usage_code;
+}
+
+int hiddev_open(const char *device_path, int *usage_code)
+{
+       struct hiddev_devinfo device_info;
+       struct hiddev_report_info rinfo;
+       int ret, error;
+       int fd;
+       fd = ret = open(device_path, O_RDWR);
+
+       if (fd < 0)
+               goto err;
+
+
+       rinfo.report_type = HID_REPORT_TYPE_OUTPUT;
+       rinfo.report_id = HID_REPORT_ID_FIRST;
+       ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
+       if (ret < 0)
+               goto err;
+
+       PRINT_FIELD(rinfo.report_type);
+       PRINT_FIELD(rinfo.report_id);
+       PRINT_FIELD(rinfo.num_fields);
+
+       *usage_code = get_usagecode(fd);
+
+       if (*usage_code < 0)
+               return -8;
+
+       ret = ioctl(fd, HIDIOCGDEVINFO, &device_info);
+
+       if (ret < 0)
+               goto err;
+
+       PRINT_FIELD(device_info.bustype);
+       PRINT_FIELD(device_info.busnum);
+       PRINT_FIELD(device_info.devnum);
+       PRINT_FIELD(device_info.ifnum);
+       PRINT_FIELD(device_info.vendor);
+       PRINT_FIELD(device_info.product);
+       PRINT_FIELD(device_info.version);
+       PRINT_FIELD(device_info.num_applications);
+
+       return fd;
+
+err:
+       error = errno;
+       printf("Error opening device %s: %s\n", device_path, strerror(error));
+       return ret;
+}
+
diff --git a/hiddev.h b/hiddev.h
new file mode 100644 (file)
index 0000000..a37c60f
--- /dev/null
+++ b/hiddev.h
@@ -0,0 +1,10 @@
+#ifndef __HIDDEV_H_
+#define __HIDDEV_H_
+
+#define READ_BUFFER_LENGTH 64
+
+int hiddev_read(unsigned char *data, int bufsize, int fd);
+int hiddev_write(const unsigned char data[64], int fd , int usage_code);
+int hiddev_open(const char *device_path, int *usage_code);
+
+#endif
diff --git a/main.c b/main.c
index e912fe46c9c01cad24f1d4dadcc15beda6d39bf2..a4539804b305fa7212bb78f4bb080aa29e40d109 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,20 +1,16 @@
 #include <stdio.h>
 #include <stdlib.h>
-#include <fcntl.h>
 #include <unistd.h>
-#include <sys/ioctl.h>
 #include <linux/types.h>
 #include <linux/hiddev.h>
 #include <string.h>
 #include <errno.h>
 #include <time.h>
 
-#define PRINT_FIELD(field) printf(#field ": %04x\n", field)
+#include "hiddev.h"
 
 #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]))
 
-#define READ_BUFFER_LENGTH 64
-
 struct msg {
        int direction;
        unsigned char data[64];
@@ -61,131 +57,6 @@ static void print_ascii(const unsigned char *data, int len)
        printf("\n");
 }
 
-int hid_read(unsigned char *data, int bufsize, int fd)
-{
-       struct hiddev_event readBuffer[READ_BUFFER_LENGTH];
-       int ret, n, i;
-
-       ret = read(fd, readBuffer, sizeof(readBuffer));
-       if (ret < 0)
-               return ret;
-
-       n = ret / sizeof(readBuffer[0]);
-       for (i = 0; i < n && i < bufsize; i++)
-               data[i] = readBuffer[i].value;
-       return n;
-}
-
-
-int hid_write(const unsigned char data[64], int fd , int usage_code)
-{
-       int rc = 0, uindex, error;
-
-       struct hiddev_usage_ref uref;
-       struct hiddev_report_info rinfo;
-
-       uref.report_id = *data++;
-       uref.report_type = HID_REPORT_TYPE_OUTPUT;
-       uref.field_index = 0;
-
-       uref.usage_code = usage_code;
-
-       for (uindex = 0; uindex < 63; uindex++) {
-               uref.usage_index = uindex;
-               uref.value = *data++;
-
-               rc = ioctl(fd, HIDIOCSUSAGE, &uref);
-               if (rc != 0)
-                       goto err;
-       }
-
-       rinfo.report_type = HID_REPORT_TYPE_OUTPUT;
-       rinfo.report_id =  0x0;
-       rinfo.num_fields = 1;
-
-       rc = ioctl(fd, HIDIOCSREPORT, &rinfo);
-       if (rc != 0)
-               goto err2;
-
-       return 0;
-err2:
-       printf("HIDIOCSREPORT\n");
-err:
-       error = errno;
-       printf("Error in IOCTL: %s\n", strerror(error));
-
-       return rc;
-}
-
-int get_usagecode(int fd)
-{
-       struct hiddev_usage_ref uref;
-       int rc, error;
-
-       uref.report_type = HID_REPORT_TYPE_OUTPUT;
-       uref.report_id = 0x0;
-       uref.field_index = 0;
-       uref.usage_index = 0;
-
-       rc = ioctl(fd, HIDIOCGUCODE, &uref);
-       if (rc < 0) {
-               error = errno;
-               printf("Error gettin usage code: %s\n", strerror(error));
-               return rc;
-       }
-
-       return uref.usage_code;
-}
-
-int hiddev_open(const char *device_path, int *usage_code)
-{
-       struct hiddev_devinfo device_info;
-       struct hiddev_report_info rinfo;
-       int ret, error;
-       int fd;
-       fd = ret = open(device_path, O_RDWR);
-
-       if (fd < 0)
-               goto err;
-
-
-       rinfo.report_type = HID_REPORT_TYPE_OUTPUT;
-       rinfo.report_id = HID_REPORT_ID_FIRST;
-       ret = ioctl(fd, HIDIOCGREPORTINFO, &rinfo);
-       if (ret < 0)
-               goto err;
-
-       PRINT_FIELD(rinfo.report_type);
-       PRINT_FIELD(rinfo.report_id);
-       PRINT_FIELD(rinfo.num_fields);
-
-       *usage_code = get_usagecode(fd);
-
-       if (*usage_code < 0)
-               return -8;
-
-       ret = ioctl(fd, HIDIOCGDEVINFO, &device_info);
-
-       if (ret < 0)
-               goto err;
-
-       PRINT_FIELD(device_info.bustype);
-       PRINT_FIELD(device_info.busnum);
-       PRINT_FIELD(device_info.devnum);
-       PRINT_FIELD(device_info.ifnum);
-       PRINT_FIELD(device_info.vendor);
-       PRINT_FIELD(device_info.product);
-       PRINT_FIELD(device_info.version);
-       PRINT_FIELD(device_info.num_applications);
-
-       return fd;
-
-err:
-       error = errno;
-       printf("Error opening device %s: %s\n", device_path, strerror(error));
-       return ret;
-}
-
 int send_msg(const struct msg *msg, int fd, int usage_code)
 {
        int ret;
@@ -200,7 +71,7 @@ int send_msg(const struct msg *msg, int fd, int usage_code)
        print_hex(msg->data + 1, datalen(msg->data) - 1);
        print_ascii(msg->data + 1, datalen(msg->data) - 1);
 
-       ret = hid_write(msg->data, fd, usage_code);
+       ret = hiddev_write(msg->data, fd, usage_code);
        if (ret)
                exit(1);
 
@@ -213,7 +84,7 @@ int read_and_verify(struct msg *msg, int fd)
        int ret, offset = 0;
 
        while (offset < 64) {
-               ret = hid_read(buf + offset, sizeof(buf) - offset, fd);
+               ret = hiddev_read(buf + offset, sizeof(buf) - offset, fd);
 
                if (ret < 0)
                        goto err;