Example #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);
        }
Example #2
0
        public API Init(InitMemory initStructure, INIT_MODE mode = INIT_MODE.INIT)
        {
            if (deviceHandle == IntPtr.Zero)
            {
                return(API.DEVICE_DLLWASNOTLOADED);
            }

            Types.InitMemory iS = new Types.InitMemory(0);

            iS.bufferSize             = initStructure.bufferSize;
            iS.control                = initStructure.control;
            iS.frequency              = initStructure.frequency;
            iS.startType              = initStructure.startType;
            iS.beforeHistory          = initStructure.beforeHistory;
            iS.controlSynchro         = initStructure.controlSynchro;
            iS.hysteresis             = initStructure.hysteresis;
            iS.packetNumber           = initStructure.packetNumber;
            iS.startDelay             = initStructure.startDelay;
            iS.threshold              = initStructure.threshold;
            iS.channelSynchro.control = initStructure.channelSynchro.control;
            iS.channelSynchro.gain    = initStructure.channelSynchro.gain;


            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.frequency              = iS.frequency;
                initStructure.startType              = iS.startType;
                initStructure.beforeHistory          = iS.beforeHistory;
                initStructure.controlSynchro         = iS.controlSynchro;
                initStructure.hysteresis             = iS.hysteresis;
                initStructure.packetNumber           = iS.packetNumber;
                initStructure.startDelay             = iS.startDelay;
                initStructure.threshold              = iS.threshold;
                initStructure.channelSynchro.control = iS.channelSynchro.control;
                initStructure.channelSynchro.gain    = iS.channelSynchro.gain;

                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);
        }