//---------------------------------------------------------------------------
#ifndef __RTUSBDETECTH__
#define __RTUSBDETECTH__
//---------------------------------------------------------------------------
#include "rtusbapi.h"

// класс для обнаружения модулей от R-Technology
class CRTUSBDETECT : public IRTUSBDETECT
{
	// функции общего назначения
	virtual BOOL WINAPI OpenDevice(WORD VirtualSlot);
	virtual BOOL WINAPI CloseDevice(void);
	virtual HANDLE WINAPI GetModuleHandle(void);
	virtual BOOL WINAPI GetUsbSpeed(BYTE * const UsbSpeed);
	virtual BOOL WINAPI GetModuleName(PCHAR const ModuleName);
	virtual BOOL WINAPI GetModuleSerialNumber(PCHAR const SerialNumber);
	virtual BOOL WINAPI GetAvrVersion(PCHAR const AvrVersion);
	virtual BOOL WINAPI ReleaseInstance(void);

	// функция выдачи строки с последней ошибкой
	virtual int WINAPI GetLastErrorString(LPTSTR const lpBuffer, const DWORD nSize);

	public:
		// коструктор
		CRTUSBDETECT(HINSTANCE hInst);
		// деструктор
		~CRTUSBDETECT();

	private:
		HINSTANCE hInstance;
		// идентификатор устройства
		HANDLE hDevice;
		// критическая секция для потокобезопасной работы
		CRITICAL_SECTION cs;
		// базовый индекс ошибок модуля
		WORD BASE_ERROR_ID;
		// номер последней ошибки
		WORD LastErrorNumber;

		// номера доступных пользовательских запросов для USB (vendor request)
		enum 	{ 	V_RESET_DSP,
					V_PUT_ARRAY, V_GET_ARRAY,
					V_START_ADC, V_START_DAC,
					V_COMMAND_IRQ,
					V_GET_USB_SPEED,
					V_PUT_FLASH = 8, V_GET_FLASH = 9,
					V_GET_MODULE_NAME = 11,
					V_GET_MODULE_SERIAL_NUMBER = 13
				};
};

#endif
