Files
kamil_adc/x502api.h
2026-04-07 17:22:17 +03:00

3130 lines
153 KiB
C

#ifndef X502API_H
#define X502API_H
#include "lcard_pstdint.h"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _WIN32
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include "Windows.h"
#define X502_EXPORT(type) type APIENTRY
#else
#ifndef APIENTRY
#define APIENTRY
#endif
#if __GNUC__ >= 4
#define X502_EXPORT(type) __attribute__ ((visibility("default"))) type
#else
#define X502_EXPORT(type) type
#endif
#endif
/***************************************************************************//**
@addtogroup const_list Êîíñòàíòû è ïåðå÷èñëåíèÿ
@{
*****************************************************************************/
#define E502_DEVICE_NAME "E502"
#define L502_DEVICE_NAME "L502"
#define E16_DEVICE_NAME "E16"
#define LTA37_DEVICE_NAME "LTA37"
#define LTA11_DEVICE_NAME "LTA11"
/** Ìàêñèìàëüíîå êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ â òàáëèöå */
#define X502_LTABLE_MAX_CH_CNT 256
/** Ìàêñèìàëüíîå êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ â òàáëèöå äëÿ E16 */
#define E16_LTABLE_MAX_CH_CNT 128
/** Êîëè÷åñòâî äèàïàçîíîâ äëÿ èçìåðåíèÿ íàïðÿæåíèé */
#define X502_ADC_RANGE_CNT 6
#define E16_ADC_RANGE_CNT 4
#define LTA11_ADC_RANGE_CNT 4
/** Êîëè÷åñòâî êàíàëîâ ÀÖÏ â ðåæèìå ñ îáùåé çåìëåé */
#define X502_ADC_COMM_CH_CNT 32
/** Êîëè÷åñòâî êàíàëîâ ÀÖÏ â äèôôåðåíöèàëüíîì ðåæèìå */
#define X502_ADC_DIFF_CH_CNT 16
/** Ìàêñèìàëüíîå çíà÷åíèå äëÿ àïïàðàòíîãî óñðåäíåíèÿ ïî ëîãè÷åñêîìó êàíàëó */
#define X502_LCH_AVG_SIZE_MAX 128
/** Ìàêñèìàëüíîå çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ÀÖÏ */
#define X502_ADC_FREQ_DIV_MAX (1024*1024)
/** Ìàêñèìàëüíîå çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ÀÖÏ
*äëÿ ìîäóëÿ E16 ïî îòíîøåíèþ ê îïîðíîé ÷àñòîòå E16_REF_FREQ_48000KHZ */
#define E16_ADC_FREQ_DIV_MAX (0x800000)
#define LTA11_ADC_FREQ_DIV_MAX (0x800000)
/** Ìàêñèìàëüíîå çíà÷åíèå äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî öèôðîâîãî ââîäà */
#define X502_DIN_FREQ_DIV_MAX (1024*1024)
/** Ìàêñèìàëüíîå çíà÷åíèå äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî öèôðîâîãî ââîäà
*äëÿ ìîäóëÿ E16 ïî îòíîøåíèþ ê îïîðíîé ÷àñòîòå E16_REF_FREQ_48000KHZ */
#define E16_DIN_FREQ_DIV_MAX (0x800000)
#define LTA37_DIN_FREQ_DIV_MAX 64
/** Çíà÷åíèÿ ÷àñòîòû ÀÖÏ ïî óìîë÷àíèþ,
* èñïîëüçóåòñÿ â ôóíêöèè X502_SetAdcFreq è X502_CalcAdcFreq2 åñëè ïàðàìåòð f_acq = 0 */
#define E16_ADC_FREQ_DEFAULT 500000
#define LTA11_ADC_FREQ_DEFAULT 500000
#define LTA11_MAX_ADC_FREQ 1000000
/** Çíà÷åíèÿ ÷àñòîòû öèôðîâîãî âõîäà DIN ïî óìîë÷àíèþ,
* èñïîëüçóåòñÿ â ôóíêöèè X502_SetDinFreq è X502_CalcDinFreq2 åñëè ïàðàìåòð f_din = 0 */
#define E16_DIN_FREQ_DEFAULT 500000
/** Çíà÷åíèÿ ÷àñòîòû ÖÀÏ è öèôðîâûõ âûõîäîâ ïî óìîë÷àíèþ,
* èñïîëüçóåòñÿ â ôóíêöèè X502_SetOutFreq è X502_CalcOutFreq2 åñëè ïàðàìåòð f_dout = 0 */
#define E16_OUT_FREQ_DEFAULT 500000
/** Ìèíèìàëüíîå çíà÷åíèå äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî âûâîäà */
#define X502_OUT_FREQ_DIV_MIN 2
/** Ìàêñèìàëüíîå çíà÷åíèå äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî âûâîäà */
#define X502_OUT_FREQ_DIV_MAX 1024
/** Ìàêñèìàëüíîå çíà÷åíèå äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî âûâîäà
*äëÿ ìîäóëÿ E16 ïî îòíîøåíèþ ê îïîðíîé ÷àñòîòå E16_REF_FREQ_48000KHZ */
#define E16_OUT_FREQ_DIV_MAX 0x8000
/** Çíà÷åíèå äåëèòåëÿ ÷àñòîòû âûâîäà ïî óìîë÷àíèþ (êîòîðîå òàêæå âñåãäà
èñïîëüçóåòñÿ â L-502 ñ âåðñèåé ïðîøèâêè ÏËÈÑ íèæå 0.5) */
#define X502_OUT_FREQ_DIV_DEFAULT 2
/** Ìèíèìàëüíîå çíà÷åíèå äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî âûâîäà
ïðè âíåøíåé îïîðíîé ÷àñòîòå íèæå #X502_OUT_FREQ_REF_LF_VAL */
#define X502_OUT_FREQ_DIV_MIN_REF_LF 1
/** Çíà÷åíèå âíåøíåé îïîðíîé ÷àñòîòû, íèæå êîòîðîé ðàçðåøåíî óñòàíàâëèâàòü
çíà÷åíèå äåëèòåëÿ ÷àñòîòû ãåíåðàöèè äî #X502_OUT_FREQ_DIV_MIN_REF_LF */
#define X502_OUT_FREQ_REF_LF_VAL 700000
/** Ìàêñèìàëüíîå çíà÷åíèå ìåæêàäðîâîé çàäåðæêè äëÿ ÀÖÏ */
#define X502_ADC_INTERFRAME_DELAY_MAX (0x1FFFFF)
/** Ìàêñèìàëüíîå çíà÷åíèå ìåæêàäðîâîé çàäåðæêè äëÿ ÀÖÏ E16*/
#define E16_ADC_INTERFRAME_DELAY_MAX (0xFFFF)
/** Òàéìàóò ïî óìîë÷àíèþ äëÿ âûïîëíåíèÿ êîìàíäû ê BlackFin*/
#define X502_BF_CMD_DEFAULT_TOUT 500
/** Êîä ÀÖÏ, ñîîòâåòñòâóþùèé ìàêñèìàëüíîìó çíà÷åíèþ øêàëû */
#define X502_ADC_SCALE_CODE_MAX 6000000
/** Êîä ÀÖÏ, ñîîòâåòñòâóþùèé ìàêñèìàëüíîìó çíà÷åíèþ øêàëû */
#define E16_ADC_SCALE_CODE_MAX (0x80 * 0x7fff)
/** Êîä ÀÖÏ, ñîîòâåòñòâóþùèé ìàêñèìàëüíîìó çíà÷åíèþ øêàëû */
#ifndef LTA11_ADC_SCALE_CODE_MAX
#define LTA11_ADC_SCALE_CODE_MAX (0x80 * 0x7fff)
#endif
/** Êîä ÖÀÏ, ñîîòâåòñòâóþùèé ìàêñèìàëüíîìó çíà÷åíèþ øêàëû */
#define X502_DAC_SCALE_CODE_MAX 30000
#define E16_DAC_SCALE_CODE_MAX 0x7fff
#define LTA37_DAC_SCALE_CODE_MAX 0x650000
/** Ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ â ñòðîêå ñ íàçâàíèåì óñòðîéñòâà */
#define X502_DEVNAME_SIZE 32
/** Ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ â ñòðîêå ñ ñåðèéíûì íîìåðîì */
#define X502_SERIAL_SIZE 32
/** Ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ â ñòðîêå ñ èäåíòèôèêàòîðîì board implementation */
#define X502_IMPLEMENTATION_SIZE 16
/** Ìàêñèìàëüíîå êîëè÷åñòâî ñèìâîëîâ â ñòðîêå ñ îïèñàíèåì ïîäêëþ÷åíèÿ */
#define X502_LOCATION_STR_SIZE 64
/** Ðàçìåð MAC-àäðåñà äëÿ Ethernet èíòåðôåéñà */
#define X502_MAC_ADDR_SIZE 6
/** Ðàçìåð ñòðîêè ñ îïèñàíèåì ýêçåìïëÿðà óñòðîéñòâà */
#define X502_INSTANCE_NAME_SIZE 64
/** Ìàêñèìàëüíûé ðàçìåð ñòðîêè ñ ïàðîëåì íà íàñòðîéêè */
#define X502_PASSWORD_SIZE 32
/** Ìàêñèìàëüíî âîçìîæíîå çíà÷åíèå âíåøíåé îïîðíîé ÷àñòîòû */
#define X502_EXT_REF_FREQ_MAX 1500000
/** Ìàêñèìàëüíî âîçìîæíîå çíà÷åíèå âíåøíåé îïîðíîé ÷àñòîòû äëÿ E502-P1 */
#define E502_P1_EXT_REF_FREQ_MAX 2000000
/** Ðàçìåð ïîëüçîâàòåëüñêîé îáëàñòè Flash-ïàìÿòè */
#define X502_FLASH_USER_SIZE 0x100000
/** Ñòàíäàðòíûé òàéìàóò íà âûïîëíåíèå çàïðîñà ê BlackFin â ìñ */
#define X502_BF_REQ_TOUT 500
/** Äèàïàçîí ÖÀÏ â âîëüòàõ */
#define X502_DAC_RANGE 5.
#define E16_DAC_RANGE 10.
/** Âûõîä 1:1 è 1:10 */
#define LTA37_DAC_RANGE20V 20.
#define LTA37_DAC_RANGE2V 2.
#define LTA37_DACRANGE_CNT 2
/** Êîëè÷åñòâî êàíàëîâ ÖÀÏ */
#define X502_DAC_CH_CNT 2
#ifndef LTA37_DAC_CH_CNT
#define LTA37_DAC_CH_CNT 10
#endif
/** Ìàêñèìàëüíîå êîëè÷åñòâî êàíàëîâ ÖÀÏ ïîääåðæèâàåìîå áèáëèîòåêîé*/
#define X502_DAC_CH_CNT_MAX 20
/** Êîëè÷åñòâî öèôðîâûõ âûõîäîâ ó ìîäóëÿ */
#define X502_DOUT_LINES_CNT 16
/** ñëîâî â ïîòîêå, îçíà÷àþùåå, ÷òî ïðîèçîøëî ïåðåïîëíåíèå */
#define X502_STREAM_IN_MSG_OVERFLOW 0x01010000
/** Çíà÷åíèå ïîëÿ ñèãíàòóðû â çàïèñè î óñòðîéñòâå #t_x502_devrec. Ïðèçíàê,
÷òî çàïèñü äåéñòâèòåëüíà (óñòàíàâëèâàåòñÿ ôóíêöèÿìè ïî ïîëó÷åíèþ çàïèñåé
î óñòðîéñòâàõ) */
#define X502_DEVREC_SIGN 0x4C524543
/** Êîäû îøèáîê áèáëèîòåêè */
typedef enum {
/** Ôóíêöèÿ âûïîëíåíà áåç îøèáîê */
X502_ERR_OK = 0,
/** Â ôóíêöèþ ïåðåäàí íåäåéñòâèòåëüíûé îïèñàòåëü ìîäóëÿ */
X502_ERR_INVALID_HANDLE = -1,
/** Îøèáêà âûäåëåíèÿ ïàìÿòè */
X502_ERR_MEMORY_ALLOC = -2,
/** Ïîïûòêà îòêðûòü óæå îòêðûòîå óñòðîéñòâî */
X502_ERR_ALREADY_OPENED = -3,
/** Óñòðîéñòâî ñ çàäàííûìè ïàðàìåòðàìè íå íàéäåíî â ñèñòåìå */
X502_ERR_DEVICE_NOT_FOUND = -4,
/** Äîñòóï ê óñòðîéñòâó çàïðåùåí (Êàê ïðàâèëî èç-çà òîãî, ÷òî óñòðîéñòâî
óæå îòêðûòî â äðóãîé ïðîãðàììå) */
X502_ERR_DEVICE_ACCESS_DENIED = -5,
/** Îøèáêà îòêðûòèÿ óñòðîéñòâà */
X502_ERR_DEVICE_OPEN = -6,
/** Â ôóíêöèþ ïåðåäàí íåäåéñòâèòåëüíûé óêàçàòåëü */
X502_ERR_INVALID_POINTER = -7,
/** Ôóíêöèÿ íå ìîæåò áûòü âûïîëíåíà ïðè çàïóùåííîì ïîòîêå ñáîðà äàííûõ */
X502_ERR_STREAM_IS_RUNNING = -8,
/** Îøèáêà ÷òåíèÿ äàííûõ ñèíõðîííîãî ââîäà, äëÿ tcp-ñîåäèíåíèÿ òèï îøèáêè ñîäåðæèòñÿ â errno */
X502_ERR_RECV = -9,
/** Îøèáêà çàïèñè äàííûõ äëÿ ñèíõðîííîãî âûâîäà */
X502_ERR_SEND = -10,
/** Ïðîèçîøëî ïåðåïîëíåíèå âíóòðåííåãî áóôåðà äëÿ ïîòîêà ñèíõðîííîãî ââîäà */
X502_ERR_STREAM_OVERFLOW = -11,
/** Íåèçâåñòíîå ñîîáùåíèå â ïîòîêå ñèíõðîííîãî ââîäà */
X502_ERR_UNSUP_STREAM_MSG = -12,
/** Îøèáêà ñîçäàíèÿ ñèñòåìíîãî ìüþòåêñà */
X502_ERR_MUTEX_CREATE = -13,
/** Íåâåðíûé îïèñàòåëü ìüþòåêñà */
X502_ERR_MUTEX_INVALID_HANDLE = -14,
/** Èñòåêëî âðåìÿ îæèäàíèÿ îñâîáîæäåíèÿ ìüþòåêñà */
X502_ERR_MUTEX_LOCK_TOUT = -15,
/** Îøèáêà îñâîáîæäåíèÿ ìüþòåêñà */
X502_ERR_MUTEX_RELEASE = -16,
/** Íåäîñòàòî÷íî ñèñòåìíûõ ðåñóðñîâ */
X502_ERR_INSUFFICIENT_SYSTEM_RESOURCES= -17,
/** Äàííàÿ âîçìîæíîñòü åùå íå ðåàëèçîâàíà */
X502_ERR_NOT_IMPLEMENTED = -18,
/** Íåäîñòàòî÷íûé ðàçìåð ìàññèâà */
X502_ERR_INSUFFICIENT_ARRAY_SIZE = -19,
/** Îøèáêà ÷òåíèÿ ðåãèñòðà FPGA */
X502_ERR_FPGA_REG_READ = -20,
/** Îøèáêà çàïèñè ðåãèñòðà FPGA */
X502_ERR_FPGA_REG_WRITE = -21,
/** Ñáîð äàííûõ óæå îñòàíîâëåí */
X502_ERR_STREAM_IS_NOT_RUNNING = -22,
/** Îøèáêà îñâîáîæäåíèÿ èíòåðôåéñà */
X502_ERR_INTERFACE_RELEASE = -23,
/** Îøèáêà çàïóñêà ïîòîêà */
X502_ERR_THREAD_START = -24,
/** Îøèáêà îñòàíîâà ïîòîêà */
X502_ERR_THREAD_STOP = -25,
/** Óñòðîéñòâî áûëî îòêëþ÷åíî */
X502_ERR_DEVICE_DISCONNECTED = -26,
/** Íåâåðíûé ðàçìåð îòâåòà íà óïðàâëÿþùèé çàïðîñ */
X502_ERR_IOCTL_INVALID_RESP_SIZE = -27,
/** Íåâåðíûé òèï óñòðîéñòâà */
X502_ERR_INVALID_DEVICE = -28,
/** Íåäåéñòâèòåëüíàÿ çàïèñü î óñòðîéñòâå */
X502_ERR_INVALID_DEVICE_RECORD = -29,
/** Íåâåðíûé îïèñàòåëü êîíôèãóðàöèè ìîäóëÿ */
X502_ERR_INVALID_CONFIG_HANDLE = -30,
/** Ñâÿçü ñ óñòðîéñòâîì çàêðûòà èëè íå áûëà óñòàíîâëåíà */
X502_ERR_DEVICE_NOT_OPENED = -31,
/** Äàííàÿ îïåðàöèÿ íå äîñòóïíà äëÿ òåêóùåãî èíòåðôåéñà ñâÿçè ñ óñòðîéñòâîì */
X502_ERR_INVALID_OP_FOR_IFACE = -32,
/** Íå çàãðóæåí ÏËÈÑ ìîäóëÿ */
X502_ERR_FPGA_NOT_LOADED = -33,
/** Íåâåðíàÿ êîíôèãóðàöèÿ USB-óñòðîéñòâà */
X502_ERR_INVALID_USB_CONFIGURATION = -34,
/** Íåâåðíûé îïèñàòåëü êîíòåêñòà ïîèñêà óñòðîéñòâ â ñåòè */
X502_ERR_INVALID_SVC_BROWSE_HANDLE = -35,
/** Íåâåðíûé îïèñàòåëü çàïèñè î ñåðâèñå */
X502_ERR_INVALID_SVC_RECORD_HANDLE = -36,
/** Íå çàïóùåíà ïðîãðàììà îáíàðóæåíèÿ óñòðîéñòâ â ëîêàëüíîé ñåòè */
X502_ERR_DNSSD_NOT_RUNNING = -37,
/** Îøèáêà ïðè îáðàùåíèè ê ïðîãðàììå îáíàðóæåíèÿ óñòðîéñòâ â ëîêàëüíîé ñåòè */
X502_ERR_DNSSD_COMMUNICATION = -38,
/** Ïðåâûøåí òàéìàóò çàïðîñà ïàðàìåòðîâ àâòîîáíàðóæåííîãî ñåòåâîãî óñòðîéñòâà */
X502_ERR_SVC_RESOLVE_TIMEOUT = -39,
/** Îøèáêà â êîäèðîâêå èìåíè ýêçåìïëÿðà óñòðîéñòâà */
X502_ERR_INSTANCE_NAME_ENCODING = -40,
/** Ýêçåìïëÿðû ìîäóëåé íå ñîâïàäàþò */
X502_ERR_INSTANCE_MISMATCH = -41,
/** Âîçìîæíîñòü íå ïîääåðæèâàåòñÿ òåêóùåé âåðñèåé ïðîøèâêè óñòðîéñòâà */
X502_ERR_NOT_SUP_BY_FIRMWARE = -42,
/** Âîçìîæíîñòü íå ïîääåðæèâàåòñÿ òåêóùåé âåðñèåé äðàéâåðà óñòðîéñòâà */
X502_ERR_NOT_SUP_BY_DRIVER = -43,
/** Ïðåâûøåíî âðåìÿ îæèäàíèÿ óñòàíîâëåíèÿ öèêëè÷åñêîãî ñèãíàëà íà âûâîä */
X502_ERR_OUT_CYCLE_SETUP_TOUT = -44,
/** Íåèçâåñòíûé êîä ïîääåðæèâàåìîé âîçìîæíîñòè */
X502_ERR_UNKNOWN_FEATURE_CODE = -45,
/** Çàäàí íåâåðíûé ðàçìåð ëîãè÷åñêîé òàáëèöû */
X502_ERR_INVALID_LTABLE_SIZE = -102,
/** Çàäàí íåâåðíûé íîìåð ëîãè÷åñêîãî êàíàëà */
X502_ERR_INVALID_LCH_NUMBER = -103,
/** Íåâåðíî çàäàíî çíà÷åíèå äèàïàçîíà ÀÖÏ */
X502_ERR_INVALID_LCH_RANGE = -104,
/** Íåâåðíî çàäàí ðåæèì èçìåðåíèÿ äëÿ ëîãè÷åñêîãî êàíàëà */
X502_ERR_INVALID_LCH_MODE = -105,
/** Íåâåðíî çàäàí íîìåð ôèçè÷åñêîãî êàíàëà ïðè íàñòðîéêå ëîãè÷åñêîãî */
X502_ERR_INVALID_LCH_PHY_NUMBER = -106,
/** Íåâåðíî çàäàí ðàçìåð óñðåäíåíèÿ äëÿ ëîãè÷åñêîãî êàíàëà */
X502_ERR_INVALID_LCH_AVG_SIZE = -107,
/** Íåâåðíî çàäàí äåëèòåëü ÷àñòîòû ñáîðà äàííûõ ÀÖÏ */
X502_ERR_INVALID_ADC_FREQ_DIV = -108,
/** Íåâåðíî çàäàí äåëèòåëü ÷àñòîòû ñèíõðîííîãî ââîäà öèôðîâûõ ëèíèé */
X502_ERR_INVALID_DIN_FREQ_DIV = -109,
/** Íåâåðíî çàäàí ðåæèì ðàáîòû ìîäóëÿ */
X502_ERR_INVALID_MODE = -110,
/** Íåâåðíûé íîìåð êàíàëà ÖÀÏ */
X502_ERR_INVALID_DAC_CHANNEL = -111,
/** Íåâåðíûé êîä âûáîðà îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè */
X502_ERR_INVALID_REF_FREQ = -112,
/** Íåâåðíî çàäàíî çíà÷åíèå ìåæêàäðîâîé çàäåðæêè */
X502_ERR_INVALID_INTERFRAME_DELAY = -113,
/** Íåâåðíî çàäàí ðåæèì ñèíõðîíèçàöèè */
X502_ERR_INVALID_SYNC_MODE = -114,
/** Íåâåðíî çàäàí íîìåð ïîòîêà äàííûõ */
X502_ERR_INVALID_STREAM_CH = -115,
/** Íåâåðíî çàäàí äåëèòåëü ÷àñòîòû ñèíõðîííîãî âûâîäà */
X502_ERR_INVALID_OUT_FREQ_DIV = -116,
/** Îøèáêà çàõâàòà îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè */
X502_ERR_REF_FREQ_NOT_LOCKED = -131,
/** Óïðàâëÿþùèé çàïðîñ ê äðàéâåðó çàâåðøåí ñ îøèáêîé */
X502_ERR_IOCTL_FAILD = -132,
/** Èñòåê òàéìàóò îæèäàíèÿ çàâåðøåíèÿ âûïîëíåíèÿ óïðàâëÿþùåãî çàïðîñà ê äðàéâåðó */
X502_ERR_IOCTL_TIMEOUT = -133,
/** Îøèáêà ïîëó÷åíèÿ èíôîðìàöèè î óñòðîéñòâå îò äðàéâåðà */
X502_ERR_GET_INFO = -134,
/** Çà âðåìÿ îæèäàíèÿ íå áûëî ñ÷èòàíî íîâîå ñëîâî ñ öèôðîâûõ ëèíèé */
X502_ERR_DIG_IN_NOT_RDY = -135,
/** Ïðèíÿòî íåäîñòàòî÷íî ñëîâ îò ìîäóëÿ */
X502_ERR_RECV_INSUFFICIENT_WORDS = -136,
/** Ïîïûòêà âûïîëíèòü îïåðàöèþ, òðåáóþùóþ íàëè÷èå ÖÀÏ, ïðè åãî îòñóòñòâèè */
X502_ERR_DAC_NOT_PRESENT = -137,
/** Ïåðåäàíî íåäîñòàòî÷íî ñëîâ â ìîäóëü */
X502_ERR_SEND_INSUFFICIENT_WORDS = -138,
/** Íå ïðèøëî îòâåòà íà ïåðåäàííóþ êîìàíäó */
X502_ERR_NO_CMD_RESPONSE = -139,
/** Íåâåðíûé íîìåð êàíàëà â îáðàáàòûâàåìîì ïîòîêå ñèíõðîííîãî ââîäà */
X502_ERR_PROC_INVALID_CH_NUM = -140,
/** Íåâåðíûé êîä äèàïàçîíà â îáðàáàòûâàåìîì ïîòîêå ñèíõðîííîãî ââîäà */
X502_ERR_PROC_INVALID_CH_RANGE = -141,
/** Çàäàí íåâåðíûé àäðåñ âî Flash-ïàìÿòè */
X502_ERR_FLASH_INVALID_ADDR = -142,
/** Çàäàí íåâåðíûé ðàçìåð áëîêà äàííûõ ïðè ðàáîòå ñ Flash-ïàìÿòüþ */
X502_ERR_FLASH_INVALID_SIZE = -143,
/** Èñòåê òàéìàóò îæèäàíèÿ çàâåðøåíèÿ çàïèñè âî Flash-ïàìÿòü */
X502_ERR_FLASH_WRITE_TOUT = -144,
/** Èñòåê òàéìàóò îæèäàíèÿ çàâåðøåíèÿ ñòèðàíèÿ áëîêà Flash-ïàìÿòè */
X502_ERR_FLASH_ERASE_TOUT = -145,
/** Çàäàííàÿ îáëàñòü äëÿ ñòèðàíèÿ Flash-ïàìÿòè íàðóøàåò ãðàíèöó áëîêà â 4 Êáàéò */
X502_ERR_FLASH_SECTOR_BOUNDARY = -146,
/** Íå óäàëîñü îòêðûòü ñîêåò äëÿ ñîåäèíåíèÿ */
X502_ERR_SOCKET_OPEN = -147,
/** Ïðåâûøåíî âðåìÿ ïîäêëþ÷åíèÿ */
X502_ERR_CONNECTION_TOUT = -148,
/** Ñîåäèíåíèå çàêðûòî äðóãîé óñòðîéñòâîì */
X502_ERR_CONNECTION_CLOSED_BY_DEV = -149,
/** Íå óäàëîñü óñòàíîâèòü çàäàííûé ðàçìåð áóôåðà ñîêåòà */
X502_ERR_SOCKET_SET_BUF_SIZE = -150,
/** Ñîåäèíåíèå äëÿ ïåðåäà÷è äàííûõ íå óñòàíîâëåíî */
X502_ERR_NO_DATA_CONNECTION = -151,
/** Íå óäàëîñü äîæäàòüñÿ ñîîáùåíèÿ î çàâåðøåíèè ïîòîêà */
X502_ERR_NO_STREAM_END_MSG = -152,
/** Ñîåäèíåíèå áûëî ñáðîøåíî äðóãîé ñòîðîíîé */
X502_ERR_CONNECTION_RESET = -153,
/** Íå óäàëîñü íàéòè õîñò ñ óêàçàííûì àäðåñîì */
X502_ERR_HOST_UNREACHABLE = -154,
/** Îøèáêà óñòàíîâëåíèÿ TCP-ñîåäèíåíèÿ,
ìîæåò âîçíèêàòü êîãäà ñîåäèíåíèå ñ ìîäóëåì óæå óñòàíîâëåíî
(òîëüêî îäíî TCP ñîåäèíåíèå ìîæåò óïðàâëÿòü ìîäóëåì) */
X502_ERR_TCP_CONNECTION_ERROR = -155,
/** Íå óäàëîñü îòêðûòü ôàéë ïðîøèâêè BlackFin */
X502_ERR_LDR_FILE_OPEN = -180,
/** Îøèáêà ÷òåíèÿ èç ôàëà ïðîøèâêè BlackFin */
X502_ERR_LDR_FILE_READ = -181,
/** Íåâåðíûé ôîðìàò ôàéëà ïðîøèâêè BlackFin */
X502_ERR_LDR_FILE_FORMAT = -182,
/** Èñïîëüçóþòñÿ âîçìîæíîñòü LDR-ôàéëà, íåäîñòóïíûå ïðè çàïèñè ïðîøèâêè
BlackFin ïî HDMA */
X502_ERR_LDR_FILE_UNSUP_FEATURE = -183,
/** Íåâåðíûé ñòàðòîâûé àäðåñ ïðîãðàììû â ïðîøèâêå BlackFin */
X502_ERR_LDR_FILE_UNSUP_STARTUP_ADDR = -184,
/** Èñòåê òàéìàóò âûïîëíåíèÿ çàïðîñà íà ÷òåíèÿ/çàïèñü ïàìÿòè BlackFin */
X502_ERR_BF_REQ_TIMEOUT = -185,
/** Êîìàíäà äëÿ BlackFin âñå åùå íàõîäèòñÿ â ïðîöåññå îáðàáîòêè */
X502_ERR_BF_CMD_IN_PROGRESS = -186,
/** Èñòåêëî âðåìÿ âûïîëíåíèÿ óïðàâëÿþùåé êîìàíäû ïðîöåññîðîì BlackFin */
X502_ERR_BF_CMD_TIMEOUT = -187,
/** Âîçâðàùåíî íåäîñòàòî÷íî äàííûõ â îòâåò íà êîìàíäó ê BlackFin */
X502_ERR_BF_CMD_RETURN_INSUF_DATA = -188,
/** Èñòåê òàéìàóò îæèäàíèÿ ãîòîâíîñòè ïðîöåññîðà BlackFin ê çàïèñè ïðîøèâêè */
X502_ERR_BF_LOAD_RDY_TOUT = -189,
/** Ïîïûòêà âûïîëíèòü îïåðàöèþ äëÿ êîòîðîé íóæåí ñèãíàëüíûé ïðîöåññîð ïðè
îòñóòñòâèè ñèãíàëüíîãî ïðîöåññîðà â ìîäóëå */
X502_ERR_BF_NOT_PRESENT = -190,
/** Íåâåðíûé àäðåñ ïàìÿòè BlackFin ïðè çàïèñè èëè ÷òåíèè ïî HDMA */
X502_ERR_BF_INVALID_ADDR = -191,
/** Íåâåðíûé ðàçìåð äàííûõ, ïåðåäàâàåìûõ ñ óïðàâëÿþùåé êîìàíäîé â BlackFin */
X502_ERR_BF_INVALID_CMD_DATA_SIZE = -192
} t_x502_errs;
/** Èíòåðôåéñ ñîåäèíåíèÿ ñ ìîäóëåì */
typedef enum {
X502_IFACE_UNKNOWN = 0, /**< Íåèçâåñòíûé èíòåðôåéñ */
X502_IFACE_USB = 1, /**< Óñòðîéñòâî ïîäêëþ÷åíî ïî USB */
X502_IFACE_ETH = 2, /**< Óñòðîéñòâî ïîäêëþ÷åíî ïî Ethernet ÷åðåç TCP/IP */
X502_IFACE_PCI = 3 /**< Óñòðîéñòâî ïîäêëþ÷åíî ïî PCI/PCIe */
} t_x502_iface;
/** Ôëàãè, óïðàâëÿþùèå ïîèñêîì ïðèñóòñòâóþùèõ ìîäóëåé */
typedef enum {
/** Ïðèçíàê, ÷òî íóæíî âåðíóòü ñåðèéíûå íîìåðà òîëüêî òåõ óñòðîéñòâ,
êîòîðûå åùå íå îòêðûòû */
X502_GETDEVS_FLAGS_ONLY_NOT_OPENED = 1
} t_x502_getdevs_flags;
/** @brief Ôëàãè äëÿ óïðàâëåíèÿ öèôðîâûìè âûõîäàìè
Ôëàãè óïðàâëåíèÿ öèôðîâûìè âûõîäàìè. Ìîãóò áûòü îáúåäèíåíû ÷åðåç ëîãè÷åñêîå
“ÈËÈ” ñî çíà÷åíèÿìè öèôðîâûõ âûõîäîâ ïðè àñèíõðîííîì âûâîäå ñ ïîìîùüþ
X502_AsyncOutDig() èëè ïåðåäàíû â X502_PrepareData() ïðè ñèíõðîííîì âûâîäå.*/
typedef enum {
X502_DIGOUT_WORD_DIS_H = 0x00020000, /**< Çàïðåùåíèå (ïåðåâîä â òðåòüå ñîñòîÿíèå)
ñòàðøåé ïîëîâèíû öèôðîâûõ âûõîäîâ */
X502_DIGOUT_WORD_DIS_L = 0x00010000, /**< Çàïðåùåíèå ìëàäøåé ïîëîâèíû
öèôðîâûõ âûõîäîâ */
E16_DIGOUT_WORD_DIS = 0x00030000 /**< Äëÿ ìîäóëÿ E16 ïîääåðæèâàåòñÿ òîëüêî ïîëíîå
çàïðåùåíèå öèôðîâûõ âûõîäîâ */
} t_x502_digout_word_flags;
/** Êîíñòàíòû äëÿ âûáîðà îïîðíîé ÷àñòîòû */
typedef enum {
E16_REF_FREQ_48000KHZ = 48000000, /**< ×àñòîòà 48ÌÃö äëÿ E16 */
/** Îïðåäåëåíèÿ äëÿ LTA, áóäóò ïåðåíåñåíû â lta_api */
#ifndef LTA11_REF_FREQ_30000KHZ
#define LTA11_REF_FREQ_30000KHZ 30000000 /**< ×àñòîòà 30ÌÃö äëÿ LTA11 */
#endif
#ifndef LTA37_REF_FREQ_24576KHZ
#define LTA37_REF_FREQ_24576KHZ 24576000 /**< ×àñòîòà 24,576ÌÃö äëÿ LTA37 */
#endif
X502_REF_FREQ_2000KHZ = 2000000, /**< ×àñòîòà 2ÌÃö */
X502_REF_FREQ_1500KHZ = 1500000 /**< ×àñòîòà 1.5ÌÃö */
} t_x502_ref_freq;
/** ïîëÿ io_mode â ðåãèñòðå io_hard */
typedef enum {
X502_MODE_REF_FREQ_2000 = 0, /**< ×àñòîòà 2ÌÃö */
X502_MODE_REF_FREQ_1500 = 2, /**< ×àñòîòà 1.5ÌÃö */
E16_MODE_REF_FREQ_48000 = 3 /**< ×àñòîòà 48ÌÃö äëÿ E16*/
} t_x502_io_mode;
/** Äèàïàçîíû èçìåðåíèÿ äëÿ êàíàëà ÀÖÏ */
typedef enum {
X502_ADC_RANGE_10 = 0, /**< Äèàïàçîí +/-10V */
X502_ADC_RANGE_5 = 1, /**< Äèàïàçîí +/-5V */
X502_ADC_RANGE_2 = 2, /**< Äèàïàçîí +/-2V */
X502_ADC_RANGE_1 = 3, /**< Äèàïàçîí +/-1V */
X502_ADC_RANGE_05 = 4, /**< Äèàïàçîí +/-0.5V */
X502_ADC_RANGE_02 = 5 /**< Äèàïàçîí +/-0.2V */
} t_x502_adc_range;
/** Äèàïàçîíû èçìåðåíèÿ äëÿ êàíàëà ÀÖÏ E16 */
typedef enum {
E16_ADC_RANGE_10000 = 0, /**< Äèàïàçîí +/-10V */
E16_ADC_RANGE_2500 = 1, /**< Äèàïàçîí +/-2.5V */
E16_ADC_RANGE_625 = 2, /**< Äèàïàçîí +/-0.625V */
E16_ADC_RANGE_156 = 3, /**< Äèàïàçîí +/-0.156V */
} t_e16_adc_range;
/** Äèàïàçîíû èçìåðåíèÿ äëÿ êàíàëà ÀÖÏ LTA11 */
#ifndef LTA37_DAC_RANGE_20000
#define LTA11_ADC_RANGE_10000 0 /**< Äèàïàçîí +/-10V */
#endif
#ifndef LTA11_ADC_RANGE_2500
#define LTA11_ADC_RANGE_2500 1 /**< Äèàïàçîí +/-2.5V */
#endif
#ifndef LTA11_ADC_RANGE_625
#define LTA11_ADC_RANGE_625 2 /**< Äèàïàçîí +/-0.625V */
#endif
#ifndef LTA11_ADC_RANGE_156
#define LTA11_ADC_RANGE_156 3 /**< Äèàïàçîí +/-0.156V */
#endif
typedef enum {
X502_DAC_RANGE_5000 = 0, /**< Âûõîä +/-5V äëÿ x502 */
E16_DAC_RANGE_10000 = 0, /**< Âûõîä +/-10V äëÿ E16 */
/** Îïðåäåëåíèÿ äëÿ LTA, áóäóò ïåðåíåñåíû â lta_api */
#ifndef LTA37_DAC_RANGE_20000
#define LTA37_DAC_RANGE_20000 0 /**< Âûõîä 1:10 +/-20V äëÿ LTA37 */
#endif
#ifndef LTA37_DAC_RANGE_2000
#define LTA37_DAC_RANGE_2000 1 /**< Âûõîä 1:1 +/-2V äëÿ LTA37 */
#endif
} t_x502devs_dac_range;
/** Ðåæèì èçìåðåíèÿ äëÿ ëîãè÷åñêîãî êàíàëà */
typedef enum {
X502_LCH_MODE_COMM = 0, /**< Èçìåðåíèå íàïðÿæåíèÿ îòíîñèòåëüíî îáùåé çåìëè */
X502_LCH_MODE_DIFF = 1, /**< Äèôôåðåíöèàëüíîå èçìåðåíèå íàïðÿæåíèÿ */
X502_LCH_MODE_ZERO = 2 /**< Èçìåðåíèå ñîáñòâåííîãî íóëÿ */
} t_x502_lch_mode;
/** @brief Ðåæèìû ñèíõðîíèçàöèè
Ðåæèìû çàäàíèÿ èñòî÷íèêà ÷àñòîòû ñèíõðîíèçàöèè è ïðèçíàêà íà÷àëà
ñèíõðîííîãî ââîäà-âûâîäà */
typedef enum {
X502_SYNC_INTERNAL = 0, /**< Âíóòðåííèé ñèãíàë */
X502_SYNC_EXTERNAL_MASTER = 1, /**< Îò âíåøíåãî ìàñòåðà ïî ðàçúåìó ìåæìîäóëüíîé ñèíõðîíèçàöèè (START_IN/CONV_IN äëÿ X502_SetSyncStartMode/X502_SetSyncMode) */
X502_SYNC_DI_SYN1_RISE = 2, /**< Ïî ôðîíòó ñèãíàëà DI_SYN1 */
X502_SYNC_DI_SYN1_FALL = 3, /**< Ïî ñïàäó ñèãíàëà DI_SYN1 */
X502_SYNC_DI_SYN2_RISE = 6, /**< Ïî ôðîíòó ñèãíàëà DI_SYN2 */
X502_SYNC_DI_SYN2_FALL = 7, /**< Ïî ñïàäó ñèãíàëà DI_SYN2 */
/** Òîëüêî äëÿ E16!
Âàæíî ïðàâèëüíî óñòàíîâèòü íàïðàâëåíèå TRIG èëè INT íà âõîä
ñíÿòèåì ôëàãà E16_MODE_TRIG_OUTPUT èëè E16_MODE_INT_OUTPUT
*/
E16_SYNC_TRIG_RISE = 2, /**< Ïî ôðîíòó ñèãíàëà TRIG */
E16_SYNC_TRIG_FALL = 3, /**< Ïî ñïàäó ñèãíàëà TRIG */
E16_SYNC_INT_RISE = 6, /**< Ïî ôðîíòó ñèãíàëà INT */
E16_SYNC_INT_FALL = 7, /**< Ïî ñïàäó ñèãíàëà INT */
/** Àíàëîãîâàÿ ñèíõðîíèçàöèÿ ñòàðòà, òîëüêî äëÿ E16*/
E16_SYNC_ADC_ABOVE_LEVEL = 8, /**< Âûøå óðîâíÿ */
E16_SYNC_ADC_BELOW_LEVEL = 9, /**< Íèæå óðîâíÿ */
E16_SYNC_ADC_EDGE_RISE = 10, /**< Ïî ïåðåõîäó ñèãíàëà ñíèçó ââåðõ */
E16_SYNC_ADC_EDGE_FALL = 11, /**< Ïî ïåðåõîäó ñèãíàëà ñâåðõó âíèç */
/** Îïðåäåëåíèÿ äëÿ LTA, áóäóò ïåðåíåñåíû â lta_api */
#ifndef LTA37_SYNC_INTERNAL
#define LTA37_SYNC_INTERNAL 0 /**< Âíóòðåííèé ñèãíàë */
#endif
#ifndef LTA37_SYNC_DI2_RISE
#define LTA37_SYNC_DI2_RISE 1 /**< Ïî ôðîíòó ñèãíàëà DI2 */
#endif
#ifndef LTA37_SYNC_DI2_FALL
#define LTA37_SYNC_DI2_FALL 2 /**< Ïî ñïàäó ñèãíàëà DI2 */
#endif
#ifndef LTA37_DO8_START_OUT
#define LTA37_DO8_START_OUT 4 /**< LTA37: âêëþ÷èòü DO8 íà âûâîä ñèãíàëà ñòàðòà */
#endif
#ifndef LTA11_SYNC_INTERNAL
#define LTA11_SYNC_INTERNAL 0 /**< Âíóòðåííèé ñèãíàë */
#endif
#ifndef LTA11_SYNC_EXT_RISE
#define LTA11_SYNC_EXT_RISE 2 /**< Ïî ôðîíòó ñèãíàëà Sync/Start */
#endif
#ifndef LTA11_SYNC_EXT_FALL
#define LTA11_SYNC_EXT_FALL 3 /**< Ïî ñïàäó ñèãíàëà Sync/Start */
#endif
#ifndef LTA11_SYNC_EXT_HIGH
#define LTA11_SYNC_EXT_HIGH 6 /**< Ñòàðò ïî âûñîêîìó óðîâíþ ñèãíàëà Start */
#endif
#ifndef LTA11_SYNC_EXT_LOW
#define LTA11_SYNC_EXT_LOW 7 /**< Ñòàðò ïî íèçêîìó óðîâíþ ñèãíàëà Start */
#endif
/** Àíàëîãîâàÿ ñèíõðîíèçàöèÿ ñòàðòà, òîëüêî äëÿ LTA11*/
#ifndef LTA11_SYNC_ADC_ABOVE_LEVEL
#define LTA11_SYNC_ADC_ABOVE_LEVEL 8 /**< Âûøå óðîâíÿ */
#endif
#ifndef LTA11_SYNC_ADC_BELOW_LEVEL
#define LTA11_SYNC_ADC_BELOW_LEVEL 9 /**< Íèæå óðîâíÿ */
#endif
#ifndef LTA11_SYNC_ADC_EDGE_RISE
#define LTA11_SYNC_ADC_EDGE_RISE 10 /**< Ïî ïåðåõîäó ñèãíàëà ñíèçó ââåðõ */
#endif
#ifndef LTA11_SYNC_ADC_EDGE_FALL
#define LTA11_SYNC_ADC_EDGE_FALL 11 /**< Ïî ïåðåõîäó ñèãíàëà ñâåðõó âíèç */
#endif
} t_x502_sync_mode;
/** Ôëàãè, óïðàâëÿþùèå îáðàáîòêîé ïðèíÿòûõ äàííûõ */
typedef enum {
/** Ïðèçíàê, ÷òî íóæíî ïðåîáðàçîâàòü çíà÷åíèÿ ÀÖÏ â âîëüòû */
X502_PROC_FLAGS_VOLT = 0x00000001,
/** Ïðèçíàê, ÷òî íå íóæíî ïðîâåðÿòü ñîâïàäåíèå íîìåðîâ êàíàëîâ
â ïðèíÿòûõ äàííûõ ñ êàíàëàìè èç ëîãè÷åñêîé òàáëèöû.
Ìîæåò èñïîëüçîâàòüñÿ ïðè íåñòàíäàðòíîé ïðîøèâêå BlackFin
ïðè ïåðåäà÷å â ÏÊ íå âñåõ äàííûõ. */
X502_PROC_FLAGS_DONT_CHECK_CH = 0x00010000
} t_x502_proc_flags;
/** Ôëàãè äëÿ îáîçíà÷åíèÿ ñèíõðîííûõ ïîòîêîâ äàííûõ */
typedef enum {
X502_STREAM_ADC = 0x01, /**< Ïîòîê äàííûõ îò ÀÖÏ */
X502_STREAM_DIN = 0x02, /**< Ïîòîê äàííûõ ñ öèôðîâûõ âõîäîâ */
X502_STREAM_DAC1 = 0x10, /**< Ïîòîê äàííûõ ïåðâîãî êàíàëà ÖÀÏ */
X502_STREAM_DAC2 = 0x20, /**< Ïîòîê äàííûõ âòîðîãî êàíàëà ÖÀÏ */
X502_STREAM_DOUT = 0x40, /**< Ïîòîê äàííûõ íà öèôðîâûå âûâîäû */
/** Îáúåäèíåíèå âñåõ ôëàãîâ, îáîçíà÷àþùèõ ïîòîêè äàííûõ íà ââîä */
X502_STREAM_ALL_IN = X502_STREAM_ADC | X502_STREAM_DIN,
/** Îáúåäèíåíèå âñåõ ôëàãîâ, îáîçíà÷àþùèõ ïîòîêè äàííûõ íà âûâîä */
X502_STREAM_ALL_OUT = X502_STREAM_DAC1 | X502_STREAM_DAC2 | X502_STREAM_DOUT
} t_x502_streams;
/** Êîíñòàíòû, îïðåäåëÿþùèå òèï ïåðåäàâàåìîãî îòñ÷åòà èç ÏÊ â ìîäóëü */
typedef enum {
X502_STREAM_OUT_WORD_TYPE_DOUT = 0x0, /**< Öèôðîâîé âûâîä */
X502_STREAM_OUT_WORD_TYPE_DAC1 = 0x40000000, /**< Êîä äëÿ 1-ãî êàíàëà ÖÀÏ */
X502_STREAM_OUT_WORD_TYPE_DAC2 = 0x80000000, /**< Êîä äëÿ 2-ãî êàíàëà ÖÀÏ */
/** Îïðåäåëåíèÿ äëÿ LTA, áóäóò ïåðåíåñåíû â lta_api */
#ifndef LTA37_STREAM_OUT_WORD_TYPE_DOUT
#define LTA37_STREAM_OUT_WORD_TYPE_DOUT (12 << 24) /**< Öèôðîâîé âûâîä äëÿ LTA37*/
#endif
} t_x502_stream_out_wrd_type;
/** Ðåæèì ðàáîòû ìîäóëÿ */
typedef enum {
X502_MODE_FPGA = 0, /**< Âñå ïîòîêè äàííûõ ïåðåäàþòñÿ ÷åðåç ÏËÈÑ ìèíóÿ
ñèãíàëüíûé ïðîöåññîð BlackFin */
X502_MODE_DSP = 1, /**< Âñå ïîòîêè äàííûõ ïåðåäàþòñÿ ÷åðåç ñèãíàëüíûé
ïðîöåññîð, êîòîðûé äîëæåí áûòü çàãðóæåí
ïðîøèâêîé äëÿ îáðàáîòêè ýòèõ ïîòîêîâ */
X502_MODE_DEBUG = 2 /**< Îòëàäî÷íûé ðåæèì */
} t_x502_mode;
#define X502_DAC_CH(ch, range, ch_cnt) ((ch_cnt * range) + ch)
#ifndef LTA37_DAC_CH
#define LTA37_DAC_CH(ch, range) X502_DAC_CH(ch, range, LTA37_DAC_CH_CNT)
#endif
/** @brief Íîìåðà êàíàëîâ ÖÀÏ
Íîìåð êàíàëîâ ÖÀÏ äëÿ óêàçàíèÿ â X502_AsyncOutDac() */
typedef enum {
X502_DAC_CH1 = 0, /**< Ïåðâûé êàíàë ÖÀÏ */
X502_DAC_CH2 = 1, /**< Âòîðîé êàíàë ÖÀÏ */
/** Îïðåäåëåíèÿ äëÿ LTA, áóäóò ïåðåíåñåíû â lta_api */
#ifndef LTA37_DAC_CH1
#define LTA37_DAC_CH1 0 /**< âûõîä 1:1 1 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH2
#define LTA37_DAC_CH2 1 /**< âûõîä 1:1 2 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH3
#define LTA37_DAC_CH3 2 /**< âûõîä 1:1 3 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH4
#define LTA37_DAC_CH4 3 /**< âûõîä 1:1 4 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH5
#define LTA37_DAC_CH5 4 /**< âûõîä 1:1 5 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH6
#define LTA37_DAC_CH6 5 /**< âûõîä 1:1 6 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH7
#define LTA37_DAC_CH7 6 /**< âûõîä 1:1 7 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH8
#define LTA37_DAC_CH8 7 /**< âûõîä 1:1 8 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH9
#define LTA37_DAC_CH9 8 /**< âûõîä 1:1 9 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH10
#define LTA37_DAC_CH10 9 /**< âûõîä 1:1 10 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH1_10
#define LTA37_DAC_CH1_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 1 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH2_10
#define LTA37_DAC_CH2_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 2 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH3_10
#define LTA37_DAC_CH3_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 3 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH4_10
#define LTA37_DAC_CH4_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 4 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH5_10
#define LTA37_DAC_CH5_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 5 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH6_10
#define LTA37_DAC_CH6_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 6 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH7_10
#define LTA37_DAC_CH7_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 7 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH8_10
#define LTA37_DAC_CH8_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 8 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH9_10
#define LTA37_DAC_CH9_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 9 êàíàëà ÖÀÏ LTA37 */
#endif
#ifndef LTA37_DAC_CH10_10
#define LTA37_DAC_CH10_10 LTA37_DAC_CH(LTA37_DAC_CH1, LTA37_DAC_RANGE_2000) /**< âûõîä 1:10 10 êàíàëà ÖÀÏ LTA37 */
#endif
} t_x502_dac_ch;
/** @brief Ôëàãè, èñïîëüçóåìûå ïðè âûâîäå äàííûõ íà ÖÀÏ
Ôëàãè, êîìáèíàöèþ êîòîðûõ ìîæíî ïåðåäàòü â X502_AsyncOutDac() èëè
X502_PrepareData(), ÷òîáû îïðåäåëèòü äåéñòâèÿ, êîòîðûå äîëæíû âûïîëíèòü
ýòè ôóíêöèè ñ ïåðåäàííûì çíà÷åíèåì ïåðåä âûâîäîì èõ íà ÖÀÏ */
typedef enum {
/** Óêàçûâàåò, ÷òî çíà÷åíèå çàäàíî â Âîëüòàõ è ïðè âûâîäå åãî íóæíî
ïåðåâåñòè åãî â êîäû ÖÀÏ. Åñëè ôëàã íå óêàçàí, òî ñ÷èòàåòñÿ, ÷òî çíà÷åíèå
èçíà÷àëüíî â êîäàõ */
X502_DAC_FLAGS_VOLT = 0x0001,
/** Óêàçûâàåò, ÷òî íóæíî ïðèìåíèòü êàëèáðîâî÷íûå êîýôôèöèåíòû ïåðåä
âûâîäîì çíà÷åíèÿ íà ÖÀÏ. */
X502_DAC_FLAGS_CALIBR = 0x0002
} t_x502_dacout_flags;
/** Íîìåðà êàíàëîâ äëÿ ïåðåäà÷è ïîòîêîâ äàííûõ */
typedef enum {
X502_STREAM_CH_IN = 0, /**< Îáùèé êàíàë íà ââîä */
X502_STREAM_CH_OUT = 1, /**< Îáùèé êàíàë íà âûâîä */
X502_STREAM_CH_CNT
} t_x502_stream_ch;
/** @brief Öèôðîâûå ëèíèè, íà êîòîðûõ ìîæíî âêëþ÷èòü ïîäòÿãèâàþùèå ðåçèñòîðû
Ôëàãè, îïðåäåëÿþùèå íà êàêèõ öèôðîâûõ âõîäàõ äîëæíû áûòü âêëþ÷åíû
ïîäòÿãèâàþùèå ðåçèñòîðû. Äëÿ ðàçíûõ ìîäóëåé äîñòóïíû ðàçíûå íàáîðû ôëàãîâ. */
typedef enum {
X502_PULLUPS_DI_H = 0x01, /**< Ñòàðøàÿ ïîëîâèíà öèôðîâûõ âõîäîâ (òîëüêî äëÿ L502) */
X502_PULLUPS_DI_L = 0x02, /**< Ìëàäøàÿ ïîëîâèíà öèôðîâûõ âõîäîâ (òîëüêî äëÿ L502) */
X502_PULLUPS_DI_SYN1 = 0x04, /**< Ëèíèÿ SYN1 */
X502_PULLUPS_DI_SYN2 = 0x08, /**< Ëèíèÿ SYN2 */
X502_PULLDOWN_CONV_IN = 0x10, /**< Ïîäòÿæêà ê 0 ëèíèè ìåæìîäóëüíîé
ñèíõðîíèçàöèè CONV_IN (òîëüêî äëÿ E502) */
X502_PULLDOWN_START_IN = 0x20, /**< Ïîäòÿæêà ê 0 ëèíèè ìåæìîäóëüíîé
ñèíõðîíèçàöèè START_IN (òîëüêî äëÿ E502) */
E16_MODE_TRIG_OUTPUT = 0x04, /**< E16: Ïåðåêëþ÷åíèå TRIG íà âûõîä, èíà÷å âõîä*/
E16_MODE_INT_OUTPUT = 0x08, /**< E16: Ïåðåêëþ÷åíèå INT íà âûõîä, èíà÷å âõîä*/
E16_MODE_TRIG_START_OUTPUT = 0x10, /**< E16: Ñèãíàë START íà âûõîäå TRIG, èíà÷å CONV (TRIG äîëæåí áûòü âêëþ÷åí íà âûõîä) */
E16_MODE_INT_START_OUTPUT = 0x20, /**< E16: Ñèãíàë START íà âûõîäå INT, èíà÷å CONV (INT äîëæåí áûòü âêëþ÷åí íà âûõîä) */
E16_MODE_RELAY_ON = 0x40, /**< E16: Âêëþ÷èòü ðåëå, âî âêëþ÷åííîì ñîñòîÿíèè íà êîíòàêòàõ ðàçúåìà digital: +15Â, -15Â, âî âûêëþ÷åííîì: +3Â, GND, âòîðè÷íîå ïèòàíèå äîëæíî áûòü âêëþ÷åííûì */
E16_MODE_RELAY_OFF = 0x80, /**< E16: Âûêëþ÷èòü ðåëå */
E16_MODE_PWM_MANUAL = 0x100, /**< E16: Ðó÷íîå óïðàâëåíèå âòîðè÷íûì ïèòàíèåì,
ïî óìîë÷àíèþ âòîðè÷íîå ïèòàíèå âêëþ÷àåòñÿ ïðè ïåðâîì îáðàùåíèè ê óñòðîéñòâó èç API è âûêëþ÷àåòñÿ åñëè áûëî çàêðûòî ñîåäèíåíèå ïî Ethernet èëè îòêëþ÷åíèå USB êàáåëÿ */
E16_MODE_PWM_ON = 0x200, /**< E16: Âêëþ÷åíèå âòîðè÷íîãî ïèòàíèÿ. Åñëè âêëþ÷åí ôëàã E16_MODE_PWM_MANUAL, òî ñîñòîÿíèå âòîðè÷íîãî ïèòàíèÿ áóäåò çàâèñåòü îò ñîñòîÿíèÿ ýòîãî ôëàãà, èíà÷å ðàáîòà ïî óìîë÷àíèþ */
/** Îïðåäåëåíèÿ äëÿ LTA, áóäóò ïåðåíåñåíû â lta_api */
#ifndef LTA37_RELAY_12_ON
#define LTA37_RELAY_12_ON (1 << 0) /**< LTA37: âêëþ÷èòü ðåëå êàíàëîâ 1, 2 */
#endif
#ifndef LTA37_RELAY_34_ON
#define LTA37_RELAY_34_ON (1 << 1) /**< LTA37: âêëþ÷èòü ðåëå êàíàëîâ 3, 4 */
#endif
#ifndef LTA37_RELAY_56_ON
#define LTA37_RELAY_56_ON (1 << 2) /**< LTA37: âêëþ÷èòü ðåëå êàíàëîâ 5, 6 */
#endif
#ifndef LTA37_RELAY_78_ON
#define LTA37_RELAY_78_ON (1 << 3) /**< LTA37: âêëþ÷èòü ðåëå êàíàëîâ 7, 8 */
#endif
#ifndef LTA37_RELAY_9A_ON
#define LTA37_RELAY_9A_ON (1 << 4) /**< LTA37: âêëþ÷èòü ðåëå êàíàëîâ 9, 10 */
#endif
#ifndef LTA37_RELAY_ALL_CH_ON
#define LTA37_RELAY_ALL_CH_ON (LTA37_RELAY_12_ON | LTA37_RELAY_34_ON | LTA37_RELAY_56_ON | LTA37_RELAY_78_ON | LTA37_RELAY_9A_ON)
/**< LTA37: âêëþ÷åíèå ðåëå âñåõ êàíàëîâ */
#endif
#ifndef LTA11_MODE_PTP_SYNC
#define LTA11_MODE_PTP_SYNC 0x04 /**< LTA11: ñèíõðîíèçàöèÿ ïî ïðîòîêîëó PTP */
#endif
} t_x502_pullups;
/** Ôëàãè, îïðåäåëÿþùèå íàëè÷èå îïöèé â ìîäóëå è íàëè÷èå íåîáõîäèìûõ ïàðàìåòðîâ */
typedef enum {
/** Ïðèçíàê íàëè÷èÿ äâóõêàíàëüíîãî êàíàëüíîãî ÖÀÏ */
X502_DEVFLAGS_DAC_PRESENT = 0x00000001,
/** Ïðèçíàê íàëè÷èÿ ãàëüâàíîðàçâÿçêè */
X502_DEVFLAGS_GAL_PRESENT = 0x00000002,
/** Ïðèçíàê íàëè÷èÿ ñèãíàëüíîãî ïðîöåññîðà BlackFin */
X502_DEVFLAGS_BF_PRESENT = 0x00000004,
/** 3 áèòà, îòâå÷àþùèå çà òèï èñïîëüçóìîãî ïðîöåññîðà/êîíòðîëëåðà (0 --- ADSP-BF523) */
X502_DEVFLAGS_PROC_TYPE = 0x00000038,
/** 2 áèòà, îòâå÷àþùèå çà òèï èñïîëüçóåìîãî ÖÀÏ (0 --- AD5542AARUZ, 1 --- DAC8581IPW) */
X502_DEVFLAGS_DAC_TYPE = 0x000000C0,
/** Ïðèçíàê, ÷òî óñòðîéñòâî ïîääåðæèâàåò èíòåðôåéñ USB */
X502_DEVFLAGS_IFACE_SUPPORT_USB = 0x00000100,
/** Ïðèçíàê, ÷òî óñòðîéñòâî ïîääåðæèâàåò Ethernet */
X502_DEVFLAGS_IFACE_SUPPORT_ETH = 0x00000200,
/** Ïðèçíàê, ÷òî óñòðîéñòâî ïîääåðæèâàåò èíòåðôåéñ PCI/PCI-Express */
X502_DEVFLAGS_IFACE_SUPPORT_PCI = 0x00000400,
/** Ïðèçíàê, ÷òî óñòðîéñòâî âûïîëíåíî â èíäóñòðèàëíîì èñïîëíåíèè */
X502_DEVFLAGS_INDUSTRIAL = 0x00008000,
/** Ïðèçíàê, ÷òî âî Flash-ïàìÿòè ïðèñóòñòâóåò èíôîðìàöèÿ î ìîäóëå */
X502_DEVFLAGS_FLASH_DATA_VALID = 0x00010000,
/** Ïðèçíàê, ÷òî âî Flash-ïàìÿòè ïðèñóòñòâóþò äåéñòâèòåëüíûå êàëèáðîâî÷íûå
êîýôôèöèåíòû ÀÖÏ */
X502_DEVFLAGS_FLASH_ADC_CALIBR_VALID = 0x00020000,
/** Ïðèçíàê, ÷òî âî Flash-ïàìÿòè ïðèñóòñòâóþò äåéñòâèòåëüíûå êàëèáðîâî÷íûå
êîýôôèöèåíòû ÖÀÏ */
X502_DEVFLAGS_FLASH_DAC_CALIBR_VALID = 0x00040000,
X502_DEVFLAGS_FLASH_AFC_CALIBR_VALID = 0x00080000,
/** Ïðèçíàê, ÷òî ïðèñóòñòâóåò ïðîøèâêà ÏËÈÑ è îíà óñïåøíî áûëà çàãðóæåíà */
X502_DEVFLAGS_FPGA_LOADED = 0x00800000,
/** Ïðèçíàê, ÷òî óñòðîéñòâî óæå îòêðûòî (äåéñòâèòåëåí òîëüêî âíóòðè t_x502_devrec) */
X502_DEVFLAGS_DEVREC_OPENED = 0x01000000,
/** Ïðèçíàê, ÷òî ïðèñóòñòâóåò ïðîøèâêà ÏËÈÑ è îíà óñïåøíî áûëà çàãðóæåíà îæèäàåì GD32 äëÿ òîãî ÷òîáû îñòàëüíûå ðåãèñòðû ðàáîòàëè */
X502_DEVFLAGS_FPGA_AWAITING_GD32 = 0x02000000,
/** Ïðèçíàê, ÷òî ïðèñóòñòâóåò GD32 è ýòî E502-P1 */
X502_DEVFLAGS_GD_PRESENT = 0x02000000
} t_x502_dev_flags;
/** @brief Òèï ñîäåðæèìîãî ñòðîêè ñ ðàñïîëîæåíèåì óñòðîéñòâà
Äàííîå ïîëå îïðåäåëÿåò ñîäåðæèìîå ïîëÿ location â ñòðóêòóðå #t_x502_devrec */
typedef enum {
/** Â ïîëå ðàñïîëîæåíèÿ óñòðîéñòâà íå ñîäåðæèòñÿ èíôîðìàöèè */
X502_LOCATION_TYPE_NONE = 0,
/** Â ïîëå ðàñïîëîæåíèÿ óñòðîéñòâà ñîäåðæèòñÿ ñòðîêà ñ àäðåñîì óñòðîéñòâà */
X502_LOCATION_TYPE_ADDR = 1,
/** Â ïîëå ðàñïîëîæåíèÿ óñòðîéñòâà ñîäåðæèòñÿ ñòðîêà ñ èìåíåì ýêçåìïëÿðà */
X502_LOCATION_TYPE_INSTANCE_NAME = 2
} t_x502_location_type;
/** @brief Ôëàãè äëÿ ðåæèìà öèêëè÷åñêîãî âûâîäà
Äàííûå ôëàãè ìîãóò áûòü ïåðåäàíû â X502_OutCycleSetup() è X502_OutCycleStop() */
typedef enum {
/** Ôëàã óêàçûâàåò, ÷òî îñòàíîâ èëè ñìåíà ñèãíàëà ìîãóò ïðîèçîéòè áåç îæèäàíèÿ
êîíöà öèêëà ïðåäûäóùåãî ñèãíàëà. Ýòî ïîçâîëÿåò âûïîëíèòü ïåðåêëþ÷åíèå
áûñòðåå (îäíàêî âñå ðàâíî ìîæåò áûòü ïîñòàâëåíî íà ïåðåäà÷ó äî 256 ÊÑåìïëîâ,
êîòîðûå äîëæíû áóäóò áûòü ïåðåäàíû), íî òî÷êà ñìåíû èëè îñòàíîâà
ìîæåò áûòü â ëþáîì ìåñòå ïåðèîäà */
X502_OUT_CYCLE_FLAGS_FORCE = 0x01,
/** Ôëàã óêàçûâàåò, ÷òî ôóíêöèÿ äîëæíà äîæäàòüñÿ ïîëíîé çàãðóçêè ñèãíàëà
è óñòàíîâêè ñèãíàëà íà âûâîä (äëÿ X502_OutCycleSetup()) èëè çàâåðøåíèÿ
ãåíåðàöèè öèêëè÷åñêîãî ñèãíàëà (äëÿ X502_OutCycleStop()). Áåç íåãî
ôóíêöèè òîëüêî ïîñûëàþò êîìàíäó ìîäóëþ, âîçâðàùàÿ ñðàçó óïðàâëåíèå.
Äàííîå îæèäàíèå ìîæåò çàíèìàòü çíà÷èòåëüíîå âðåìÿ â çàâèñèìîñòè îò ðàçìåðà ñèãíàëà
(à òàêæå ðàçìåðà ïðåäûäóùåãî ñèãíàëà â ñëó÷àå ñìåíû èëè îñòàíîâà ãåíåðàöèè áåç
#X502_OUT_CYCLE_FLAGS_FORCE). Äàííóþ ïðîâåðêó ìîæíî ñäåëàòü è
îòäåëüíîé ôóíêöèé X502_OutCycleCheckSetupDone().
Äàííûé ôëàã èìååò çíà÷åíèÿ òîëüêî â òåõ ñëó÷àÿõ, êîãäà ïîääåðæèâàåòñÿ
ôóíêöèÿ X502_OutCycleCheckSetupDone(), â ïðîòèâíîì ñëó÷àå îí èãíîðèðóåòñÿ. */
X502_OUT_CYCLE_FLAGS_WAIT_DONE = 0x02
} t_x502_out_cycle_flags;
/** @brief Äîïîëíèòåëüíûå âîçìîæíîñòè ìîäóëÿ
Êîäû âîçìîæíîñòåé ìîäóëÿ, êîòîðûå ìîãóò ïîääåðæèâàòüñÿ èëè íåò â çàâèñèìîñòè
îò òèïà ìîäóëÿ, âåðñèé ïðîøèâîê è ò.ï. */
typedef enum {
/** Ïîääåðæêà óñòàíîâêè äåëèòåëÿ ÷àñòîòû âûâîäà, îòëè÷íîãî îò #X502_OUT_FREQ_DIV_DEFAULT */
X502_FEATURE_OUT_FREQ_DIV = 1,
/** Âîçìîæíîñòü ÷òåíèÿ ôëàãîâ ñîñòîÿíèÿ âûâîäà ñ ïîìîùüþ X502_OutGetStatusFlags() */
X502_FEATURE_OUT_STATUS_FLAGS = 2
} t_x502_features;
/** Ôëàãè ñîñòîÿíèÿ äëÿ ñèíõðîííîãî âûâîäà */
typedef enum {
/** Ôëàã óêàçûâàåò, ÷òî â íàñòîÿùåå âðåìÿ áóôåð â ìîäóëå íà ïåðåäà÷ó ïóñò */
X502_OUT_STATUS_FLAG_BUF_IS_EMPTY = 0x01,
/** Ôëàã óêàçûâàåò, ÷òî áûëî îïóñòîøåíèå áóôåðà íà âûâîä ñ íà÷àëà ñòàðòà ñèíõðîííîãî
ââîäà-âûâîäà èëè ñ ìîìåíòà ïîñëåäíåãî ÷òåíèÿ ñòàòóñà ñ ïîìîùüþ
X502_OutGetStatusFlags() (â çàâèñèìîñòè îò òîãî, ÷òî áûëî ïîñëåäíèì) */
X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY = 0x02
} t_x502_out_status_flags;
/** Ïàðàìåòðû ìîäóëåé */
typedef enum {
X502_PARAM_UNKNOWN = 0, /**< Íåèçâåñòíûé ïàðàìåòð */
LTA37_WRITE_CTRL2_REG = 1, /**< çàïèñü êîíòðîëüíîãî ðåãèñòðà äëÿ òåñòîâ */
} t_x502_params;
/** @} */
/***************************************************************************//**
@addtogroup type_list Òèïû äàííûõ
@{
*****************************************************************************/
/** @brief Âíóòðåííÿÿ èíôîðìàöèÿ çàïèñè î óñòðîéñòâå
Íåïðîçðà÷íàÿ ñòðóêòóðà ñ èíôîðìàöèåé, äîñòàòî÷íîé äëÿ óñòàíîâëåíèÿ
ñ íèì ñâÿçè. Çàâèñèò îò òèïà óñòðîéñòâà, èíòåðôåéñà ïîäêëþ÷åíèÿ è íå
äîñòóïíà ïîëüçîâàòåëþ íàïðÿìóþ, à èñïîëüçóåòñÿ áèáëèîòåêîé â
X502_OpenByDevRecord() */
typedef struct st_x502_devrec_inptr t_x502_devrec_inptr;
/** @brief Çàïèñü î óñòðîéñòâå
Ñòðóêòóðà, îïèñûâàþùàÿ óñòðîéñòâî, ïî êîòîðîé ñ íèì ìîæíî óñòàíîâèòü ñîåäèíåíèå */
typedef struct {
uint32_t sign; /**< Ïðèçíàê äåéñòâèòåëüíîé ñòðóêòóðû.
Åñëè çàïèñü äåéñòâèòåëüíà (ñîîòâåòñòâóåò êàêîìó-ëèáî óñòðîéñòâó),
òî äîëæåí áûòü ðàâåí #X502_DEVREC_SIGN) */
char devname[X502_DEVNAME_SIZE]; /**< Íàçâàíèå óñòðîéñòâà */
char serial[X502_SERIAL_SIZE]; /**< Ñåðèéíûé íîìåð */
char location[X502_LOCATION_STR_SIZE]; /**< Îïèñàíèå ïîäêëþ÷åíèÿ (åñëè åñòü) */
uint32_t flags; /**< Ôëàãè èç #t_x502_dev_flags, îïèñûâàþùèå óñòðîéñòâî */
uint8_t iface; /**< Èíòåðôåéñ, ïî êîòîðîìó ïîäêëþ÷åíî óñòðîéñòâî */
uint8_t location_type; /**< Îïðåäåëÿåò, ÷òî èìåííî ñîõðàíåíî â ïîëå location
(îäíî çíà÷åíèå èç #t_x502_location_type) */
char res[122]; /**< Ðåçåðâ */
t_x502_devrec_inptr* internal; /**< Íåïðîçðà÷íûé óêàçàòåëü íà ñòðóêòóðó ñ
äîïîëíèòåëüíîé èíôîðìàöèåé, íåîáõîäèìîé
äëÿ îòêðûòèÿ óñòðîéñòâà */
} t_x502_devrec;
/** @brief Îïèñàòåëü ìîäóëÿ
Íåïðîçðà÷íûé óêàçàòåëü íà ñòðóêòóðó,
ñîäåðæàùóþ èíôîðìàöèþ î íàñòðîéêàõ ìîäóëÿ è òåêóùåì ñîåäèíåíèè ñ íèì.
Ïîëüçîâàòåëüñêîé ïðîãðàììå íå äîñòóïíû ïîëÿ ñòðóêòóðû íàïðÿìóþ, à òîëüêî
÷åðåç ôóíêöèè áèáëèîòåêè.
Ôóíêöèè óïðàâëåíèÿ ìîäóëåì ïðèíèìàþò îïèñàòåëü ìîäóëÿ ñâîèì ïåðâûì ïàðàìåòðîì.
Îïèñàòåëü ìîäóëÿ ñîçäàåòñÿ ñ ïîìîùüþ X502_Create() è â êîíöå ðàáîòû
îñâîáîæäàåòñÿ ñ ïîìîùüþ X502_Free(). */
typedef struct st_x502* t_x502_hnd;
/** @brief Ñïèñîê ñåðèéíûé íîìåðîâ
Òèï îïðåäåëÿåò ìàññèâ ñåðèéíûõ íîìåðîâ äëÿ êîëè÷åñòâà ìîäóëåé, îïðåäåëÿåìîãî
íà ýòàïå ðàáîòû ïðîãðàììû. */
typedef char (*t_x502_serial_list)[X502_SERIAL_SIZE];
/** @brief Êàëèáðîâî÷íûå êîýôôèöèåíòû äèàïàçîíà.
Ñòðóêòóðà ñîäåðæèò êàëèáðîâî÷íûå çíà÷åíèÿ ñìåùåíèÿ íóëÿ è êîýôôèöèåíòà
øêàëû äëÿ îäíîãî äèàïàçîíà ÀÖÏ èëè ÖÀÏ.Ðåçóëüòèðóþùåå çíà÷åíèå ÀÖÏ
âû÷èñëÿåòñÿ êàê (val - offs) * k, ãäå val - íåîòêàëèáðîâàííîå çíà÷åíèå */
typedef struct {
double offs; /**< ñìåùåíèå íóëÿ */
double k; /**< êîýôôèöèåíò øêàëû */
} t_x502_cbr_coef;
/** @brief Êîýôôèöèåíòû äëÿ êàëèáðîâêè ôèëüðà êîððåêöèè À×Õ
Ñòðóêòóðà îïèñûâàåò êîýôôèöèåíòû è ïàðàìåòðû, èñïîëüçóåìûå äëÿ êîððåêöèè À×Õ ÖÀÏ */
typedef struct {
double Fd; /**< ×àñòîòà ãåíåðàöèè ÖÀÏ, íà êîòîðîé èçìåðåíî îòíîøåíèå àìïëèòóä. */
double SigFreq; /**< ×àñòîòà ñèãíàëà, äëÿ êîòîðîé èçìåðåíî îòíîøåíèå àìïëèòóä. */
/** Íàáîð îòíîøåíèé ðåàëüíî âûñòàâëåííîé àìïëèòóäû ñèíóñîèäàëüíîãî ñèãíàëà
* ÷àñòîòû @fieldref{TLTR35_AFC_COEF,SigFreq} ê çàäàâàåìîé àìïëèòóäå
* ïðè ÷àñòîòå ãåíåðàöèè @fieldref{TLTR35_AFC_COEF,Fd} äëÿ êàæäîãî êàíàëà ÖÀÏ. */
double K[X502_DAC_CH_CNT_MAX];
} t_x502_afc_coef;
/** @brief Êàëèáðîâî÷íûå êîýôôèöèåíòû ìîäóëÿ
Ñòðóêòóðà, ñîäåðæàùàÿ âñå êàëèáðîâî÷íûå êîýôôèöèåíòû, êîòîðûå
èñïîëüçóþòñÿ ìîäóëåì L-502/E-502 */
typedef struct {
/** Êàëèáðîâî÷íûå êîýôôèöèåíòû ÀÖÏ */
t_x502_cbr_coef adc[X502_ADC_RANGE_CNT];
/** Êàëèáðîâî÷íûå êîýôôèöèåíòû ÖÀÏ */
t_x502_cbr_coef dac[X502_DAC_CH_CNT_MAX];
/** Êàëèáðîâî÷íûå êîýôôèöèåíòû ôèëüòðà êîððåêöèè À×Õ äëÿ ÖÀÏ LTA37 */
t_x502_afc_coef afc_coef;
} t_x502_cbr;
/** @brief Èíôîðìàöèÿ î ìîäóëå L-502/E-502
Ñòðóêòóðà, ñîäåðæàùàÿ ïîñòîÿííóþ èíôîðìàöèÿ î ìîäóëå L-502/E-502, êîòîðàÿ êàê ïðàâèëî
íå èçìåíÿåòñÿ ïîñëå îòêðûòèÿ
Âíèìàíèå! Áèíàðíàÿ ñîâìåñòèìîñü ìåæäó âåðñèÿìè áèáëèîòåê íå ãàðàíòèðóåòñÿ!
Èñïîëüçóåòå òîëüêî òå âåðñèè áèáëèîòåê ñ êîòîðûìè áûëà ñêîìïèëèðîâàí ïðîãðàììà!
*/
typedef struct {
char name[X502_DEVNAME_SIZE]; /**< Íàçâàíèå óñòðîéñòâà ("L502" èëè "E502" èëè "E16") */
char serial[X502_SERIAL_SIZE]; /**< Ñåðèéíûé íîìåð */
uint32_t devflags; /**< Ôëàãè èç #t_x502_dev_flags, îïèñûâàþùèå íàëè÷èå
â ìîäóëå îïðåäåëåííûõ îïöèé */
uint16_t fpga_ver; /**< Âåðñèÿ ÏËÈÑ (ñòàðøèé áàéò - ìàæîðíàÿ, ìëàäøèé - ìèíîðíàÿ) */
uint8_t plda_ver; /**< Âåðñèÿ ÏËÈÑ, óïðàâëÿþùåãî àíàëîãîâîé ÷àñòüþ */
uint8_t board_rev; /**< Ðåâèçèÿ ïëàòû */
uint32_t mcu_firmware_ver; /**< Âåðñèÿ ïðîøèâêè êîíòðîëëåðà Cortex-M4. Äåéñòâèòåëüíà òîëüêî äëÿ ìîäóëÿ E-502 */
uint32_t flash_size; /**< Ðàçìåð âíåøíåé flash-ïàìÿòè â áàéòàõ */
uint8_t factory_mac[X502_MAC_ADDR_SIZE]; /**< Çàâîäñêîé MAC-àäðåñ --- äåéñòâèòåëåí òîëüêî äëÿ
óñòðîéñòâ ñ Ethernet-èíòåðôåéñîì */
t_x502_cbr cbr; /**< Çàâîäñêèå êàëèáðîâî÷íûå êîýôôèöèåíòû (èç Flash-ïàìÿòè) */
} t_x502_info;
/** @} */
/** @addtogroup func_list Ôóíêöèè
@{ **/
/***************************************************************************//**
@addtogroup func_hnd Ôóíêöèè äëÿ ñîçäàíèÿ è îñâîáîæäåíèÿ îïèñàòåëÿ ìîäóëÿ
@{
*******************************************************************************/
/***************************************************************************//**
@brief Ñîçäàíèå îïèñàòåëÿ ìîäóëÿ
Ñîçäàíèå îïèñàòåëÿ ìîäóëÿ, äëÿ ïîñëåäóþùåé ðàáîòû ñ ìîäóëåì E-502 èëè L-502.
 ñëó÷àå óñïåøíîãî âûäåëåíèÿ ïàìÿòè èíèöèàëèçèðóåò ïîëÿ îïèñàòåëÿ
çíà÷åíèÿìè ïî óìîë÷àíèþ.
@return NULL â ñëó÷àå îøèáêè, èíà÷å - îïèñàòåëü ìîäóëÿ
*******************************************************************************/
X502_EXPORT(t_x502_hnd) X502_Create(void);
/***************************************************************************//**
@brief Îñâîáîæäåíèå îïèñàòåëÿ ìîäóëÿ
Îñâîáîæäåíèå ïàìÿòè, âûäåëåííîé ïîä îïèñàòåëü ìîäóëÿ ñ ïîìîùüþ X502_Create().
Ïîñëå ýòîãî îïèñàòåëü óæå èñïîëüçîâàòü íåëüçÿ, íåçàâèñèìî îò âîçâðàùåííîãî
çíà÷åíèÿ!
@param[in] hnd Îïèñàòåëü óñòðîéñòâà
@return Êîä îøèáêè
*******************************************************************************/
X502_EXPORT(int32_t) X502_Free(t_x502_hnd hnd);
/** @} */
/***************************************************************************//**
@addtogroup func_devrec Ôóíêöèè äëÿ ðàáîòû ñ çàïèñÿìè îá óñòðîéñòâå
@{
*******************************************************************************/
/***************************************************************************//**
@brief Îòêðûòü ñîåäèíåíèå ñ ìîäóëåì ïî çàïèñè î óñòðîéñòâå
Ôóíêöèÿ óñòàíàâëèâàåò ñîåäèíåíèå ñ ìîäóëåì E-502 èëè L-502 ïî çàïèñè îá ýòîì óñòðîéñòâå.
Íåîáõîäèìûå äåéñòâèÿ çàâèñÿò îò òîãî, íà êàêîå óñòðîéñòâî ïîäêëþ÷åííîå ïî
êàêîìó èíòåðôåéñó ññûëàåòñÿ çàïèñü. Ñàìè çàïèñè ñîçäàþòñÿ ñïåöèàëüíûìè
ôóíêöèÿìè (ñâîè äëÿ êàæäîãî òèïà ìîäóëÿ è èíòåðôåéñà ïîäêëþ÷åíèÿ) è íå
äîëæíû èçìåíÿòüñÿ ïîëüçîâàòåëåì âðó÷íóþ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] devrec Çàïèñü î óñòðîéñòâå, ñîäåðæàùàÿ íåîáõîäèìóþ èíôîðìàöèþ
äëÿ óñòàíîâëåíèÿ ñ íèì ñâÿçè
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_OpenByDevRecord(t_x502_hnd hnd, const t_x502_devrec *devrec);
/***************************************************************************//**
@brief Îñâîáîæäåíèå çàïèñåé îá óñòðîéñòâàõ
Ôóíêöèÿ î÷èùàåò ðåñóðñû, âûäåëåííûå ïðè èíèöèàëèçàöèè çàïèñè î óñòðîéñòâå
ïîä èíôîðìàöèþ, íåîáõîäèìóþ äëÿ îòêðûòèÿ óñòðîéñòâà.
Äàííàÿ ôóíêöèÿ äîëæíà âûçûâàòüñÿ ïîñëå èíèöèàëèçàöèè
çàïèñè î óñòðîéñòâå îäíîé èç ñîîòâåòñòâóþùèõ ôóíêöèé ïîñëå òîãî, êîãäà
çàïèñü óæå íå íóæíà. Ïîñëå óñòàíîâêè ñâÿçè ñ óñòðîéñòâîì ÷åðåç
X502_OpenByDevRecord() çàïèñü íå èñïîëüçóåòñÿ â äàëüíåéøåì è åå ìîæíî
ïðè æåëàíèè ñðàçó îñâîáîäèòü, íå çàêðûâàÿ ñîåäèíåíèÿ ñ óñòðîéñòâîì.
Ôóíêöèÿ ìîæåò î÷èñòèòü ñðàçó íåñêîëüêî çàïèñåé èç ìàññèâà (åñëè î÷èùàåòñÿ
îäíà, òî â êà÷åñòâå ðàçìåðà äîïóñòèìî óêàçûâàòü 1).
@param[in] list Ìàññèâ çàïèñåé î óñòðîéñòâå èëè óêàçàòåëü íà åäèíñòâåííóþ
çàïèñü, ðåñóðñû êîòîðîé (êîòîðûõ) íóæíî îñâîáîäèòü.
@param[in] size Êîëè÷åñòâî çàïèñåé â ìàññèâå
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_FreeDevRecordList(t_x502_devrec *list, uint32_t size);
/** @} */
/***************************************************************************//**
@addtogroup func_open Ôóíêöèè äëÿ îòêðûòèÿ è ïîëó÷åíèÿ èíôîðìàöèè î ìîäóëå
@{
*******************************************************************************/
/***************************************************************************//**
@brief Çàêðûòèå ñîåäèíåíèÿ ñ ìîäóëåì
Ôóíêöèÿ ðàçðûâàåò ñîåäèíåíèå ñ ìîäóëåì E-502/L-502, åñëè îíî áûëî ðàíåå óñòàíîâëåíî
(â ïðîòèâíîì ñëó÷àå íè÷åãî íå äåëàåò).
Îïèñàòåëü ìîäóëÿ íå îñâîáîæäàåòñÿ.
Ïàìÿòü ïîä îïèñàòåëü ìîäóëÿ äîëæíà áûòü îñâîáîæäåíà âûçîâîì X502_Free().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_Close(t_x502_hnd hnd);
/***************************************************************************//**
@brief Ïðîâåðêà, îòêðûòî ëè ñîåäèíåíèå ñ ìîäóëåì
Ôóíêöèÿ ïðîâåðÿåò, îòêðûòî ëè â äàííûé ìîìåíò ñîåäèíåíèå ñ ìîäóëåì. Åñëè
ñîåäèíåíèå îòêðûòî, òî ôóíêöèÿ âîçâðàùàåò #X502_ERR_OK. Åñëè æå çàêðûòî, òî
ôóíêöèÿ âîçâðàùàåò îøèáêó #X502_ERR_DEVICE_NOT_OPENED.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_IsOpened(t_x502_hnd hnd);
/***************************************************************************//**
@brief Ïîëó÷åíèå èíôîðìàöèè î ìîäóëå
Ïîëó÷åíèå èíôîðìàöèè î ìîäóëå L-502/E-502, ñ êîòîðûì óñòàíîâëåíà ñâÿçü.
Âíèìàíèå! Ïðè èñïîëüçîâàíèè ýòîé ôóíêöèè (êàê è ëþáîé äðóãîé èç ýòîãî api)
âàæíî óáåäèòüñÿ ÷òî ïðè ñáîðêå èñïîëíÿåìîãî ôàéëà, èñïîëüçóåòñÿ çàãîëîâî÷íûé ôàéë
òîé æå âåðñèè ÷òî è áèíàðíûé ôàéë ñàìîé áèáëèîòåêè (x502api.h == x502api.dll)!
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] info Èíôîðìàöèÿ î ìîäóëå (ñìîòðè îïèñàíèå òèïà #t_x502_info).
@return Êîä îøèáêè.
*******************************************************************************/
#ifdef _WIN32
#pragma deprecated(X502_GetDevInfo)
#else
__attribute__((__deprecated__))
#endif
X502_EXPORT(int32_t) X502_GetDevInfo(t_x502_hnd hnd, t_x502_info* info);
/***************************************************************************//**
@brief Ïîëó÷åíèå èíôîðìàöèè î ìîäóëå
Ïîëó÷åíèå èíôîðìàöèè î ìîäóëå L-502/E-502, ñ êîòîðûì óñòàíîâëåíà ñâÿçü.
Âíèìàíèå! Ïðè èñïîëüçîâàíèè ýòîé ôóíêöèè (êàê è ëþáîé äðóãîé èç ýòîãî api)
âàæíî óáåäèòüñÿ ÷òî ïðè ñáîðêå èñïîëíÿåìîãî ôàéëà, èñïîëüçóåòñÿ çàãîëîâî÷íûé ôàéë
òîé æå âåðñèè ÷òî è áèíàðíûé ôàéë ñàìîé áèáëèîòåêè (x502api.h == x502api.dll)!
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] info Èíôîðìàöèÿ î ìîäóëå (ñìîòðè îïèñàíèå òèïà #t_x502_info).
@param[in] size Ðàçìåð sizeof(t_x502_info).
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_GetDevInfo2(t_x502_hnd hnd, t_x502_info* info, uint32_t size);
/** @} */
/***************************************************************************//**
@addtogroup func_config Ôóíêöèè äëÿ èçìåíåíèÿ íàñòðîåê ìîäóëÿ
@{
*******************************************************************************/
/***************************************************************************//**
@brief Ïåðåäà÷à óñòàíîâëåííûõ íàñòðîåê â ìîäóëü
Ôóíêöèÿ âûïîëíÿåò çàïèñü òåêóùèõ íàñòðîåê (êîòîðûå áûëè óñòàíîâëåíû
ñ ïîìîùüþ ôóíêöèé X502_SetXXX) â ìîäóëü.
Äîëæíà âûçûâàòüñÿ ïåðåä çàïóñêîì ïîòîêà äàííûõ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] flags Ôëàãè (ðåçåðâ - äîëæíî áûòü ðàâíî 0).
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_Configure(t_x502_hnd hnd, uint32_t flags);
/***************************************************************************//**
@brief Óñòàíîâêà ïàðàìåòðîâ ëîãè÷åñêîãî êàíàëà
Ôóíêöèÿ óñòàíàâëèâàåò ïàðàìåòðû çàäàííîãî ëîãè÷åñêîãî êàíàëà â ëîãè÷åñêîé
òàáëèöå ÀÖÏ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] lch Íîìåð ëîãè÷åñêîãî êàíàëà.
(îò 0 äî #X502_LTABLE_MAX_CH_CNT-1 èëè äî #E16_LTABLE_MAX_CH_CNT-1 äëÿ E16)
@param[in] phy_ch Íîìåð ôèçè÷åñêîãî êàíàëà ÀÖÏ, íà÷èíàÿ ñ 0
(0-15 äëÿ äèôôåðåíöèàëüíîãî ðåæèìà,
0-31 äëÿ ðåæèìà ñ îáùåé çåìëåé)
@param[in] mode Ðåæèì èçìåðåíèÿ êàíàë ÀÖÏ (çíà÷åíèå òèïà #t_x502_lch_mode)
@param[in] range Äèàïàçîí èçìåðåíèÿ êàíàëà (çíà÷åíèå òèïà #t_x502_adc_range)
@param[in] avg Êîýôôèöèåíò óñðåäíåíèÿ ïî êàíàëó (íå ðåàëèçîâàíî â E16). Íóëåâîå çíà÷åíèå
ñîîòâåòñòâóåò çíà÷åíèþ êîýôôèöèåíòà, îïðåäåëåííîãî
áèáëèîòåêîé. Äëÿ ÿâíîãî çàäàíèÿ êîýôôèöèåíòà óñðåäíåíèÿ
íóæíî ïåðåä çíà÷åíèå îò 1 (îòñóòñòâèå óñðåäíåíèÿ) äî
#X502_LCH_AVG_SIZE_MAX.
 ñëó÷àå åñëè çíà÷åíèå óñðåäíåíèÿ ïðåâûøàåò äåëèòåëü
÷àñòîòû, òî ýòî çíà÷åíèå áóäåò ñêîððåêòèðîâàíî
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetLChannel(t_x502_hnd hnd, uint32_t lch, uint32_t phy_ch,
uint32_t mode, uint32_t range, uint32_t avg);
/***************************************************************************//**
@brief Ïîëó÷åíèå ìàññèâà äèàïàçîíîâ ìîäóëÿ E16
Âîçâðàùàåì óêàçàòåëü íà ìàññèâ:
double ranges[] = {10, 2.5, 0.625, 0.15625};
@param[in] ranges_len Óêàçàòåëü êóäà çàïèñûâàåò ðàçìåð âîçâðàùàåìîãî ìàññèâà
@return Óêàçàòåëü íà ìàññèâ double ðàçìåðîì ranges_len èëè NULL â ñëó÷àå îøèáêè.
*******************************************************************************/
X502_EXPORT(double const*) E16_GetAdcRanges(uint32_t *ranges_len);
/***************************************************************************//**
@brief Ïîëó÷åíèå ìàññèâà äèàïàçîíîâ ìîäóëÿ E502
Âîçâðàùàåì óêàçàòåëü íà ìàññèâ:
double ranges[] = {10., 5., 2., 1., 0.5, 0.2};
@param[in] ranges_len Óêàçàòåëü êóäà çàïèñûâàåò ðàçìåð âîçâðàùàåìîãî ìàññèâà
@return Óêàçàòåëü íà ìàññèâ double ðàçìåðîì ranges_len èëè NULL â ñëó÷àå îøèáêè.
*******************************************************************************/
X502_EXPORT(double const*) E502_GetAdcRanges(uint32_t *ranges_len);
/***************************************************************************//**
@brief Ïîëó÷åíèå ìàññèâà äèàïàçîíîâ ìîäóëÿ
Äëÿ ìîäóëÿ E16:
double ranges[] = {10, 2.5, 0.625, 0.15625};
Äëÿ ìîäóëÿ E502:
double ranges[] = {10., 5., 2., 1., 0.5, 0.2};
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ranges_len Óêàçàòåëü êóäà çàïèñûâàåò ðàçìåð âîçâðàùàåìîãî ìàññèâà
@return Óêàçàòåëü íà ìàññèâ double ðàçìåðîì ranges_len èëè NULL â ñëó÷àå îøèáêè.
*******************************************************************************/
X502_EXPORT(double const*) X502_GetAdcRanges(t_x502_hnd hnd, uint32_t *ranges_len);
/***************************************************************************//**
@brief Óñòàíîâêà êîëè÷åñòâà ëîãè÷åñêèõ êàíàëîâ
Ôóíêöèÿ óñòàíàâëèâàåò êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ â ëîãè÷åñêîé òàáëèöå ÀÖÏ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ
@param[in] lch_cnt Êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ
(îò 1 äî #X502_LTABLE_MAX_CH_CNT èëè äî #E16_LTABLE_MAX_CH_CNT äëÿ E16)
@return Êîä îøèáêè
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetLChannelCount(t_x502_hnd hnd, uint32_t lch_cnt);
/***************************************************************************//**
@brief Ïîëó÷åíèå êîëè÷åñòâà ëîãè÷åñêèõ êàíàëîâ
Ôóíêöèÿ âîçâðàùàåò óñòàíîâëåííîå ðàíåå ñ ïîìîùüþ X502_SetLChannelCount()
êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ â óïðàâëÿþùåé òàáëèöå ÀÖÏ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ
@param[out] lch_cnt Êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ
@return Êîä îøèáêè
*******************************************************************************/
X502_EXPORT(int32_t) X502_GetLChannelCount(t_x502_hnd hnd, uint32_t* lch_cnt);
/***************************************************************************//**
@brief Óñòàíîâêà äåëèòåëÿ ÷àñòîòû ñáîðà äëÿ ÀÖÏ
×àñòîòà ñáîðà ÀÖÏ ïîëó÷àåòñÿ êàê ðåçóëüòàò äåëåíèÿ îïîðíîé ÷àñòîòû
ñèíõðîíèçàöèè (êàê â ñëó÷àå âíåøíåé, òàê è âíóòðåííåé) íà äåëèòåëü,
óñòàíàâëèâàåìûé ýòîé ôóíêöèåé.
Àëüòåðíàòèâîé ýòîé ôóíêöèè ñëóæèò X502_SetAdcFreq(), êîòîðàÿ ðàññ÷èòûâàåò
ýòîò äåëèòåëü íà îñíîâàíèè ïåðåäàííîé òðåáóåìîé ÷àñòîòû ñáîðà ÀÖÏ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] adc_freq_div Äåëèòåëü ÷àñòîòû ÀÖÏ (îò 1 äî #X502_ADC_FREQ_DIV_MAX).
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetAdcFreqDivider(t_x502_hnd hnd, uint32_t adc_freq_div);
/***************************************************************************//**
@brief Óñòàíîâêà çíà÷åíèÿ ìåæêàäðîâîé çàäåðæêè äëÿ ÀÖÏ
Ôóíêöèÿ óñòàíàâëèâàåò ìåæêàäðîâóþ çàäåðæêó äëÿ ÀÖÏ, òî åñòü êîëè÷åñòâî
ïåðèîäîâ îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè, êîòîðîå áóäåò ïðîïóùåíî ïîñëå
ïðîâåäåíèÿ èçìåðåíèÿ ïîñëåäíåãî êàíàëà ëîãè÷åñêîé òàáëèöû äî ïðîâåäåíèÿ
èçìåðåíèÿ, ñîîòâåòñòâóþùåãî ïåðâîìó ëîãè÷åñêîìó êàíàëó ñëåäóþùåãî êàäðà.
Àëüòåðíàòèâîé ìîæåò ÿâëÿòüñÿ ôóíêöèÿ X502_SetAdcFreq(), êîòîðàÿ ðàññ÷èòûâàåò
çíà÷åíèå ìåæêàäðîâîé çàäåðæêè ïî çàäàííûì ïàðàìåòðàì ÷àñòîòû ñáîðà è ÷àñòîòû
ñëåäîâàíèÿ êàäðîâ (÷àñòîòû ñáîðà íà ëîãè÷åñêèé êàíàë).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] delay Çíà÷åíèå ìåæêàäðîâîé çàäåðæêè (îò 0 äî
#X502_ADC_INTERFRAME_DELAY_MAX)
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetAdcInterframeDelay(t_x502_hnd hnd, uint32_t delay);
/***************************************************************************//**
@brief Óñòàíîâêà äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî ââîäà ñ öèôðîâûõ ëèíèé.
×àñòîòà ñèíõðîííîãî ââîäà äàííûõ ñ öèôðîâûõ âõîäîâ ïîëó÷àåòñÿ êàê ðåçóëüòàò
äåëåíèÿ îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè íà äåëèòåëü, óñòàíàâëèâàåìûé ýòîé
ôóíêöèåé.
Àëüòåðíàòèâîé ýòîé ôóíêöèè ñëóæèò X502_SetDinFreq(), êîòîðàÿ ðàññ÷èòûâàåò
ýòîò äåëèòåëü íà îñíîâàíèè ïåðåäàííîé òðåáóåìîé ÷àñòîòû ñèíõðîííîãî ââîäà
ñ öèôðîâûõ ëèíèé.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] din_freq_div Äåëèòåëü ÷àñòîòû ñèíõðîííîãî ââîäà ñ öèôðîâûõ ëèíèé
(îò 1 äî #X502_DIN_FREQ_DIV_MAX).
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetDinFreqDivider(t_x502_hnd hnd, uint32_t din_freq_div);
/***************************************************************************//**
@brief Óñòàíîâêà äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî âûâîäà
×àñòîòà ñèíõðîííîãî âûâîäà äàííûõ ïîëó÷àåòñÿ êàê ðåçóëüòàò äåëåíèÿ îïîðíîé
÷àñòîòû ñèíõðîíèçàöèè íà äåëèòåëü, óñòàíàâëèâàåìûé ýòîé ôóíêöèåé.
Èñïîëüçóåòñÿ îáùàÿ ÷àñòîòà âûâîäà äëÿ êàæäîãî êàíàëà ÖÀÏ è äëÿ öèôðîâûõ
ëèíèé (âûâîä îñóùåñòâëÿåòñÿ ïàðàëëåëüíî). ×àñòîòà âûâîäà íå ìîæåò áûòü
áîëüøå ïîëîâèíû îïîðíîé ÷àñòîòû.
Àëüòåðíàòèâîé ýòîé ôóíêöèè ñëóæèò X502_SetOutFreq(), êîòîðàÿ ðàññ÷èòûâàåò
ýòîò äåëèòåëü íà îñíîâàíèè ïåðåäàííîé òðåáóåìîé ÷àñòîòû ñèíõðîííîãî âûâîäà.
@note Äëÿ ìîäóëÿ L-502, ÷òîáû áûëà âîçìîæíîñòü óñòàíîâèòü äåëèòåëü, îòëè÷íûé îò
#X502_OUT_FREQ_DIV_DEFAULT, íåîáõîäèìî îáíîâèòü ïðîøèâêó ÏËÈÑ äî âåðñèè 0.5 èëè âûøå.
Äëÿ ìîäóëÿ E-502 âîçìîæíîñòü âñåãäà ïîääåðæèâàåòñÿ. Ïðîâåðèòü ïðîãðàììíî íàëè÷èå
äàííîé âîçìîæíîñòè ìîæíî ñ ïîìîùüþ ôóíêöèè X502_CheckFeature().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] out_freq_div Äåëèòåëü ÷àñòîòû ñèíõðîííîãî âûâîäà
(îò #X502_OUT_FREQ_DIV_MIN äî #X502_OUT_FREQ_DIV_MAX).
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetOutFreqDivider(t_x502_hnd hnd, uint32_t out_freq_div);
/***************************************************************************//**
@brief Óñòàíîâêà ÷àñòîòû ñáîðà ÀÖÏ
Ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû ÀÖÏ òàê, ÷òîáû ïîëó÷åííàÿ ÷àñòîòà ñáîðà
áûëà íàèáîëåå áëèçêà ê óêàçàííîé â ïàðàìåòðå f_acq. Ôóíêöèÿ âîçâðàùàåò
â ýòîì æå ïàðàìåòðå ðåàëüíóþ ÷àñòîòó, êîòîðàÿ áûëà óñòàíîâëåíà.
Òàê æå ôóíêöèÿ ìîæåò ïîäîáðàòü çíà÷åíèå ìåæêàäðîâîé çàäåðæêè òàê, ÷òîáû
÷àñòîòà ñëåäîâàíèÿ êàäðîâ (÷àñòîòà ñáîðà íà ëîãè÷åñêèé êàíàë) áûëà íàèáîëåå
áëèçêà ê óêàçàííîìó çíà÷åíèþ.
Äëÿ ýòîãî ñëåäóåò ïåðåäàòü òðåáóåìîå çíà÷åíèå â ïåðåìåííîé f_frame (â íåé
òàêæå ïî çàâåðøåíèþ áóäåò âîçâðàùåíî çíà÷åíèå óñòàíîâëåííîé ÷àñòîòû).
Åñëè â êà÷åñòâå f_frame ïåðåäàí íóëåâîé óêàçàòåëü, òî áóäåò óñòàíîâëåíà
íóëåâàÿ ìåæêàäðîâàÿ çàäåðæêà.
Åñëè íåîáõîäèìî èçìåíèòü çíà÷åíèå îïîðíîé ÷àñòîòû, òî äàííàÿ ôóíêöèÿ äîëæíà
áûòü âûçâàíà ïîñëå X502_SetSyncMode() è X502_SetRefFreq() / X502_SetExtRefFreqValue(),
â ïðîòèâíîì ñëó÷àå ïîëó÷åííûå äåëèòåëè áóäóò äàâàòü íåâåðíîå çíà÷åíèå ÷àñòîòû.
Åñëè óñòàíàâëèâàåòñÿ ÷àñòîòà êàäðîâ, òî ôóíêöèÿ äîëæíà âûçûâàòüñÿ ïîñëå
òîãî, êàê áûëî çàäàííî íóæíîå êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ â óïðàâëÿþùåé
òàáëèöå ñ ïîìîùüþ X502_SetLChannelCount().
Ïðè èñïîëüçîâàíèè âíåøíåé îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè ýòà ôóíêöèÿ áóäåò
äàâàòü âåðíûé ðåçóëüòàò, òîëüêî åñëè ýòà âíåøíÿÿ ÷àñòîòà ñîîòâåòñòâóåò
çíà÷åíèþ, óñòàíîâëåííîìó ñ ïîìîùüþ X502_SetRefFreq().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in,out] f_acq Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû ñáîðà
ÀÖÏ â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò ðåàëüíî
óñòàíîâëåííîå çíà÷åíèå ÷àñòîòû.
@param[in,out] f_frame Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèå ÷àñòîòû ñáîðà
êàäðîâ (÷àñòîòû ñáîðà íà ëîãè÷åñêèé êàíàë) ÀÖÏ
â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò ðåàëüíî
óñòàíîâëåííîå çíà÷åíèå. Åñëè ïåðåäàí íóëåâîé
óêàçàòåëü, òî óñòàíàâëèâàåò ìàêñèìàëüíóþ ÷àñòîòó
ñáîðà êàäðîâ (íóëåâóþ ìåæêàäðîâóþ çàäåðæêó).
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetAdcFreq(t_x502_hnd hnd, double *f_acq, double *f_frame);
/***************************************************************************//**
@brief Óñòàíîâêà ÷àñòîòû ñèíõðîííîãî ââîäà ñ öèôðîâûõ âõîäîâ
Ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû ââîäà çíà÷åíèé ñ öèôðîâûõ âõîäîâ òàê, ÷òîáû
ïîëó÷åííàÿ ÷àñòîòà ââîäà áûëà íàèáîëåå áëèçêà ê óêàçàííîé. Ôóíêöèÿ âîçâðàùàåò
â ýòîì æå ïàðàìåòðå ðåàëüíóþ ÷àñòîòó, êîòîðàÿ áûëà óñòàíîâëåíà.
Åñëè íåîáõîäèìî èçìåíèòü çíà÷åíèå îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè, òî äàííàÿ
ôóíêöèÿ äîëæíà áûòü âûçâàíà ïîñëå X502_SetSyncMode() è
X502_SetRefFreq()/ X502_SetExtRefFreqValue(), â ïðîòèâíîì ñëó÷àå ïîëó÷åííûé
äåëèòåëü áóäåò äàâàòü íåâåðíîå çíà÷åíèå ÷àñòîòû.
Ïðè èñïîëüçîâàíèè âíåøíåé îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè ýòà ôóíêöèÿ áóäåò
äàâàòü âåðíûé ðåçóëüòàò, òîëüêî åñëè ýòà âíåøíÿÿ ÷àñòîòà ñîîòâåòñòâóåò
çíà÷åíèþ, óñòàíîâëåííîìó ñ ïîìîùüþ X502_SetRefFreq().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in,out] f_din Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû ââîäà
ñ öèôðîâûõ âõîäîâ â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò
ðåàëüíî óñòàíîâëåííîå çíà÷åíèå ÷àñòîòû.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetDinFreq(t_x502_hnd hnd, double *f_din);
/***************************************************************************//**
@brief Óñòàíîâêà ÷àñòîòû ñèíõðîííîãî âûâîäà
Ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû ñèíõðîííîãî âûâîäà òàê, ÷òîáû
ïîëó÷åííàÿ ÷àñòîòà áûëà íàèáîëåå áëèçêà ê óêàçàííîé. Ôóíêöèÿ âîçâðàùàåò
â ýòîì æå ïàðàìåòðå ðåàëüíóþ ÷àñòîòó, êîòîðàÿ áûëà óñòàíîâëåíà.
Åñëè íåîáõîäèìî èçìåíèòü çíà÷åíèå îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè, òî äàííàÿ
ôóíêöèÿ äîëæíà áûòü âûçâàíà ïîñëå X502_SetSyncMode() è
X502_SetRefFreq() / X502_SetExtRefFreqValue(), â ïðîòèâíîì ñëó÷àå
ïîëó÷åííûé äåëèòåëü áóäåò äàâàòü íåâåðíîå çíà÷åíèå ÷àñòîòû.
Ïðè èñïîëüçîâàíèè âíåøíåé îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè ýòà ôóíêöèÿ áóäåò
äàâàòü âåðíûé ðåçóëüòàò, òîëüêî åñëè ýòà âíåøíÿÿ ÷àñòîòà ñîîòâåòñòâóåò
çíà÷åíèþ, óñòàíîâëåííîìó ñ ïîìîùüþ X502_SetRefFreq().
@note Äëÿ ìîäóëÿ L-502, ÷òîáû áûëà âîçìîæíîñòü óñòàíîâèòü ÷àñòîòó, îòëè÷íóþ îò
îïîðíîé ÷àñòîòû, äåëåííîé íà #X502_OUT_FREQ_DIV_DEFAULT, íåîáõîäèìî îáíîâèòü
ïðîøèâêó ÏËÈÑ äî âåðñèè 0.5 èëè âûøå.
Äëÿ ìîäóëÿ E-502 âîçìîæíîñòü âñåãäà ïîääåðæèâàåòñÿ.
Ïðîâåðèòü ïðîãðàììíî íàëè÷èå äàííîé âîçìîæíîñòè ìîæíî ñ ïîìîùüþ
ôóíêöèè X502_CheckFeature().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in,out] f_dout Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû
ñèíõðîííîãî âûâîäà â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò
ðåàëüíî óñòàíîâëåííîå çíà÷åíèå ÷àñòîòû.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetOutFreq(t_x502_hnd hnd, double *f_dout);
/***************************************************************************//**
@brief Ïîëó÷èòü òåêóùèå çíà÷åíèÿ ÷àñòîò ñáîðà ÀÖÏ
Ôóíêöèÿ âîçâðàùàåò òêóùèå óñòàíîâëåííûå äëÿ ìîäóëÿ çíà÷åíèÿ ÷àñòîòû ñáîðà
è ÷àñòîòû êàäðîâ ÀÖÏ (÷àñòîòû íà ëîãè÷åñêèé êàíàë) â Ãåðöàõ, êîòîðûå áûëè
óñòàíîâëåíû äî ýòîãî ñ ïîìîùüþ X502_SetAdcFreq() èëè ñ ïîìîùüþ ôóíêöèé
X502_SetAdcFreqDivider() / X502_SetAdcInterframeDelay().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] f_acq Åñëè íå NULL, òî íà âûõîäå âîçâðàùàåòñÿ òåêóùåå
çíà÷åíèå ÷àñòîòû ñáîðà ÀÖÏ.
@param[out] f_frame Åñëè íå NULL, òî íà âûõîäå âîçâðàùàåòñÿ òåêóùåå
çíà÷åíèå ÷àñòîòû êàäðîâ ÀÖÏ.
******************************************************************************/
X502_EXPORT(int32_t) X502_GetAdcFreq(t_x502_hnd hnd, double *f_acq, double *f_frame);
/***************************************************************************//**
@brief Óñòàíîâêà çíà÷åíèÿ âíóòðåííåé îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè
Ôóíêöèÿ çàäàåò çíà÷åíèå âíóòðåííåé îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè, îò êîòîðîé
ïîëó÷àþòñÿ âñå ÷àñòîòû ñèíõðîííîãî ââîäà/âûâîäà ïîñðåäñòâîì äåëåíèÿ
íà îïðåäåëåííûé äåëèòåëü.
Äàííàÿ ôóíêöèÿ ïðè âíóòðåííåé îïîðíîé ÷àñòåòå âûáèðàåò îäíó èç äâóõ äîñòóïíûõ
÷àñòîò â 2ÌÃö èëè 1.5 ÌÃö(2ÌÃö ÿâëÿåòñÿ çíà÷åíèåì ïî óìîë÷àíèþ), äëÿ çàäàíèÿ
êîòîðûõ ìîæíî ââåäåíû êîíñòàíòû èç #t_x502_ref_freq.
Ïðè èñïîëüçîâàíèè âíåøíåé îïîðíîé ÷àñòîòû ñëåäóåò èñïîëüçîâàòü
X502_SetExtRefFreqValue().
Äëÿ ìîäóëÿ E-502 âûâîä íà ÖÀÏ ïðè îïîðíîé ÷àñòîòå 1.5 ÌÃö ðàáîòàåò òîëüêî
äëÿ âåðñèè ïðîøèâêè PLDA 1 èëè âûøå.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] freq Çíà÷åíèå èç #t_x502_ref_freq, êîòîðîå çàäàåò
âûáðàííóþ îïîðíóþ ÷àñòîòó.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetRefFreq(t_x502_hnd hnd, uint32_t freq);
/***************************************************************************//**
@brief Óñòàíîâêà çíà÷åíèÿ âíåøíåé îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè
Ïðè óñòàíîâêå âíåøíåé îïîðíîé ÷àñòîòû (âûçîâ X502_SetSyncMode() ñî çàí÷åíèåì,
îòëè÷íûì îò #X502_SYNC_INTERNAL) äàííàÿ ôóíêöèÿ ïîçâîëÿåò çàäàòü
÷àñòîòó âíåøíåé îïîðíîé ÷àñòîòû, êîòîðîÿ ìîæåò áûòü ëþáàÿ, íî íå ïðåâûøàòü
1.5 ÌÃö.
Äàííàÿ ôóíêöèÿ íå âëèÿåò íà íàñòðîéêè ñàìîãî ìîäóëÿ, îäíàêî óñòàíîâêà êîððåêòíîãî
çíà÷åíèÿ ïîçâîëÿåò ïðàâèëüíî óñòàíîâèòü íóæíóþ ÷àñòîòó ñáîðà ôóíêöèÿìè
X502_SetAdcFreq(), X502_SetDinFreq() è X502_SetOutFreq(), à òàêæå êîððåêòíî
ðàññ÷èòàòü çíà÷åíèÿ ïî óìîë÷àíèþ äëÿ ðàçìåðà áóôåðà è øàãà ïåðåäà÷è äàííûõ
ìåæäó ìîäóëåì è ÏÊ.
Äàííàÿ ôóíêöèÿ äîñòóïíà â áèáëèîòåêå âåðñèè 1.1.4 èëè âûøå.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] freq Çíà÷åíèå âíåøíåé îïîðíîé ÷àñòîòû â Ãö.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetExtRefFreqValue(t_x502_hnd hnd, double freq);
/***************************************************************************//**
@brief Óñòàíîâêà çíà÷åíèÿ äëÿ àíàëîãîâîé ñèíõðîíèçàöèè (òîëüêî äëÿ E16)
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] phy_ch Íîìåð ôèçè÷åñêîãî êàíàëà ÀÖÏ, íà÷èíàÿ ñ 0
(0-15 äëÿ äèôôåðåíöèàëüíîãî ðåæèìà,
0-31 äëÿ ðåæèìà ñ îáùåé çåìëåé)
@param[in] mode Ðåæèì èçìåðåíèÿ êàíàë ÀÖÏ (çíà÷åíèå òèïà #t_x502_lch_mode)
@param[in] range Äèàïàçîí èçìåðåíèÿ êàíàëà (çíà÷åíèå òèïà #t_x502_adc_range)
@param[in] value Çíà÷åíèå â Âîëüòàõ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetAdcSyncStartValue(t_x502_hnd hnd, uint32_t phy_ch, uint32_t mode, uint32_t range, double value);
/***************************************************************************//**
@brief Ïîëó÷åíèå çíà÷åíèÿ îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè
Äàííàÿ ôóíêöèÿ âîçâðàùàåò òåêóùåå çíà÷åíèå îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè,
êîòîðîå èñïîëüçóåòñÿ áèáëèîòåêîé â ôóíêöèÿõ X502_SetAdcFreq(), X502_SetDinFreq()
è X502_SetOutFreq(), à òàêæå ïðè ðàññ÷åòå ïàðàìåòðîâ ïåðåäà÷è äàííûõ ìåæäó
ìîäóëåì è ÏÊ.
Ïðè âíóòðåííåé îïîðíîé ÷àñòîòå èñïîëüçóåòñÿ çíà÷åíèå, óñòàíîâëåííîå
X502_SetRefFreq() (1.5 èëè 2 Ìãö), ïðè âíåøíåé --- ÷àñòîòà, óñòàíîâëåííàÿ
ñ ïîìîùüþ ôóíêöèè X502_SetExtRefFreqValue().
Äàííàÿ ôóíêöèÿ äîñòóïíà â áèáëèîòåêå âåðñèè 1.1.4 èëè âûøå.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] freq Çíà÷åíèå âíåøíåé îïîðíîé ÷àñòîòû â Ãö.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_GetRefFreqValue(t_x502_hnd hnd, double *freq);
/***************************************************************************//**
@brief Óñòàíîâêà ðåæèìà ãåíåðàöèè ÷àñòîòû ñèíõðîíèçàöèè
Ôóíêöèÿ óñòàíàâëèâàåò êòî áóäåò ãåíåðàòîðîì îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè -
ñàì ìîäóëü èëè áóäåò èñïîëüçîâàòüñÿ âíåøíèé ñèãíàë.
 ðåæèìå #X502_SYNC_INTERNAL ìîäóëü ñàì áóäåò ãåíåðèðîâàòü äëÿ ñåáÿ
÷àñòîòó ñèíõðîíèçàöèè ñ ÷àñòîòîé, çàäàííîé X502_SetRefFreq().
Ïðè ýòîì çàïóñê ãåíåðàöèè áóäåò îñóùåñòâëåí ïî âûçîâó X502_StreamsStart()
èëè ïî óñëîâèþ, çàäàíîìó â X502_SetSyncStartMode(), à îñòàíîâ
ïî X502_StreamsStop().
 îñòàëüíûõ ðåæèìàõ ñáîð áóäåò îñóùåñòâëÿòüñÿ ïî âíåøíåìó ñèãíàëó
ñèíõðîíèçàöèè.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] sync_mode Çíà÷åíèå èç #t_x502_sync_mode, îïðåäåëÿþùåå êòî
áóäåò èñòî÷íèêîì ÷àñòîòû ñèíõðîíèçàöèè.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetSyncMode(t_x502_hnd hnd, uint32_t sync_mode);
/***************************************************************************//**
@brief Óñòàíîâêà ðåæèìà çàïóñêà ÷àñòîòû ñèíõðîíèçàöèè
Ôóíêöèÿ óñòàíàâëèâàåò óñëîâèå çàïóñêà ñèíõðîííîãî ââîäà/âûâîäà äàííûõ.
Åñëè ñ ïîìîùüþ X502_SetSyncMode() óñòàíîâëåí ðåæèì ñèíõðîíèçàöèè
#X502_SYNC_INTERNAL, òî ïî çàäàííîìó äàííîé ôóíêöèåé óñëîâèþ ìîäóëü íà÷íåò
ãåíåðèðîâàòü ÷àñòîòó ñèíõðîíèçàöèè, â ïðîòèâíîì ñëó÷àå ïî çàäàííîìó óñëîâèþ
ìîäóëü íà÷íåò èñïîëüçîâàòü âíåøíå çàäàííóþ ÷àñòîòó ñèíõðîíèçàöèè
(ò.å. äî âûïîëíåíèÿ óñëîâèÿ ñèãíàë ñèíõðîíèçàöèè íà çàäàííîì âõîäå áóäåò
èãíîðèðîâàòüñÿ).
Ðåæèìû çàäàíèÿ óñëîâèÿ çàïóñêà ñèíõðîíèçàöèè èìåþò òå æå çíà÷åíèÿ,
÷òî è ðåæèìû çàäàíèÿ ñàìîé ÷àñòîòû (ñì. òèï #t_x502_sync_mode).
 ñëó÷àå #X502_SYNC_INTERNAL çàïóñê îñóùåñòâëÿåòñÿ ïðè âûïîëíåíèè ôóíêöèè
X502_StreamsStart(), â ïðîòèâíîì ñëó÷àå - ïîñëå âûïîëíåíèÿ
X502_StreamsStart() ìîäóëü íà÷èíàåò îæèäàòü çàäàííîãî äàííîé ôóíêöèåé óñëîâèÿ.
Ò.å. äàæå ïðè çàäàíèè âíåøíèõ èñòî÷íèêîâ ñèíõðîíèçàöèè, âñå ðàâíî íåîáõîäèìî
âûçûâàòü X502_StreamsStart().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] sync_start_mode Çíà÷åíèå èç #t_x502_sync_mode, îïðåäåëÿþùåå
óñëîâèå çàïóñêà ÷àñòîòû ñèíõðîíèçàöèè.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetSyncStartMode(t_x502_hnd hnd, uint32_t sync_start_mode);
/***************************************************************************//**
@brief Óñòàíîâèòü ðåæèì ðàáîòû ìîäóëÿ
Ôóíêöèÿ óñòàíàâëèâàåò ðåæèì ðàáîòû ìîäóëÿ, êîòîðûé îïðåäåëÿåò áóäåò ëè
ïîòîêè äàííûõ îáðàáàòûâàòü ÏËÈÑ èëè ñèãíàëüíûé ïðîöåññîð BlackFin.
Ïðè âêëþ÷åíèè ïèòàíèÿ ìîäóëåì âñåãäà óïðàâëÿåò ÏËÈÑ.
Ïîñëå çàãðóçêè ïðîøèâêè ñ ïîìîùüþ X502_BfLoadFirmware() ìîäóëü ïåðåõîäèò
â ðåæèì óïðàâëåíèÿ ñèãíàëüíûì ïðîöåññîðîì.
Äàííàÿ ôóíêöèÿ ìîæåò èñïîëüçîâàòüñÿ äëÿ ðó÷íîé óñòàíîâêè ðåæèìà,
íàïðèìåð, äëÿ âîçâðàòà â ðåæèì óïðàâëåíèÿ ÏËÈÑ èëè äëÿ ïåðåêëþ÷åíèÿ â ðåæèì
óïðàâëåíèÿ ñèãíàëüíûì ïðîöåññîðîì, åñëè ïðîøèâêà óæå áûëà çàãðóæåíà
(íàïðèìåð, ÷åðåç JTAG èíòåðôåéñ ïðè îòëàäêå).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] mode Ðåæèì ðàáîòû ìîäóëÿ èç #t_x502_mode.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_SetMode(t_x502_hnd hnd, uint32_t mode);
/***************************************************************************//**
@brief Ïîëó÷åíèå òåêóùåãî ðåæèìà ðàáîòû ìîäóëÿ
Ôóíêöèÿ âîçâðàùàåò òåêóùèé ðåæèì ðàáîòû ìîäóëÿ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] mode  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ òåêóùèé ðåæèì
ðàáîòû ìîäóëÿ (èç #t_x502_mode).
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_GetMode(t_x502_hnd hnd, uint32_t* mode);
/***************************************************************************//**
@brief Óñòàíîâèòü êîýôôèöèåíòû äëÿ êàëèáðîâêè çíà÷åíèé ÀÖÏ
Ôóíêöèÿ çàïèñûâàåò â ÏËÈÑ êîýôôèöèåíòû äëÿ êàëèáðîâêè çíà÷åíèé ÀÖÏ.
Ïðè îòêðûòèè ìîäóëÿ, áèáëèîòåêà ñ÷èòûâàåò êàëèáðîâî÷íûå êîýôôèöèåíòû èç
çàùèùåííîé îáëàñòè Flash-ïàìÿòè ìîäóëÿ è çàïèñûâàåò èõ â ÏËÈÑ äëÿ
âûïîëíåíèÿ êàëèáðîâêè íà ëåòó.
Ðåçóëüòèðóþùåå çíà÷åíèå ÀÖÏ âû÷èñëÿåòñÿ ïî ôîðìóëå (val - offs) * k, ãäå val ---
íåêàëèáðîâàííîå çíà÷åíèå.
Äàííàÿ ôóíêöèÿ ïîçâîëÿåò èçìåíèòü èñïîëüçóåìûå êîýôôèöèåíòû â òî âðåìÿ, ïîêà
íå çàïóùåí ñèíõðîííûé ñáîð äàííûõ. Ïðè ýòîì èçìåíÿþòñÿ òîëüêî òåêóùèå
êîýôôèöèåíòû, à çàâîäñêèå êàëèáðîâî÷íûå êîýôôèöèåíòû èç Flash-ïàìÿòè
ñîõðàíÿþò ñâîå çíà÷åíèå è ïðè ñëåäóþùåì îòêðûòèè áóäóò âîññòàíîâëåíû.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] range Äèàïàçîí ÀÖÏ (èç #t_x502_adc_range).
@param[in] k Óñòàíàâëèâàåìîå çíà÷åíèå êîýôôèöèåíòà øêàëû.
@param[in] offs Óñòàíàâëèâàåìîå çíà÷åíèå ñìåùåíèÿ íóëÿ.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_SetAdcCoef(t_x502_hnd hnd, uint32_t range, double k, double offs);
/***************************************************************************//**
@brief Ïîëó÷åíèå òåêóùèõ êàëèáðîâî÷íûõ êîýôôèöèåíòîâ ÀÖÏ
Ôóíêöèÿ âîçâðàùàåò òåêóùèå êàëèáðîâî÷íûå êîýôôèöèåíòû äëÿ çàäàííîãî äèàïàçîíà
èçìåðåíèÿ ÀÖÏ. Ýòè êîýôôèöèåíòû ìîãóò îòëè÷àòüñÿ îò çàâîäñêèõ çíà÷åíèé,
ñîõðàíåííûõ âî Flash-ïàìÿòè ìîäóëÿ, íàïðèìåð, åñëè ïîëüçîâàòåëü èñïîëüçîâàë
X502_SetAdcCoef() äëÿ óñòàíîâêè ñâîèõ êîýôôèöèåíòîâ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] range Äèàïàçîí ÀÖÏ (èç #t_x502_adc_range).
@param[in] k  äàííîé ïåðåìåííîé âîçâðàùàåòñÿ òåêóùèé êîýôôèöèåíò
øêàëû.
@param[in] offs  äàííîé ïåðåìåííîé âîçâðàùàåòñÿ òåêóùåå ñìåùåíèå íóëÿ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_GetAdcCoef(t_x502_hnd hnd, uint32_t range, double* k, double* offs);
/***************************************************************************//**
@brief Óñòàíîâèòü êîýôôèöèåíòû äëÿ êàëèáðîâêè çíà÷åíèé ÖÀÏ
Ôóíêöèÿ óñòàíàâëèâàåò êàëèáðîâî÷íûå êîýôôèöèåíòû äëÿ çàäàííîãî êàíàëà ÀÖÏ,
êîòîðûå áóäóò èñïîëüçîâàòüñÿ ôóíêöèÿìè x502api äëÿ êàëèáðîâêè âûâîäèìûõ
çíà÷åíèé ÖÀÏ, åñëè óêàçàí ôàëàã #X502_DAC_FLAGS_CALIBR.
Îòêàëèáðîâàííîå çíà÷åíèå ÖÀÏ â êîäàõ ïîëó÷àåòñÿ êàê
(val + offs) * k, ãäå val --- íåêàëèáðîâàííîå çíà÷åíèå (â êîäàõ).
Ïðè îòêðûòèè ìîäóëÿ, áèáëèîòåêà ñ÷èòûâàåò êàëèáðîâî÷íûå êîýôôèöèåíòû èç
çàùèùåííîé îáëàñòè Flash-ïàìÿòè ìîäóëÿ è èñïîëüçóåò èõ.
Äàííàÿ ôóíêöèÿ íóæíà òîëüêî åñëè ïîëüçîâàòåëü õî÷åò èñïîëüçîâàòü ñâîè
êîýôôèöèåíòû. Ïðè ýòîì îíà íå èçìåíÿåò çíà÷åíèÿ âî Flash-ïàìÿòè, ò.å.
ïðè ñëåäóþùåì îòêðûòèè ìîäóëÿ êîýôôèöèåíòû áóäóò ñíîâà âîññòàíîâëåíû èç
Flash-ïàìÿòè.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ch Êàíàë ÖÀÏ (èç #t_x502_dac_ch).
@param[in] k Óñòàíàâëèâàåìîå çíà÷åíèå êîýôôèöèåíòà øêàëû.
@param[in] offs Óñòàíàâëèâàåìîå çíà÷åíèå ñìåùåíèÿ íóëÿ.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_SetDacCoef(t_x502_hnd hnd, uint32_t ch, double k, double offs);
/***************************************************************************//**
@brief Ïîëó÷åíèå òåêóùèõ êàëèáðîâî÷íûõ êîýôôèöèåíòîâ ÖÀÏ
Ôóíêöèÿ âîçâðàùàåò òåêóùèå êàëèáðîâî÷íûå êîýôôèöèåíòû äëÿ çàäàííîãî êàíàëà ÖÀÏ.
Ýòè êîýôôèöèåíòû ìîãóò îòëè÷àòüñÿ îò çàâîäñêèõ çíà÷åíèé,
ñîõðàíåííûõ âî Flash-ïàìÿòè ìîäóëÿ, íàïðèìåð, åñëè ïîëüçîâàòåëü èñïîëüçîâàë
X502_SetDacCoef() äëÿ óñòàíîâêè ñâîèõ êîýôôèöèåíòîâ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ch Êàíàë ÖÀÏ (èç #t_x502_dac_ch).
@param[in] k  äàííîé ïåðåìåííîé âîçâðàùàåòñÿ òåêóùèé êîýôôèöèåíò
øêàëû.
@param[in] offs  äàííîé ïåðåìåííîé âîçâðàùàåòñÿ òåêóùåå ñìåùåíèå íóëÿ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_GetDacCoef(t_x502_hnd hnd, uint32_t ch, double* k, double* offs);
/***************************************************************************//**
@brief Ðàññ÷åò ÷àñòîòû ñáîðà ÀÖÏ
Èñõîäÿ èç çàäàííûõ ïàðàìåòðîâ, ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû
ÀÖÏ è çíà÷åíèå ìåæêàäðîâîé çàäåðæêè òàê, ÷òîáû ïîëó÷åííûå ÷àñòîòû áûëè
íàèáîëåå áëèçêè ê çàäàííûì, è âîçâðàùàåò ïîëó÷åííûå çíà÷åíèÿ ÷àñòîò.
 îòëè÷èå îò X502_SetAdcFreq(), äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà ïîëó÷åíèÿ
ñêîððåêòèðîâàííîé ÷àñòîòû áåç èñïîëüçîâàíèÿ îïèñàòåëÿ ìîäóëÿ è
òîëüêî ðàññ÷èòûâàåò ðåçóëüòèðóþùèå ïàðàìåòðû, íå èçìåíÿÿ íàñòðîéêè.
Äëÿ ìîäóëÿ E16 â ïàðàìåòðå ref_freq ñëåäóåò ïåðåäàâàòü E16_REF_FREQ_48000KHZ,
ëèáî èñïîëüçîâàòü ôóíêöèþ X502_CalcAdcFreq2!
@param[in] ref_freq Çíà÷åíèå îïîðíîé ÷àñòîòû â Ãö (âíåøíåé èëè âíóòðåííåé)
@param[in] lch_cnt Êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ, êîòîðîå áóäåò èñïîëüçîâàíî.
Íåîáõîäèìî äëÿ ðàñ÷åòà ìåæêàäðîâîé çàäåðæêè. Åñëè
â êà÷åñòâå f_frame ïåðåäàí íóëåâîé óêàçàòåëü, òî
ìîæåò áûòü ðàâíî 0.
@param[in,out] f_acq Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû ñáîðà
ÀÖÏ â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò ðàññ÷èòàííîå
çíà÷åíèå ÷àñòîòû, êîòîðàÿ ìîæåò áûòü óñòàíîâëåíà.
@param[in,out] f_frame Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèå ÷àñòîòû ñáîðà
êàäðîâ (÷àñòîòû ñáîðà íà ëîãè÷åñêèé êàíàë) ÀÖÏ
â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò ðàññ÷èòàííîå çíà÷åíèå.
Åñëè ïåðåäàí íóëåâîé óêàçàòåëü, òî çàäåðæêà
ðàññ÷èòàíà íå áóäåò.
Åñëè ïåðåäàíî çíà÷åíèå ìåíüøå èëè ðàâíîå íóëÿ, òî
áóäåò ðàññ÷èòàíà ìàêñèìàëüíàÿ ÷àñòîòà êàäðîâ
(ñ íóëåâîé ìåæêàäðîâîé çàäåðæêîé).
@param[out] result_freq_div  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ÀÖÏ. Ìîæåò áûòü ïåðåäàí
íóëåâîé óêàçàòåëü, åñëè ýòî çíà÷åíèå ÿâíî çíàòü
íå òðåáóåòñÿ.
@param[out] result_frame_delay  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèå ìåæêàäðîâîé çàäåðæêè. Ìîæåò áûòü ïåðåäàí
íóëåâîé óêàçàòåëü, åñëè ýòî çíà÷åíèå ÿâíî çíàòü
íå òðåáóåòñÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_CalcAdcFreq(double ref_freq, uint32_t lch_cnt, double *f_acq,
double *f_frame, uint32_t *result_freq_div, uint32_t *result_frame_delay);
/***************************************************************************//**
@brief Ðàññ÷åò ÷àñòîòû ñáîðà ÀÖÏ
Èñõîäÿ èç çàäàííûõ ïàðàìåòðîâ, ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû
ÀÖÏ è çíà÷åíèå ìåæêàäðîâîé çàäåðæêè òàê, ÷òîáû ïîëó÷åííûå ÷àñòîòû áûëè
íàèáîëåå áëèçêè ê çàäàííûì, è âîçâðàùàåò ïîëó÷åííûå çíà÷åíèÿ ÷àñòîò.
 îòëè÷èå îò X502_SetAdcFreq(), äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà ïîëó÷åíèÿ
ñêîððåêòèðîâàííîé ÷àñòîòû è òîëüêî ðàññ÷èòûâàåò ðåçóëüòèðóþùèå ïàðàìåòðû, íå èçìåíÿÿ íàñòðîéêè.
Îïèñàòåëü ìîäóëÿ â ýòîé ôóíêöèè íóæåí äëÿ òîãî ÷òîáû ðàçëè÷àòü ìîäóëè E16 è X502.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ref_freq Çíà÷åíèå îïîðíîé ÷àñòîòû â Ãö (âíåøíåé èëè âíóòðåííåé)
@param[in] lch_cnt Êîëè÷åñòâî ëîãè÷åñêèõ êàíàëîâ, êîòîðîå áóäåò èñïîëüçîâàíî.
Íåîáõîäèìî äëÿ ðàñ÷åòà ìåæêàäðîâîé çàäåðæêè. Åñëè
â êà÷åñòâå f_frame ïåðåäàí íóëåâîé óêàçàòåëü, òî
ìîæåò áûòü ðàâíî 0.
@param[in,out] f_acq Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû ñáîðà
ÀÖÏ â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò ðàññ÷èòàííîå
çíà÷åíèå ÷àñòîòû, êîòîðàÿ ìîæåò áûòü óñòàíîâëåíà.
@param[in,out] f_frame Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèå ÷àñòîòû ñáîðà
êàäðîâ (÷àñòîòû ñáîðà íà ëîãè÷åñêèé êàíàë) ÀÖÏ
â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò ðàññ÷èòàííîå çíà÷åíèå.
Åñëè ïåðåäàí íóëåâîé óêàçàòåëü, òî çàäåðæêà
ðàññ÷èòàíà íå áóäåò.
Åñëè ïåðåäàíî çíà÷åíèå ìåíüøå èëè ðàâíîå íóëÿ, òî
áóäåò ðàññ÷èòàíà ìàêñèìàëüíàÿ ÷àñòîòà êàäðîâ
(ñ íóëåâîé ìåæêàäðîâîé çàäåðæêîé).
@param[out] result_freq_div  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ÀÖÏ. Ìîæåò áûòü ïåðåäàí
íóëåâîé óêàçàòåëü, åñëè ýòî çíà÷åíèå ÿâíî çíàòü
íå òðåáóåòñÿ.
@param[out] result_frame_delay  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèå ìåæêàäðîâîé çàäåðæêè. Ìîæåò áûòü ïåðåäàí
íóëåâîé óêàçàòåëü, åñëè ýòî çíà÷åíèå ÿâíî çíàòü
íå òðåáóåòñÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_CalcAdcFreq2(t_x502_hnd hnd, double ref_freq, uint32_t lch_cnt, double *f_acq,
double *f_frame, uint32_t *adc_freq_div, uint32_t *adc_frame_delay);
/***************************************************************************//**
@brief Ðàññ÷åò ÷àñòîòû ñèíõðîííîãî ââîäà ñ öèôðîâûõ âõîäîâ
Èñõîäÿ èç çàäàííûõ ïàðàìåòðîâ, ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû ââîäà çíà÷åíèé
ñ öèôðîâûõ âõîäîâ òàê, ÷òîáû ïîëó÷åííàÿ ÷àñòîòà ââîäà áûëà íàèáîëåå áëèçêà ê óêàçàííîé,
è âîçâðàùàåò ïîëó÷åííîå çíà÷åíèå ÷àñòîòû.
 îòëè÷èå îò X502_SetDinFreq(), äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà ïîëó÷åíèÿ
ñêîððåêòèðîâàííîé ÷àñòîòû áåç èñïîëüçîâàíèÿ îïèñàòåëÿ ìîäóëÿ è
òîëüêî ðàññ÷èòûâàåò ðåçóëüòèðóþùèå ïàðàìåòðû, íå èçìåíÿÿ íàñòðîéêè.
Äëÿ ìîäóëÿ E16 â ïàðàìåòðå ref_freq ñëåäóåò ïåðåäàâàòü E16_REF_FREQ_48000KHZ,
ëèáî èñïîëüçîâàòü ôóíêöèþ X502_CalcDinFreq2!
@param[in] ref_freq Çíà÷åíèå îïîðíîé ÷àñòîòû â Ãö (âíåøíåé èëè âíóòðåííåé)
@param[in,out] f_din Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû ââîäà
ñ öèôðîâûõ âõîäîâ â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò
ðàññ÷èòàííîå çíà÷åíèå ÷àñòîòû, êîòîðîå ìîæåò áûòü
óñòàíîâëåíî.
@param[out] result_freq_div  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî ââîäà öèôðîâûõ
ëèíèé.
Ìîæåò áûòü ïåðåäàí íóëåâîé óêàçàòåëü,
åñëè ýòî çíà÷åíèå ÿâíî çíàòü íå òðåáóåòñÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_CalcDinFreq(double ref_freq, double *f_din, uint32_t *result_freq_div);
/***************************************************************************//**
@brief Ðàññ÷åò ÷àñòîòû ñèíõðîííîãî ââîäà ñ öèôðîâûõ âõîäîâ
Èñõîäÿ èç çàäàííûõ ïàðàìåòðîâ, ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû ââîäà çíà÷åíèé
ñ öèôðîâûõ âõîäîâ òàê, ÷òîáû ïîëó÷åííàÿ ÷àñòîòà ââîäà áûëà íàèáîëåå áëèçêà ê óêàçàííîé,
è âîçâðàùàåò ïîëó÷åííîå çíà÷åíèå ÷àñòîòû.
 îòëè÷èå îò X502_SetDinFreq(), äàííàÿ ôóíêöèÿ òîëüêî ðàññ÷èòûâàåò ðåçóëüòèðóþùèå ïàðàìåòðû, íå èçìåíÿÿ íàñòðîéêè.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ref_freq Çíà÷åíèå îïîðíîé ÷àñòîòû â Ãö (âíåøíåé èëè âíóòðåííåé)
@param[in,out] f_din Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû ââîäà
ñ öèôðîâûõ âõîäîâ â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò
ðàññ÷èòàííîå çíà÷åíèå ÷àñòîòû, êîòîðîå ìîæåò áûòü
óñòàíîâëåíî.
@param[out] result_freq_div  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî ââîäà öèôðîâûõ
ëèíèé.
Ìîæåò áûòü ïåðåäàí íóëåâîé óêàçàòåëü,
åñëè ýòî çíà÷åíèå ÿâíî çíàòü íå òðåáóåòñÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_CalcDinFreq2(t_x502_hnd hnd, double ref_freq, double *f_din, uint32_t *result_freq_div);
/***************************************************************************//**
@brief Ðàññ÷åò ÷àñòîòû ñèíõðîííîãî âûâîäà
Èñõîäÿ èç çàäàííûõ ïàðàìåòðîâ, ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû ñèíõðîííîãî
âûâîäà òàê, ÷òîáû ïîëó÷åííàÿ ÷àñòîòà áûëà íàèáîëåå áëèçêà ê óêàçàííîé,
è âîçâðàùàåò ïîëó÷åííîå çíà÷åíèå ÷àñòîòû.
 îòëè÷èå îò X502_SetOutFreq(), äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà ïîëó÷åíèÿ
ñêîððåêòèðîâàííîé ÷àñòîòû áåç èñïîëüçîâàíèÿ îïèñàòåëÿ ìîäóëÿ è
òîëüêî ðàññ÷èòûâàåò ðåçóëüòèðóþùèå ïàðàìåòðû, íå èçìåíÿÿ íàñòðîéêè.
Ôóíêöèÿ ïðåäïîëàãàåò, ÷òî ìîäóëü ïîääåðæèâàåò èçìåíåíèå ÷àñòîòû âûâîäà
(ñì. òðåáîâàíèÿ ê ìîäóëþ äëÿ ýòîãî â îïèñàíèè ôóíêöèè X502_SetOutFreq()).
Äëÿ ìîäóëÿ E16 â ïàðàìåòðå ref_freq ñëåäóåò ïåðåäàâàòü E16_REF_FREQ_48000KHZ,
ëèáî èñïîëüçîâàòü ôóíêöèþ X502_CalcOutFreq2!
@param[in] ref_freq Çíà÷åíèå îïîðíîé ÷àñòîòû â Ãö (âíåøíåé èëè âíóòðåííåé)
@param[in,out] f_dout Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû
ñèíõðîííîãî âûâîäà â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò
ðàññ÷èòàííîå çíà÷åíèå ÷àñòîòû, êîòîðîå ìîæåò áûòü
óñòàíîâëåíî.
@param[out] result_freq_div  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî âûâîäà.
Ìîæåò áûòü ïåðåäàí íóëåâîé óêàçàòåëü,
åñëè ýòî çíà÷åíèå ÿâíî çíàòü íå òðåáóåòñÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_CalcOutFreq(double ref_freq, double *f_dout, uint32_t *result_freq_div);
/***************************************************************************//**
@brief Ðàññ÷åò ÷àñòîòû ñèíõðîííîãî âûâîäà
Èñõîäÿ èç çàäàííûõ ïàðàìåòðîâ, ôóíêöèÿ ïîäáèðàåò äåëèòåëü ÷àñòîòû ñèíõðîííîãî
âûâîäà òàê, ÷òîáû ïîëó÷åííàÿ ÷àñòîòà áûëà íàèáîëåå áëèçêà ê óêàçàííîé,
è âîçâðàùàåò ïîëó÷åííîå çíà÷åíèå ÷àñòîòû.
 îòëè÷èå îò X502_SetOutFreq(), äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà ïîëó÷åíèÿ
ñêîððåêòèðîâàííîé ÷àñòîòû áåç èñïîëüçîâàíèÿ îïèñàòåëÿ ìîäóëÿ è
òîëüêî ðàññ÷èòûâàåò ðåçóëüòèðóþùèå ïàðàìåòðû, íå èçìåíÿÿ íàñòðîéêè.
Ôóíêöèÿ ïðåäïîëàãàåò, ÷òî ìîäóëü ïîääåðæèâàåò èçìåíåíèå ÷àñòîòû âûâîäà
(ñì. òðåáîâàíèÿ ê ìîäóëþ äëÿ ýòîãî â îïèñàíèè ôóíêöèè X502_SetOutFreq()).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ref_freq Çíà÷åíèå îïîðíîé ÷àñòîòû â Ãö (âíåøíåé èëè âíóòðåííåé)
@param[in,out] f_dout Íà âõîäå ïðèíèìàåò òðåáóåìîå çíà÷åíèÿ ÷àñòîòû
ñèíõðîííîãî âûâîäà â Ãåðöàõ. Íà âûõîäå âîçâðàùàåò
ðàññ÷èòàííîå çíà÷åíèå ÷àñòîòû, êîòîðîå ìîæåò áûòü
óñòàíîâëåíî.
@param[out] result_freq_div  äàííîì ïàðàìåòðå âîçâðàùàåòñÿ ðàññ÷èòàííîå
çíà÷åíèÿ äåëèòåëÿ ÷àñòîòû ñèíõðîííîãî âûâîäà.
Ìîæåò áûòü ïåðåäàí íóëåâîé óêàçàòåëü,
åñëè ýòî çíà÷åíèå ÿâíî çíàòü íå òðåáóåòñÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_CalcOutFreq2(t_x502_hnd hnd, double ref_freq, double *f_dout, uint32_t *result_freq_div);
/** @} */
/***************************************************************************//**
@addtogroup func_async Ôóíêöèè àñèíõðîííîãî ââîäà-âûâîäà
@{
*******************************************************************************/
/***************************************************************************//**
@brief Àñèíõðîííûé âûâîä äàííûõ íà êàíàë ÖÀÏ
Ôóíêöèÿ âûâîäèò óêàçàííîå çíà÷åíèå íà óêàçàííûé êàíàë ÖÀÏ. Çíà÷åíèå ìîæåò
áûòü çàäàíî êàê â êîäàõ, òàê è â Âîëüòàõ, è ê íåìó ìîãóò áûòü ïðèìåíåíû
êàëèáðîâî÷íûå êîýôôèöèåíòû (îïðåäåëÿåòñÿ ôëàãàìè).
Ôóíêöèÿ ìîæåò âûçûâàòüñÿ ëèáî êîãäà ñèíõðîííûé ñáîð íå çàïóùåí, ëèáî ïðè
çàïóùåííîì ñáîðå äàííûõ, åñëè ñèíõðîííûé âûâîä ïî ýòîìó êàíàëó ÖÀÏ
íå ðàçðåøåí.
@note Ôóíêöèÿ íå ðàáîòàåò â ñëó÷àå, åñëè ìîäóëü íàõîäèòñÿ â îæèäàíèè âíåøíåãî
óñëîâèÿ äëÿ çàïóñêà ñèíõðîííîãî ââîäà (áûëà âûçâàíà X502_StreamsStart() ïðè
âíåøíåé ñèíõðîíèçàöèè ñòàðòà, íî ñàì ñèãíàë çàïóñêà åùå íå âîçíèê).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ch Íîìåð êàíàëà ÖÀÏ (èç #t_x502_dac_ch).
@param[in] data Âûâîäèìîå çíà÷åíèå íà ÖÀÏ (â êîäàõ èëè âîëüòàõ)
@param[in] flags Ôëàãè èç #t_x502_dacout_flags.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_AsyncOutDac(t_x502_hnd hnd, uint32_t ch, double data, uint32_t flags);
/***************************************************************************//**
@brief Àñèíõðîííûé âûâîä äàííûõ íà êàíàë ÖÀÏ
Ôóíêöèÿ âûâîäèò óêàçàííîå çíà÷åíèå íà óêàçàííûé êàíàë ÖÀÏ. Çíà÷åíèå ìîæåò
áûòü çàäàíî êàê â êîäàõ, òàê è â Âîëüòàõ, è ê íåìó ìîãóò áûòü ïðèìåíåíû
êàëèáðîâî÷íûå êîýôôèöèåíòû (îïðåäåëÿåòñÿ ôëàãàìè).
Ôóíêöèÿ ìîæåò âûçûâàòüñÿ ëèáî êîãäà ñèíõðîííûé ñáîð íå çàïóùåí, ëèáî ïðè
çàïóùåííîì ñáîðå äàííûõ, åñëè ñèíõðîííûé âûâîä ïî ýòîìó êàíàëó ÖÀÏ
íå ðàçðåøåí.
@note Ôóíêöèÿ íå ðàáîòàåò â ñëó÷àå, åñëè ìîäóëü íàõîäèòñÿ â îæèäàíèè âíåøíåãî
óñëîâèÿ äëÿ çàïóñêà ñèíõðîííîãî ââîäà (áûëà âûçâàíà X502_StreamsStart() ïðè
âíåøíåé ñèíõðîíèçàöèè ñòàðòà, íî ñàì ñèãíàë çàïóñêà åùå íå âîçíèê).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] range Äèàïàçîí èëè âûõîäû îäíîãî êàíàëà (äëÿ LTA37 1:1 èëè 1:10) (èç #t_x502devs_dac_range)
@param[in] ch Íîìåð êàíàëà ÖÀÏ (èç #t_x502_dac_ch).
@param[in] data Âûâîäèìîå çíà÷åíèå íà ÖÀÏ (â êîäàõ èëè âîëüòàõ)
@param[in] flags Ôëàãè èç #t_x502_dacout_flags.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_AsyncOutDac2(t_x502_hnd hnd, uint32_t range, uint32_t ch, double data, uint32_t flags);
/***************************************************************************//**
@brief Àñèíõðîííûé âûâîä äàííûõ íà öèôðîâûå âûõîäû
Ôóíêöèÿ âûâîäèò óêàçàííîå çíà÷åíèå íà öèôðîâûå âûõîäû ìîäóëÿ.
Ôîðìàò çíà÷åíèÿ àíàëîãè÷åí X502_PrepareData() - â ìëàäøèõ 16 áèòàõ
óêàçûâàåòñÿ âûâîäèìîå çíà÷åíèå, à â ñòàðøèå - ôëàãè (ñ ïîìîùüþ êîòîðûõ ìîæíî
ïåðåâåñòè îäíó èç ïîëîâèí â òðåòüå ñîñòîÿíèå).
Ôóíêöèÿ ìîæåò âûçûâàòüñÿ ëèáî êîãäà ñèíõðîííûé ñáîð íå çàïóùåí, ëèáî ïðè
çàïóùåííîì ñáîðå äàííûõ, åñëè ñèíõðîííûé âûâîä ïî öèôðîâûì ëèíèÿì íå ðàçðåøåí.
Ìîæíî èñïîëüçîâàòü ìàñêó, ÷òîáû âûâåñòè òîëüêî íà ÷àñòü âûâîäîâ, îñòàâèâ
îñòàëüíûå íåèçìåííûìè, îäíàêî ñëåäóåò ó÷åñòü, ÷òî ïîñëå îòêðûòèÿ ñâÿçè ñ
ìîäóëåì íåîáõîäèìî ñïåðâà ñäåëàòü âûâîä íà âñå ëèíèè, ïîñëå ÷åãî óæå
ìîæíî èñïîëüçîâàòü ìàñêó ïðè ïîñëåäóþùèõ âûçîâàõ.
@note Ôóíêöèÿ íå ðàáîòàåò â ñëó÷àå, åñëè ìîäóëü íàõîäèòñÿ â îæèäàíèè âíåøíåãî
óñëîâèÿ äëÿ çàïóñêà ñèíõðîííîãî ââîäà (áûëà âûçâàíà X502_StreamsStart() ïðè
âíåøíåé ñèíõðîíèçàöèè ñòàðòà, íî ñàì ñèãíàë çàïóñêà åùå íå âîçíèê).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] val Ìëàäøàÿ ïîëîâèíà - âûâîäèìîå çíà÷åíèå, ñòàðøàÿ -
ôëàãè èç #t_x502_digout_word_flags.
Áèòû 0..15 ñîîòâåòñòâóþò âûõîäàì OUT1..OUT16 (E16)
DO1..DO16 (x502) íà ñèãíàëüíîì ðàçú¸ìå
@param[in] msk Ìàñêà - óêàçàííûå â ìàñêå áèòû íå áóäóò èçìåíÿòüñÿ
ñ ïðåäûäóùåãî âûâåäåííîãî ñîñòîÿíèÿ (ðàñïðîñòðàíÿåòñÿ
è íà ñòàðøóþ ïîëîâèíó val).
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_AsyncOutDig(t_x502_hnd hnd, uint32_t val, uint32_t msk);
/***************************************************************************//**
@brief Àñèíõðîííûé ââîä çíà÷åíèé ñ öèôðîâûõ âõîäîâ
Ôóíêöèÿ ñ÷èòûâàåò òåêóùåå çíà÷åíèå öèôðîâûõ âõîäîâ.
Ïðè ýòîì ñèíõðîííûé ñáîð öèôðîâûõ âõîäîâ íå äîëæåí áûòü çàïóùåí (íå ðàçðåøåí
ïîòîê #X502_STREAM_DIN).
Òàê êàê ìîäóëè E-502/L-502 íå ïîääåðæèâàþò àïïàðàòíî àñèíõðîííûé ââîä, òî åñëè íà
ìîìåíò âûçîâà ýòîé ôóíêöèè íå çàïóùåí ñèíõðîííûé ââîä/âûâîä ñ ïîìîùüþ
X502_StreamsStart(), òî äàííàÿ ôóíêöèÿ íà âðåìÿ âûïîëíåíèÿ çàïóñêàåò
ñèíõðîííûé ñáîð è îñòàíàâëèâàåò åãî êàê òîëüêî áóäåò ïîëó÷åíî îäíî íîâîå
çíà÷åíèå öèôðîâûõ âõîäîâ, äëÿ ìîäóëåé E16 ýòîãî íå òðåáóåòñÿ.
Äëÿ ìîäóëÿ E16 17 áèò - ñîñòîÿíèå âõîäà INT, 18 áèò - TRIG
@note Ôóíêöèÿ íå ðàáîòàåò â ñëó÷àå, åñëè ìîäóëü íàõîäèòñÿ â îæèäàíèè âíåøíåãî
óñëîâèÿ äëÿ çàïóñêà ñèíõðîííîãî ââîäà (áûëà âûçâàíà X502_StreamsStart() ïðè
âíåøíåé ñèíõðîíèçàöèè ñòàðòà, íî ñàì ñèãíàë çàïóñêà åùå íå âîçíèê).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] din Ïðè óñïåøíîì âûïîëíåíèè â ýòîé ïåðåìåííîé
âîçâðàùàåòñÿ òåêóùåå ñîñòîÿíèå öèôðîâûõ âõîäîâ.
Äåéñòâèòåëüíû ìëàäøèå 18 áèò, ñòàðøèå 14 - ðåçåðâ.
×àñòü áèòîâ ïðè ýòîì îáúåäèíåíû ñ ëèíèÿìè ñèíõðîíèçàöèè,
ïðè ýòîì ýòî îáúåäèíåíèå çàâèñèò îò òèïà ìîäóëÿ.
Ïîäðîáíåå îïèñàíî â ðàçäåëå ñ ðàçëè÷èÿìè ìîäóëåé
E-502 è L-502.
Ðåçåðâíûå áèòû ìîãóò áûòü èñïîëüçîâàíû â ïîñëåäóþùèõ
âåðñèÿõ, íå ñëåäóåò ñ÷èòàòü, ÷òî îíè âñåãäà áóäóò
ðàâíû íóëþ!
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_AsyncInDig(t_x502_hnd hnd, uint32_t* din);
/***************************************************************************//**
@brief Àñèíõðîííûé ââîä îäíîãî êàäðà ÀÖÏ
Ôóíêèÿ ïðîèçâîäèò îäíîêðàòíûé ââîä êàäðà â ñîîòâåòñòâèè ñ çàðàíåå
óñòàíîâëåííîé ëîãè÷åñêîé òàáëèöåé. ×àñòîòà ñáîðà ÀÖÏ ñîîòâåòñòâóåò ÷àñòîòå,
óñòàíîâëåííîé ñ ïîìîùüþ X502_SetAdcFreq(). ×àñòîòà ñëåäîâàíèÿ êàäðîâ
çíà÷åíèÿ íå èìååò. Ñàì êàäð ââîäèòñÿ ñèíõðîííî, íî ïðè ïîñëåäîâàòåëüíîì
âûçîâå X502_AsyncGetAdcFrame() äëÿ èçìåðåíèÿ íåñêîëüêèõ êàäðîâ çàäåðæêà
ìåæäó ýòèìè êàäðàìè íå îïðåäåëåíà.
Ôóíêöèÿ òàê æå âûïîëíÿåò îáðàáîòêó ïðèíÿòûõ äàííûõ ÀÖÏ, àíàëîãè÷íî
X502_ProcessAdcData(), è ïðèíèìàåò íàáîð ôëàãîâ, àíàëîãè÷íûé
X502_ProcessAdcData().
Äëÿ ðàáîòû ýòîé ôóíêöèè íå äîëæåí áûòü ðàçðåøåí ñèíõðîííûé ââîä ÀÖÏ
è öèôðîâûõ ëèíèé.
Òàê êàê àïïàðàòíî àñèíõðîííûé ââîä â ïëàòå îòñóòñòâóåò, òî ýòà ôóíêöèÿ
â ñëó÷àå íå çàïóùåííîãî ïîòîêà çàïóñêàåò åãî âíóòðè ñåáÿ, ïðèíèìàåò îäèí
êàäð äàííûõ è ïîñëå ýòîãî îñòàíàâëèâàåò ñèíõðîííûé ñáîð.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] flags Ôëàãè èç t_x502_proc_flags
@param[in] tout Òàéìàóò íà âûïîëíåíèå ôóíêöèè â ìñ
@param[out] data Ìàññèâ, â êîòîðîì â ñëó÷àå óñïåõà áóäóò âîçâðàùåíû
îòñ÷åòû êàäðà ÀÖÏ. Äîëæåí áûòü ðàçìåðîì, äîñòàòî÷íûì
äëÿ õðàíåíèÿ îòñ÷åòîâ òèïà double â êîëè÷åñòâå,
ðàâíîì êîëè÷åñòâó óñòàíîâëåííûõ ëîãè÷åñêèõ êàíàëîâ
â óïðàâëÿþùåé òàáëèöå ÀÖÏ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_AsyncGetAdcFrame(t_x502_hnd hnd, uint32_t flags,
uint32_t tout, double* data);
/** @} */
/***************************************************************************//**
@addtogroup func_streams Ôóíêöèè äëÿ ðàáîòû ñ ñèíõðîííûì ïîòîêîâûì ââîäîì-âûâîäîì
@{
*******************************************************************************/
/***************************************************************************//**
@brief Ðàçðåøåíèå ñèíõðîííûõ ïîòîêîâ íà ââîä/âûâîä
Ôóíêöèÿ ðàçðåøàåò ïðèåì/ïåðåäà÷ó äëÿ óêàçàííûõ ïîòîêîâ
Íå óêàçàííûå ïîòîêè ñîõðàíÿþò ñâîå ðàçðåøåííîå èëè çàïðåùåííîå ñîñòîÿíèå.
Ìîæåò âûçûâàòüñÿ êàê äî X502_Configure(), òàê è ïîñëå.
Ðàçðåøåííûå ïîòîêè óñòàíàâëèâàþòñÿ êàê ïðàâèëî äî âûçîâà X502_StreamsStart().
Ïðè æåëàíèè â íåêîòîðûõ ñèòóàöèÿõ ìîæíî èçìåíÿòü ñîñòàâ ðàçðåøåííûõ ïîòîêîâ
âî âðåìÿ çàïóùåííîãî ñáîðà äàííûõ, îäíàêî åñëè ýòè ïîòîêè ñèëüíî ðàçëè÷àþòñÿ
â ÷àñòîòå, òî ðàññ÷èòàííûå áèáëèîòåêîé çíà÷åíèÿ áóôåðà è øàãà ïðåðûâàíèÿ
ìîãóò íå ïîäõîäèòü äëÿ èçìåíèâøèõñÿ çíà÷åíèé (ñì. @ref sect_sync_mode_buf)
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] streams Íàáîð ôëàãîâ #t_x502_streams, óêàçûâàþùèõ, êàêèå ïîòîêè
äîëæíû áûòü ðàçðåøåíû.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_StreamsEnable(t_x502_hnd hnd, uint32_t streams);
/****************************************************************************//**
@brief Çàïðåùåíèå ñèíõðîííûõ ïîòîêîâ íà ââîä/âûâîä
Ôóíêöèÿ çàïðåùàåò ïåðåäà÷ó ñèíõðîííûõ äàííûõ äëÿ óêàçàííûõ ïîòîêîâ.
Íå óêàçàííûå ïîòîêè ñîõðàíÿþò ñâîå ðàçðåøåííîå èëè çàïðåùåííîå ñîñòîÿíèå.
Ôóíêöèÿ, ïðîòèâîïîëîæíàÿ ïî ñìûñëó X502_StreamsEnable().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] streams Íàáîð ôëàãîâ #t_x502_streams, óêàçûâàþùèõ, êàêèå ïîòîêè
äîëæíû áûòü çàïðåùåíû.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_StreamsDisable(t_x502_hnd hnd, uint32_t streams);
/****************************************************************************//**
@brief Ïîëó÷èòü çíà÷åíèå, êàêèå ñèíõðîííûå ïîòîêè ðàçðåøåíû
Ôóíêöèÿ ïîçâîëÿåò ïîëó÷èòü íàáîð ôëàãîâ, êîòîðûå óêàçûâàþò, êàêèå ñèíõðîííûå
ïîòîêè ñåé÷àñ ðàçðåøåíû.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] streams Íàáîð ôëàãîâ #t_x502_streams, óêàçûâàþùèõ, êàêèå ïîòîêè
ñåé÷àñ ðàçðåøåíû.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_GetEnabledStreams(t_x502_hnd hnd, uint32_t* streams);
/***************************************************************************//**
@brief Çàïóñê ñèíõðîííûõ ïîòîêîâ ââîäà/âûâîäà
Ôóíêöèÿ çàïóñêà ñèíõðîííûõ ïîòîêîâ äàííûõ. Âñå ñèíõðîííûå ïîòîêè òàêòèðóþòñÿ
îò îáùåé îïîðíîé ÷àñòîòû. Åñëè áûë óñòàíîâëåí âíóòðåííèé ñòàðò ñèíõðîíèçàöèè,
òî ñèíõðîíèçàöèÿ ïîòîêîâ íà÷íåòñÿ ïðè âûïîëíåíèè äàííîé ôóíêöèè, â ïðîòèâíîì
ñëó÷àå ïî äàííîé ôóíêöèè ìîäóëü ïåðåéäåò â ñîñòîÿíèå îæèäàíèÿ âíåøíåãî
ïðèçíàêà íà÷àëüíîé ñèíõðîíèçàöèè.
Òàêæå ôóíêöèÿ îñóùåñòâëÿåò èíèöèàëèçàöèþ êàíàëà DMA íà ââîä äàííûõ èç ïëàòû,
åñëè áûë ðàçðåøåí ïîòîê ÀÖÏ èëè ñèíõðîííîãî ââîäà öèôðîâûõ ëèíèé,
è èíèöèàëèçàöèþ êàíàëà DMA íà âûâîä, åñëè áûë ðàçðåøåí õîòÿ áû îäèí ïîòîê íà
âûâîä, íî íå áûëà âûçâàíà ôóíêöèÿ X502_PreloadStart() (îäíàêî â ýòîì ñëó÷àå
íà÷àëî âûâîäà íå ñîâïàäåò ñ íà÷àëîì ââîäà).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_StreamsStart(t_x502_hnd hnd);
/***************************************************************************//**
@brief Îñòàíîâ ñèíõðîííûõ ïîòîêîâ ââîäà/âûâîäà
Ôóíêöèÿ îñòàíîâà ñèíõðîííûõ ïîòîêîâ ââîäà/âûâîäà äàííûõ. Ïîñëå âûïîëíåíèþ
ýòîé ôóíêöèè ìîäóëü çàâåðøàåò ãåíåðàöèþ îïîðíîé ÷àñòîòû ñèíõðîíèçàöèè (èëè
èñïîëüçîâàòü âíåøíþþ ÷àñòîòó ñèíõðîíèçàöèè) è îñòàíàâëèâàåò ñèíõðîííóþ
ïåðåäà÷ó äàííûõ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_StreamsStop(t_x502_hnd hnd);
/***************************************************************************//**
@brief Ïðîâåðêà, çàïóùåí ëè ñèíõðîííûé ââîä/âûâîä
Ôóíêöèÿ ïðîâåðÿåò çàïóùåí ëè ñèíõðîííûé ââîä âûâîä ñ ïîìîùüþ X502_StreamsStart()
èëè êàêîé-ëèáî âíóòðåííåé ëîãèêîé â ïðîøèâêè BlackFin.
Åñëè ñáîð äàííûõ íå çàïóùåí, òî ôóíêöèÿ âîçâðàùàåò îøèáêó
#X502_ERR_STREAM_IS_NOT_RUNNING, åñëè çàïóùåí, òî íóëåâîé êîä îøèáêè
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_IsRunning(t_x502_hnd hnd);
/***************************************************************************//**
@brief ×òåíèå äàííûõ ÀÖÏ è öèôðîâûõ âõîäîâ èç ìîäóëÿ
Ôóíêöèÿ ñ÷èòûâàåò äàííûå îò ìîäóëÿ, êîòîðûå áûëè ïðèíÿòû â ïðîìåæóòî÷íûé
áóôåð â äðàéâåðå èëè áèáëèîòåêå.
Ôóíêöèÿ ïðèíèìàåò îòñ÷åòû â ñïåöèàëüíîì èíäåêñíîì ôîðìàòå,
â êîòîðîì ñîäåðæèòñÿ èíôîðìàöèÿ, ÷òî ýòî çà äàííûå (çíà÷åíèÿ öèôðîâûõ âõîäîâ
èëè îòñ÷åòû ÀÖÏ) è äîïîëíèòåëüíàÿ èíôîðìàöèÿ äëÿ ÀÖÏ (íîìåð êàíàëà, ðåæèì).
Äëÿ ðàçáîðà ïîëó÷åííûõ îòñ÷åòîâ èñïîëüçóåòñÿ ôóíêöèÿ X502_ProcessData().
Åñëè â áóôåðå ñåé÷àñ íàõîäèòñÿ ìåíüøå îòñ÷åòîâ, ÷åì áûëî çàïðîøåíî,
òî ôóíêöèÿ áóäåò îæèäàòü ïîêà ïðèäåò çàäàííîå êîëè÷åñòâî äàííûõ èëè
ïîêà íå èñòå÷åò óêàçàííûé òàéìàóò.  ïîñëåäíåì ñëó÷àå ôóíêöèÿ âîçâðàòèò
ñòîëüêî îòñ÷åòîâ, ñêîëüêî áûëî â áóôåðå ïðè èñòå÷åíèè òàéìàóòà.
Êîëè÷åñòâî ãîòîâûõ äëÿ ÷òåíèÿ îòñ÷åòîâ â áóôåðå äðàéâåðà ìîæíî ïðè æåëàíèè
óçíàòü ñ ïîìîùüþ ôóíêöèè X502_GetRecvReadyCount().
Äî âûçîâîâ X502_Recv() ñèíõðîííûé ïîòîê ñáîðà äàííûõ äîëæåí áûòü óæå çàïóùåí
ñ ïîìîùüþ X502_StreamsStart().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] buf Áóôåð, â êîòîðûå áóäóò ñîõðàíåíû îòñ÷åòû.
@param[in] size Êîëè÷åñòâî ñ÷èòûâàåìûõ îòñ÷åòîâ (32-áèòíûõ ñëîâ).
@param[in] tout Òàéìàóò íà ïðèåì äàííûõ â ìñ.
@return Åñëè < 0 - êîä îøèáêè.
Åñëè >= 0 - êîëè÷åñòâî ñ÷èòàííûõ ñëîâ.
*******************************************************************************/
X502_EXPORT(int32_t) X502_Recv(t_x502_hnd hnd, uint32_t* buf, uint32_t size, uint32_t tout);
/***************************************************************************//**
@brief Ïåðåäà÷à ïîòîêîâûõ äàííûõ ÖÀÏ è öèôðîâûõ âûõîäîâ â ìîäóëü
Ôóíêöèÿ çàïèñûâàåò äàííûå íà ïåðåäà÷ó â ïðîìåæóòî÷íûé áóôåð, ïîñëå
÷åãî ýòè äàííûå áóäóò ïåðåäàíû â ìîäóëü.
Äàííûå äîëæíû áûòü â ñïåöèàëüíîì ôîðìàòå, êîòîðûé îïðåäåëÿåò, ÷òî ýòî çà
äàííûå (öèôðîâûå âûõîäû, êàíàë ÖÀÏ1 èëè êàíàë ÖÀÏ2). Ïîäãîòîâèòü äàííûå
â íóæíîì ôîðìàòå ìîæíî ñ ïîìîùüþ X502_PrepareData().
Åñëè ïðîìåæóòî÷íûé áóôåð íà ïåðåäà÷ó çàïîëíåí, òî ôóíêöèÿ áóäåò æäàòü ïîêà
îí íå îñâîáîäèòñÿ èëè ïîêà íå èñòå÷åò óêàçàííûé òàéìàóò.
Êîëè÷åñòâî ñâîáîäíîãî ìåñòà â áóôåðå ìîæíî ïðè æåëàíèè óçíàòü ñ ïîìîùüþ
ôóíêöèè X502_GetSendReadyCount().
Âîçâðàùåíèå îçíà÷àåò, ÷òî äàííûå çàïèñàíû â ïðîìåæóòî÷íûé áóôåð, à íå
òî ÷òî îíè óæå äîøëè äî ìîäóëÿ è âûâåäåíû.
Ïåðåä âûçîâîì ýòîé ôóíêöèè äîëæíà áûòü çàïóùåíà ïðåäçàãðóçêà äàííûõ íà
âûâîä ñ ïîìîùüþ X502_PreloadStart().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] buf Áóôåð ñî ñëîâàìè, êîòîðûå íåîáõîäèìî ïåðåäàòü ìîäóëþ
@param[in] size Êîëè÷åñòâî ïåðåäàâàåìûõ îòñ÷åòîâ (32-áèòíûõ ñëîâ).
@param[in] tout Òàéìàóò íà ïåðåäà÷ó (â áóôåð äðàéâåðà) äàííûõ â ìñ.
@return Åñëè < 0 - êîä îøèáêè.
Åñëè >= 0 - êîëè÷åñòâî çàïèñàííûõ ñëîâ.
******************************************************************************/
X502_EXPORT(int32_t) X502_Send(t_x502_hnd hnd, const uint32_t* buf, uint32_t size, uint32_t tout);
/***************************************************************************//**
@brief Îáðàáîòêà ïðèíÿòûõ îòñ÷åòîâ ÀÖÏ îò ìîäóëÿ
Ôóíêöèÿ âûïîëíÿåò îáðàáîòêó îòñ÷åòîâ ÀÖÏ, ïðî÷èòàííûõ ñ ïîìîùüþ X502_Recv().
Ôóíêöèÿ ïðîâåðÿåò ñëóæåáíóþ èíôîðìàöèþ èç âõîäíîãî ìàññèâà è ïåðåâîäèò îòñ÷åòû
ÀÖÏ ëèáî â êîäû, ëèáî â âîëüòû (åñëè óêàçàí ôëàã #X502_PROC_FLAGS_VOLT).
Ôóíêöèÿ èñïîëüçóåòñÿ, êîãäà íå çàïóùåí ñèíõðîííûé ââîä ñ öèôðîâûõ ëèíèé è
îòñ÷åòû ÀÖÏ ÿâëÿþòñÿ åäèíñòâåííûìè ïðèõîäÿùèìè îò ìîäóëÿ äàííûìè (åñëè
â ïðèíÿòîì ïîòîêå áóäóò äðóãèå äàííûå - òî îíè áóäóò îòáðîøåíû).
Åñëè çàïóùåí ñèíõðîííûé ââîä ñ öèôðîâûõ ëèíèé, òî ñëåäóåò èñïîëüçîâàòü
X502_ProcessData(), êîòîðàÿ âûäåëÿåò äàííûå ñ öèôðîâûõ ëèíèé â îòäåëüíûé
ìàññèâ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] src Âõîäíîé ìàññèâ îòñ÷åòîâ, ïðèíÿòûõ ñ ïîìîùüþ X502_Recv().
@param[out] dest Ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíû ïðåîáðàçîâàííûå äàííûå
îò ÀÖÏ.
@param[in,out] size Íà âõîäå - êîëè÷åñòâî ñëîâ â ìàññèâå src, íà âûõîäå -
êîëè÷åñòâî ñîõðàíåííûõ ïðåîáðàçîâàííûõ çíà÷åíèé â
ìàññèâå dest
@param[in] flags Íàáîð ôëàãîâ èç #t_x502_proc_flags
@return Êîä îøèáêè.
****************************************************************************/
X502_EXPORT(int32_t) X502_ProcessAdcData(t_x502_hnd hnd, const uint32_t* src,
double *dest, uint32_t *size, uint32_t flags);
/***************************************************************************//**
@brief Îáðàáîòêà ïðèíÿòûõ îò ìîäóëÿ äàííûõ
Ôóíêöèÿ âûïîëíÿåò îáðàáîòêó äàííûõ, ïðî÷èòàííûõ ñ ïîìîùüþ X502_Recv().
Ôóíêöèÿ ïðîâåðÿåò ñëóæåáíóþ èíôîðìàöèþ èç âõîäíîãî ìàññèâà, ðàçáèâàåò äàííûå
íà äâà ìàññèâà - äàííûå îò ÀÖÏ, êîòîðûå ïåðåâîäÿòñÿ â òèï double, è äàííûå
îò ñèíõðîííîãî öèôðîâîãî ââîäà.
Äàííûå îò ÀÖÏ òàê æå ìîãóò áûòü ïåðåâåäåíû â âîëüòû. Ïðè ýòîì äàííûå ÀÖÏ
ïðèõîäÿò îò ìîäóëÿ óæå îòêàëèáðîâàííûìè ñ ïîìîùüþ êàëèáðîâî÷íûõ êîýôôèöèåíòîâ,
òàê êàê êàëèáðîâêà âûïîëíÿåòñÿ àïïàðàòíî. Åñëè äàííûå ÀÖÏ íå ïåðåâîäÿòñÿ
â Âîëüòû è ïðè ýòîì íå áûëè èçìåíåíû çàâîäñêèå êàëèáðîâî÷íûå êîýôôèöèåíòû,
òî âîçâðàùåííîå çíà÷åíèå ðàâíîå #X502_ADC_SCALE_CODE_MAX ñîîòâåòñòâóåò
íàïðÿæåíèþ ðàâíîìó ìàêñèìàëüíîìó äëÿ èñïîëüçóåìîãî äèàïàçîíà.
Êðîìå òîãî, ôóíêöèÿ ðàçáèðàåò ñîîáùåíèÿ, ïåðåäàâàåìûå â ïîòîêå äàííûõ
(íàïðèìåð, ñîîáùåíèå î ïåðåïîëíåíèè áóôåðà).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] src Âõîäíîé ìàññèâ îòñ÷åòîâ, ïðèíÿòûé ñ ïîìîùüþ X502_Recv().
@param[in] size Êîëè÷åñòâî îòñ÷åòîâ (32-áèòíûõ ñëîâ) â ìàññèâå src.
@param[in] flags Íàáîð ôëàãîâ èç #t_x502_proc_flags, óïðàâëÿþùèõ
ïîâåäåíèåì ôóíêöèè. Ìîæåò áûòü óêàçàíî íåñêîëüêî ôëàãîâ
÷åðåç ëîãè÷åñêîå "ÈËÈ".
@param[out] adc_data Ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíû äàííûå îò ÀÖÏ,
ïðåîáðàçîâàííûå â ñîîòâåòñòâèè ñ óêàçàííûìè ôëàãàìè.
Ìîæåò áûòü NULL, åñëè íå íóæíî ñîõðàíÿòü äàííûå îò ÀÖÏ
(òîãäà adc_data_size äîëæåí áûòü òîæå NULL, èëè â
ïåðåìåííîé ïåðåäàí ðàçìåð 0).
@param[in,out] adc_data_size Íà âõîäå â äàííîì ïàðàìåòðå ïåðåäàåòñÿ ðåçìåð
áóôåðà adc_data. Åñëè äàííûõ îò ÀÖÏ âî âõîäíîì ìàññèâå
áóäåò áîëüøå adc_data_size, òî â adc_data áóäåò
ñîõðàíåíî òîëüêî ïåðâûå adc_data_size îòñ÷åòîâ.
Íà âûõîäå ïðè óñïåøíîì çàâåðøåíèè ôóíêöèè â äàííóþ
ïåðåìåííóþ çàïèñûâàåòñÿ êîëè÷åñòâî ñîõðàííûõ îòñ÷åòîâ
ÀÖÏ.
Óêàçàòåëü ìîæåò áûòü ðàâåí NULL, åñëè adc_data = NULL
@param[out] din_data Ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíû îò÷åòû ñ ñèíõðîííîãî
öèôðîâîãî ââîäà. Êàæäîå ñëîâî ñîîòâåòñòâóþò ñîñòîÿíèþ
âñåõ öèôðîâûõ âõîäîâ â ôîðìàòå, îïèñàííîì â ôóíêöèè
X502_AsyncInDig().
@param[in,out] din_data_size Àíàëîãè÷íî ïàðàìåòðó adc_data_size â ýòîì
ïàðàìåòðå ïåðåäàåòñÿ ðàçìåð áóôåðà din_data â îòñ÷åòàõ,
à íà âûõîäå ñîõðàíÿåòñÿ êîëè÷åñòâî ðåàëüíî ñîõðàíåííûõ
îòñ÷åòîâ öèôðîâîãî ââîäà. Ìîæåò áûòü NULL, åñëè
din_data = NULL.
@return Êîä îøèáêè.
****************************************************************************/
X502_EXPORT(int32_t) X502_ProcessData(t_x502_hnd hnd, const uint32_t* src, uint32_t size,
uint32_t flags, double *adc_data, uint32_t *adc_data_size,
uint32_t *din_data, uint32_t *din_data_size);
/***************************************************************************//**
@brief Îáðàáîòêà ïðèíÿòûõ îò ìîäóëÿ äàííûõ ñ ïîëüçîâàòåëüñêèìè äàííûìè
Ôóíêöèÿ àíàëîãè÷íà X502_ProcessData(), íî ïîçâîëÿåò òàêæå âûäåëèòü
ïîëüçîâàòåëüñêèå äàííûå èç ïîòîêà. Ïîëüçîâàòåëüñêèìè äàííûìè ñ÷èòàþòñÿ âñå
îòñ÷åòû, êîòîðûå íå ÿâëÿþòñÿ äàííûìè ÀÖÏ, äàííûìè öèôðîâîãî ââîäà
èëè ñîîáùåíèÿìè.
Ïîëüçîâàòåëüñêèå äàííûå ñêëàäûâàþòñÿ áåç èçìåíåíèé â ìàññèâ usr_data
(åñëè îí íå ðàâåí íóëþ).
Äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà â ïåðâóþ î÷åðåäü äëÿ ïðîãðàììèñòîâ, êîòîðûå
áóäóò èñïîëüçîâàòü ìîäèôèöèðîâàííóþ ïðîøèâêó ñèãíàëüíîãî ïðîöåññîðà BlackFin.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] src Âõîäíîé ìàññèâ îòñ÷åòîâ, ïðèíÿòûé ñ ïîìîùüþ
X502_Recv().
@param[in] size Êîëè÷åñòâî îòñ÷åòîâ (32-áèòíûõ ñëîâ) â ìàññèâå src.
@param[in] flags Íàáîð ôëàãîâ èç #t_x502_proc_flags.
@param[out] adc_data Ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíû äàííûå îò ÀÖÏ
(ñì. X502_ProcessData()).
@param[in,out] adc_data_size ñì. X502_ProcessData()
@param[out] din_data Ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíû îò÷åòû ñ
ñèíõðîííîãî öèôðîâîãî ââîäà. Ñì. X502_ProcessData().
@param[in,out] din_data_size ñì. X502_ProcessData().
@param[out] usr_data Ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíû ïîëüçîâàòåëüñêèå
äàííûå áåç èçìåíåíèÿ èõ ôîðìàòà.
@param[in,out] usr_data_size  ýòîì ïàðàìåòðå ïåðåäàåòñÿ ðàçìåð áóôåðà usr_data
à íà âûõîäå ñîõðàíÿåòñÿ êîëè÷åñòâî ðåàëüíî ñîõðàíåííûõ
îòñ÷åòîâ ïîëüçîâàòåëüñêèõ äàííûõ.
Ìîæåò áûòü NULL òîëüêî åñëè usr_data = NULL.
@return Êîä îøèáêè.
****************************************************************************/
X502_EXPORT(int32_t) X502_ProcessDataWithUserExt(t_x502_hnd hnd, const uint32_t* src, uint32_t size,
uint32_t flags, double *adc_data,
uint32_t *adc_data_size, uint32_t *din_data,
uint32_t *din_data_size,
uint32_t *usr_data, uint32_t *usr_data_size);
/***************************************************************************//**
@brief Ïîäãîòîâêà äàííûõ äëÿ âûâîäà â ìîäóëü
Ôóíêöèÿ ïðèíèìàåò äàííûå èç òðåõ ìàññèâîâ - äàííûå íà öèôðîâûå âûõîäû,
îòñ÷åòû ïåðâîãî è âòîðîãî êàíàëà ÖÀÏ.  êà÷åñòâå ìàññèâà ìîæåò áûòü ïåðåäàí
íóëåâîé óêàçàòåëü, åñëè äàííûå èç ýòîãî èñòî÷íèêà íå òðåáóþòñÿ.
Âñå èñïîëüçóåìûå ìàññèâû äîëæíû áûòü îäèíàêîâîãî ðàçìåðà è ôóíêöèÿ èõ
ðàâíîìåðíî ïåðåìåøèâàåò â îáùèé ïîòîê, ïðåîáðàçóÿ â íóæíûé äëÿ ìîäóëÿ ôîðìàò.
Âûõîäíîé ìàññèâ äîëæåí áóäåò ñîäåðæàòü n*size îòñ÷åòîâ, ãäå n - êîëè÷åñòâî
èñïîëüçóåìûõ âõîäíûõ ìàññèâîâ (îò 1 äî 3).
Çíà÷åíèÿ öèôðîâûõ âûõîäîâ ïðåäñòàâëÿþò ñîáîé 32-áèòíûå ñëîâà, ìëàäøèå 16-áèò
êîòîðûõ îïðåäåëÿþò çíà÷åíèÿ âûâîäîâ, à ñòàðøèå - ôëàãè èç
#t_x502_digout_word_flags, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ â ÷àñòíîñòè äëÿ
ïåðåâîäà îäíîé (èëè îáåèõ) èç ïîëîâèí âûâîäîâ â òðåòüå ñîñòîÿíèå.
 êà÷åñòâå çíà÷åíèé ÖÀÏ ìîãóò èñïîëüçîâàòüñÿ êàê êîäû, òàê è Âîëüòû,
â çàâèñèìîñòè îò ïåðåäàííûõ ôëàãîâ, è ê âûâîäèìûì çíà÷åíèÿì ìîãóò áûòü
ïðèìåíåíû êàëèáðîâî÷íûå êîýôôèöèåíòû.
Åñëè èñïîëüçóþòñÿ êîäû ÖÀÏ ñ âêëþ÷åííîé êàëèáðîâêîé, òî êîä
#X502_DAC_SCALE_CODE_MAX îïðåäåëÿåò êîä, ñîîòâåòñòâóþùèé +5V.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] dac1 Âõîäíîé ìàññèâ îòñ÷åòîâ ïåðâîãî êàíàëà ÖÀÏ èëè
NULL, åñëè íå èñïîëüçóåòñÿ.
@param[in] dac2 Âõîäíîé ìàññèâ îòñ÷åòîâ âòîðîãî êàíàëà ÖÀÏ èëè
NULL, åñëè íå èñïîëüçóåòñÿ.
@param[in] digout Âõîäíîé ìàññèâ ñî çíà÷åíèÿìè öèôðîâûõ âûâîäîâ
èëè NULL, åñëè íå èñïîëüçóåòñÿ.
@param[in] size Ðàçìåð êàæäîãî èç èñïîëüçóåìûõ âõîäíûõ ìàññèâîâ.
@param[in] flags Ôëàãè, óïðàâëÿþùèå ðàáîòîé ôóíêöèè, èç
#t_x502_dacout_flags.
@param[out] out_buf Âûõîäíîé ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíû
ñôîðìèðîâàííûå îòñ÷åòû. Äîëæåí áûòü ðàçìåðà
n*size (n - êîëè÷åñòâî èñïîëüçóåìûõ âõîäíûõ
ìàññèâîâ)
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_PrepareData(t_x502_hnd hnd, const double* dac1, const double* dac2,
const uint32_t* digout, uint32_t size, int32_t flags,
uint32_t* out_buf);
/***************************************************************************//**
@brief Ïîäãîòîâêà äàííûõ äëÿ ïåðåäà÷è â ìîäóëü
Ôóíêöèÿ ïðèíèìàåò îòñ÷åòû ÖÀÏ è öèôðîâûõ ëèíèé è íà îñíîâå ýòèõ äàííûõ
ôîðìèðóåò ñëîâà ñïåöèàëüíîãî ôîðìàòà äëÿ äàëüíåéøåé ïåðåäà÷è â ìîäóëü ñ
ïîìîùüþ X502_Send().
Äàííûå îò ÖÀÏ ïðèíèìàþòñÿ â ñëåäóþùåì ïîðÿäêå: 1-ûé îòñ÷åò ïåðâîãî ðàçðåøåííîãî
êàíàëà, çàòåì 1-ûé îòñ÷åò âòîðîãî òàêîãî êàíàëà
è ò.ä., çàòåì ïî âòîðîìó îòñ÷åòó êàæäîãî êàíàëà è ò.ä.
 êà÷åñòâå çíà÷åíèé ÖÀÏ ìîãóò èñïîëüçîâàòüñÿ êàê êîäû, òàê è Âîëüòû,
â çàâèñèìîñòè îò ïåðåäàííûõ ôëàãîâ, è ê âûâîäèìûì çíà÷åíèÿì ìîãóò áûòü
ïðèìåíåíû êàëèáðîâî÷íûå êîýôôèöèåíòû.
Çíà÷åíèÿ öèôðîâûõ âûõîäîâ ïðåäñòàâëÿþò ñîáîé 32-áèòíûå ñëîâà, ìëàäøèå 16-áèò
êîòîðûõ îïðåäåëÿþò çíà÷åíèÿ âûâîäîâ, à ñòàðøèå - ôëàãè èç
#t_x502_digout_word_flags, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ â ÷àñòíîñòè äëÿ
ïåðåâîäà îäíîé (èëè îáåèõ) èç ïîëîâèí âûâîäîâ â òðåòüå ñîñòîÿíèå.
Ôîðìàò âûõîäíûõ ñëîâ è êîëè÷åñòâî ñëîâ íà îòñ÷åò îïðåäåëÿåòñÿ çàäàííûì
[ôîðìàòîì ïåðåäàâàåìûõ äàííûõ](@ref TLTR35_CONFIG::OutDataFmt).
Ôóíêöèÿ çàâåðøàåò ðàáîòó êàê òîëüêî çàêîí÷èòñÿ ìåñòî â âûõîäíîì áóôåðå.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] dac_data Ìàññèâ îòñ÷åòîâ ÖÀÏ. Ìîæåò áûòü ïåðåäàí íóëåâîé óêàçàòåëü,
åñëè èñïîëüçóþòñÿ òîëüêî âûâîä íà öèôðîâûå ëèíèè.
@param[in,out] dac_size Íà âõîäå çàäàåò êîëè÷åñòâî îòñ÷åòîâ â ìàññèâå dac_data,
íà âûõîäå âîçâðàùàåò, ñêîëüêî îòñ÷åòîâ áûëî ðåàëüíî
çàïèñàíî â âûõîäíîé ìàññèâ.
@param[in] dout_data Ìàññèâ çíà÷åíèé äëÿ âûâîäà íà öèôðîâûå ëèíèè.
Ìîæåò áûòü ïåðåäàí íóëåâîé óêàçàòåëü,
åñëè èñïîëüçóþòñÿ òîëüêî äàííûå ÖÀÏ.
@param[in,out] dout_size Íà âõîäå çàäàåò êîëè÷åñòâî çíà÷åíèé â ìàññèâå dout_data,
íà âûõîäå âîçâðàùàåò, ñêîëüêî çíà÷åíèé áûëî ðåàëüíî
çàïèñàíî â âûõîäíîé ìàññèâ.
@param[in] flags Ôëàãè, óïðàâëÿþùèå ðàáîòîé ôóíêöèè, èç
#t_x502_dacout_flags.
@param[out] result Ðåçóëüòèðóþùèé ìàññèâ â ñïåöèàëüíîì ôîðìàòå äëÿ
ïåðåäà÷è â ìîäóëü.
@param[in,out] snd_size Íà âõîäå çàäàåò ðàçìåð ìàññèâà result, íà âûõîäå
âîçâðàùàåò, ñêîëüêî âñåãî 32-áèòíûõ ñëîâ áûëî çàïèñàíî
â ìàññèâ result â õîäå âûïîëíåíèÿ ôóíêöèè.
@param[in] ch_enabled Áèòîâàÿ ìàñêà îïðåäåëÿþùàÿ ðàçðåøåííûå êàíàëû,
1é áèò - 1é êàíàë, 2é áèò - 2é êàíàë, è ò.ä.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_PrepareData2(t_x502_hnd hnd, const double *dac_data,
uint32_t *dac_size, const uint32_t *dout_data,
uint32_t *dout_size, uint32_t flags,
uint32_t *result, uint32_t *snd_size, uint32_t ch_enabled);
/***************************************************************************//**
@brief Ïîäãîòîâêà îäíîãî ñëîâà äëÿ âûâîäà â ÖÀÏ
Ôóíêöèÿ ïðèíèìàåò îäèí îòñ÷åò äëÿ îäíîãî êàíàëà ÖÀÏ.
 êà÷åñòâå çíà÷åíèÿ îòñ÷åòà ÖÀÏ ìîãóò èñïîëüçîâàòüñÿ êàê êîäû, òàê è Âîëüòû,
â çàâèñèìîñòè îò ïåðåäàííûõ ôëàãîâ, è ê âûâîäèìûì çíà÷åíèÿì ìîãóò áûòü
ïðèìåíåíû êàëèáðîâî÷íûå êîýôôèöèåíòû.
Åñëè èñïîëüçóþòñÿ êîäû ÖÀÏ ñ âêëþ÷åííîé êàëèáðîâêîé, òî êîä
#X502_DAC_SCALE_CODE_MAX îïðåäåëÿåò êîä, ñîîòâåòñòâóþùèé +5V.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] range Äèàïàçîí èëè âûõîäû îäíîãî êàíàëà (äëÿ LTA37 1:1 èëè 1:10) (èç #t_x502devs_dac_range)
@param[in] dac_ch Íîìåð êàíàëà ÖÀÏ.
@param[in] dac_val Îòñ÷åò êàíàëà dac_ch ÖÀÏ.
@param[in] flags Ôëàãè, óïðàâëÿþùèå ðàáîòîé ôóíêöèè, èç
#t_x502_dacout_flags.
@param[out] out_buf Óêàçàòåëü íà ðåçóëüòèðóþùåå ñëîâî äàííûõ äëÿ êàíàëà dac_ch.
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_PrepareDacWrd(t_x502_hnd hnd, uint32_t dac_ch, double dac_val,
int32_t flags,
uint32_t* out_wrd);
/***************************************************************************//**
@brief Ïîëó÷èòü êîëè÷åñòâî îòñ÷åòîâ â áóôåðå ïîòîêà íà ââîä
Ôóíêöèÿ âîçâðàùàåò êîëè÷åñòâî îòñ÷åòîâ, êîòîðûå áûëè ïðèíÿòû èç ìîäóëÿ
âî âíóòðåííèé áóôåð è ãîòîâû äëÿ ñ÷èòûâàíèÿ ñ ïîìîùüþ X502_Recv().
Òî åñòü åñëè â X502_Recv() ïåðåäàòü çíà÷åíèå, êîòîðîå âåðíóëà äàííàÿ ôóíêöèÿ,
òî X502_Recv() âåðíåò ýòî êîëè÷åñòâî äàííûõ áåç îæèäàíèÿ (òàê êàê îíè óæå
â áóôåðå).
Ïðè ðàáîòå ïî Ethernet äàííàÿ ôóíêöèÿ âîçâðàùàåò êîððåêòíîå çíà÷åíèå òîëüêî
äëÿ ÎÑ Windows.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] rdy_cnt Êîëè÷åñòâî ãîòîâûõ ê ïðèåìó îòñ÷åòîâ.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_GetRecvReadyCount(t_x502_hnd hnd, uint32_t *rdy_cnt);
/***************************************************************************//**
@brief Ïîëó÷èòü ðàçìåð ñâîáîäíîãî ìåñòà â áóôåðå ïîòîêà íà âûâîä
Ôóíêöèÿ âîçâðàùàåò êîëè÷åñòâî îòñ÷åòîâ, ñîîòâåòñòâóþùåå ñâîáîäíîìó ìåñòó
â áóôåðå íà ïåðåäà÷ó â ìîäóëü.
Ýòî êîëè÷åñòâî îòñ÷åòîâ ãàðàíòèðîâàííî ìîæåò áûòü ïåðåäàíî ñ ïîìîùüþ
X502_Send() áåç îæèäàíèÿ.
Äàííàÿ ôóíêöèÿ íå ðåàëèçîâàíà ïðè ðàáîòå ïî èíòåðôåéñó Ethernet (TCP).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] rdy_cnt Êîëè÷åñòâî ñëîâ, êîòîðîìó ñîîòâåòñòâóåò
ñâîáîäíîå ìåñòî â áóôåðå íà ïåðåäà÷ó.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_GetSendReadyCount(t_x502_hnd hnd, uint32_t *rdy_cnt);
/***************************************************************************//**
@brief Ïîëó÷èòü íîìåð ñëåäóþùåãî îæèäàåìîãî ëîãè÷åñêîãî êàíàëà ÀÖÏ äëÿ
îáðàáîòêè
Ôóíêöèÿ âîçâðàùàåò íîìåð ëîãè÷åñêîãî êàíàëà ÀÖÏ, êîòîðûé äîëæåí áûòü
îáðàáîòàí ïåðâûì ïðè ñëåäóþùåì âûçîâå X502_ProcessData()/
X502_ProcessAdcData() â ñëó÷àå, åñëè ïîòîê äàííûõ íåïðåðûâåí.
Ïî ñóòè, ýòî íîìåð ëîãè÷åñêîãî êàíàëà, ñëåäóþùèé çà ëîãè÷åñêèì êàíàëîì
ïîñëåäíåãî îáðàáîòàííîãî äî ýòîãî îòñ÷åòà ÀÖÏ.
Ìîæåò áûòü èñïîëüçîâàíî ïðè îáðàáîòêå áëîêîâ äàííûõ íå êðàòíûõ öåëîìó
êîëè÷åñòâó êàäðîâ.
Åñëè ïåðåä X502_ProcessData() âûçûâàòü äàííóþ ôóíêöèþ, òî îíà âåðíåò íîìåð
ëîãè÷åñêîãî êàíàëà, ñîîòâåòñòâóþùèé ïåðâîìó îòñ÷åòó ÀÖÏ,
îáðàáîòàííîìó ïîñëåäóþùèì âûçîâîì X502_ProcessData().
Íàïðèìåð, åñëè óñòàíîâëåíî 7 ëîãè÷åñêèõ êàíàëîâ, à â X502_ProcessData()
ïåðåäàíî äëÿ îáðàáîòêè êðàòíîå 7 êîëè÷åñòâî îòñ÷åòîâ, òî ïîñëåäóþùèé âûçîâ
X502_GetNextExpectedLchNum() âåðíåò íîìåð êàíàëà ðàâíûé 0 (òàê êàê îáðàáîòàíî
öåëîå ÷èñëî êàäðîâ è îæèäàåòñÿ ñíîâà íà÷àëî êàäðà).
Åñëè â X502_ProcessData() ïåðåäàí ìàññèâ ñ 7*n + 5 îòñ÷åòàìè ÀÖÏ, òî ñëåäóþùèì
îæèäàåìûì êàíàëîì áóäåò ëîãè÷åñêèé êàíàë ñ íîìåðîì 5 (îáðàáîòàíû êàíàëû
0,1,2,3,4 èç íåïîëíîãî êàäðà).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] lch Íîìåð ëîãè÷åñêîãî êàíàëà (íà÷èíàÿ ñ íóëÿ).
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_GetNextExpectedLchNum(t_x502_hnd hnd, uint32_t *lch);
/***************************************************************************//**
@brief Íà÷àëî ïîäãîòîâêè âûâîäà ñèíõðîííûõ äàííûõ
Ôóíêöèÿ äîëæíà âûçûâàòüñÿ ïåðåä íà÷àëîì ïðåäçàãðóçêè ïîòîêîâûõ ñèíõðîííûõ
äàííûõ íà âûâîä. Äëÿ íà÷àëà âûäà÷è ñèíõðîííûõ äàííûõ îäíîâðåìåííî ñ íà÷àëîì
ñèíõðîííîãî ââîäà, ê ìîìåíòó íà÷àëà ñáîðà ÷àñòü äàííûõ äîëæíà áûòü óæå
çàãðóæåíà â ìîäóëü äî âûçîâà X502_StreamsStart().
Äàííàÿ ôóíêöèÿ èíèöèàëèçèðóåò êàíàë îáìåíà íà ïåðåäà÷ó äàííûõ íà âûâîä.
Ïîñëå âûçîâà ýòîé ôóíêöèè ìîæíî çàãðóçèòü ÷àñòü äàííûõ íà âûâîä
ñ ïîìîùüþ X502_Send().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_PreloadStart(t_x502_hnd hnd);
/***************************************************************************//**
@brief Íà÷àëî çàãðóçêè öèêëè÷åñêîãî ñèãíàëà íà âûâîä
Ïî âûçîâó ýòîé ôóíêöèè â äðàéâåðå (äëÿ L502) èëè â ïàìÿòè êîíòðîëëåðà ìîäóëÿ
(äëÿ E502) âûäåëÿåòñÿ ìåñòî ïîä öèêëè÷åñêèé áóôåð íà âûâîä.
Äîëæíà âûçûâàòüñÿ ïåðåä çàãðóçêîé öèêëè÷åñêèõ äàííûõ ñ ïîìîùüþ
X502_Send().
Äëÿ óñïåøíîãî âûïîëíåíèÿ äîëæåí áûòü ñâîáîäíûé áóôåð (èñïîëüçóåòñÿ
äâîéíàÿ áóôåðèçàöèÿ) - ò.å. ôóíêöèÿ íå ìîæåò áûòü âûçâàíà ñðàçó ïîñëå ïðåäûäóùåãî
X502_OutCycleSetup(). Êðîìå òîãî íå äîëæåí áûë áûòü èñïîëüçîâàí ïîòîêîâûé
âûâîä.
Äëÿ L-502 ðàçìåð ìàêñèìàëüíûé ðàçìåð áóôåðà îïðåäåëÿåòñÿ òîëüêî ðàçìåðîì,
êîòîðûé ïîçâîëÿåò âûäåëèòü ñèñòåìà íà óðîâíå äðàéâåðà.
Äëÿ E-502 ðàçìåð îãðàíè÷åí ïàìÿòüþ âñòðîåííîãî êîíòðîëëåðà.
Ïîäðîáíåå ñìîòðè â îïèñàíèè ðàçëè÷èé E-502 è L-502.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] size Êîëè÷åñòâî îòñ÷åòîâ â âûâîäèìîì öèêëè÷åñêîì ñèãíàëå
ñóììàðíî äëÿ âñåõ èñïîëüçóåìûõ êàíàëîâ âûâîäà.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_OutCycleLoadStart(t_x502_hnd hnd, uint32_t size);
/***************************************************************************//**
@brief Óñòàíîâêà ðàíåå çàãðóæåííîãî öèêëè÷åñêîãî ñèãíàëà íà âûâîä
Ïî âûçîâó ýòîé ôóíêöèè ðàíåå çàãðóæåííûé öèêëè÷åñêèé áóôåð ñòàíîâèòñÿ àêòèâíûì.
Åñëè ñèíõðîííûé ââîä-âûâîä çàïóùåí (÷åðåç X502_StreamsStart()), òî ïî ýòîé
ôóíêöèè ñèãíàë áóäåò âûäàâàòüñÿ íà âûõîä, èíà÷å âûäà÷à íà÷íåòñÿ ïðè çàïóñêå
ñèíõðîííîãî ââîäà-âûâîäà.
Åñëè äî ýòîãî óæå âûâîäèëñÿ öèêëè÷åñêèé ñèãíàë, òî ñìåíà íà íîâûé ïðîèçîéäåò
â êîíöå öèêëà ïðåäûäóùåãî ñèãíàëà, åñëè íå óêàçàí ôëàã
#X502_OUT_CYCLE_FLAGS_FORCE.
Åñëè íå óêàçàí ôëàã #X502_OUT_CYCLE_FLAGS_WAIT_DONE, òî ôóíêöèÿ òîëüêî äàåò
êîìàíäó íà óñòàíîâêó ñèãíàëà, íå îæèäàÿ íåïîñðåäñòâåííîé ñìåíû ñèãíàëà èëè
çàãðóçêè ñèãíàëà.  ÷àñòíîñòè äëÿ îäíîâðåìåííîãî çàïóñêà ñèíõðîííîãî ââîäà
è âûâîäà íåîáõîäèìî ñäåëàòü çàãðóçêó ïåðâîãî öèêëè÷åñêîãî ñèãíàëà ñ äàííûì
ôëàãîì, ÷òîáû ãàðàíòèðîâàòü, ÷òî ñèãíàë ïîëíîñòüþ çàãðóæåí ê ìîìåíòó çàïóñêà
ñèíõðîííîãî ââîäà-âûâîäà ÷åðåç X502_StreamsStart().
Äàííàÿ ôóíêöèÿ äîëæíà áûòü âûçâàíà òîëüêî ïîñëå âûçîâà X502_OutCycleLoadStart()
è çàãðóçêè óêàçàííîãî â íåé êîëè÷åñòâà îòñ÷åòîâ â áóôåð!
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] flags Ôëàãè èç #t_x502_out_cycle_flags.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_OutCycleSetup(t_x502_hnd hnd, uint32_t flags);
/***************************************************************************//**
@brief Îæèäàíèå óñòàíîâêè ðàíåå çàãðóæåííîãî öèêëè÷åñêîãî ñèãíàëà íà âûâîä
Ðåàëèçóåò òîò æå ôóíêöèîíàë ÷òî è X502_OutCycleSetup ñ ôëàãîì #X502_OUT_CYCLE_FLAGS_WAIT_DONE
Äîáàâëåí òàéìàóò îæèäàíèÿ óñòàíîâêè öèêëè÷åñêîãî ñèãíàëà.
Äàííàÿ ôóíêöèÿ äîëæíà áûòü âûçâàíà òîëüêî ïîñëå âûçîâà X502_OutCycleLoadStart() è X502_OutCycleSetup()
è çàãðóçêè óêàçàííîãî â íåé êîëè÷åñòâà îòñ÷åòîâ â áóôåð!
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] flags Ôëàãè èç #t_x502_out_cycle_flags.
@param[in] tout Òàéìàóò â òå÷åíèè êîòîðîãî áóäåò îæèäàòüñÿ, êîãäà
ïðîöåññîð çàâåðøèò âûïîëíåíèå êîìàíäû. Ôóíêöèÿ
âîçâðàòèò óïðàâëåíèå ëèáî ïî çàâåðøåíèþ êîìàíäû,
ëèáî ïî òàéìàóòó.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_OutCycleSetupWaitDone(t_x502_hnd hnd, uint32_t tout);
/***************************************************************************//**
@brief Îñòàíîâ âûâîäà öèêëè÷åñêîãî ñèãíàëà
Ïî âûçîâó ýòîé ôóíêöèè ïðåêðàùàåòñÿ âûäà÷à ðàíåå óñòàíîâëåííîãî öèêëè÷åñêîãî
ñèãíàëà ñ ïîìîùüþ X502_OutCycleSetup(). Îñòàíîâêà îñóùåñòâëÿåòñÿ
ïîñëå âûäà÷è ïîñëåäíåãî îòñ÷åòà â ïåðèîäå, ÷òî ïîçâîëÿåò çíàòü êàêèå çíà÷åíèÿ
îñòàíóòñÿ íà âûõîäàõ.
Ïðè âûçîâå æå X502_StreamsStop() (èëè ïðè çàïðåùåíèè âñåõ ïîòîêîâ
íà âûâîä ÷åðåç X502_StreamsDisable()) îñòàíîâ âñåõ ïîòîêîâ ïðîèñõîäèò ñðàçó
è òî÷íàÿ òî÷êà îñòàíîâà íåèçâåñòíà.
Ïðè ýòîì íåîáõîäèìî ó÷èòûâàòü, ÷òî ñàìà ôóíêöèÿ ïî óìîë÷àíèþ òîëüêî äåëàåò çàïðîñ
íà îñòàíîâ, à ðåàëüíî îñòàíîâ ïðîèçîéäåò ïîçæå. Åñëè âûçâàòü X502_StreamsStop()
äî çàâåðøåíèÿ îñòàíîâà, òî ïîñëåäíèé îòñ÷åò áóäåò íåèçâåñòåí, ò.å. íåîáõîäèìî
äîæäàòüñÿ çàâåðøåíèÿ îñòàíîâà, äëÿ ÷åãî ìîæåò íàïðèìåð áûòü èñïîëüçîâàí
ôëàã #X502_OUT_CYCLE_FLAGS_WAIT_DONE.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] flags Ôëàãè èç #t_x502_out_cycle_flags.
@return Êîä îøèáêè.
***************************************************************************/
X502_EXPORT(int32_t) X502_OutCycleStop(t_x502_hnd hnd, uint32_t flags);
/***************************************************************************//**
@brief Ïðîâåðêà, çàâåðøåíà ëè óñòàíîâêà èëè îñòàíîâ öèêëè÷åñêîãî ñèãíàëà
Ôóíêöèÿ ïðîâåðÿåò, çàâåðøåíà ëè óñòàíîâêà öèêëè÷åñêîãî ñèãíàëà ïîñëå âûçîâà
X502_OutCycleSetup() èëè çàâåðøåíà ëè îñòàíîâêà ãåíåðàöèè öèêëè÷åñêîãî
ñèãíàëà ïîñëå âûçîâà X502_OutCycleStop(). Ïî ñâîåìó íàçíà÷åíèþ àíàëîãè÷íà ôëàãó
#X502_OUT_CYCLE_FLAGS_WAIT_DONE â îïèñàííûõ âûøå ôóíêöèÿõ, íî ïîçâîëÿåò
âûïîëíèòü îæèäàíèå âðó÷íóþ (ñ ïðîâåðêîé äðóãèõ óñëîâèé).
Ôóíêöèÿ äîñòóïíà â áèáëèîòåêè, íà÷èíàÿ ñ âåðñèè 1.1.2, ïðè ýòîì äëÿ ðàáîòû
ôóíêöèè íåîáõîäèìà âåðñèÿ ïðîøèâêè ARM íå íèæå 1.0.2 äëÿ ìîäóëÿ E-502 èëè
âåðñèÿ äðàéâåðà íå íèæå 1.0.9 äëÿ L-502.  îòëè÷èå îò ôëàãà, åñëè äàííûå óñëîâèÿ
íå âûïîëíÿþòñÿ, òî ôóíêöèÿ ÿâíî âåðíåò îøèáêó #X502_ERR_NOT_SUP_BY_FIRMWARE
èëè #X502_ERR_NOT_SUP_BY_DRIVER.
Îæèäàíèå çàâåðøåíèÿ ìîæåò áûòü íåîáõîäèìî ïðè âûçîâå X502_OutCycleSetup()
ïðè çàãðóçêå ïåðâîãî ñèãíàëà äî âûçîâà X502_StreamsStart(), åñëè òðåáóåòñÿ,
÷òîáû âûäà÷à ïåðâûõ îòñ÷åòîâ íà ÖÀÏ ñîâïàëà ïî âðåìåíè ñ ìîìåíòîì çàïóñêà ââîäà,
ò.ê. èíà÷å çàãðóçêà ñèãíàëà â ìîäóëü ìîæåò íå çàâåðøèòüñÿ ê ìîìåíòó çàïóñêà
è âûäà÷à ñèãíàëà íà÷íåòñÿ ñ çàäåðæêîé (àêòóàëüíî äëÿ E502).
Ïðè ïîñëåäóþùèõ âûçîâàõ X502_OutCycleSetup() äëÿ ñìåíû óæå óñòàíîâëåííîãî
ñèãíàëà óñòàíîâêà ñ÷èòàåòñÿ çàâåðøåííîé ïîñëå çàâåðøåíèÿ çàãðóçêè ñèãíàëà è
íåïîñðåäñòâåííîé ñìåíû âûäàâàåìîãî ñèãíàëà. Ýòó ïðîâåðêó ìîæíî èñïîëüçîâàòü,
÷òîáû ÿâíî óçíàòü, ÷òî ñìåíà ñèãíàëà çàâåðøèëàñü è ìîæíî óæå çàãðóæàòü
ñëåäóþùèé öèêëè÷åñêèé ñèãíàë.
Ïðè âûçîâå X502_OutCycleStop() îæèäàíèå çàâåðøåíèÿ ìîæåò èñïîëüçîâàòüñÿ
ïåðåä âûçîâîì X502_StreamsStop(), ÷òîáû óáåäèòñÿ (åñëè ýòî íåîáõîäèìî), ÷òî
ãåíåðàöèÿ áûëà çàâåðøåíà èìåííî íà ïîñëåäíåé òî÷êå çàãðóæåííîãî öèêëè÷åñêîãî
ñèãíàëà.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] done 0, åñëè åñòü íåçàâåðøåííûé çàïðîñ íà óñòàíîâêó èëè îñòàíîâ
öèêëè÷åñêîãî ñèãíàëà, 1 --- â ïðîòèâíîì ñëó÷àå (âêëþ÷àÿ
ñëó÷àé, êîãäà âûäà÷à öèêëè÷åñêîãî ñèãíàëà âîîáùå íå âåäåòñÿ)
@return Êîä îøèáêè.
****************************************************************************/
X502_EXPORT(int32_t) X502_OutCycleCheckSetupDone(t_x502_hnd hnd, uint32_t *done);
/***************************************************************************//**
@brief ×òåíèå ôëàãîâ ñòàòóñà âûâîäà
Ôóíêöèÿ ÷èòàåò çíà÷åíèÿ ôëàãîâ ñòàòóñà ñèíõðîííîãî âûâîäà èç ðåãèñòðà ñòàòóñà.
 ÷àñòíîñòè ïî ôëàãó #X502_OUT_STATUS_FLAG_BUF_WAS_EMPTY ìîæíî ïðîâåðèòü,
íå áûëî ëè îïóñòîøåíèÿ áóôåðà ñ ìîìåíòà çàïóñêà ñèíõðîííîãî âûâîäà,
÷òîáû óáåäèòüñÿ, ÷òî íå áûëî ðàçðûâà ñèãíàëà èç-çà íåïîäêà÷åííûõ âîâðåìÿ
äàííûõ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] status Ôëàãè ñòàòóñà --- íàáîð áèòîâ èç #t_x502_out_status_flags,
îáúåäèíåííûõ ÷åðåç ëîãè÷åñêîå “ÈËÈ”.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_OutGetStatusFlags(t_x502_hnd hnd, uint32_t *status);
/***************************************************************************//**
@brief Óñòàíîâêà ðàçìåðà áóôåðà äëÿ ñèíõðîííîãî ââîäà èëè âûâîäà
Ôóíêöèÿ óñòàíàâëèâàåò ðàçìåð áóôåðà, êîòîðûé èñïîëüçóåòñÿ äëÿ âðåìåííîãî
õðàíåíèÿ äàííûõ íà ïðèåì èëè íà ïåðåäà÷ó.
Ïðåäíàçíà÷åíà äëÿ ñëó÷àåâ, êîãäà ïîëüçîâàòåëÿ ïî êàêèì-ëèáî ïðè÷èíàì íå
óäîâëåòâîðÿåò ðàññ÷èòûâàåìîå áèáëèîòåêîé çíà÷åíèå ïî óìîë÷àíèþ.
Åñëè ôóíêöèåé X502_SetStreamBufSize áûë óñòàíîâëåí íå íóëåâîé ðàçìåð áóôåðà,
òî ýòîò ðàçìåð áóäåò èñïîëüçîâàòüñÿ íà÷èíàÿ ñ ïåðâîãî âûçîâà X502_StreamsStart èëè
X502_StreamsEnable è ïåðåñ÷èòûâàòüñÿ äàëåå íå áóäåò, ÷òîáû áèáëèîòåêà ñàìà
ðàññ÷èòàëà ðàçìåð áóôåðà íàäî âûçâàòü X502_SetStreamBufSize ñ íóëåâûì ðàçìåðîì
è îí ðàññ÷èòàåòñÿ ïðè ïåðâîì X502_StreamsStart èëè X502_StreamsEnable.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] ch Îïðåäåëÿåò, óñòàíàâëèâàåòñÿ ðàçìåð áóôåðà íà ââîä
èëè íà âûâîä (çíà÷åíèå èç #t_x502_stream_ch).
@param[in] size Ðàçìåð áóôåðà â 32-áèòíûõ îòñ÷åòàõ,
0 - áèáëèîòåêà áóäåò ñàìà ðàññ÷èòûâàòü çíà÷åíèå ïî óìîë÷àíèþ
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetStreamBufSize(t_x502_hnd hnd, uint32_t ch, uint32_t size);
/***************************************************************************//**
@brief Óñòàíîâêà øàãà ïðè ïåðåäà÷å ïîòîêà íà ââîä èëè âûâîä
Ôóíêöèÿ óñòàíàâëèâàåò øàã ïåðåäà÷è äàííûõ (øàã ãåíåðàöèè ïðåðûâàíèé
äëÿ PCI-Express èëè ðàçìåð çàïðîñà äëÿ USB) ïðè ïåðåäà÷å ñèíõðîííîãî
ïîòîêà äàííûõ íà ââîä èëè íà âûâîä.
Äàííàÿ ôóíêöèÿ ïðåäíàçíà÷åíà äëÿ ïîëüçîâàòåëåé, êîòîðûõ íå óñòðîèò
àâòîìàòè÷åñêè ðàññ÷èòûâàåìîå áèáëèîòåêîé çíà÷åíèå.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] dma_ch Îïðåäåëÿåò, øàã ïåðåäà÷è óñòàíàâëèâàåòñÿ íà ââîä
èëè íà âûâîä (çíà÷åíèå èç #t_x502_stream_ch).
@param[in] step Øàã ïðåðûâàíèÿ â 32-áèòíûõ îòñ÷åòàõ
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetStreamStep(t_x502_hnd hnd, uint32_t dma_ch, uint32_t step);
/** @} */
/***************************************************************************//**
@addtogroup func_dsp Ôóíêöèè äëÿ ðàáîòû ñ ñèãíàëüíûì ïðîöåññîðîì
@{
*******************************************************************************/
/***************************************************************************//**
@brief Çàãðóçêà ïðîøèâêè ñèãíàëüíîãî ïðîöåññîðà BlackFin
Ôóíêöèÿ çàãðóæàåò ïðîøèâêó ñèãíàëüíîãî ïðîöåññîðà èç óêàçàííîãî ôàéëà â
ïðîöåññîð è çàïóñêàåò åå, ïðîâåðÿåò ïðàâèëüíîñòü çàãðóçêè ïóòåì ïîëó÷åíèÿ
âåðñèè ïðîøèâêè (÷åðåç ñïåöèàëüíóþ êîìàíäó).
Ïðîøèâêà äîëæíà áûòü â áèíàðíîì ôîðìàòå LDR.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] filename Èìÿ ôàéëà ñ çàãðóæàåìîé ïðîøèâêîé.
@return Êîä îøèáêè.
*****************************************************************************/
X502_EXPORT(int32_t) X502_BfLoadFirmware(t_x502_hnd hnd, const char* filename);
/***************************************************************************//**
@brief Ïðîâåðêà, çàãðóæåíà ëè ïðîøèâêà BlackFin
Ôóíêöèÿ ïåðåäàåò êîìàíäû ïðîöåññîðó BlackFin äëÿ ïîëó÷åíèÿ âåðñèè ïðîøèâêè è
åå ñîñòîÿíèÿ. Óñïåøíîå âûïîëíåíèå êîìàíä ñâèäåòåëüñòâóåò î òîì, ÷òî â
BlackFin çàãðóæåíà äåéñòâèòåëüíàÿ ïðîøèâêà.
Êðîìå òîãî ïðîøèâêå ïåðåäàåòñÿ èíôîðìàöèÿ î ìîäóëå (íàëè÷èå îïöèé, âåðñèÿ
ÏËÈÑ è ò.ä.) äëÿ âíóòðåííåãî èñïîëüçîâàíèÿ.
 ñëó÷àå óñïåõà ìîäóëü ïåðåâîäèòñÿ â ðåæèì DSP.
Äàííàÿ ôóíêöèÿ ìîæåò ñëóæèòü äëÿ ïðîâåðêè, áûëà ëè çàãðóæåíà ïðîøèâêà ðàíüøå
(÷òîáû íå çàãðóæàòü ïîâòîðíî) èëè äëÿ ïðîâåðêè áûëà ëè îíà çàãðóæåíà ÷åðåç
JTAG-èíòåðôåéñ.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] version Åñëè óêàçàòåëü íå íóëåâîé, òî â äàííîé ïåðåìåííîé
âîçâðàùàåòñÿ âåðñèÿ ïðîøèâêè BlackFin â ñëó÷àå
óñïåøíîé ïðîâåðêè.
@return Êîä îøèáêè.
*****************************************************************************/
X502_EXPORT(int32_t) X502_BfCheckFirmwareIsLoaded(t_x502_hnd hnd, uint32_t *version);
/***************************************************************************//**
@brief ×òåíèå áëîêà äàííûõ èç ïàìÿòè ñèãíàëüíîãî ïðîöåññîðà
Ôóíêöèÿ ñ÷èòûâàåò áëîê äàííûõ íàïðÿìóþ èç ïàìÿòè ïðîöåññîðà. Ìîæåò áûòü
ïðî÷èòàíû äàííûå, êàê èç âíóòðåííåé ïàìÿòè (L1), òàê è èç âíåøíåé SDRAM.
Äëÿ âûïîëíåíèÿ ýòîé ôóíêöèè â BlackFin äîëæíà áûòü çàãðóæåíà åãî ïðîøèâêà.
Ôóíêöèÿ ïðåäíàçíà÷åíà â ïåðâóþ î÷åðåäü äëÿ ïîëüçîâàòåëåé, ïèøóùèõ ñâîþ
ïðîãðàììó äëÿ ñèãíàëüíîãî ïðîöåññîðà.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] addr Àäðåñ ïàìÿòè, íà÷èíàÿ ñ êîòîðîãî áóäåò ñ÷èòàí áëîê
äàííûõ.
@param[out] regs Ìàññèâ, â êîòîðûé áóäóò ñîõðàíåíî ïðî÷èòàííîå
ñîäåðæèìîå ïàìÿòè.
@param[in] size Êîëè÷åñòâî ñ÷èòûâàåìûõ 32-áèòíûõ ñëîâ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_BfMemRead(t_x502_hnd hnd, uint32_t addr, uint32_t* regs,
uint32_t size);
/***************************************************************************//**
@brief Çàïèñü áëîêà äàííûõ â ïàìÿòü ñèãíàëüíîãî ïðîöåññîðà
Ôóíêöèÿ çàïèñûâàåò áëîê äàííûõ íàïðÿìóþ â ïàìÿòè ïðîöåññîðà BlackFin. Áëîê
äàííûõ äîëæåí áûòü âñåãäà êðàòåí 8 32-áèòíûì ñëîâàì (32 áàéòàì).
Çàïèñü ìîæåò îñóùåñòâëÿòüñÿ êàê âî âíóòðåííþþ ïàìÿòü (L1), òàê è âî âíåøíþþ SDRAM.
Äëÿ âûïîëíåíèÿ ýòîé ôóíêöèè â BlackFin äîëæíà áûòü çàãðóæåíà åãî ïðîøèâêà.
Ôóíêöèÿ ïðåäíàçíà÷åíà â ïåðâóþ î÷åðåäü äëÿ ïîëüçîâàòåëåé, ïèøóùèõ ñâîþ
ïðîãðàììó äëÿ ñèãíàëüíîãî ïðîöåññîðà.
@note Ñëåäóåò áûòü îñòîðîæíûì, ò.ê. çàïèñü â îáëàñòü äàííûõ, èñïîëüçóåìóþ
ïðîãðàììîé ìîæåò ïðèâåñòè ê åå íåðàáîòîñïîñîáíîñòè.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] addr Àäðåñ ïàìÿòè, íà÷èíàÿ ñ êîòîðîãî áóäåò çàïèñàí áëîê
äàííûõ.
@param[out] regs Ìàññèâ ñ äàííûìè äëÿ çàïèñè â ñèãíàëüíûé ïðîöåññîð.
@param[in] size Êîëè÷åñòâî çàïèñûâàåìûõ äàííûõ â 32-áèòíûõ ñëîâàõ
(äîëæíî áûòü êðàòíî 8).
@return Êîä îøèáêè.
*******************************************************************************/
X502_EXPORT(int32_t) X502_BfMemWrite(t_x502_hnd hnd, uint32_t addr,
const uint32_t* regs, uint32_t size);
/***************************************************************************//**
@brief Ïåðåäà÷à óïðàâëÿþùåé êîìàíäû ñèãíàëüíîìó ïðîöåññîðó
Ôóíêöèÿ ïðåäíàçíà÷åíà äëÿ ïåðåäà÷è ïîëüçîâàòåëüñêèõ óïðàâëÿþùèõ êîìàíä
ïðîöåññîðó äëÿ ïîëüçîâàòåëåé, ïèøóùèõ ñâîþ ïðîøèâêó BlackFin.
Óïðàâëåíèå ðàáîòîé ñèãíàëüíîãî ïðîöåññîðà øòàòíûì îáðàçîì îñóùåñòâëÿåòñÿ
÷åðåç óïðàâëÿþùèå êîìàíäû, êîòîðûå çàïèñûâàþòñÿ â ñïåöèàëüíóþ îáëàñòü
ïàìÿòè ñèãíàëüíîãî ïðîöåññîðà. Ñèãíàëüíûé ïðîöåññîð îáðàáàòûâàåò êîìàíäó
è ïî çàâåðøåíèþ çàïèñûâàåò â ýòó æå îáëàñòü ðåçóëüòàò.
Êîìàíäû äåëÿòüñÿ íà ñòàíäàðòíûå, êîòîðûå èñïîëüçóþòñÿ áèáëèîòåêîé x502api è
ðåàëèçîâàíû â øòàòíîé ïðîøèâêå ñèãíàëüíîãî ïðîöåññîðà è ïîëüçîâàòåëüñêèå,
êîòîðûå ïîëüçîâàòåëü ìîæåò îïðåäåëÿòü ïî ñâîåìó óñìîòðåíèþ.
Ïîëüçîâàòåëüñêèå êîìàíäû íà÷èíàþòñÿ ñ êîäà X502_BF_CMD_CODE_USER (0x8000).
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] cmd_code Êîä êîìàíäû - îïðåäåëÿåò, ÷òî çà êîìàíäà âûïîëíÿåòñÿ.
@param[in] par Ïàðàìåòð, ïåðåäàâàåìûé ñ êîìàíäîé (çíà÷åíèå çàâèñèò
îò êîäà êîìàíäû).
@param[in] snd_data Îïöèîíàëüíûå äàííûå, ïåðåäàâàåìûå âìåñòå ñ êîìàíäîé.
Åñëè äàííûå íå ïåðåäàþòñÿ, òî äîëæåí ïåðåäàâàòüñÿ
íóëåâîé óêàçàòåëü è snd_size = 0.
@param[in] snd_size Êîëè÷åñòâî 32-áèòíûõ ñëîâ, ïåðåäàâàåìûõ â snd_data
@param[out] rcv_data Ìàññèâ, â êîòîðûé áóäóò ïåðåäàíû äàííûå, âîçâðàùåííûå
ïðîöåññîðîì ïî çàâåðøåíèþ êîìàíäû. Åñëè äàííûå íå
äîëæíû âîçâðàùàòüñÿ, òî äîëæåí ïåðåäàâàòüñÿ íóëåâîé
óêàçàòåëü, à rcv_size = 0.
@param[in] rcv_size Êîëè÷åñòâî 32-áèòíûõ ñëîâ, êîòîðîå îæèäàåòñÿ, ÷òî
âåðíåò ïðîöåññîð ïî âûïîëíåíèþ êîìàíäû. Ìàññèâ
rcv_data äîëæåí áûòü ðàññ÷èòàí íà äàííîå êîëè÷åñòâî
ñëîâ.
@param[in] tout Òàéìàóò â òå÷åíèè êîòîðîãî áóäåò îæèäàòüñÿ, êîãäà
ïðîöåññîð çàâåðøèò âûïîëíåíèå êîìàíäû. Ôóíêöèÿ
âîçâðàòèò óïðàâëåíèå ëèáî ïî çàâåðøåíèþ êîìàíäû,
ëèáî ïî òàéìàóòó.
@param[out] recvd_size Åñëè íå ÿâëÿåòñÿ íóëåâûì óêàçàòåëåì, òî â ýòó
ïåðåìåííóþ áóäåò ñîõðàíåíî êîëè÷åñòâî 32-áèòíûõ ñëîâ,
êîòîðîå ðåàëüíî âåðíóë ïðîöåññîð ïîñëå âûïîëíåíèÿ
êîìàíäû (ïðîöåññîð èìååò ïðàâî âåðíóòü ìåíüøå äàííûõ,
÷åì çàïðàøèâàëîñü â rcv_size).
@return Êîä îøèáêè. Åñëè ïðîöåññîð âûïîëíèë êîìàíäó ñ íåíóëåâûì
êîäîì çàâåðøåíèÿ, òî ýòîò êîä è áóäåò âîçâðàùåí
ôóíêöèåé.
*******************************************************************************/
X502_EXPORT(int32_t) X502_BfExecCmd(t_x502_hnd hnd, uint16_t cmd_code, uint32_t par,
const uint32_t* snd_data, uint32_t snd_size,
uint32_t* rcv_data, uint32_t rcv_size,
uint32_t tout, uint32_t* recvd_size);
/** @} */
/***************************************************************************//**
@addtogroup func_flash Ôóíêöèè äëÿ ðàáîòû ñ Flash-ïàìÿòüþ ìîäóëÿ
@{
*******************************************************************************/
/***************************************************************************//**
@brief ×òåíèå áëîêà äàííûõ èç Flash-ïàìÿòè
Ôóíêöèÿ ñ÷èòûâàåò ìàññèâ äàííûõ èç Flash-ïàìÿòè ìîäóëÿ â ìàññèâ, ïåðåäàííûé
ïîëüçîâàòåëåì. Äëÿ ñ÷èòûâàíèÿ íå íóæíî ñïåöèàëüíîå ðàçðåøåíèå - îíî äîñòóïíî
âñåãäà.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] addr Àäðåñ íà÷àëà áëîêà.
@param[out] data Ìàññèâ, êóäà áóäóò ñîõðàíåíû ñ÷èòàííûå äàííûå
(äîëæåí áûòü íå ìåíüøå size áàéò).
@param[in] size Êîëè÷åñòâî áàéò äëÿ ÷òåíèÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_FlashRead(t_x502_hnd hnd, uint32_t addr, uint8_t* data,
uint32_t size);
/***************************************************************************//**
@brief Çàïèñü áëîêà äàííûõ âî Flash-ïàìÿòü ìîäóëÿ
Ôóíêöèÿ çàïèñûâàåò ïåðåäàííûé ìàññèâ äàííûõ âî Flash-ïàìÿòü ìîäóëÿ.
Ýòà îáëàñòü äîëæíà áûòü ïðåäâàðèòåëüíî ñòåðòà ñ ïîìîùüþ X502_FlashErase() è
äî íà÷àëà èçìåíåíèÿ äîëæíà áûòü âûçâàíà ôóíêöèÿ X502_FlashWriteEnable(),
÷òîáû ðàçðåøèòü ëþáîå èçìåíåíèå ñîäåðæèìîãî Flash-ïàìÿòè.
Ïîëüçîâàòåëþ äëÿ çàïèñè äîñòóïíû òîëüêî ïåðâûå #X502_FLASH_USER_SIZE áàéò
Flash-ïàìÿòè.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] addr Àäðåñ íà÷àëà áëîêà.
@param[in] data Ìàññèâ ñ çàïèñûâàåìûìè äàííûìè (äîëæåí áûòü íå ìåíüøå
size áàéò).
@param[in] size Êîëè÷åñòâî áàéò äëÿ çàïèñè.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_FlashWrite(t_x502_hnd hnd, uint32_t addr,
const uint8_t* data, uint32_t size);
/***************************************************************************//**
@brief Ñòèðàíèå áëîêà âî Flash-ïàìÿòè
Ôóíêöèÿ ñòèðàåò áëîê âî Flash-ïàìÿòè ìîäóëÿ (âñå ÿ÷åéêè áóäóò ÷èòàòüñÿ êàê
0xFF). Àäðåñ è ðàçìåð äîëæíû áûòü êðàòíû 4096 áàéò!
Ïåðåä âûçîâîì ýòîé ôóíêöèè äîëæíà áûòü ðàçðåøåíà çàïèñü
â ïîëüçîâàòåëüñêóþ îáëàñòü ñ ïîìîùüþ X502_FlashWriteEnable().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] addr Àäðåñ íà÷àëà áëîêà (äîëæåí áûòü êðàòåí 4K).
@param[in] size Êîëè÷åñòâî áàéò äëÿ ñòèðàíèÿ (êðàòíî 4K).
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_FlashErase(t_x502_hnd hnd, uint32_t addr, uint32_t size);
/***************************************************************************//**
@brief Ðàçðåøåíèå çàïèñè â ïîëüçîâàòåëüñêóþ îáëàñòü Flash-ïàìÿòè
Ôóíêöèÿ ðàçðåøàåò çàïèñü â ïîëüçîâàòåëüñêóþ îáëàñòü Flash-ïàìÿòè (ïåðâûå
#X502_FLASH_USER_SIZE áàéò). Äîëæíà áûòü âûçâàíà äî òîãî, êàê
ìîæíî áóäåò èñïîëüçîâàòü X502_FlashErase() è X502_FlashWrite() äëÿ èçìåíåíèÿ
ñîäåðæèìîãî ïîëüçîâàòåëüñêîé îáëàñòè ïàìÿòè. Ïîñëå çàâåðøåíèÿ èçìåíåíèé
ñëåäóåò âûçâàòü X502_FlashWriteDisable().
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_FlashWriteEnable(t_x502_hnd hnd);
/***************************************************************************//**
@brief Çàïðåò çàïèñè â ïîëüçîâàòåëüñêóþ îáëàñòü Flash-ïàìÿòè
Ôóíêöèÿ çàïðåùàåò çàïèñü â ïîëüçîâàòåëüñêóþ îáëàñòü Flash-ïàìÿòè ìîäóëÿ
(ïåðâûå #X502_FLASH_USER_SIZE áàéò). Äîëæíà áûòü âûçâàíà ïîñëå òîãî, êàê
íóæíûå äàííûå â ïîëüçîâàòåëüñêîé îáëàñòè áûëè èçìåíåíû ñ ïîìîùüþ
X502_FlashErase() è X502_FlashWrite(), ÷òîáû çàùèòèòü ïîëüçîâàòåëüñêóþ
îáëàñòü îò ñëó÷àéíîé èçìåíåíèÿ â äàëüíåéøåì.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_FlashWriteDisable(t_x502_hnd hnd);
/** @} */
/***************************************************************************//**
@addtogroup func_misc Äîïîëíèòåëüíûå âñïîìîãàòåëüíûå ôóíêöèè
@{
*******************************************************************************/
/**************************************************************************//**
@brief Ïîëó÷èòü âåðñèþ áèáëèîòåêè
Ôóíêöèÿ âîçâðàùàåò âåðñèþ áèáëèîòåêè x502api.
Âåðñèÿ âîçâðàùàåòñÿ â âèäå 32-áèòíîãî ÷èñëà.
Ñòðîêîâîå ïðåäñòàâëåíèå âîçâðàùåííîé âåðñèè --- ÷åòûðå ÷èñëà,
ñòàðøåå ñîîòâåòñòâóåò ñòàðøåìó áàéòó, ìëàäøåå --- ìëàäøåìó.
Ñòàðøèé áàéò --- ìàæîðíàÿ âåðñèÿ, âòîðîé ïî ñòàðøèíñòâó áàéò --- ìèíîðíàÿ,
òðåòèé --- ðåâèçèÿ, ÷åòâåðòûé --- íîìåð ñáîðêè (íå èñïîëüçóåòñÿ --- âñåãäà 0)
@return 32-áèòíîå ÷èñëî, ïðåäñòàâëÿþùåå ñîáîé âåðñèþ áèáëèîòåêè
*****************************************************************************/
X502_EXPORT(uint32_t) X502_GetLibraryVersion(void);
/***************************************************************************//**
@brief Ïîëó÷åíèå ñòðîêè îá îøèáêå
Ôóíêöèÿ âîçâðàùàåò ñòðîêó, ñîîòâåòñòâóþùóþ ïåðåäàííîìó êîäó îøèáêè.
 íàñòîÿùåå âðåìÿ âîçâðàùàåòñÿ âñåãäà ðóññêàÿ âåðñèÿ ñòðîêè (âîçìîæíî â
áóäóùåì áóäåò âîçìîæíîñòü ñìåíèòü ÿçûê ãëîáàëüíîé ôóíêöèåé).
@note Ñëåäóåò ó÷åñòü, ÷òî â ÎÑ Windows ñòðîêà âîçâðàùàåòñÿ â
ñòàíäàðòíîé äëÿ Windows êîäèðîâêå CP1251, â òî âðåìÿ êàê â Linux
èñïîëüçóåòñÿ êîäèðîâêà UTF-8.
@param[in] err Êîä îøèáêè, äëÿ êîòîðîãî íóæíî âåðíóòü ñòðîêó.
@return Óêàçàòåëü íà ñòðîêó, ñîîòâåòñòâóþùóþ êîäó îøèáêè
******************************************************************************/
X502_EXPORT(const char*) X502_GetErrorString(int32_t err);
/***************************************************************************//**
@brief Ìîðãàíèå ñâåòîäèîäîì
Ïðè âûçîâå ýòîé ôóíêöèè, åñëè íå çàïóùåí ñèíõðîííûé ââîä/âûâîä, ïðîèñõîäèò
êðàòêîâðåìåííîå çàòóõàíèå êðàñíîãî öâåòà ñâåòîäèîäà íà ïåðåäíåé ïàíåëè
L-502 èëè ñâåòîäèîäà LED1 ìîäóëÿ E-502.
Ìîæåò áûòü èñïîëüçîâàíà äëÿ âèçóàëüíîé èäåíòèôèêàöèè ìîäóëÿ ïîñëå åãî
îòêðûòèÿ.
Ïðè çàïóùåííîì ñèíõðîííîì ââîäå/âûâîäå äàííûé ñâåòîäèîä âñåãäà
ãîðèò çåëåíûì öâåòîì è äàííàÿ ôóíêöèÿ íå âëèÿåò íà åãî ñîñòîÿíèå.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_LedBlink(t_x502_hnd hnd);
/***************************************************************************//**
@brief Óñòàíîâêà ïîäòÿãèâàþùèõ ðåçèñòîðîâ íà âõîäíûõ ëèíèÿõ
Ôóíêöèÿ ìîæåò èñïîëüçîâàòüñÿ äëÿ âêëþ÷åíèÿ ïîäòÿãèâàþùèõ ðåçèñòîðîâ íà
öèôðîâûõ âõîäàõ. Äëÿ ðàçíûõ ìîäóëåé ïîäòÿãèâàþùèå ðåçèñòîðû ðåàëèçîâàíû
íà ðàçíûõ âõîäàõ. Äëÿ ìîäóëåé E-502 è L-502 ìîæíî âêëþ÷àòü èõ íà ëèíèÿõ SYN1 è SYN2.
Äëÿ L-502 ìîæíî îòäåëüíî çàäàâàòü âêëþ÷åíû èëè îòêëþ÷åíû ïîäòÿæêè
íà ìëàäøåé èëè ñòàðøåé ïîëîâèíå öèôðîâûõ ëèíèé. Äëÿ E-502 ìîæíî âêëþ÷èòü
ïîäòÿãèâàþùèå ê íóëþ ðåçèñòîðû íà âõîäàõ ìåæìîäóëüíîé ñèíõðîíèçàöèè.
Äëÿ E-16 ëèíèé TRIG è INT ìîãóò áûòü êàê âõîäîì, òàê è âûõîäîì äëÿ ñèãíàëîâ START è CONV.
Íà íå óêàçàííûõ ëèíèÿõ ïîäòÿãèâàþùèå ðåçèñòîðû áóäóò îòêëþ÷åíû,
åñëè îíè áûëè âêëþ÷åíû äî ýòîãî.
Ïðè âêëþ÷åíèè ïèòàíèÿ âñå ïîäòÿãèâàþùèå ðåçèñòîðû îòêëþ÷åíû.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] pullups Ôëàãè (èç #t_x502_pullups), îïðåäåëÿþùèå, íà êàêèõ
ëèíèÿõ âêëþ÷åíû ïîäòÿãèâàþùèå ðåçèñòîðû.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_SetDigInPullup(t_x502_hnd hnd, uint32_t pullups);
/***************************************************************************//**
@brief Ïîëó÷åíèå ïàðàìåòðà pullups äëÿ ìîäóëÿ
Ïîëó÷åíèå òåêóùåãî ñîñòîÿíèÿ ïàðàìåòðà pullups èç ìîäóëÿ. Ðåàëèçîâàíî òîëüêî äëÿ E16
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[out] pullups Ôëàãè (èç #t_x502_pullups), îïðåäåëÿþùèå, íà êàêèõ
ëèíèÿõ âêëþ÷åíû ïîäòÿãèâàþùèå ðåçèñòîðû.
@return Êîä îøèáêè.
******************************************************************************/
X502_EXPORT(int32_t) X502_GetDigInPullup(t_x502_hnd hnd, uint32_t *pullups);
/***************************************************************************//**
@brief Ïðîâåðêà ïîääåðæêè ìîäóëåì çàäàííîé âîçìîæíîñòè
Ôóíêöèÿ èñïîëüçóåòñÿ äëÿ ïðîâåðêè, ïîääåðæèâàåòñÿ ëè îïðåäåëåííàÿ âîçìîæíîñòü
èç #t_x502_features äëÿ äàííîãî ìîäóëÿ ñ òåêóùèìè âåðñèÿìè ïðîøèâîê.
Åñëè âîçìîæíîñòü ïîääåðæèâàåòñÿ, òî áóäåò âîçâðàùåí êîä #X502_ERR_OK.
Äàííàÿ ôóíêöèÿ äîñòóïíà â áèáëèîòåêå âåðñèè 1.1.6 èëè âûøå.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] feature Çíà÷åíèå èç #t_x502_features, îïðåäåëÿþùèå, êàêóþ
âîçìîæíîñòü íåîáõîäèìî ïðîâåðèòü.
@return Åñëè âîçìîæíîñòü ïîääåðæèâàåòñÿ, òî âîçâðàùàåòñÿ
#X502_ERR_OK, èíà÷å --- êîä îøèáêè
******************************************************************************/
X502_EXPORT(int32_t) X502_CheckFeature(t_x502_hnd hnd, uint32_t feature);
/***************************************************************************//**
@brief Ýêñïåðèìåíòàëüíàÿ ôóíêöèÿ. Èãíîðèðîâàòü îøèáêó ñ çàäàííûì íîìåðîì
Ôóíêöèÿ èñïîëüçóåòñÿ äëÿ óñòàíîâêè íîìåðà îøèáêè, êîòîðóþ API áóäåò èãíîðèðîâàòü
è ïðîäîëæèò ðàáîòó êàê åñëè áû ýòîé îøèáêè íå áûëî.
Äàííàÿ ôóíêöèÿ áóäåò ïîëåçíà äëÿ òåñòîâ ñàìîãî API èëè ýêñïåðèìåíòîâ ñ íèì.
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] err Çíà÷åíèå èç #t_x502_errs, êàêóþ îøèáêó èãíîðèðîâàòü.
Ðåàëèçîâàíî òîëüêî äëÿ X502_ERR_STREAM_IS_RUNNING
@return Êîä îøèáêè
******************************************************************************/
X502_EXPORT(int32_t) X502_SuppressError(t_x502_hnd hnd, int32_t err);
X502_EXPORT(int32_t) X502_SetAfcCoef(t_x502_hnd hnd, double Fd, double SigFreq, double *K, uint32_t size, int enable);
X502_EXPORT(int32_t) X502_GetAfcCoef(t_x502_hnd hnd, double *Fd, double *SigFreq, double *K, uint32_t size, int *enable);
/***************************************************************************//**
@brief Ôóíêöèÿ çàäàíèÿ ïàðàìåòðîâ ìîäóëÿ
Ôóíêöèÿ èñïîëüçóåòñÿ äëÿ óñòàíîâêè ïàðàìåòðîâ ìîäóëÿ
 íîâûõ âåðñèÿõ api ïàðàìåòðû ìîãóò äîáàâëÿòüñÿ
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] param Çíà÷åíèå èç #t_x502_params, íîìåð óñòàíàâëèâàåìîãî ïàðàìåòðà
@param[in] value Çíà÷åíèå ïàðàìåòðà
@return Êîä îøèáêè
******************************************************************************/
X502_EXPORT(int32_t) X502_SetParam(t_x502_hnd hnd, uint32_t param, void *value);
/***************************************************************************//**
@brief Ôóíêöèÿ çàäàíèÿ ïàðàìåòðîâ öèôðîâîãî ââîäà äëÿ ìîäóëÿ LTA37
@param[in] hnd Îïèñàòåëü ìîäóëÿ.
@param[in] echo_en Âêëþ÷åíèå ðåæèìà ýõî êàíàëà, äàííûå íà ââîäå - êîä âûâîäà íà ýõî êàíàë, èíà÷å ââîä öèôðîâûõ âõîäîâ DI
@param[in] echo_ch Íîìåð êàíàëà èç äàííûõ êîòîðîãî áåðóòñÿ ýõî äàííûå
@param[in] di_ch_en_mask Ìàñêà âêëþ÷åííûõ êàíàëîâ â ïîòîêå ââîäà
@return Êîä îøèáêè
******************************************************************************/
X502_EXPORT(int32_t) LTA37_SetDIParam(t_x502_hnd hnd, uint32_t echo_en, uint32_t echo_ch, uint32_t di_ch_en_mask);
/** @} */
/** @} */
#ifdef __cplusplus
}
#endif
#endif // X502API_H