?? hwdrv_apci3200.c
字號:
| Return Value : TRUE : No error occur | | : FALSE : Error occur. Return the error | | | +----------------------------------------------------------------------------+*/INT i_APCI3200_WriteDigitalOutput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { UINT ui_Temp=0,ui_Temp1=0; UINT ui_NoOfChannel = CR_CHAN(insn->chanspec); // get the channel if(devpriv->b_OutputMemoryStatus ) { ui_Temp=inl(devpriv->i_IobaseAddon); }//if(devpriv->b_OutputMemoryStatus ) else { ui_Temp=0; }//if(devpriv->b_OutputMemoryStatus ) if(data[3]==0) { if(data[1]==0) { data[0]=(data[0] << ui_NoOfChannel)|ui_Temp; outl(data[0],devpriv->i_IobaseAddon); }//if(data[1]==0) else { if(data[1]==1) { switch( ui_NoOfChannel) { case 2:data[0]=(data[0] << (2 * data[2]))|ui_Temp; break; case 3:data[0]=(data[0]|ui_Temp); break; }//switch(ui_NoOfChannels) outl(data[0],devpriv->i_IobaseAddon); }// if(data[1]==1) else { printk("\nSpecified channel not supported\n"); }//else if(data[1]==1) }//elseif(data[1]==0) }//if(data[3]==0) else { if(data[3]==1) { if(data[1]==0) { data[0]=~data[0]&0x1; ui_Temp1=1; ui_Temp1=ui_Temp1<<ui_NoOfChannel; ui_Temp=ui_Temp|ui_Temp1; data[0]=(data[0] << ui_NoOfChannel)^0xf; data[0]=data[0]& ui_Temp; outl(data[0],devpriv->i_IobaseAddon); }//if(data[1]==0) else { if(data[1]==1) { switch( ui_NoOfChannel) { case 2: data[0]=~data[0]&0x3; ui_Temp1=3; ui_Temp1=ui_Temp1<<2 * data[2]; ui_Temp=ui_Temp|ui_Temp1; data[0]=((data[0] << (2 * data[2]))^0xf)& ui_Temp; break; case 3: break; default: comedi_error(dev," chan spec wrong"); return -EINVAL; // "sorry channel spec wrong " }//switch(ui_NoOfChannels) outl(data[0],devpriv->i_IobaseAddon); }// if(data[1]==1) else { printk("\nSpecified channel not supported\n"); }//else if(data[1]==1) }//elseif(data[1]==0) }//if(data[3]==1); else { printk("\nSpecified functionality does not exist\n"); return -EINVAL; }//if else data[3]==1) }//if else data[3]==0) return insn->n;}/* +----------------------------------------------------------------------------+ | Function Name : int i_APCI3200_ReadDigitalOutput | | (comedi_device *dev,comedi_subdevice *s, | | comedi_insn *insn,lsampl_t *data) | +----------------------------------------------------------------------------+ | Task : Read value of the selected channel or port | +----------------------------------------------------------------------------+ | Input Parameters : comedi_device *dev : Driver handle | | UINT ui_NoOfChannels : No Of Channels To read | | UINT *data : Data Pointer to read status | data[0] :0 read single channel 1 read port value data[1] port no +----------------------------------------------------------------------------+ | Output Parameters : -- | +----------------------------------------------------------------------------+ | Return Value : TRUE : No error occur | | : FALSE : Error occur. Return the error | | | +----------------------------------------------------------------------------+*/INT i_APCI3200_ReadDigitalOutput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { UINT ui_Temp; UINT ui_NoOfChannel; ui_NoOfChannel=CR_CHAN(insn->chanspec); ui_Temp=data[0]; *data=inl(devpriv->i_IobaseAddon); if (ui_Temp==0) { *data=(*data >> ui_NoOfChannel)&0x1; } // if (ui_Temp==0) else { if (ui_Temp==1) { if(data[1] <0 ||data[1] >1) { printk("\nThe port selection is in error\n"); return -EINVAL; }//if(data[1] <0 ||data[1] >1) switch (ui_NoOfChannel) { case 2: *data=(*data >>(2*data[1]))&3; break; case 3:break; default: comedi_error(dev," chan spec wrong"); return -EINVAL; // "sorry channel spec wrong " break; } // switch(ui_NoOfChannels) } // if (ui_Temp==1) else { printk("\nSpecified channel not supported \n"); } // else if (ui_Temp==1) } // else if (ui_Temp==0) return insn->n;}/* +----------------------------------------------------------------------------+ | Function Name : INT i_APCI3200_ConfigAnalogInput | | (comedi_device *dev,comedi_subdevice *s, | | comedi_insn *insn,lsampl_t *data) | +----------------------------------------------------------------------------+ | Task : Configures The Analog Input Subdevice | +----------------------------------------------------------------------------+ | Input Parameters : comedi_device *dev : Driver handle | | comedi_subdevice *s : Subdevice Pointer | | comedi_insn *insn : Insn Structure Pointer | | lsampl_t *data : Data Pointer contains | | configuration parameters as below | | | | data[0] | 0:Normal AI | | 1:RTD | | 2:THERMOCOUPLE | | data[1] : Gain To Use | | | | data[2] : Polarity | 0:Bipolar | | 1:Unipolar | | | | data[3] : Offset Range | | | data[4] : Coupling | 0:DC Coupling | | 1:AC Coupling | | | | data[5] :Differential/Single | 0:Single | | 1:Differential | | | | data[6] :TimerReloadValue | | | data[7] :ConvertingTimeUnit | | | data[8] :0 Analog voltage measurement 1 Resistance measurement 2 Temperature measurement | data[9] :Interrupt | 0:Disable | 1:Enable data[10] :Type of Thermocouple | data[11] : 0: single channel Module Number | | data[12] | 0:Single Read | 1:Read more channel 2:Single scan | 3:Continous Scan data[13] :Number of channels to read | data[14] :RTD connection type :0:RTD not used 1:RTD 2 wire connection 2:RTD 3 wire connection 3:RTD 4 wire connection | | | | | | +----------------------------------------------------------------------------+ | Output Parameters : -- | +----------------------------------------------------------------------------+ | Return Value : TRUE : No error occur | | : FALSE : Error occur. Return the error | | | +----------------------------------------------------------------------------+*/INT i_APCI3200_ConfigAnalogInput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { UINT ul_Config = 0,ul_Temp=0 ; UINT ui_ChannelNo=0; UINT ui_Dummy=0; INT i_err=0; //Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values #ifdef PRINT_INFO INT i=0, i2=0;#endif //End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values //BEGIN JK 06.07.04: Management of sevrals boards // Initialize the structure if (s_BoardInfos [dev->minor].b_StructInitialized != 1) { s_BoardInfos [dev->minor].i_CJCAvailable=1; s_BoardInfos [dev->minor].i_CJCPolarity=0; s_BoardInfos [dev->minor].i_CJCGain=2;//changed from 0 to 2 s_BoardInfos [dev->minor].i_InterruptFlag=0; s_BoardInfos [dev->minor].i_AutoCalibration=0; //: auto calibration s_BoardInfos [dev->minor].i_ChannelCount=0; s_BoardInfos [dev->minor].i_Sum=0; s_BoardInfos [dev->minor].ui_Channel_num=0; s_BoardInfos [dev->minor].i_Count=0; s_BoardInfos [dev->minor].i_Initialised=0; s_BoardInfos [dev->minor].b_StructInitialized = 1; //Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values s_BoardInfos [dev->minor].i_ConnectionType = 0; //End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values //Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values memset (s_BoardInfos [dev->minor].s_Module, 0, sizeof (s_BoardInfos [dev->minor].s_Module[MAX_MODULE])); v_GetAPCI3200EepromCalibrationValue (devpriv->i_IobaseAmcc, &s_BoardInfos [dev->minor]); #ifdef PRINT_INFO for (i=0; i<MAX_MODULE; i++) { printk ("\n s_Module[%i].ul_CurrentSourceCJC = %lu",i, s_BoardInfos [dev->minor].s_Module[i].ul_CurrentSourceCJC); for (i2=0; i2<5; i2++) { printk ("\n s_Module[%i].ul_CurrentSource [%i] = %lu",i, i2, s_BoardInfos [dev->minor].s_Module[i].ul_CurrentSource [i2]); } for (i2=0; i2<8; i2++) { printk ("\n s_Module[%i].ul_GainFactor [%i] = %lu",i, i2, s_BoardInfos [dev->minor].s_Module[i].ul_GainFactor [i2]); } for (i2=0; i2<8; i2++) { printk ("\n s_Module[%i].w_GainValue [%i] = %u",i, i2, s_BoardInfos [dev->minor].s_Module[i].w_GainValue [i2]); } }#endif //End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values } if(data[0]!=0 && data[0]!=1 && data[0]!=2) { printk("\nThe selection of acquisition type is in error\n"); i_err++; }//if(data[0]!=0 && data[0]!=1 && data[0]!=2) if(data[0]==1) { if(data[14]!=0 && data[14]!=1 && data[14]!=2 && data[14]!=4) { printk("\n Error in selection of RTD connection type\n"); i_err++; }//if(data[14]!=0 && data[14]!=1 && data[14]!=2 && data[14]!=4) }//if(data[0]==1 ) if(data[1]<0 || data[1]>7) { printk("\nThe selection of gain is in error\n"); i_err++; } // if(data[1]<0 || data[1]>7) if(data[2]!=0 && data[2]!=1) { printk("\nThe selection of polarity is in error\n");
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -