Beispiel #1
0
transport_t olimex_open(const char *devpath, const char *requested_serial)
{
	struct olimex_transport *tr = malloc(sizeof(*tr));
	struct usb_device *dev;
	char buf[64];

	if (!tr) {
		pr_error(__FILE__": can't allocate memory");
		return NULL;
	}

	tr->base.destroy = usbtr_destroy;
	tr->base.send = usbtr_send;
	tr->base.recv = usbtr_recv;

	usb_init();
	usb_find_busses();
	usb_find_devices();

	if (devpath) {
		dev = usbutil_find_by_loc(devpath);
	} else {
		dev = usbutil_find_by_id(USB_FET_VENDOR, V1_PRODUCT,
					 requested_serial);
		if (!dev)
			dev = usbutil_find_by_id(USB_FET_VENDOR, V2_PRODUCT,
						 requested_serial);
	}

	if (!dev) {
		free(tr);
		return NULL;
	}

	if (open_device(tr, dev) < 0) {
		printc_err(__FILE__ ": failed to open Olimex device\n");
		return NULL;
	}

	/* Flush out lingering data */
	while (usb_bulk_read(tr->handle, tr->in_ep,
			     buf, sizeof(buf),
			     100) > 0);

	return (transport_t)tr;
}
Beispiel #2
0
transport_t rf2500_open(const char *devpath, const char *requested_serial)
{
	struct rf2500_transport *tr = malloc(sizeof(*tr));
	struct usb_device *dev;
	char buf[64];

	if (!tr) {
		pr_error("rf2500: can't allocate memory");
		return NULL;
	}

	tr->base.destroy = usbtr_destroy;
	tr->base.send = usbtr_send;
	tr->base.recv = usbtr_recv;

	usb_init();
	usb_find_busses();
	usb_find_devices();

	if (devpath)
		dev = usbutil_find_by_loc(devpath);
	else
		dev = usbutil_find_by_id(USB_FET_VENDOR, USB_FET_PRODUCT,
					 requested_serial);

	if (!dev) {
		free(tr);
		return NULL;
	}

	if (open_device(tr, dev) < 0) {
		printc_err("rf2500: failed to open RF2500 device\n");
		return NULL;
	}

	/* Flush out lingering data.
	 *
	 * The timeout apparently doesn't work on OS/X, and this loop
	 * just hangs once the endpoint buffer empties.
	 */
#ifndef __APPLE__
	while (usb_bulk_read(tr->handle, USB_FET_IN_EP,
			     buf, sizeof(buf),
			     100) > 0);
#endif

	return (transport_t)tr;
}
Beispiel #3
0
transport_t cp210x_open(const char *devpath, const char *requested_serial,
			int baud_rate, uint16_t product, uint16_t vendor)
{
	struct cp210x_transport *tr = malloc(sizeof(*tr));
	struct usb_device *dev;

	if (!tr) {
		pr_error(__FILE__": can't allocate memory");
		return NULL;
	}

	tr->base.ops = &cp210x_class;

	usb_init();
	usb_find_busses();
	usb_find_devices();

	if (devpath)
		dev = usbutil_find_by_loc(devpath);
	else
		dev = usbutil_find_by_id(product, vendor, requested_serial);

	if (!dev) {
		free(tr);
		return NULL;
	}

	if (open_device(tr, dev, baud_rate) < 0) {
		printc_err(__FILE__ ": failed to open CP210X device\n");
		free(tr);
		return NULL;
	}

	usbtr_flush(&tr->base);

	return (transport_t)tr;
}
Beispiel #4
0
transport_t bslhid_open(const char *dev_path, const char *requested_serial)
{
	struct bslhid_transport *tr = malloc(sizeof(*tr));
	struct usb_device *dev;

	if (!tr) {
		pr_error("bslhid: can't allocate memory");
		return NULL;
	}

	memset(tr, 0, sizeof(*tr));
	tr->base.ops = &bslhid_transport_class;

	usb_init();
	usb_find_busses();
	usb_find_devices();

	if (dev_path)
		dev = usbutil_find_by_loc(dev_path);
	else
		dev = usbutil_find_by_id(BSLHID_VID, BSLHID_PID,
					 requested_serial);

	if (!dev) {
		free(tr);
		return NULL;
	}

	if (open_device(tr, dev) < 0) {
		printc_err("bslhid: failed to open BSL HID device\n");
		free(tr);
		return NULL;
	}

	bslhid_flush(&tr->base);
	return &tr->base;
}