// Поддерживаемые типы устройств
#define KD1610	0	// ADC 16/200
#define KD216	1	// APC 216
#define KD500	2	// ADC 16/500
#define KD500P	3	// ADC 16/500P
#define KD816	4	// ADC 816
#define KD1002	5	// ADC 1002
#define KDU216	6	// APC 216 USB
#define KD24	7	// ADC 24
#define KD1432	8	// ADC 1432
#define KDUACPB	9	// ACPB USB
#define KDU1616	10	// ADC 1616 USB
#define KDUPD14	11	// PD14 USB
#define KDUVN	12
#define KDUOSC	13

//Все функции возвращают код ошибки. 0 - нет ошибки, иначе - код ошибки

// ------------- Общие функции -------------
// подключиться к драйверу
long WINAPI ZOpen(long typeDevice, long numberDSP);
// отключиться от драйвера
long WINAPI ZClose(long typeDevice, long numberDSP);

// сброс и останов сигнальных процессоров (влияет на все DSP одного устройства)
long WINAPI ZResetDSP(long typeDevice, long numberDSP);
// проинициализировать сигнальный процессор
long WINAPI ZInitDSP(long typeDevice, long numberDSP, const char *fileName);
// получить версии ПО
long WINAPI ZGetVersion(long typeDevice, long numberDSP, char *verDSP, char *verDRV, char *verLIB);
// прочитать код ошибки
long WINAPI ZGetError(long typeDevice, long numberDSP, long *error);
// определить кол-во изменений параметров с момента загрузки
long WINAPI ZGetModify(long typeDevice, long numberDSP, long *modify);

// прочитать флаг - количество прерываний с момента ZStartADC()
long WINAPI ZGetFlag(long typeDevice, long numberDSP, unsigned long *flag);

// прочитать статус синхронизации по внешней частоте
long WINAPI ZGetEnableExtFreq(long typeDevice, long numberDSP, long *enable);
// вкл./выкл. синхронизации по внешней частоте
long WINAPI ZSetEnableExtFreq(long typeDevice, long numberDSP, long enable);
// прочитать статус внешнего запуска
long WINAPI ZGetEnableExtStart(long typeDevice, long numberDSP, long *enable);
// вкл./выкл. внешнего запуска
long WINAPI ZSetEnableExtStart(long typeDevice, long numberDSP, long enable);

// Запросить маску выходов порта
long WINAPI ZGetDigOutEnable(long typeDevice, long numberDSP, unsigned long *digitalOutEnableMask);
// Установить маску выходов порта
long WINAPI ZSetDigOutEnable(long typeDevice, long numberDSP, unsigned long digitalOutEnableMask);
// Прочитать данные со входов порта
long WINAPI ZGetDigInput(long typeDevice, long numberDSP, unsigned long *digitalInput);
// Прочитать данные, выдаваемые на выходы порта
long WINAPI ZGetDigOutput(long typeDevice, long numberDSP, unsigned long *digitalOutput);
// Записать данные в порт
long WINAPI ZSetDigOutput(long typeDevice, long numberDSP, unsigned long digitalOutput);


// ------------- Парные функции для работы с АЦП или ЦАП -------------
// поддержка АЦП в текущем режиме DSP
long WINAPI ZGetEnableADC(long typeDevice, long numberDSP, long *enable);
// поддержка ЦАП в текущем режиме DSP
long WINAPI ZGetEnableDAC(long typeDevice, long numberDSP, long *enable);
// установить сигнальный процессор в режим АЦП/ЦАП
long WINAPI ZSetTypeADC(long typeDevice, long numberDSP);
long WINAPI ZSetTypeDAC(long typeDevice, long numberDSP);
// чтение в каком состоянии находится АЦП/ЦАП
long WINAPI ZGetStartADC(long typeDevice, long numberDSP, long *status);
long WINAPI ZGetStartDAC(long typeDevice, long numberDSP, long *status);
// запуск процедуры ввода/вывода сигнала
long WINAPI ZStartADC(long typeDevice, long numberDSP);
long WINAPI ZStartDAC(long typeDevice, long numberDSP);
// останов процедуры ввода/вывода
long WINAPI ZStopADC(long typeDevice, long numberDSP);
long WINAPI ZStopDAC(long typeDevice, long numberDSP);

// прочитать кол-во каналов АЦП/ЦАП
long WINAPI ZGetQuantityChannelADC(long typeDevice, long numberDSP, long *quantityChannel);
long WINAPI ZGetQuantityChannelDAC(long typeDevice, long numberDSP, long *quantityChannel);
// прочитать вес младшего разряда АЦП/ЦАП
long WINAPI ZGetDigitalResolutionADC(long typeDevice, long numberDSP, double *digitalResolution);
long WINAPI ZGetDigitalResolutionDAC(long typeDevice, long numberDSP, double *digitalResolution);
// прочитать кол-во бит в одном отсчете АЦП/ЦАП
long WINAPI ZGetBitsADC(long typeDevice, long numberDSP, long *numberBits);
long WINAPI ZGetBitsDAC(long typeDevice, long numberDSP, long *numberBits);
// прочитать кол-во слов в одном отсчете АЦП/ЦАП
long WINAPI ZGetWordsADC(long typeDevice, long numberDSP, long *numberWords);
long WINAPI ZGetWordsDAC(long typeDevice, long numberDSP, long *numberWords);

// прочитать частоту дискретизации 
long WINAPI ZGetFreqADC(long typeDevice, long numberDSP, double *freq);
long WINAPI ZGetFreqDAC(long typeDevice, long numberDSP, double *freq);
// прочитать частоту из списка возможных частот дискретизации 
long WINAPI ZGetListFreqADC(long typeDevice, long numberDSP, long next, double *freq);
long WINAPI ZGetListFreqDAC(long typeDevice, long numberDSP, long next, double *freq);
// установить следующую из списка частоту дискретизации 
long WINAPI ZSetNextFreqADC(long typeDevice, long numberDSP, long next, double *freq);
long WINAPI ZSetNextFreqDAC(long typeDevice, long numberDSP, long next, double *freq);
// установить частоту дискретизации
long WINAPI ZSetFreqADC(long typeDevice, long numberDSP, double freqIn, double *freqOut);
long WINAPI ZSetFreqDAC(long typeDevice, long numberDSP, double freqIn, double *freqOut);

// прочитать значение текущей опорной частоты
long WINAPI ZGetExtFreqADC(long typeDevice, long numberDSP, double *oporFreq);
long WINAPI ZGetExtFreqDAC(long typeDevice, long numberDSP, double *oporFreq);
// установить значение внешней опорной частоты
long WINAPI ZSetExtFreqADC(long typeDevice, long numberDSP, double extFreq);
long WINAPI ZSetExtFreqDAC(long typeDevice, long numberDSP, double extFreq);

// определить установленный размер буфера при прерывании
long WINAPI ZGetInterruptADC(long typeDevice, long numberDSP, long *size);
long WINAPI ZGetInterruptDAC(long typeDevice, long numberDSP, long *size);
// определить макс. возможный размер буфера при прерывании
long WINAPI ZGetMaxInterruptADC(long typeDevice, long numberDSP, long *size);
long WINAPI ZGetMaxInterruptDAC(long typeDevice, long numberDSP, long *size);
// установить размер буфера для перекачки при прерывании
long WINAPI ZSetInterruptADC(long typeDevice, long numberDSP, long size);
long WINAPI ZSetInterruptDAC(long typeDevice, long numberDSP, long size);

// установить однократное или циклическое накопление в буфер ОЗУ ПК 
long WINAPI ZSetCycleSampleADC(long typeDevice, long numberDSP, long enable);
long WINAPI ZSetCycleSampleDAC(long typeDevice, long numberDSP, long enable);

// задать размер буфера АЦП в ОЗУ ПК
long WINAPI ZSetBufferSizeADC(long typeDevice, long numberDSP, long size);
long WINAPI ZSetBufferSizeDAC(long typeDevice, long numberDSP, long size);
// запросить буфер в ОЗУ ПК
long WINAPI ZGetBufferADC(long typeDevice, long numberDSP, void **buffer, long *size);
long WINAPI ZGetBufferDAC(long typeDevice, long numberDSP, void **buffer, long *size);
// освободить буфер в ОЗУ ПК
long WINAPI ZRemBufferADC(long typeDevice, long numberDSP, void **buffer);
long WINAPI ZRemBufferDAC(long typeDevice, long numberDSP, void **buffer);
// чтение указателя буфера в ОЗУ ПК
long WINAPI ZGetPointerADC(long typeDevice, long numberDSP, long *pointer);
long WINAPI ZGetPointerDAC(long typeDevice, long numberDSP, long *pointer);

// опрос количества включенных каналов
long WINAPI ZGetNumberInputADC(long typeDevice, long numberDSP, long *workChannels);
long WINAPI ZGetNumberOutputDAC(long typeDevice, long numberDSP, long *workChannels);
// опрос включен ли заданный канал
long WINAPI ZGetInputADC(long typeDevice, long numberDSP, long numberChannel, long *enable);
long WINAPI ZGetOutputDAC(long typeDevice, long numberDSP, long numberChannel, long *enable);
// включить/выключить заданный канал
long WINAPI ZSetInputADC(long typeDevice, long numberDSP, long numberChannel, long enable);
long WINAPI ZSetOutputDAC(long typeDevice, long numberDSP, long numberChannel, long enable);


// ------------- Функции для работы только с АЦП -------------
// получить оставшиеся данные АЦП
long WINAPI ZGetLastDataADC(long typeDevice, long numberDSP, long numberChannel, void *buffer, long size);

// прочитать коэф. усиления
long WINAPI ZGetAmplifyADC(long typeDevice, long numberDSP, long numberChannel, double *amplify);
// прочитать коэф. усиления из списка возможных коэф. усиления
long WINAPI ZGetListAmplifyADC(long typeDevice, long numberDSP, long next, double *amplify);
// установить следующий коэф. усиления
long WINAPI ZSetNextAmplifyADC(long typeDevice, long numberDSP, long numberChannel, long next, double *amplify);
// установить коэф. усиления
long WINAPI ZSetAmplifyADC(long typeDevice, long numberDSP, long numberChannel, double amplifyIn, double *amplifyOut);

// прочитать коэф. усиления ПУ8/10
long WINAPI ZGetPreAmplifyADC(long typeDevice, long numberDSP, long numberChannel, double *amplify);
// прочитать коэф. усиления из списка возможных коэф. усиления ПУ8/10
long WINAPI ZGetListPreAmplifyADC(long typeDevice, long numberDSP, long next, double *amplify);
// установить следующий коэф. усиления ПУ8/10
long WINAPI ZSetNextPreAmplifyADC(long typeDevice, long numberDSP, long numberChannel, long next, double *amplify);
// установить коэф. усиления ПУ8/10
long WINAPI ZSetPreAmplifyADC(long typeDevice, long numberDSP, long numberChannel, double amplifyIn, double *amplifyOut);

// проверить поддерживается и подключен ли модуль HCP
long WINAPI ZFindHCPADC(long typeDevice, long numberDSP, long *present);
// прочитать о состоянии заданного канала модуля HCP
long WINAPI ZGetHCPADC(long typeDevice, long numberDSP, long numberChannel, long *enable);
// установить состояние заданного канала модуля HCP
long WINAPI ZSetHCPADC(long typeDevice, long numberDSP, long numberChannel, long enable);

// опрос дифференциального режима заданного канала для ввода 
long WINAPI ZGetInputDiffADC(long typeDevice, long numberDSP, long numberChannel, long *enable);
// установить-сбросить заданный канал для ввода в дифференциальный режим
long WINAPI ZSetInputDiffADC(long typeDevice, long numberDSP, long numberChannel, long enable);


// ------------- Функции для работы только с ЦАП -------------
// установить внешнюю (из памяти ПК) или внутреннюю (только из памяти DSP) загрузку в ЦАП
long WINAPI ZSetExtCycleDAC(long typeDevice, long numberDSP, long enable);

// прочитать коф. затухания аттенюатора
long WINAPI ZGetAttenDAC(long typeDevice, long numberDSP, long numberChannel, double *reduction);
// установить коф. затухания аттенюатора
long WINAPI ZSetAttenDAC(long typeDevice, long numberDSP, long numberChannel, double reductionIn, double *reductionOut);




