コード例 #1
0
ファイル: xusb.c プロジェクト: YongHoJang/dahdi-tools
struct xusb *xusb_open_one(const struct xusb_spec *specs, int numspecs, xusb_filter_t filterfunc, void *data)
{
	struct xlist_node	*xusb_list;
	struct xlist_node	*curr;
	int			num;
	struct xusb		*xusb = NULL;

	xusb_list = xusb_find_byproduct(specs, numspecs, filterfunc, data);
	num = xlist_length(xusb_list);
	DBG("total %d devices\n", num);
	switch(num) {
	case 0:
		ERR("No matching device.\n");
		break;
	case 1:
		curr = xlist_shift(xusb_list);
		xusb = curr->data;
		xlist_destroy(curr, NULL);
		xlist_destroy(xusb_list, NULL);
		xusb_claim_interface(xusb);
		xusb_showinfo(xusb);
		break;
	default:
		ERR("Too many devices (%d). Aborting.\n", num);
		break;
	}
	return xusb;
}
コード例 #2
0
ファイル: astribank_usb.c プロジェクト: boylubis/ctsoft
/*
 * USB handling
 */
struct astribank_device *astribank_open(const char devpath[], int iface_num)
{
	struct astribank_device	*astribank = NULL;
	struct xusb		*xusb;

	DBG("devpath='%s' iface_num=%d\n", devpath, iface_num);
	if((astribank = malloc(sizeof(struct astribank_device))) == NULL) {
		ERR("Out of memory\n");
		goto fail;
	}
	memset(astribank, 0, sizeof(*astribank));
	if (iface_num) {
		xusb  = xusb_find_bypath(astribank_specs, ARRAY_SIZE(astribank_specs), devpath);
	} else {
		xusb  = xusb_find_bypath(astribank_pic_specs, ARRAY_SIZE(astribank_pic_specs), devpath);
	}
	if (!xusb) {
		ERR("%s: No device found\n", __func__);
		goto fail;
	}
	astribank->xusb = xusb;
	astribank->is_usb2 = (xusb_packet_size(xusb) == 512);
	astribank->my_interface_num = iface_num;
	if (xusb_claim_interface(astribank->xusb) < 0) {
		ERR("xusb_claim_interface failed\n");
		goto fail;
	}
	astribank->tx_sequenceno = 1;
	return astribank;
fail:
	if (astribank) {
		free(astribank);
		astribank = NULL;
	}
	return NULL;
}