howard/lsusb.c

105 lines
2.8 KiB
C
Raw Normal View History

2021-11-27 16:58:52 +11:00
#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();
*/