Blame libusb/os/haiku_usb.h

Packit Service b0a153
/*
Packit Service b0a153
 * Haiku Backend for libusb
Packit Service b0a153
 * Copyright © 2014 Akshay Jaggi <akshay1994.leo@gmail.com>
Packit Service b0a153
 *
Packit Service b0a153
 * This library is free software; you can redistribute it and/or
Packit Service b0a153
 * modify it under the terms of the GNU Lesser General Public
Packit Service b0a153
 * License as published by the Free Software Foundation; either
Packit Service b0a153
 * version 2.1 of the License, or (at your option) any later version.
Packit Service b0a153
 *
Packit Service b0a153
 * This library is distributed in the hope that it will be useful,
Packit Service b0a153
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service b0a153
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service b0a153
 * Lesser General Public License for more details.
Packit Service b0a153
 *
Packit Service b0a153
 * You should have received a copy of the GNU Lesser General Public
Packit Service b0a153
 * License along with this library; if not, write to the Free Software
Packit Service b0a153
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Packit Service b0a153
 */
Packit Service b0a153
Packit Service b0a153
#include <List.h>
Packit Service b0a153
#include <Locker.h>
Packit Service b0a153
#include <Autolock.h>
Packit Service b0a153
#include <USBKit.h>
Packit Service b0a153
#include <map>
Packit Service b0a153
#include "libusbi.h"
Packit Service b0a153
#include "haiku_usb_raw.h"
Packit Service b0a153
Packit Service b0a153
using namespace std;
Packit Service b0a153
Packit Service b0a153
class USBDevice;
Packit Service b0a153
class USBDeviceHandle;
Packit Service b0a153
class USBTransfer;
Packit Service b0a153
Packit Service b0a153
class USBDevice {
Packit Service b0a153
public:
Packit Service b0a153
						USBDevice(const char *);
Packit Service b0a153
	virtual					~USBDevice();
Packit Service b0a153
	const char*				Location() const;
Packit Service b0a153
	uint8					CountConfigurations() const;
Packit Service b0a153
	const usb_device_descriptor*		Descriptor() const;
Packit Service b0a153
	const usb_configuration_descriptor*	ConfigurationDescriptor(uint32) const;
Packit Service b0a153
	const usb_configuration_descriptor*	ActiveConfiguration() const;
Packit Service b0a153
	uint8					EndpointToIndex(uint8) const;
Packit Service b0a153
	uint8					EndpointToInterface(uint8) const;
Packit Service b0a153
	int					ClaimInterface(int);
Packit Service b0a153
	int					ReleaseInterface(int);
Packit Service b0a153
	int					CheckInterfacesFree(int);
Packit Service b0a153
	int					SetActiveConfiguration(int);
Packit Service b0a153
	int					ActiveConfigurationIndex() const;
Packit Service b0a153
	bool					InitCheck();
Packit Service b0a153
private:
Packit Service b0a153
	int					Initialise();
Packit Service b0a153
	unsigned int				fClaimedInterfaces;	// Max Interfaces can be 32. Using a bitmask
Packit Service b0a153
	usb_device_descriptor			fDeviceDescriptor;
Packit Service b0a153
	unsigned char**				fConfigurationDescriptors;
Packit Service b0a153
	int					fActiveConfiguration;
Packit Service b0a153
	char*					fPath;
Packit Service b0a153
	map<uint8,uint8>			fConfigToIndex;
Packit Service b0a153
	map<uint8,uint8>*			fEndpointToIndex;
Packit Service b0a153
	map<uint8,uint8>*			fEndpointToInterface;
Packit Service b0a153
	bool					fInitCheck;
Packit Service b0a153
};
Packit Service b0a153
Packit Service b0a153
class USBDeviceHandle {
Packit Service b0a153
public:
Packit Service b0a153
				USBDeviceHandle(USBDevice *dev);
Packit Service b0a153
	virtual			~USBDeviceHandle();
Packit Service b0a153
	int			ClaimInterface(int);
Packit Service b0a153
	int			ReleaseInterface(int);
Packit Service b0a153
	int			SetConfiguration(int);
Packit Service b0a153
	int			SetAltSetting(int, int);
Packit Service b0a153
	int			ClearHalt(int);
Packit Service b0a153
	status_t		SubmitTransfer(struct usbi_transfer *);
Packit Service b0a153
	status_t		CancelTransfer(USBTransfer *);
Packit Service b0a153
	bool			InitCheck();
Packit Service b0a153
private:
Packit Service b0a153
	int			fRawFD;
Packit Service b0a153
	static status_t		TransfersThread(void *);
Packit Service b0a153
	void			TransfersWorker();
Packit Service b0a153
	USBDevice*		fUSBDevice;
Packit Service b0a153
	unsigned int		fClaimedInterfaces;
Packit Service b0a153
	BList			fTransfers;
Packit Service b0a153
	BLocker			fTransfersLock;
Packit Service b0a153
	sem_id			fTransfersSem;
Packit Service b0a153
	thread_id		fTransfersThread;
Packit Service b0a153
	bool			fInitCheck;
Packit Service b0a153
};
Packit Service b0a153
Packit Service b0a153
class USBTransfer {
Packit Service b0a153
public:
Packit Service b0a153
					USBTransfer(struct usbi_transfer *, USBDevice *);
Packit Service b0a153
	virtual				~USBTransfer();
Packit Service b0a153
	void				Do(int);
Packit Service b0a153
	struct usbi_transfer*		UsbiTransfer();
Packit Service b0a153
	void				SetCancelled();
Packit Service b0a153
	bool				IsCancelled();
Packit Service b0a153
private:
Packit Service b0a153
	struct usbi_transfer*		fUsbiTransfer;
Packit Service b0a153
	struct libusb_transfer*		fLibusbTransfer;
Packit Service b0a153
	USBDevice*			fUSBDevice;
Packit Service b0a153
	BLocker				fStatusLock;
Packit Service b0a153
	bool				fCancelled;
Packit Service b0a153
};
Packit Service b0a153
Packit Service b0a153
class USBRoster {
Packit Service b0a153
public:
Packit Service b0a153
			USBRoster();
Packit Service b0a153
	virtual		~USBRoster();
Packit Service b0a153
	int		Start();
Packit Service b0a153
	void		Stop();
Packit Service b0a153
private:
Packit Service b0a153
	void*		fLooper;
Packit Service b0a153
};