250M DAS Data Acquisition Card C Call Example

Tags:

dascardlib.h

#ifndef DASCARDLIB_H
#define DASCARDLIB_H

#ifdef __cplusplus
    extern "C" {
#endif
    int __declspec(dllexport) DasCardOpen();            //打开采集卡
    void __declspec(dllexport) DasCardClose();          //关闭采集卡
    int __declspec(dllexport) DasCardStart();           //开始采集
    int __declspec(dllexport) DasCardStop();            //停止采集
    int __declspec(dllexport) DasCardSetPulseNum(int num);           //设置一次读取数据的脉冲数目
    int __declspec(dllexport) DasCardSetPulseFrq(int frq);           //设置脉冲触发频率,内部触发有效
    int __declspec(dllexport) DasCardSetSampleNum(int num);          //设置每次触发采样长度
    int __declspec(dllexport) DasCardSetPulseWidth(int width);       //设置脉冲宽度,ns
    int __declspec(dllexport) DasCardSetDataSel(int sel);            //设置上传数据类型,1:双通道原始数据,2:单通道幅度相位数据,3:双通道幅度相位数据
    int __declspec(dllexport) DasCardSetTest(int type);              //设置内部测试信号,与ADC信号切换
    int __declspec(dllexport) DasCardSetDemodChannelNum(int num);           //设置解调通道数
    int __declspec(dllexport) DasCardWriteFifo(const char *data, int len);  //写缓存数据
    int __declspec(dllexport) DasCardReadFifo(char *data, int len);     //都缓存数据
    int __declspec(dllexport) DasCardQueryFifo();                       //查询缓存空间
    void __declspec(dllexport) DasCardCacheClear();                     //清除缓存
    int __declspec(dllexport) DasCardSetUnwrap(int flag);               //设置是否解缠绕
    int __declspec(dllexport) DasCardSetOffsetVoltage(int offset);      //设置偏置电压 ADC值
    int __declspec(dllexport) DasCardSetTrigerSoure(int trig);          //设置触发源,0:内部触发,1:外部触发
    int __declspec(dllexport) DasCardSetDelay(int num);                 //设置延迟采样点
#ifdef __cplusplus
    }
#endif

#endif // DASCARDLIB_H


main.c

#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
#include <dascardlib.h>

int run_flag = 1;

// control+C exit
void sigint_handler(int signum) {
    printf("Received SIGINT signal. Exiting...\n");
    run_flag = 0;
}


int main()
{
    int ret = 0;
    int pulseNum = 100;
    int pulseWidth = 100;
    int pulseFrq = 10000;
    int samples = 16384;
    int dataSel = 1;

   if (signal(SIGINT, sigint_handler) == SIG_ERR) {
       perror("signal");
       return 1;
   }

    ret = DasCardOpen();
    if(ret){
        printf("open device failed!\n");
    }
    else
    {
        printf("open device successfull!\n");
    }

    ret = DasCardSetTest(0);
    printf("ret:%d, DasCardSetTest\n",ret);

    ret = DasCardSetDataSel(dataSel);
    printf("ret:%d, DasCardSetDataSel\n",ret);

    ret = DasCardSetPulseWidth(pulseWidth);
    printf("ret:%d, DasCardSetPulseWidth\n",ret);

    ret = DasCardSetPulseFrq(pulseFrq);
    printf("ret:%d, DasCardSetPulseFrq\n",ret);

    ret = DasCardSetPulseNum(pulseNum);
    printf("ret:%d, DasCardSetPulseNum\n",ret);

    ret = DasCardSetSampleNum(samples);
    printf("ret:%d, DasCardSetSampleNum\n",ret);

    ret = DasCardStart();
    if(ret){
        printf("start DAQ failed!\n");
    }
    else
    {
        printf("start DAQ successfull!\n");
    }

    int readSize = samples*pulseNum*sizeof (short)*2;
    short *buf = (short *)malloc(readSize);

    int size;
    int timecount = 0;
    int lasttime = 0;

    while(run_flag){
        size = DasCardQueryFifo();
        if(size>=readSize){
            ret = DasCardReadFifo(buf, readSize);

            if(ret){
                //process data

                //statistics pulse frequency
                timecount++;
                if(timecount>=400){
                    int currenttime = GetTickCount();
                    printf( "pusle frequency read:%f\n" , 400.0*pulseNum/((currenttime -lasttime)/1000.0));
                    timecount = 0;
                    lasttime = currenttime;
                }
            }
        }
        else{
            usleep(10);
        }


    }


    ret = DasCardStop();
    if(ret){
        printf("stop DAQ failed!");
    }
    else
    {
        printf("stop DAQ successfull!");
    }

    DasCardClose();


    free(buf);

    printf("exit!\n");

    return 0;
}