105 lines
2.8 KiB
C
105 lines
2.8 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <wchar.h>
|
|
|
|
#include <hidapi.h>
|
|
|
|
#define MAX_STR 255
|
|
|
|
int hextoint(char *hex) {
|
|
int base=16;
|
|
if (strstr(hex, "0x") == hex) {
|
|
base=0;
|
|
}
|
|
return strtol(hex, NULL, base);
|
|
}
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
//unsigned char buf[65];
|
|
//wchar_t wstr[MAX_STR];
|
|
//hid_device *handle;
|
|
struct hid_device_info *alldevs, *dev;
|
|
unsigned short wantvendorid = 0,wantproductid = 0;
|
|
if (argc == 3) {
|
|
wantvendorid = hextoint(argv[1]);
|
|
wantproductid = hextoint(argv[2]);
|
|
} else if (argc == 2) {
|
|
wantvendorid = hextoint(argv[1]);
|
|
} else if (argc > 1) {
|
|
printf("usage: %s [vendor_id] [product_id]\n",argv[0]);
|
|
exit(1);
|
|
}
|
|
|
|
if (hid_init()) {
|
|
printf("Error initialising hidapi.");
|
|
exit(1);
|
|
}
|
|
alldevs = hid_enumerate(wantvendorid, wantproductid);
|
|
for (dev=alldevs; dev; dev = dev->next) {
|
|
printf("%s\n", dev->path);
|
|
printf(" Manufacturer: %ls\n", dev->manufacturer_string);
|
|
printf(" Vendor ID: 0x%04hx\n", dev->vendor_id);
|
|
printf(" Product ID: 0x%04hx (%ls)\n", dev->product_id, dev->product_string);
|
|
printf(" Serial: %ls\n", dev->serial_number);
|
|
printf(" Release: %hx\n", dev->release_number);
|
|
printf(" Interface: %d\n", dev->interface_number);
|
|
printf(" Usage (page): 0x%hx (0x%hx)\n", dev->usage, dev->usage_page);
|
|
printf("\n");
|
|
}
|
|
hid_exit();
|
|
return 0;
|
|
}
|
|
|
|
|
|
/*
|
|
|
|
// Initialize the hidapi library
|
|
res = hid_init();
|
|
|
|
// Open the device using the VID, PID,
|
|
// and optionally the Serial number.
|
|
handle = hid_open(0x4d8, 0x3f, NULL);
|
|
|
|
// Read the Manufacturer String
|
|
res = hid_get_manufacturer_string(handle, wstr, MAX_STR);
|
|
wprintf(L"Manufacturer String: %s\n", wstr);
|
|
|
|
// Read the Product String
|
|
res = hid_get_product_string(handle, wstr, MAX_STR);
|
|
wprintf(L"Product String: %s\n", wstr);
|
|
|
|
// Read the Serial Number String
|
|
res = hid_get_serial_number_string(handle, wstr, MAX_STR);
|
|
wprintf(L"Serial Number String: (%d) %s\n", wstr[0], wstr);
|
|
|
|
// Read Indexed String 1
|
|
res = hid_get_indexed_string(handle, 1, wstr, MAX_STR);
|
|
wprintf(L"Indexed String 1: %s\n", wstr);
|
|
|
|
// Toggle LED (cmd 0x80). The first byte is the report number (0x0).
|
|
buf[0] = 0x0;
|
|
buf[1] = 0x80;
|
|
res = hid_write(handle, buf, 65);
|
|
|
|
// Request state (cmd 0x81). The first byte is the report number (0x0).
|
|
buf[0] = 0x0;
|
|
buf[1] = 0x81;
|
|
res = hid_write(handle, buf, 65);
|
|
|
|
// Read requested state
|
|
res = hid_read(handle, buf, 65);
|
|
|
|
// Print out the returned buffer.
|
|
for (i = 0; i < 4; i++)
|
|
printf("buf[%d]: %d\n", i, buf[i]);
|
|
|
|
// Close the device
|
|
hid_close(handle);
|
|
|
|
// Finalize the hidapi library
|
|
res = hid_exit();
|
|
*/
|
|
|