//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
//---------------------------------------------------------------------------
#define DEV_NUM 10		// максимальное количество девайсов
//---------------------------------------------------------------------------
BOOL	Running;					// показывает, что какое-то устройство подключено
BYTE	*InReport;					// буфер для приёма репорта IN (из устройства)
BYTE	*OutReport;					// буфер для отправки репорта OUT (в устройство)
BYTE	*FeatureReport;				// буфер для отправки репорта FEATURE (управляющая команда в устройство, точке EP0)
int		InReportSz;					// размер репорта In подключенного устройства
int		OutReportSz;                // размер репорта Out подключенного устройства
int		FeatureReportSz;			// размер репорта Feature подключенного устройства
//---------------------------------------------------------------------------
//***************************************************************************
//---------------------------------------------------------------------------
int                                DevCount;									// количество найденных девайсов
int                                DevSelected;									// выбранный девайс
PSP_DEVICE_INTERFACE_DETAIL_DATA   DevDetailData[DEV_NUM];						// детальные данных об интерфейсах (пути к найденным устройствам)
int                                DevDetailDataSz[DEV_NUM];					// размеры структур с детальными данными об интерфейсах (длины путей)
int                                DevInputReportSz[DEV_NUM];					// размеры репортов IN найденных девайсов
int                                DevOutputReportSz[DEV_NUM];					// размеры репортов OUT найденных девайсов
int                                DevFeatureReportSz[DEV_NUM];					// размеры репортов FEATURE найденных девайсов
HANDLE                             DevHandle;									// указатель на открытый девайс
OVERLAPPED                         DevWriteOverlapped;							// структура для операций асинхронного вывода
OVERLAPPED                         DevReadOverlapped;							// структура для операций асинхронного ввода
BOOL                               DevReadPending;								// флаг ожидания данных при запуске операции чтения
//---------------------------------------------------------------------------
void	HID_Init();							// обнуление количества найденных устройств, отмена выбора устройства, сброс всех указателей
											// на структуры, предназначенные для хранения путей к устройствам
void	HID_UnInit();						// очищение памяти всех структур, предназначенных для хранения путей к устройствам
int		HID_FindDevices();	  				// поиск всех подключенных hid-устройств
BOOL	HID_Open(int);						// открытие нужного девайса
void	HID_Close();						// закрытие нужного девайса
BOOL	HID_Write(BYTE*, DWORD, DWORD*);	// отправка данных устройству
BOOL	HID_Read(BYTE*, DWORD, DWORD*);		// чтение данных из устройства
void	OnInput();							// обработка прочитанных данных
void	OnError();						   	// действия при ошибке во время чтения / записи
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published:	// IDE-managed Components
	TMainMenu *MainMenu1;
	TMenuItem *File1;
	TMenuItem *Exit1;
	TPanel *Panel1;
	TGroupBox *GroupBox1;
	TRichEdit *RichEdit1;
	TButton *Button2;
	TButton *Button1;
	TLabel *Label1;
	TComboBox *ComboBox1;
	TButton *Button3;
	TButton *Button4;
	TEdit *Edit1;
	TLabel *Label2;
	TButton *Button5;
	TButton *Button6;
	TTimer *Timer1;
	void __fastcall Button1Click(TObject *Sender);
	void __fastcall Exit1Click(TObject *Sender);
	void __fastcall Button2Click(TObject *Sender);
	void __fastcall Button4Click(TObject *Sender);
	void __fastcall ComboBox1Change(TObject *Sender);
	void __fastcall Button3Click(TObject *Sender);
	void __fastcall Button5Click(TObject *Sender);
	void __fastcall Edit1KeyPress(TObject *Sender, wchar_t &Key);
	void __fastcall Edit1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift);
	void __fastcall Timer1Timer(TObject *Sender);
private:	// User declarations
public:		// User declarations
	__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif
