示例#1
0
///================================================= FUNCTION HEADER==================================================
/// Name        : Q8TimerStart
/// Input       : iCardNum     - PCI memory region that is mapped to Q8 card memory
/// Output      : None
/// Return      : None
/// Description : Deacctivates the timer to stop counting
///===================================================================================================================
void Q8TimerStop(int cardNum) {
    struct_Q8_Config q8Str;
    q8Str.uiFuncIndex=41;
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#2
0
///============================================FUNCTION HEADER=========================================================
/// Name        : Q8WatchdogTimer
/// Input       : iCardNum  - PCI memory region that is mapped to Q8 card memory
///               fInterval - Timeout interval needed  analog output channnels to be set
/// Output      : None
/// Return      : None
/// Description : Configures  and enables Watchdog timer
///
///=====================================================================================================================
void Q8WatchdogTimer(int iCardNum,float fInterval) {
    struct_Q8_Config q8Str;
    q8Str.uiFuncIndex=28;
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    q8Str.udwPeriod=(uint32_t)(fInterval/ 60e-9)-1;
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#3
0
///================================================= FUNCTION HEADER====================================================
/// Name        : Q8TimerSet
/// Input       : iCardNum     - PCI memory region that is mapped to Q8 card memory
///               fPeriod      - Timer set period in seconds
/// Output      : None
/// Return      : None
/// Description : Configures  32 bit counter as timer interrupt source
///
///=====================================================================================================================
void Q8TimerSet(int cardNum,float fPeriod) {
    struct_Q8_Config q8Str;
    q8Str.udwPeriod=(uint32_t)(fPeriod / 60e-9)-1;
    q8Str.uiFuncIndex=39;
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#4
0
void Q8EncoderReset(int   iCardNum,int iChannelNum) {
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    struct_Q8_Config q8Str;
    q8Str.iCardNum=iCardNum;
    q8Str.uiFuncIndex=iChannelNum+31;
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#5
0
///============================================ FUNCTION HEADER=========================================================
/// Name        : Q8AnalogOutput
/// Input       : iCardNum    - PCI memory region that is mapped to Q8 card memory
///               iChannelNum - D/A Output channel number
///               fValue      - User defined voltage which is wanted to see at output of the specified channel
/// Output      : None
/// Return      : None
/// Description : Writes user defined voltage value to the specified channel.
///
///=====================================================================================================================
void Q8AnalogOutput(int iCardNum,int iChannelNum,real_T dacValue) {

    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }

    struct_Q8_Config q8Str;
    q8Str.iCardNum=iCardNum;
    q8Str.uiFuncIndex=iChannelNum;

    if (dacValue <=0) {
        if(dacCon[iChannelNum]==BIPOLAR_10V) {
            q8Str.uwValueUnsigned=(DAC_BIPOLAR_ZERO-(uint16_t)((-dacValue)*4096/20));
            rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
            return;
        }
        else if(dacCon[iChannelNum]==BIPOLAR_5V) {
            q8Str.uwValueUnsigned=(DAC_BIPOLAR_ZERO-(uint16_t)((-dacValue)*4096/10));
            rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
            return;
        }
        else
            return;
    }//if

    if(dacCon[iChannelNum]==BIPOLAR_10V) {
        q8Str.uwValueUnsigned=(DAC_BIPOLAR_ZERO+(uint16_t)(dacValue*4096/20));
        rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
        return;
    }
    else if(dacCon[iChannelNum]==BIPOLAR_5V) {
        q8Str.uwValueUnsigned=(DAC_BIPOLAR_ZERO+(uint16_t)(dacValue*4096/10));
        rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
        return;
    }
    else if(dacCon[iChannelNum]==UNIPOLAR_10V) {
        q8Str.uwValueUnsigned=(uint16_t)(dacValue*4096/10);
        rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
        return;
    }
} // end of function
示例#6
0
///=============================================== FUNCTION HEADER =====================================================
/// Name        : Q8PwmOutput
/// Input       : iCardNum     - PCI memory region that is mapped to Q8 card memory
///               iClockSource - ClockSource selection,WATCHDOG or COUNTER
///               fPeriod      - PWM period
///               iCntrlEn     - Not used
///               fPulseWidth  - PWM pulse width,0...100
/// Output      : None
/// Return      : None
/// Description : Configures counter output and generates PWM based periodic wave.
///
///=====================================================================================================================
void Q8PwmOutput(int iCardNum,int iClockSource, float fPeriod,float fPulseWidth,int iCntrlEn) {
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    struct_Q8_Config q8Str;
    q8Str.uiFuncIndex=27;
    q8Str.iClockSource=iClockSource;
    q8Str.udwLow=(uint32_t)( ((100-fPulseWidth)*fPeriod/100) / 30e-9) -1;
    q8Str.udwHigh=(uint32_t)( ((fPulseWidth)*fPeriod/100) / 30e-9)-1;
    q8Str.iCntrlEn=iCntrlEn;
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#7
0
///=============================================== FUNCTION HEADER =====================================================
/// Name        : Q8CounterOutput
/// Input       : iCardNum     - PCI memory region that is mapped to Q8 card memory
///               iClockSource - ClockSource selection,WATCHDOG or COUNTER
///               fPeriod      - Square wave period
///               iCntrlEn     - Not used
/// Output      : None
/// Return      : None
/// Description : Configures counter output and generates periodic square wave
///
///=====================================================================================================================
void Q8CounterOutput(int iCardNum,int iClockSource, float fPeriod,int iCntrlEn )
{
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    struct_Q8_Config q8Str;
    q8Str.uiFuncIndex=26;
    q8Str.iClockSource=iClockSource;
    q8Str.udwPeriod=(uint32_t)(fPeriod / 60e-9)-1;
    q8Str.iCntrlEn=iCntrlEn;
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#8
0
///================================================= FUNCTION HEADER====================================================
/// Name        : Q8AnalogConfig
/// Input       : iCardNum     - PCI memory region that is mapped to Q8 card memory
///               iChannelNum  - D/A Output channel number
///               iMode        - Output voltage range selection
/// Output      : None
/// Return      : None
/// Description : Configures  the specified analog output channel
///
///=====================================================================================================================
void    Q8AnalogConfig(int iCardNum,int iChannelNum,int iMode) {
//update process of configuration of analogoutput mode
    dacCon[iChannelNum]=iMode;
    struct_Q8_Config q8Str;
    q8Str.iCardNum=iCardNum;
    q8Str.uiFuncIndex=iChannelNum;
    q8Str.ubDacMode=iMode;
    q8Str.iChannelNum=iChannelNum;
    q8Str.uiFuncIndex=30;
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#9
0
///============================================== FUNCTION HEADER=======================================================
/// Name        : Q8DigitalOutput
/// Input       : iCardNum        - PCI memory region that is mapped to Q8 card memory.
///               iPtrChannelNums - Array address.In this array numbers of channels written are defined and stored.
///               iArraySİze      - Array size.
/// Output      : None
/// Return      : None
/// Description : Configures  the specified channel(s) as output(s) and writes the specified channel(s)
///=====================================================================================================================
void  Q8DigitalOutput(int iCardNum,uint32_t channel,uint32_t data,int writeOnly) {
    if(fd==-1) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }


    struct_Q8_Config q8Str;
    q8Str.uiFuncIndex=24;
    q8Str.onlyDigitalData=writeOnly;
    q8Str.udwDataDirection=0;
    q8Str.udwDataDirection|=channel;
    q8Str.udwDataRegister=data;
    q8Str.iCardNum=iCardNum;

    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));
}
示例#10
0
int main(int argc, char *argv[])
{
	char buf[1024];
	ssize_t size;
	int device;
	int ret;

	/* open the device */
	device = rt_dev_open(DEVICE_NAME, 0);
	if (device < 0) {
		printf("ERROR : can't open device %s (%s)\n",
		       DEVICE_NAME, strerror(-device));
		fflush(stdout);
		exit(1);
	}

	/* first read */
	size = rt_dev_read (device, (void *)buf, 1024);
	printf("Read in device %s\t: %d bytes\n", DEVICE_NAME, size);

	/* first write */
	sprintf(buf, "HelloWorld!");
	size = rt_dev_write (device, (const void *)buf, strlen(buf) + 1);
	printf("Write from device %s\t: %d bytes\n", DEVICE_NAME, size);

	/* second read */
	size = rt_dev_read (device, (void *)buf, 1024);
	printf("Read in device %s\t: %s\n", DEVICE_NAME, buf);

	/* third read */
	size = rt_dev_read (device, (void *)buf, 1024);
	printf("Read in device %s\t: %d bytes\n", DEVICE_NAME, size);

	/* close the device */
	ret = rt_dev_close(device);
	if (ret < 0) {
		printf("ERROR : can't close device %s (%s)\n",
		       DEVICE_NAME, strerror(-ret));
		fflush(stdout);
		exit(1);
	}

	return 0;
}
示例#11
0
///================================================FUNCTION HEADER=====================================================
/// Name        : Q8EncoderConfig
/// Input       : iCardNum        - PCI memory region that is mapped to Q8 card memory
///               iChannelNum     - Encoder channel number
///               iCountMode      - Count mode to use
///               iBcd            - Bcd or binary counting
///               iQuadrature     - Quadrature  type selection
///               iIndexEn        - Enable or disable index feature
///               iIndexPol       - Select index polarity
/// Output      : None
/// Return      : None
/// Description : Configures  the encoder channel
///
///=====================================================================================================================
int Q8EncoderConfig(int iCardNum, int iChannelNum,int iCountMode,
                    int iBcd, int iQuadrature, int iIndexEn, int iIndexPol)
{
    struct_Q8_Config q8Str;
    q8Str.uiFuncIndex=29;
    q8Str.iCardNum=iCardNum;
    q8Str.iChannelNum=iChannelNum;
    q8Str.ubEcountMode=iCountMode;
    q8Str.ubEbcdMode=iBcd;
    q8Str.ubEquadratureMode=iQuadrature;
    q8Str.ubIndexEnable=iIndexEn;
    q8Str.ubIndexPolarity=iIndexPol;
    if(fd < 0) {
        fd = rt_dev_open(DEV_NAME, O_RDWR);
    }
    rt_dev_write(fd,&q8Str,sizeof(struct_Q8_Config));

    return fd;
}
int main (int argc, char * argv[])
{
	int fd;
	int i;

	if (argc < 2) {
		fprintf(stderr, "usage: %s rtdm_device\n", argv[0]);
		exit(EXIT_FAILURE);
	}
	
	fd = rt_dev_open(argv[1], O_WRONLY);
	if (fd < 0) {
		fprintf(stderr, "%s: %s\n", argv[1], strerror(-fd));
		exit(EXIT_FAILURE);
	}
	
	for (i = 2; i < argc; i ++)
		rt_dev_write(fd, argv[i], strlen(argv[i]));
		
	rt_dev_close(fd);
	exit(EXIT_SUCCESS);
}
示例#13
0
/*!*****************************************************************************
 *******************************************************************************
\note  write_serial
\date  Oct 2000
   
\remarks 

        write to the serial port

 *******************************************************************************
 Function Parameters: [in]=input,[out]=output

 \param[in]     fd : file descriptor
 \param[in]     n_bytes: number of bytes to write
 \param[in]     buffer: buffer with bytes to write

     returns the number of bytes actually written

 ******************************************************************************/
int
write_serial(int fd,int n_bytes, char *buffer) 
{
  return rt_dev_write(fd, buffer, (size_t) n_bytes);
}