#ifndef __ROGER_USB_HID_H__
#define __ROGER_USB_HID_H__


/********************************************************************************************************************************************************/

/*! 
*	\defgroup groupLibReturn  Flagi zwracane przez funkcje obsługi USB HID
*	\{
*/

#define HID_OK								0x00		/*!< Return OK */
#define HID_ERROR							0x01		/*!< Błąd - nieopisany */
#define HID_DEVICE_NOT_FOUND				0x02		/*!< Nie znaleziono urządzenia HID USB */
#define HID_DEVICE_NOT_HID_DEVICE_STRUCT	0x03		/*!< Brak zbudowanej struktury HID_DEVICE - niewywołano funkcji GetHidDeviceCount() lub zwróciła błąd */
#define HID_DEVICE_CANNOT_OPEN				0x04		/*!< Brak możliwości otwarcia połączenia z urządzeniem USB_HID */
#define HID_DEVICE_WRONG_PATH				0x05		/*!< Niewłaściwa ścieżka dostępu lub zbyt krótki bufor na ścieżkę dostępu*/
#define HID_DEVICE_CANNOT_CLOSE				0x06		/*!< Brak mozliwości zamknięcia połączenia lub nie właściwy uchwyt */
#define HID_DEVICE_INVALID_BUFFER_SIZE		0x07		/*!< Błędna długość bufora */
#define HID_DEVICE_WRITE_FAILED				0x08		/*!< Błąd zapisu do HID USB */
#define HID_DEVICE_READ_FAILED				0x09		/*!< Błąd odczytu z HID USB */
#define HID_DEVICE_WRONG_RAPORT_ID			0x0A		/*!< Błędny numer raport ID odczytany z numerem raport ID oczekiwanym */
#define HID_DEVICE_TIMEOUT					0x0B		/*!< Błąd timeout - nie wysłano w odpowiednim czasie */
/*!
*	\}
*/

/********************************************************************************************************************************************************/

#ifndef ROGER_USB_HID_DLL
	#define		USBHID_ATTRIBUTE  __declspec(dllimport)	
#else
	#define		USBHID_ATTRIBUTE  __declspec(dllexport)	
#endif

typedef  DWORD HIDUSBRETURN;								/*!< Type zwracany przez biblotekę */	

#define	 HIDUSBCALLING	  	__stdcall					


/********************************************************************************************************************************************************/
extern "C"
{

USBHID_ATTRIBUTE  HIDUSBRETURN HIDUSBCALLING
						GetHidUsbLibVer( 
										__out LPTSTR,
										__in size_t
										);

USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						GetHidUsbDeviceCount(
										__in USHORT, 
										__in USHORT
										);

USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						GetHidUsbDeviceAtribute(
										__in DWORD,
										__in USHORT,
										__in USHORT,
										__out PUSHORT,
										__out PUSHORT,
										__out PUSHORT
										);

USBHID_ATTRIBUTE HIDUSBRETURN  HIDUSBCALLING
						GetHidUsbDeviceManufacturer(
										__in DWORD,
										__in USHORT,
										__in USHORT,
										__out LPSTR,
										__in ULONG
										);

USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						GetHidUsbDeviceProduct(
										__in DWORD,
										__in USHORT,
										__in USHORT,
										__out LPSTR,
										__in ULONG
										);

USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						GetHidUsbDeviceSerialNumber(
										__in DWORD,
										__in USHORT,
										__in USHORT,
										__out LPSTR,
										__in ULONG
										);

USBHID_ATTRIBUTE HIDUSBRETURN  HIDUSBCALLING
						GetHidUsbDevicePath(
										__in DWORD,
										__in USHORT,
										__in USHORT,
										__out LPTSTR,
										__in ULONG
										);

USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						HidUsbOpenDevice(
										__out PHANDLE,
										__in DWORD,
										__in USHORT,
										__in USHORT,
										__in LPSTR
										);

USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						HidUsbCloseDevice(
										__inout PHANDLE
										);

USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						HidUsbWrite(
										__in PHANDLE,
										__in PBYTE,
										__in DWORD,
										__in BYTE,
										__in LPDWORD,
										__in DWORD
										);


USBHID_ATTRIBUTE HIDUSBRETURN HIDUSBCALLING
						HidUsbRead(
										__in PHANDLE,
										__in PBYTE,
										__in DWORD,
										__in BYTE,
										__in LPDWORD,
										__in DWORD
										);

}
#endif