dahdi-tools/xpp/xtalk/include/xtalk/xusb.h

116 lines
4.0 KiB
C

#ifndef XUSB_H
#define XUSB_H
/*
* Written by Oron Peled <oron@actcom.co.il>
* Copyright (C) 2008, Xorcom
*
* All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
*/
#include <stdio.h>
#include <stdint.h>
#include <xtalk/api_defs.h>
#include <xtalk/xlist.h>
#ifdef __cplusplus
extern "C"
{
#endif /* __cplusplus */
/*
* Xorcom usb handling
*/
#define PACKET_SIZE 512
/*
* Specify the wanted device
*/
struct xusb_spec {
char *name; /* For debug/output purpose */
/* What we will actually use */
uint16_t vendor_id;
uint16_t product_id;
};
#define SPEC_HEAD(vendor_id_, product_id_, name_) \
{ \
.name = (name_), \
.vendor_id = (vendor_id_), \
.product_id = (product_id_), \
}
XTALK_API void xusb_init_spec(struct xusb_spec *xusb_spec,
char *name, uint16_t vendor_id, uint16_t product_id);
struct xusb_device;
struct xusb_iface;
/*
* Prototypes
*/
typedef int (*xusb_filter_t)(const struct xusb_device *xusb_device, void *data);
XTALK_API struct xlist_node *xusb_find_byproduct(const struct xusb_spec *specs,
int numspecs, xusb_filter_t filterfunc, void *data);
XTALK_API struct xusb_device *xusb_find_bypath(const char *path);
XTALK_API struct xusb_iface *xusb_open_one(const struct xusb_spec *specs, int numspecs,
int interface_num,
xusb_filter_t filterfunc, void *data);
/*
* A convenience filter
*/
XTALK_API int xusb_filter_bypath(const struct xusb_device *xusb_device, void *data);
/* Device management */
XTALK_API const struct xusb_spec *xusb_spec(const struct xusb_device *xusb_device);
XTALK_API void xusb_destroy(struct xusb_device *xusb_device);
XTALK_API size_t xusb_packet_size(const struct xusb_device *xusb_device);
XTALK_API void xusb_showinfo(const struct xusb_device *xusb_device);
XTALK_API const char *xusb_serial(const struct xusb_device *xusb_device);
XTALK_API const char *xusb_manufacturer(const struct xusb_device *xusb_device);
XTALK_API const char *xusb_product(const struct xusb_device *xusb_device);
XTALK_API uint16_t xusb_bus_num(const struct xusb_device *xusb_device);
XTALK_API uint16_t xusb_device_num(const struct xusb_device *xusb_device);
XTALK_API uint16_t xusb_vendor_id(const struct xusb_device *xusb_device);
XTALK_API uint16_t xusb_product_id(const struct xusb_device *xusb_device);
XTALK_API const char *xusb_devpath(const struct xusb_device *xusb_device);
XTALK_API const struct xusb_spec *xusb_device_spec(const struct xusb_device *xusb_device);
XTALK_API struct xusb_iface *xusb_find_iface(const char *devpath,
int iface_num,
int ep_out,
int ep_in,
struct xusb_spec *dummy_spec);
XTALK_API int xusb_claim(struct xusb_device *xusb_device, unsigned int interface_num,
struct xusb_iface **iface);
XTALK_API void xusb_release(struct xusb_iface *iface);
XTALK_API int xusb_is_claimed(struct xusb_iface *iface);
XTALK_API struct xusb_iface *xusb_interface_of(const struct xusb_device *dev, int num);
XTALK_API struct xusb_device *xusb_deviceof(struct xusb_iface *iface);
XTALK_API const char *xusb_interface_name(const struct xusb_iface *iface);
XTALK_API int xusb_interface_num(const struct xusb_iface *iface);
XTALK_API int xusb_send(struct xusb_iface *iface, const char *buf, int len, int timeout);
XTALK_API int xusb_recv(struct xusb_iface *iface, char *buf, size_t len, int timeout);
XTALK_API int xusb_flushread(struct xusb_iface *iface);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* XUSB_H */