⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hwdrv_apci3200.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
      i_err++;    }//if(data[2]!=0 &&  data[2]!=1)  if(data[3]!=0)    {      printk("\nThe selection of offset range  is in error\n");       i_err++;    }// if(data[3]!=0)  if(data[4]!=0 &&  data[4]!=1)    {      printk("\nThe selection of coupling is in error\n");       i_err++;    }//if(data[4]!=0 &&  data[4]!=1)  if(data[5]!=0 &&  data[5]!=1)    {      printk("\nThe selection of single/differential mode is in error\n");       i_err++;    }//if(data[5]!=0 &&  data[5]!=1)  if(data[8]!=0 && data[8]!=1 && data[2]!=2)    {      printk("\nError in selection of functionality\n");    }//if(data[8]!=0 && data[8]!=1 && data[2]!=2)       if(data[12]==0 || data[12]==1)    {      if (data[6]!=20 && data[6]!=40 && data[6]!=80 && data[6]!=160 )	{	  printk("\nThe selection of conversion time reload value is in error\n");	  i_err++;	}// if (data[6]!=20 && data[6]!=40 && data[6]!=80 && data[6]!=160 )      if(data[7]!=2)        {	  printk("\nThe selection of conversion time unit  is in error\n");	  i_err++;        }// if(data[7]!=2)    }    if(data[9]!=0 &&  data[9]!=1)    {      printk("\nThe selection of interrupt enable is in error\n");       i_err++;    }//if(data[9]!=0 &&  data[9]!=1)  if(data[11] < 0 || data[11] > 4)    {      printk("\nThe selection of module is in error\n");       i_err++;    }//if(data[11] <0 ||  data[11]>1)  if(data[12] < 0 || data[12] > 3)    {      printk("\nThe selection of singlechannel/scan selection is in error\n");       i_err++;    }//if(data[12] < 0 ||  data[12]> 3)   if(data[13] <0 ||data[13] >16)    {      printk("\nThe selection of number of channels is in error\n");       i_err++;    }// if(data[13] <0 ||data[13] >15)       //BEGIN JK 06.07.04: Management of sevrals boards  /*          	      i_ChannelCount=data[13];	      i_ScanType=data[12];	      i_ADDIDATAPolarity = data[2];	      i_ADDIDATAGain=data[1];	      i_ADDIDATAConversionTime=data[6];	      i_ADDIDATAConversionTimeUnit=data[7];	      i_ADDIDATAType=data[0];   */    // Save acquisition configuration for the actual board  s_BoardInfos [dev->minor].i_ChannelCount=data[13];  s_BoardInfos [dev->minor].i_ScanType=data[12];  s_BoardInfos [dev->minor].i_ADDIDATAPolarity = data[2];  s_BoardInfos [dev->minor].i_ADDIDATAGain=data[1];  s_BoardInfos [dev->minor].i_ADDIDATAConversionTime=data[6];  s_BoardInfos [dev->minor].i_ADDIDATAConversionTimeUnit=data[7];  s_BoardInfos [dev->minor].i_ADDIDATAType=data[0];   //Begin JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68  s_BoardInfos [dev->minor].i_ConnectionType=data[5];   //End JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68  //END JK 06.07.04: Management of sevrals boards    //Begin JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68  memset (s_BoardInfos [dev->minor].ui_ScanValueArray, 0, (7+12)*sizeof (lsampl_t)); // 7 is the maximal number of channels  //End JK 19.10.2004: APCI-3200 Driver update 0.7.57 -> 0.7.68        //BEGIN JK 02.07.04 : This while can't be do, it block the process when using severals boards  //while(i_InterruptFlag==1)  while(s_BoardInfos [dev->minor].i_InterruptFlag==1)    {#ifndef MSXBOX      udelay(1);#else      // In the case where the driver is compiled for the MSX-Box       // we used a printk to have a little delay because udelay      // seems to be broken under the MSX-Box.      // This solution hat to be studied.       printk("");#endif    }  //END JK 02.07.04 : This while can't be do, it block the process when using severals boards      ui_ChannelNo = CR_CHAN(insn->chanspec); // get the channel  //BEGIN JK 06.07.04: Management of sevrals boards  //i_ChannelNo=ui_ChannelNo;   //ui_Channel_num =ui_ChannelNo;    s_BoardInfos [dev->minor].i_ChannelNo=ui_ChannelNo;    s_BoardInfos [dev->minor].ui_Channel_num=ui_ChannelNo;      //END JK 06.07.04: Management of sevrals boards  if(data[5]==0)    {          if(ui_ChannelNo<0 || ui_ChannelNo>15)	{	  printk("\nThe Selection of the channel is in error\n");  	  i_err++;	}// if(ui_ChannelNo<0 || ui_ChannelNo>15)    }//if(data[5]==0)  else    {      if(data[14]==2)	{	  if(ui_ChannelNo<0 || ui_ChannelNo>3) 	    {	      printk("\nThe Selection of the channel is in error\n");  	      i_err++;	    }// if(ui_ChannelNo<0 || ui_ChannelNo>3) 	}//if(data[14]==2)      else	{  	  if(ui_ChannelNo<0 || ui_ChannelNo>7)	    {	      printk("\nThe Selection of the channel is in error\n");  	      i_err++;	    }// if(ui_ChannelNo<0 || ui_ChannelNo>7)	}//elseif(data[14]==2)    }//elseif(data[5]==0)  if(data[12]==0 || data[12]==1)    {      switch(data[5])	{	case 0:   	  if(ui_ChannelNo >=0 && ui_ChannelNo <=3)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_Offset=0;	      s_BoardInfos [dev->minor].i_Offset=0;                //END JK 06.07.04: Management of sevrals boards	    }//if(ui_ChannelNo >=0 && ui_ChannelNo <=3) 	  if(ui_ChannelNo >=4 && ui_ChannelNo <=7)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_Offset=64;	      s_BoardInfos [dev->minor].i_Offset=64;                //END JK 06.07.04: Management of sevrals boards	    }//if(ui_ChannelNo >=4 && ui_ChannelNo <=7) 	  if(ui_ChannelNo >=8 && ui_ChannelNo <=11)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_Offset=128;	      s_BoardInfos [dev->minor].i_Offset=128;                //END JK 06.07.04: Management of sevrals boards	    }//if(ui_ChannelNo >=8 && ui_ChannelNo <=11) 	  if(ui_ChannelNo >=12 && ui_ChannelNo <=15)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_Offset=192;	      s_BoardInfos [dev->minor].i_Offset=192;                //END JK 06.07.04: Management of sevrals boards	    }//if(ui_ChannelNo >=12 && ui_ChannelNo <=15)	  break;	case 1:	  if(data[14]==2)	    {	      if(ui_ChannelNo ==0 )		{		  //BEGIN JK 06.07.04: Management of sevrals boards		  //i_Offset=0;		  s_BoardInfos [dev->minor].i_Offset=0;  		  //END JK 06.07.04: Management of sevrals boards		}//if(ui_ChannelNo ==0 )	      if(ui_ChannelNo ==1)		{ 		  //BEGIN JK 06.07.04: Management of sevrals boards		  //i_Offset=0;		  s_BoardInfos [dev->minor].i_Offset=64;  		  //END JK 06.07.04: Management of sevrals boards		}// if(ui_ChannelNo ==1)	      if(ui_ChannelNo ==2 )		{		  //BEGIN JK 06.07.04: Management of sevrals boards		  //i_Offset=128;		  s_BoardInfos [dev->minor].i_Offset=128;  		  //END JK 06.07.04: Management of sevrals boards		}//if(ui_ChannelNo ==2 )	      if(ui_ChannelNo ==3)		{		  //BEGIN JK 06.07.04: Management of sevrals boards		  //i_Offset=192;		  s_BoardInfos [dev->minor].i_Offset=192;  		  //END JK 06.07.04: Management of sevrals boards		}//if(ui_ChannelNo ==3) 	      	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_ChannelNo=0;	      s_BoardInfos [dev->minor].i_ChannelNo=0;	      //END JK 06.07.04: Management of sevrals boards	      ui_ChannelNo=0;	      break;   	    }//if(data[14]==2)	  if(ui_ChannelNo >=0 && ui_ChannelNo <=1)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_Offset=0;	      s_BoardInfos [dev->minor].i_Offset=0;                //END JK 06.07.04: Management of sevrals boards	    }//if(ui_ChannelNo >=0 && ui_ChannelNo <=1) 	  if(ui_ChannelNo >=2 && ui_ChannelNo <=3)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_ChannelNo=i_ChannelNo-2;	      //i_Offset=64;	      s_BoardInfos [dev->minor].i_ChannelNo=s_BoardInfos [dev->minor].i_ChannelNo-2;	      s_BoardInfos [dev->minor].i_Offset=64;              //END JK 06.07.04: Management of sevrals boards	      	      ui_ChannelNo=ui_ChannelNo-2; 	    }//if(ui_ChannelNo >=2 && ui_ChannelNo <=3) 	  if(ui_ChannelNo >=4 && ui_ChannelNo <=5)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_ChannelNo=i_ChannelNo-4;	      //i_Offset=128;	      s_BoardInfos [dev->minor].i_ChannelNo=s_BoardInfos [dev->minor].i_ChannelNo-4;	      s_BoardInfos [dev->minor].i_Offset=128;              //END JK 06.07.04: Management of sevrals boards	   	      ui_ChannelNo=ui_ChannelNo-4; 	    }//if(ui_ChannelNo >=4 && ui_ChannelNo <=5) 	  if(ui_ChannelNo >=6 && ui_ChannelNo <=7)	    {	      //BEGIN JK 06.07.04: Management of sevrals boards	      //i_ChannelNo=i_ChannelNo-6;	      //i_Offset=192;	      s_BoardInfos [dev->minor].i_ChannelNo=s_BoardInfos [dev->minor].i_ChannelNo-6;	      s_BoardInfos [dev->minor].i_Offset=192;              //END JK 06.07.04: Management of sevrals boards	 	      ui_ChannelNo=ui_ChannelNo-6; 	    }//if(ui_ChannelNo >=6 && ui_ChannelNo <=7) 	  break;               default: printk("\n This selection of polarity does not exist\n");	  i_err++;        }//switch(data[2])             }//if(data[12]==0 || data[12]==1)  else    {      switch(data[11])	{	case 1:	  //BEGIN JK 06.07.04: Management of sevrals boards	  //i_Offset=0;	  s_BoardInfos [dev->minor].i_Offset=0;  	  //END JK 06.07.04: Management of sevrals boards	  break;	case 2:	  //BEGIN JK 06.07.04: Management of sevrals boards	  //i_Offset=64;	  s_BoardInfos [dev->minor].i_Offset=64;  	  //END JK 06.07.04: Management of sevrals boards	  break;	case 3:	  //BEGIN JK 06.07.04: Management of sevrals boards	  //i_Offset=128;	  s_BoardInfos [dev->minor].i_Offset=128;  	  //END JK 06.07.04: Management of sevrals boards	  break;	case 4:	  //BEGIN JK 06.07.04: Management of sevrals boards	  //i_Offset=192;	  s_BoardInfos [dev->minor].i_Offset=192;  	  //END JK 06.07.04: Management of sevrals boards	  break;	default:	  printk("\nError in module selection\n");	  i_err++;	}// switch(data[11])     }// elseif(data[12]==0 || data[12]==1)         if(i_err)    {      i_APCI3200_Reset(dev);      return -EINVAL;     }  //if(i_ScanType!=1)  if(s_BoardInfos [dev->minor].i_ScanType!=1)    {      //BEGIN JK 06.07.04: Management of sevrals boards      //i_Count=0;      //i_Sum=0;      s_BoardInfos [dev->minor].i_Count=0;        s_BoardInfos [dev->minor].i_Sum=0;        //END JK 06.07.04: Management of sevrals boards    }//if(i_ScanType!=1)              ul_Config =  data[1] |(data[2] << 6) |(data[5]<< 7) |(data[3] << 8) |(data[4] << 9);                                                              //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 channel to configure*/  /*********************************/  //BEGIN JK 06.07.04: Management of sevrals boards   //outl(0 | ui_ChannelNo , devpriv->iobase+i_Offset + 0x4);  outl(0 | ui_ChannelNo , devpriv->iobase+s_BoardInfos [dev->minor].i_Offset + 0x4);  //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   /**************************/                                                          

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -