Advertisement
Guest User

Untitled

a guest
Nov 22nd, 2014
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <errno.h>
  4. #include "usb.h"
  5. static int vendor_id;
  6. static int product_id;
  7.  
  8. typedef struct{
  9. int requesttype;
  10. int request;
  11. int value;
  12. int index;
  13. char *bytes;
  14. int size;
  15. int timeout;
  16. }ctrlmsg_param;
  17.  
  18. void print_endpoint(struct usb_endpoint_descriptor *endpoint)
  19. {
  20. printf("=====End point Information====n");
  21. printf("bEndpointAddress: %xn", endpoint->bEndpointAddress);
  22. printf("bmAttributes: %xn", endpoint->bmAttributes);
  23. printf("wMaxPacketSize: %dn", endpoint->wMaxPacketSize);
  24. printf("bInterval: %dn", endpoint->bInterval);
  25. printf("bRefresh: %dn", endpoint->bRefresh);
  26. printf("bSynchAddress: %dn", endpoint->bSynchAddress);
  27. }
  28.  
  29. void print_altsetting(struct usb_interface_descriptor *interface)
  30. {
  31. int i;
  32.  
  33. printf("n=====Alternate Setting Information====n");
  34. printf("bInterfaceNumber: %dn", interface->bInterfaceNumber);
  35. printf("bAlternateSetting: %dn", interface->bAlternateSetting);
  36. printf("bNumEndpoints: %dn", interface->bNumEndpoints);
  37. printf("bInterfaceClass: %dn", interface->bInterfaceClass);
  38. printf("bInterfaceSubClass: %dn", interface->bInterfaceSubClass);
  39. printf("bInterfaceProtocol: %dn", interface->bInterfaceProtocol);
  40. printf("iInterface: %dn", interface->iInterface);
  41.  
  42. for (i = 0; i < interface->bNumEndpoints; i++)
  43. print_endpoint(&interface->endpoint[i]);
  44. }
  45.  
  46. void print_interface(struct usb_interface *interface)
  47. {
  48. int i;
  49.  
  50. for (i = 0; i < interface->num_altsetting; i++)
  51. print_altsetting(&interface->altsetting[i]);
  52. }
  53.  
  54. void print_configuration(struct usb_config_descriptor *config)
  55. {
  56. int i;
  57.  
  58. printf("=====Configuration Information====n");
  59. printf("wTotalLength: %dn", config->wTotalLength);
  60. printf("bNumInterfaces: %dn", config->bNumInterfaces);
  61. printf("bConfigurationValue: %dn", config->bConfigurationValue);
  62. printf("iConfiguration: %dn", config->iConfiguration);
  63. printf("bmAttributes: %xn", config->bmAttributes);
  64. printf("MaxPower: %dn", config->MaxPower);
  65.  
  66. for (i = 0; i < config->bNumInterfaces; i++)
  67. print_interface(&config->interface[i]);
  68. }
  69.  
  70. int print_device(struct usb_device *dev)
  71. {
  72. usb_dev_handle *udev;
  73. char str[100];
  74. int ret, i;
  75. udev = usb_open(dev);
  76. if (udev) {
  77. if (dev->descriptor.iManufacturer) {
  78. ret = usb_get_string_simple(udev, dev->descriptor.iManufacturer, str, sizeof(str));
  79. if (ret > 0)
  80. {
  81. printf("Manufacturer is %sn",str);
  82. }
  83. }
  84. if (dev->descriptor.iProduct) {
  85. ret = usb_get_string_simple(udev, dev->descriptor.iProduct, str, sizeof(str));
  86. if (ret > 0)
  87. {
  88. printf("Product is %sn",str);
  89. }
  90. }
  91.  
  92. }
  93.  
  94. if (udev)
  95. usb_close(udev);
  96. printf("Possible configurations are %xn",dev->descriptor.bNumConfigurations);
  97. sleep(2);
  98. for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
  99. print_configuration(&dev->config[i]);
  100.  
  101. return 0;
  102. }
  103. int htod( const char* str )
  104. {
  105. int decimal;
  106. sscanf( str, "%x", &decimal);
  107. return decimal;
  108. }
  109. void set_data(struct usb_device *dev)
  110. {
  111.  
  112. ctrlmsg_param param;
  113. param.requesttype= 0;
  114. param.request=0;
  115. param.value=0;
  116. param.index=0;
  117. param.bytes=10;
  118. param.size=0;
  119. param.timeout=5000;
  120. usb_control_msg(dev, param.requesttype, param.request, param.value, param.index, param.bytes, param.size, param.timeout);
  121. printf("error is %sn",strerror(errno));
  122. return;
  123.  
  124. }
  125. int main(int argc, char *argv[])
  126. {
  127. struct usb_bus *bus;
  128. struct usb_device *dev;
  129.  
  130. if(argc != 3)
  131. {
  132. printf("Error in number of argumentsn");
  133. printf("Usage:./usb_info <vendor id> <product id>n");
  134. exit(0);
  135. }
  136.  
  137. vendor_id=htod(argv[1]);
  138. product_id=htod(argv[2]);
  139.  
  140. printf("initializing USB libraryn");
  141. usb_init();
  142.  
  143. printf("Finding Buses and Devicesn");
  144. usb_find_busses();
  145. usb_find_devices();
  146.  
  147. for (bus = usb_get_busses(); bus; bus = bus->next) {
  148. for (dev = bus->devices; dev; dev = dev->next) {
  149. if ((dev->descriptor.idProduct == product_id) && (dev->descriptor.idVendor == vendor_id)){
  150. printf("Found device with produxt id %x and vendor id %xn",product_id,vendor_id);
  151. print_device(dev);
  152. set_data(dev);
  153. print_device(dev);
  154. }
  155. }
  156. }
  157. return 0;
  158. }
  159.  
  160. bmRequestType = 0x00
  161. bRequest = 0x00
  162. wValue = 0x0000
  163. wIndex = 0x0000
  164. wSize = 0x0000
  165.  
  166. bmRequestType = 0x80
  167. bRequest = 0x06
  168. wValue = 0x0001
  169. wIndex = 0x0000
  170. wSize = 0x0008
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement