?? hwdrv_apci3200.c
字號:
/* Reset the configuration */ /**************************/ //BEGIN JK 06.07.04: Management of sevrals boards //outl(0 , devpriv->iobase+i_Offset + 0x0); outl(0 , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 0x0); //END JK 06.07.04: Management of sevrals boards //BEGIN JK 06.07.04: Management of sevrals boards //while (((inl(devpriv->iobase+i_Offset+12)>>19) & 1) != 1); while (((inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset+12)>>19) & 1) != 1); //END JK 06.07.04: Management of sevrals boards /***************************/ /* Write the configuration */ /***************************/ //BEGIN JK 06.07.04: Management of sevrals boards //outl(ul_Config , devpriv->iobase+i_Offset + 0x0); outl(ul_Config , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 0x0); //END JK 06.07.04: Management of sevrals boards /***************************/ /*Reset the calibration bit*/ /***************************/ //BEGIN JK 06.07.04: Management of sevrals boards //ul_Temp = inl(devpriv->iobase+i_Offset + 12); ul_Temp = inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 12); //END JK 06.07.04: Management of sevrals boards //BEGIN JK 06.07.04: Management of sevrals boards //while (((inl(devpriv->iobase+i_Offset+12)>>19) & 1) != 1); while (((inl(devpriv->iobase+s_BoardInfos [dev->minor].i_Offset+12)>>19) & 1) != 1); //END JK 06.07.04: Management of sevrals boards //BEGIN JK 06.07.04: Management of sevrals boards //outl((ul_Temp & 0xFFF9FFFF) , devpriv->iobase+.i_Offset + 12); outl((ul_Temp & 0xFFF9FFFF) , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 12); //END JK 06.07.04: Management of sevrals boards if(data[9]==1) { devpriv->tsk_Current=current; //BEGIN JK 06.07.04: Management of sevrals boards //i_InterruptFlag=1; s_BoardInfos [dev->minor].i_InterruptFlag=1; //END JK 06.07.04: Management of sevrals boards }// if(data[9]==1) else { //BEGIN JK 06.07.04: Management of sevrals boards //i_InterruptFlag=0; s_BoardInfos [dev->minor].i_InterruptFlag=0; //END JK 06.07.04: Management of sevrals boards }//else if(data[9]==1) //BEGIN JK 06.07.04: Management of sevrals boards //i_Initialised=1; s_BoardInfos [dev->minor].i_Initialised=1; //END JK 06.07.04: Management of sevrals boards //BEGIN JK 06.07.04: Management of sevrals boards //if(i_ScanType==1) if(s_BoardInfos [dev->minor].i_ScanType==1) //END JK 06.07.04: Management of sevrals boards { //BEGIN JK 06.07.04: Management of sevrals boards //i_Sum=i_Sum+1; s_BoardInfos [dev->minor].i_Sum=s_BoardInfos [dev->minor].i_Sum+1; //END JK 06.07.04: Management of sevrals boards insn->unused[0]=0; i_APCI3200_ReadAnalogInput(dev,s,insn,&ui_Dummy); } return insn->n;} /* +----------------------------------------------------------------------------+ | Function Name : int i_APCI3200_ReadAnalogInput | | (comedi_device *dev,comedi_subdevice *s, | | comedi_insn *insn,lsampl_t *data) | +----------------------------------------------------------------------------+ | Task : Read value of the selected channel | +----------------------------------------------------------------------------+ | Input Parameters : comedi_device *dev : Driver handle | | UINT ui_NoOfChannels : No Of Channels To read | | UINT *data : Data Pointer to read status | +----------------------------------------------------------------------------+ | Output Parameters : -- | | data[0] : Digital Value Of Input | | data[1] : Calibration Offset Value | | data[2] : Calibration Gain Value | data[3] : CJC value | data[4] : CJC offset value | data[5] : CJC gain value | Begin JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values | data[6] : CJC current source from eeprom | data[7] : Channel current source from eeprom | data[8] : Channle gain factor from eeprom | End JK 21.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values +----------------------------------------------------------------------------+ | Return Value : TRUE : No error occur | | : FALSE : Error occur. Return the error | | | +----------------------------------------------------------------------------+*/INT i_APCI3200_ReadAnalogInput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { UINT ui_DummyValue=0; int i_ConvertCJCCalibration; int i=0; //BEGIN JK 06.07.04: Management of sevrals boards //if(i_Initialised==0) if(s_BoardInfos [dev->minor].i_Initialised==0) //END JK 06.07.04: Management of sevrals boards { i_APCI3200_Reset(dev); return -EINVAL; }//if(i_Initialised==0); #ifdef PRINT_INFO printk ("\n insn->unused[0] = %i", insn->unused[0]);#endif switch(insn->unused[0]) { case 0: i_APCI3200_Read1AnalogInputChannel(dev,s,insn,&ui_DummyValue); //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count+0]=ui_DummyValue; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+0]=ui_DummyValue; //END JK 06.07.04: Management of sevrals boards //Begin JK 25.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values i_APCI3200_GetChannelCalibrationValue (dev,s_BoardInfos [dev->minor].ui_Channel_num, &s_BoardInfos [dev->minor].ui_InterruptChannelValue [s_BoardInfos [dev->minor].i_Count+6], &s_BoardInfos [dev->minor].ui_InterruptChannelValue [s_BoardInfos [dev->minor].i_Count+7], &s_BoardInfos [dev->minor].ui_InterruptChannelValue [s_BoardInfos [dev->minor].i_Count+8]); #ifdef PRINT_INFO printk ("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+6] = %lu", s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+6]); printk ("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+7] = %lu", s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+7]); printk ("\n s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+8] = %lu", s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+8]); #endif //End JK 25.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values //BEGIN JK 06.07.04: Management of sevrals boards //if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE) && (i_CJCAvailable==1)) if((s_BoardInfos [dev->minor].i_ADDIDATAType==2) && (s_BoardInfos [dev->minor].i_InterruptFlag == FALSE) && (s_BoardInfos [dev->minor].i_CJCAvailable==1)) //END JK 06.07.04: Management of sevrals boards { i_APCI3200_ReadCJCValue(dev,&ui_DummyValue); //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count + 3]=ui_DummyValue; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 3]=ui_DummyValue; //END JK 06.07.04: Management of sevrals boards }//if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE)) else { //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count + 3]=0; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 3]=0; //END JK 06.07.04: Management of sevrals boards }//elseif((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE) && (i_CJCAvailable==1)) //BEGIN JK 06.07.04: Management of sevrals boards //if (( i_AutoCalibration == FALSE) && (i_InterruptFlag == FALSE)) if ((s_BoardInfos [dev->minor].i_AutoCalibration == FALSE) && (s_BoardInfos [dev->minor].i_InterruptFlag == FALSE)) //END JK 06.07.04: Management of sevrals boards { i_APCI3200_ReadCalibrationOffsetValue(dev,&ui_DummyValue); //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count + 1]=ui_DummyValue; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 1]=ui_DummyValue; //END JK 06.07.04: Management of sevrals boards i_APCI3200_ReadCalibrationGainValue(dev,&ui_DummyValue); //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count + 2]=ui_DummyValue; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count + 2]=ui_DummyValue; //END JK 06.07.04: Management of sevrals boards }//if (( i_AutoCalibration == FALSE) && (i_InterruptFlag == FALSE)) //BEGIN JK 06.07.04: Management of sevrals boards //if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE)&& (i_CJCAvailable==1)) if((s_BoardInfos [dev->minor].i_ADDIDATAType==2) && (s_BoardInfos [dev->minor].i_InterruptFlag == FALSE)&& (s_BoardInfos [dev->minor].i_CJCAvailable==1)) //END JK 06.07.04: Management of sevrals boards { /**********************************************************/ /*Test if the Calibration channel must be read for the CJC*/ /**********************************************************/ /**********************************/ /*Test if the polarity is the same*/ /**********************************/ //BEGIN JK 06.07.04: Management of sevrals boards //if(i_CJCPolarity!=i_ADDIDATAPolarity) if(s_BoardInfos [dev->minor].i_CJCPolarity!=s_BoardInfos [dev->minor].i_ADDIDATAPolarity) //END JK 06.07.04: Management of sevrals boards { i_ConvertCJCCalibration=1; }//if(i_CJCPolarity!=i_ADDIDATAPolarity) else { //BEGIN JK 06.07.04: Management of sevrals boards //if(i_CJCGain==i_ADDIDATAGain) if(s_BoardInfos [dev->minor].i_CJCGain==s_BoardInfos [dev->minor].i_ADDIDATAGain) //END JK 06.07.04: Management of sevrals boards { i_ConvertCJCCalibration=0; }//if(i_CJCGain==i_ADDIDATAGain) else { i_ConvertCJCCalibration=1; }//elseif(i_CJCGain==i_ADDIDATAGain) }//elseif(i_CJCPolarity!=i_ADDIDATAPolarity) if(i_ConvertCJCCalibration==1) { i_APCI3200_ReadCJCCalOffset(dev,&ui_DummyValue); //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count+4]=ui_DummyValue; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+4]=ui_DummyValue; //END JK 06.07.04: Management of sevrals boards i_APCI3200_ReadCJCCalGain(dev,&ui_DummyValue); //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count+5]=ui_DummyValue; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+5]=ui_DummyValue; //END JK 06.07.04: Management of sevrals boards }//if(i_ConvertCJCCalibration==1) else { //BEGIN JK 06.07.04: Management of sevrals boards //ui_InterruptChannelValue[i_Count+4]=0; //ui_InterruptChannelValue[i_Count+5]=0; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+4]=0; s_BoardInfos [dev->minor].ui_InterruptChannelValue[s_BoardInfos [dev->minor].i_Count+5]=0; //END JK 06.07.04: Management of sevrals boards }//elseif(i_ConvertCJCCalibration==1) }//if((i_ADDIDATAType==2) && (i_InterruptFlag == FALSE)) //BEGIN JK 06.07.04: Management of sevrals boards //if(i_ScanType!=1) if(s_BoardInfos [dev->minor].i_ScanType!=1) { //i_Count=0; s_BoardInfos [dev->minor].i_Count=0; }//if(i_ScanType!=1) else { //i_Count=i_Count +6; //Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values //s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count +6; s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count +9; //End JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values }//else if(i_ScanType!=1) //if((i_ScanType==1) &&(i_InterruptFlag==1)) if((s_BoardInfos [dev->minor].i_ScanType==1) &&(s_BoardInfos [dev->minor].i_InterruptFlag==1)) { //i_Count=i_Count-6; //Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values //s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count-6; s_BoardInfos [dev->minor].i_Count=s_BoardInfos [dev->minor].i_Count-9; //End JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values } //if(i_ScanType==0) if(s_BoardInfos [dev->minor].i_ScanType==0) { /* data[0]= ui_InterruptChannelValue[0]; data[1]= ui_InterruptChannelValue[1]; data[2]= ui_InterruptChannelValue[2]; data[3]= ui_InterruptChannelValue[3]; data[4]= ui_InterruptChannelValue[4]; data[5]= ui_InterruptChannelValue[5]; */ #ifdef PRINT_INFO printk("\n data[0]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[0];");#endif data[0]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[0]; data[1]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[1]; data[2]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[2]; data[3]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[3]; data[4]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[4]; data[5]= s_BoardInfos [dev->minor].ui_InterruptChannelValue[5]; //Begin JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values //printk("\n 0 - i_APCI3200_GetChannelCalibrationValue data [6] = %lu, data [7] = %lu, data [8] = %lu", data [6], data [7], data [8]); i_APCI3200_GetChannelCalibrationValue (dev, s_BoardInfos [dev->minor].ui_Channel_num, &data [6], &data [7], &data [8]); //End JK 22.10.2004: APCI-3200 / APCI-3300 Reading of EEPROM values } break; case 1 : for(i=0;i<insn->n;i++) { //data[i]=ui_InterruptChannelValue[i]; data[i]=s_BoardInfos [dev->minor].ui_InterruptChannelValue[i]; } //i_Count=0; //i_Sum=0; //if(i_ScanType==1) s_BoardInfos [dev->minor].i_Count=0; s_BoardInfos [dev->minor].i_Sum=0; if(s_BoardInfos [dev->minor].i_ScanType==1) { //i_Initialised=0; //i_InterruptFlag=0; s_BoardInfos [dev->minor].i_Initialised=0; s_BoardInfos [dev->minor].i
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -