You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

55 lines
2.0 KiB

  1. /***************************************************************************
  2. * Copyright (C) 2009 by Zachary T Welch <zw@superlucidity.net> *
  3. * *
  4. * This program is free software; you can redistribute it and/or modify *
  5. * it under the terms of the GNU General Public License as published by *
  6. * the Free Software Foundation; either version 2 of the License, or *
  7. * (at your option) any later version. *
  8. * *
  9. * This program is distributed in the hope that it will be useful, *
  10. * but WITHOUT ANY WARRANTY; without even the implied warranty of *
  11. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
  12. * GNU General Public License for more details. *
  13. * *
  14. * You should have received a copy of the GNU General Public License *
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>. *
  16. ***************************************************************************/
  17. #ifdef HAVE_CONFIG_H
  18. #include "config.h"
  19. #endif
  20. #include "usb_common.h"
  21. static bool jtag_usb_match(struct usb_device *dev,
  22. const uint16_t vids[], const uint16_t pids[])
  23. {
  24. for (unsigned i = 0; vids[i] && pids[i]; i++) {
  25. if (dev->descriptor.idVendor == vids[i] &&
  26. dev->descriptor.idProduct == pids[i])
  27. return true;
  28. }
  29. return false;
  30. }
  31. int jtag_usb_open(const uint16_t vids[], const uint16_t pids[],
  32. struct usb_dev_handle **out)
  33. {
  34. usb_find_busses();
  35. usb_find_devices();
  36. struct usb_bus *busses = usb_get_busses();
  37. for (struct usb_bus *bus = busses; bus; bus = bus->next) {
  38. for (struct usb_device *dev = bus->devices; dev; dev = dev->next) {
  39. if (!jtag_usb_match(dev, vids, pids))
  40. continue;
  41. *out = usb_open(dev);
  42. if (NULL == *out)
  43. return -errno;
  44. return 0;
  45. }
  46. }
  47. return -ENODEV;
  48. }