#ifndef AVIC_USB_HPP_INCLUDED
#define AVIC_USB_HPP_INCLUDED

#include <windows.h>

#define AVIC_HID_DEVICE __declspec(dllexport)

// Return Codes
#define HID_DEVICE_SUCCESS					0x00
#define HID_DEVICE_NOT_FOUND				0x01
#define HID_DEVICE_ALREADY_OPENED			0x03
#define HID_DEVICE_HIGH_VOLTAGE_BLOCK_OUT	0x0B

#define MAX_PATH_LENGTH					MAX_PATH

//settings
#define flgSpeedIndex		0x7 << 0
#define flgAutoOffVoltage	1 << 3
#define flgDirrectCurr		1 << 4
#define flgStartAutoMode	1 << 6

//condition
#define DoorIsOpen		1 << 0
#define HightVolt		1 << 1
#define AutoMode		1 << 2
#define MinLATRSensor	1 << 3
#define SignVolt		1 << 4
#define HVCommutator	1 << 5
#define HVBlockOut		1 << 6

struct STRING_AVIC {
	COORD pos;
	LPCSTR text;
};

struct METERAGE { // измеренные аппаратом величины и заданные значения
	BYTE settings;	// заданные режимы аппарата
	BYTE limitVoltAC;		// ограничение переменного напряжения, 1 ед. = 1 кВ
	BYTE limitCurrentAC;	// ограничение переменного тока, 1 ед. = 1 мА
	BYTE limitVoltDC;		// ограничение постоянного напряжения, 1 ед. = 1 кВ
	BYTE limitCurrentDC;	// ограничение постоянного тока, 1 ед. = 1 мА
	BYTE timeSec;	// время, секунды
	BYTE timeMin;	// время, минуты
	BYTE timeHour;	// время, часы
	short int currentAverageFlt;	// средннее значение силы тока, прошедшее через цифровой ФНЧ, 1 ед. = 0,01 мА
	short int voltageAverageFlt;	// средннее значение напряжения, прошедшее через цифровой ФНЧ, 1 ед. = 0,01 кВ
	short int voltageFlt;	// действующее значение напряжения, прошедшее через цифровой ФНЧ, 1 ед. = 0,01 кВ
	short int currentFlt;	// действующее значение силы тока, прошедшее через цифровой ФНЧ, 1 ед. = 0,01 мА
	short int voltageAmplitudeFlt;	//амплитудное значение напряжения, прошедшее через цифровой ФНЧ, 1 ед. = 0,01 кВ
	char voltage[2];	// мгновенное действующее значение напряжения, 1 ед. = 0,01 кВ
//	voltage = (voltage[1] + voltage[0] * 256)
	char current[2];	// мгновенное действующее значение силы тока, 1 ед. = 0,01 мА
//	current = (current[1] + current[0] * 256)
	char defineVolt[2];	// стабилизируемое напряжение, 1 ед. = 0,01 кВ
//	defineVolt = (defineVolt[1] + defineVolt[0] * 256)
	char stepsLATR;		// заданное количество шагов ЛАТРа
	BYTE condition;		// состояние аппарата
};

extern "C" {

AVIC_HID_DEVICE BYTE AVIC_FindDevice();
AVIC_HID_DEVICE BYTE AVIC_GetManufacturerString(char* szManufacturerString, unsigned long sizeString);
AVIC_HID_DEVICE BYTE AVIC_GetDeviceString(char* szBuffer, unsigned long sizeString);
AVIC_HID_DEVICE BYTE AVIC_ReadMeterage(METERAGE* meterage);

}

#endif // AVIC_USB_HPP_INCLUDED
