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

📄 hwdrv_apci2200.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 2 页
字号:
          ui_Temp=ui_Temp|ui_Temp1;            data[0]=(data[0] << ui_NoOfChannel)^0xffff;          data[0]=data[0]& ui_Temp;           outw(data[0],devpriv->iobase+APCI2200_DIGITAL_OP);           }//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]))^0xffff)& ui_Temp; 	               break;	       case 4:data[0]=~data[0]&0xf;                      ui_Temp1=15;                      ui_Temp1=ui_Temp1<<4*data[2];                      ui_Temp=ui_Temp|ui_Temp1;                          data[0]=((data[0] << (4*data[2]))^0xffff)&ui_Temp;	              break;	        case 8: data[0]=~data[0]&0xff;                          ui_Temp1=255;                          ui_Temp1=ui_Temp1<<8*data[2];                          ui_Temp=ui_Temp|ui_Temp1;                              data[0]=((data[0] << (8*data[2]))^0xffff)&ui_Temp;                          break;                 case 15: break;               default: 	              comedi_error(dev," chan spec wrong");		      return -EINVAL;   // "sorry channel spec wrong "                                }//switch(ui_NoOfChannels)               outw(data[0],devpriv->iobase+APCI2200_DIGITAL_OP);            }// 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_APCI2200_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                ||                     comedi_subdevice *s,   :pointer to subdevice structure                      comedi_insn *insn      :pointer to insn structure      ||                     lsampl_t *data          : Data Pointer to read status  |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/INT i_APCI2200_ReadDigitalOutput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) {UINT ui_Temp;UINT ui_NoOfChannel = CR_CHAN(insn->chanspec); // get the channelui_Temp=data[0];*data=inw(devpriv->iobase+APCI2200_DIGITAL_OP);if(ui_Temp==0)   {   *data=(*data >> ui_NoOfChannel)&0x1;    }//if(ui_Temp==0)else   {    if(ui_Temp==1)       {       switch( ui_NoOfChannel)	 {	 case 2:*data=(*data >>(2*data[1]))&3; 	        break; 	 case 4:*data=(*data >>(4*data[1]))&15; 	       break;	 case 8: *data=(*data >>(8*data[1]))&255;                     break;          case 15: break;          default:	          comedi_error(dev," chan spec wrong");		  return -EINVAL;   // "sorry channel spec wrong "                     }//switch(ui_NoOfChannels)           }//if(ui_Temp==1)   else     {     printk("\nSpecified channel not supported \n");     }//elseif(ui_Temp==1)  }//elseif(ui_Temp==0)return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI2200_ConfigWatchdog(comedi_device *dev,                      comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)  ||				                                                     |+----------------------------------------------------------------------------+| Task              : Configures The Watchdog                                |+----------------------------------------------------------------------------+| Input Parameters  :   comedi_device *dev      : Driver handle              ||                     comedi_subdevice *s,   :pointer to subdevice structure                      comedi_insn *insn      :pointer to insn structure      ||                     lsampl_t *data          : Data Pointer to read status                                                                                                             |  +----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI2200_ConfigWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){if(data[0]==0)   {   //Disable the watchdog   outw(0x0,devpriv->iobase+APCI2200_WATCHDOG + APCI2200_WATCHDOG_ENABLEDISABLE);   //Loading the Reload value   outw(data[1],devpriv->iobase+APCI2200_WATCHDOG + APCI2200_WATCHDOG_RELOAD_VALUE);   data[1]=data[1]>>16;   outw(data[1],devpriv->iobase+APCI2200_WATCHDOG + APCI2200_WATCHDOG_RELOAD_VALUE+2);   }//if(data[0]==0)else   {     printk("\nThe input parameters are wrong\n");     return -EINVAL;    }//elseif(data[0]==0)return insn->n;} /*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI2200_StartStopWriteWatchdog                  ||				(comedi_device *dev,comedi_subdevice *s,                     comedi_insn *insn,lsampl_t *data);                      |+----------------------------------------------------------------------------+| Task              : Start / Stop The Watchdog                              |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev      : Driver handle                ||                     comedi_subdevice *s,   :pointer to subdevice structure                      comedi_insn *insn      :pointer to insn structure      ||                     lsampl_t *data          : Data Pointer to read status  |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI2200_StartStopWriteWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) {   switch(data[0])      {       case 0://stop the watchdog                outw(0x0,devpriv->iobase+APCI2200_WATCHDOG + APCI2200_WATCHDOG_ENABLEDISABLE);//disable the watchdog                break;       case 1://start the watchdog               outw(0x0001,devpriv->iobase+APCI2200_WATCHDOG + APCI2200_WATCHDOG_ENABLEDISABLE);               break;       case 2://Software trigger                outw(0x0201,devpriv->iobase+APCI2200_WATCHDOG + APCI2200_WATCHDOG_ENABLEDISABLE);              break;       default:printk("\nSpecified functionality does not exist\n");	       return -EINVAL;       }// switch(data[0])        return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI2200_ReadWatchdog                            ||			(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,                    lsampl_t *data); 	                                     |+----------------------------------------------------------------------------+| Task              : Read The Watchdog                                      |+----------------------------------------------------------------------------+| Input Parameters  :   comedi_device *dev      : Driver handle              ||                     comedi_subdevice *s,   :pointer to subdevice structure                      comedi_insn *insn      :pointer to insn structure      ||                     lsampl_t *data          : Data Pointer to read status  |+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      : TRUE  : No error occur                                 ||		            : FALSE : Error occur. Return the error          ||			                                                         |+----------------------------------------------------------------------------+*/int i_APCI2200_ReadWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { data[0]= inw(devpriv->iobase+APCI2200_WATCHDOG +APCI2200_WATCHDOG_STATUS)&0x1; return insn->n;}/*+----------------------------------------------------------------------------+| Function   Name   : int i_APCI2200_Reset(comedi_device *dev)               |                                                                                                          |+----------------------------------------------------------------------------+| Task              :resets all the registers                                |+----------------------------------------------------------------------------+| Input Parameters  : comedi_device *dev+----------------------------------------------------------------------------+| Output Parameters :	--													 |+----------------------------------------------------------------------------+| Return Value      :                                                        ||			                                                         |+----------------------------------------------------------------------------+*/	  INT i_APCI2200_Reset(comedi_device *dev) {  outw(0x0 ,devpriv->iobase+APCI2200_DIGITAL_OP);//RESETS THE DIGITAL OUTPUTS  outw(0x0,devpriv->iobase+APCI2200_WATCHDOG + APCI2200_WATCHDOG_ENABLEDISABLE); outw(0x0,devpriv->iobase+APCI2200_WATCHDOG +APCI2200_WATCHDOG_RELOAD_VALUE); outw(0x0,devpriv->iobase+APCI2200_WATCHDOG +APCI2200_WATCHDOG_RELOAD_VALUE+2);  return 0;}        

⌨️ 快捷键说明

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