Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <errno.h>
- #include "usb.h"
- static int vendor_id;
- static int product_id;
- typedef struct{
- int requesttype;
- int request;
- int value;
- int index;
- char *bytes;
- int size;
- int timeout;
- }ctrlmsg_param;
- void print_endpoint(struct usb_endpoint_descriptor *endpoint)
- {
- printf("=====End point Information====n");
- printf("bEndpointAddress: %xn", endpoint->bEndpointAddress);
- printf("bmAttributes: %xn", endpoint->bmAttributes);
- printf("wMaxPacketSize: %dn", endpoint->wMaxPacketSize);
- printf("bInterval: %dn", endpoint->bInterval);
- printf("bRefresh: %dn", endpoint->bRefresh);
- printf("bSynchAddress: %dn", endpoint->bSynchAddress);
- }
- void print_altsetting(struct usb_interface_descriptor *interface)
- {
- int i;
- printf("n=====Alternate Setting Information====n");
- printf("bInterfaceNumber: %dn", interface->bInterfaceNumber);
- printf("bAlternateSetting: %dn", interface->bAlternateSetting);
- printf("bNumEndpoints: %dn", interface->bNumEndpoints);
- printf("bInterfaceClass: %dn", interface->bInterfaceClass);
- printf("bInterfaceSubClass: %dn", interface->bInterfaceSubClass);
- printf("bInterfaceProtocol: %dn", interface->bInterfaceProtocol);
- printf("iInterface: %dn", interface->iInterface);
- for (i = 0; i < interface->bNumEndpoints; i++)
- print_endpoint(&interface->endpoint[i]);
- }
- void print_interface(struct usb_interface *interface)
- {
- int i;
- for (i = 0; i < interface->num_altsetting; i++)
- print_altsetting(&interface->altsetting[i]);
- }
- void print_configuration(struct usb_config_descriptor *config)
- {
- int i;
- printf("=====Configuration Information====n");
- printf("wTotalLength: %dn", config->wTotalLength);
- printf("bNumInterfaces: %dn", config->bNumInterfaces);
- printf("bConfigurationValue: %dn", config->bConfigurationValue);
- printf("iConfiguration: %dn", config->iConfiguration);
- printf("bmAttributes: %xn", config->bmAttributes);
- printf("MaxPower: %dn", config->MaxPower);
- for (i = 0; i < config->bNumInterfaces; i++)
- print_interface(&config->interface[i]);
- }
- int print_device(struct usb_device *dev)
- {
- usb_dev_handle *udev;
- char str[100];
- int ret, i;
- udev = usb_open(dev);
- if (udev) {
- if (dev->descriptor.iManufacturer) {
- ret = usb_get_string_simple(udev, dev->descriptor.iManufacturer, str, sizeof(str));
- if (ret > 0)
- {
- printf("Manufacturer is %sn",str);
- }
- }
- if (dev->descriptor.iProduct) {
- ret = usb_get_string_simple(udev, dev->descriptor.iProduct, str, sizeof(str));
- if (ret > 0)
- {
- printf("Product is %sn",str);
- }
- }
- }
- if (udev)
- usb_close(udev);
- printf("Possible configurations are %xn",dev->descriptor.bNumConfigurations);
- sleep(2);
- for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
- print_configuration(&dev->config[i]);
- return 0;
- }
- int htod( const char* str )
- {
- int decimal;
- sscanf( str, "%x", &decimal);
- return decimal;
- }
- void set_data(struct usb_device *dev)
- {
- ctrlmsg_param param;
- param.requesttype= 0;
- param.request=0;
- param.value=0;
- param.index=0;
- param.bytes=10;
- param.size=0;
- param.timeout=5000;
- usb_control_msg(dev, param.requesttype, param.request, param.value, param.index, param.bytes, param.size, param.timeout);
- printf("error is %sn",strerror(errno));
- return;
- }
- int main(int argc, char *argv[])
- {
- struct usb_bus *bus;
- struct usb_device *dev;
- if(argc != 3)
- {
- printf("Error in number of argumentsn");
- printf("Usage:./usb_info <vendor id> <product id>n");
- exit(0);
- }
- vendor_id=htod(argv[1]);
- product_id=htod(argv[2]);
- printf("initializing USB libraryn");
- usb_init();
- printf("Finding Buses and Devicesn");
- usb_find_busses();
- usb_find_devices();
- for (bus = usb_get_busses(); bus; bus = bus->next) {
- for (dev = bus->devices; dev; dev = dev->next) {
- if ((dev->descriptor.idProduct == product_id) && (dev->descriptor.idVendor == vendor_id)){
- printf("Found device with produxt id %x and vendor id %xn",product_id,vendor_id);
- print_device(dev);
- set_data(dev);
- print_device(dev);
- }
- }
- }
- return 0;
- }
- bmRequestType = 0x00
- bRequest = 0x00
- wValue = 0x0000
- wIndex = 0x0000
- wSize = 0x0000
- bmRequestType = 0x80
- bRequest = 0x06
- wValue = 0x0001
- wIndex = 0x0000
- wSize = 0x0008
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement