Beispiel #1
0
        public API Init(int chanNumber, double frequency, int bufferSize)
        {
            API st;

            uint caps = (uint)CAPS.SOFT_INIT_DMA;

            st = device.Get(GET.DEVICE_IS_CAPABLE, ref caps); // Проверим, поддерживается ли структура DMA.
            if (st == API.SUCCESS)
            {
                InitDMA p = new InitDMA();                         // Структура для инициализации параметров работы платы.
                p.startType  = (uint)InitDMA.StartTypeBit.Program; // Запуск платы по внутреннему таймеру.
                p.bufferSize = (uint)bufferSize;                   // Размер внутреннего блока данных, по готовности которого произойдёт прерывание.
                p.frequency  = frequency;                          // Частота дискретизации.

                foreach (Channel ch in p.channels)
                {
                    ch.control = (uint)Channel.ControlBit.Used; // Сделаем 0-ой канал активным.
                    ch.gain    = 1;                             // Зададим коэффициент усиления для 0-го канала.

                    if (--chanNumber == 0)
                    {
                        break;
                    }
                }

                return(device.Init(p));
            }


            caps = (uint)CAPS.SOFT_INIT_MEMORY;
            st   = device.Get(GET.DEVICE_IS_CAPABLE, ref caps); // Проверим, поддерживается ли структура DMA.
            if (st == API.SUCCESS)
            {
                InitMemory p = new InitMemory();                      // Структура для инициализации параметров работы платы.
                p.startType  = (uint)InitMemory.StartTypeBit.Program; // Запуск платы по внутреннему таймеру.
                p.bufferSize = (uint)bufferSize;                      // Размер внутреннего блока данных, по готовности которого произойдёт прерывание.
                p.frequency  = frequency;                             // Частота дискретизации.

                foreach (Channel ch in p.channels)
                {
                    ch.control = (uint)Channel.ControlBit.Used; // Сделаем 0-ой канал активным.
                    ch.gain    = 1;                             // Зададим коэффициент усиления для 0-го канала.

                    if (--chanNumber == 0)
                    {
                        break;
                    }
                }

                return(device.Init(p));
            }

            return(API.PARAMETER_NOTSUPPORTED);
        }
Beispiel #2
0
        public API Init(InitDMA initStructure, INIT_MODE mode = INIT_MODE.INIT)
        {
            if (deviceHandle == IntPtr.Zero)
            {
                return(API.DEVICE_DLLWASNOTLOADED);
            }

            Types.InitDMA iS = new Types.InitDMA(0); // для вызова своего конструктора

            iS.bufferSize     = initStructure.bufferSize;
            iS.control        = initStructure.control;
            iS.dmaMode        = initStructure.dmaMode;
            iS.frequency      = initStructure.frequency;
            iS.frequencyPack  = initStructure.frequencyPack;
            iS.startType      = initStructure.startType;
            iS.threshold      = initStructure.threshold;
            iS.controlSynchro = initStructure.controlSynchro;

            for (int i = 0; i < initStructure.channels.Length; i++)
            {
                iS.channels[i].control = initStructure.channels[i].control;
                iS.channels[i].gain    = initStructure.channels[i].gain;
                iS.channels[i].delta   = initStructure.channels[i].delta;
            }
            try
            {
                operationStatus = Connector.UniDriverInit(deviceHandle, (uint)mode, ref iS);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                if (ex.Message.Contains("Unable to load DLL"))
                {
                    return((API)(operationStatus = (uint)API.UNIDRIVER_DLLWASNOTLOADED));
                }
                else
                {
                    return(API.UNDEFINED);
                }
            }
            API st = (API)(operationStatus & MASK_RSH_ERROR);

            if (st == API.SUCCESS)
            {
                initStructure.bufferSize     = iS.bufferSize;
                initStructure.control        = iS.control;
                initStructure.dmaMode        = iS.dmaMode;
                initStructure.frequency      = iS.frequency;
                initStructure.frequencyPack  = iS.frequencyPack;
                initStructure.startType      = iS.startType;
                initStructure.threshold      = iS.threshold;
                initStructure.controlSynchro = iS.controlSynchro;

                for (int i = 0; i < initStructure.channels.Length; i++)
                {
                    initStructure.channels[i].control = iS.channels[i].control;
                    initStructure.channels[i].gain    = iS.channels[i].gain;
                    initStructure.channels[i].delta   = iS.channels[i].delta;
                }
            }

            return(st);
        }