+int hiddev_open(const char *device_path, int *usage_code)
+{
+ return _hiddev_open(device_path, usage_code, 0, 0);
+}
+
+int hiddev_open_by_id(int vendor_id, int product_id, int *usage_code)
+{
+ struct dirent *dirent;
+ DIR *dir;
+ int error, fd;
+ char path[256];
+
+ dir = opendir(HIDDEV_PATH);
+ if (dir == NULL) {
+ error = errno;
+ printf("Failed to open directory %s: %s\n", HIDDEV_PATH,
+ strerror(error));
+ return -error;
+ }
+
+ while ((dirent = readdir(dir))) {
+ if (strncmp(dirent->d_name, "hiddev", sizeof("hiddev") - 1))
+ continue;
+
+ path[0] = 0;
+ strncat(path, HIDDEV_PATH, sizeof(path) - 1);
+ strncat(path, dirent->d_name, sizeof(path) - 1);
+
+ fd = _hiddev_open(path, usage_code, product_id, vendor_id);
+ if (fd < 0)
+ continue;
+ return fd;
+ }
+
+ if (errno) {
+ error = errno;
+ trace(0, "Error reading directory %s: %s\n", HIDDEV_PATH,
+ strerror(error));
+ return -error;
+ }
+
+ trace(0, "Canno't find any mathing hiddev devices\n");
+ return -1;
+}