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

📄 hwdrv_apci16xx.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
	   {	   /*****************/	   /* Command error */	   /*****************/	      	   printk("\nCommand selection error");	   i_ReturnValue = -100;	   }	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+|                            OUTPUT FUNCTIONS                                |+----------------------------------------------------------------------------+*//*+----------------------------------------------------------------------------+| Function Name     : INT     i_APCI16XX_InsnBitsWriteTTLIO                  ||                          (comedi_device    *dev,                           ||                           comedi_subdevice *s,                             ||                           comedi_insn      *insn,                          ||                           lsampl_t         *data)                          |+----------------------------------------------------------------------------+| Task              : Set the state from selected TTL digital output         ||                     (b_OutputChannel)                                      |+----------------------------------------------------------------------------+| Task              : Set the state from digital output port                 ||                     (b_SelectedPort)                                       |+----------------------------------------------------------------------------+| Input Parameters  :                                                        ||              APCI16XX_TTL_WRITECHANNEL_ON | APCI16XX_TTL_WRITECHANNEL_OFF  ||                    b_SelectedPort = CR_RANGE(insn->chanspec);              ||                    b_OutputChannel= CR_CHAN(insn->chanspec);               ||                    b_Command      = (BYTE) data[0];                        ||                                                                            ||              APCI16XX_TTL_WRITEPORT_ON | APCI16XX_TTL_WRITEPORT_OFF        ||                    b_SelectedPort = CR_RANGE(insn->chanspec);              ||                    b_Command      = (BYTE) data[0];                        |+----------------------------------------------------------------------------+| Output Parameters : data[0] : TTL output port 0 to 3 data                  ||                     data[1] : TTL output port 4 to 7 data                  ||                     ....                                                   |+----------------------------------------------------------------------------+| Return Value      : >0  : No error                                         ||                    -100 : Command error                                    ||                    -101 : Data size error                                  ||                    -102 : The selected TTL output port is wrong            ||                    -103 : The selected TTL digital output is wrong         ||                    -104 : Output memory disabled                           |+----------------------------------------------------------------------------+*/int  i_APCI16XX_InsnBitsWriteTTLIO   (comedi_device    *dev,                                      comedi_subdevice *s,                                      comedi_insn      *insn,                                      lsampl_t         *data)	{	INT          i_ReturnValue          = insn->n;	BYTE         b_Command              = 0;	BYTE         b_NumberOfPort         = (BYTE) (devpriv->ps_BoardInfo->i_NbrTTLChannel / 8);	BYTE         b_SelectedPort         = CR_RANGE(insn->chanspec);	BYTE         b_OutputChannel        = CR_CHAN(insn->chanspec);	DWORD       dw_Status               = 0;		/************************/	/* Test the buffer size */	/************************/		if (insn->n >= 1)	   {	   /*******************/	   /* Get the command */	   /* *****************/	   	   b_Command = (BYTE) data[0];	   	   /********************/	   /* Test the command */	   /********************/	   	   if ((b_Command == APCI16XX_TTL_WRITECHANNEL_ON)  || 	       (b_Command == APCI16XX_TTL_WRITEPORT_ON)     ||	       (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) ||	       (b_Command == APCI16XX_TTL_WRITEPORT_OFF))	      {	      /**************************/	      /* Test the selected port */	      /**************************/	      	      if (b_SelectedPort < b_NumberOfPort)	         {                 /***********************/                 /* Test if output port */                 /***********************/                 if (((devpriv->ul_TTLPortConfiguration[b_SelectedPort / 4] >> (8 * (b_SelectedPort % 4))) & 0xFF) == 0xFF)                    {                    /***************************/                    /* Test the channel number */                    /***************************/                    if (((b_Command == APCI16XX_TTL_WRITECHANNEL_ON) ||                          (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF)) && (b_OutputChannel > 7))	               {	               /********************************************/	               /* The selected TTL digital output is wrong */	               /********************************************/	                                   printk("\nChannel selection error");	               i_ReturnValue = -103;	               }                                        if (((b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) ||	                 (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) && (devpriv->b_OutputMemoryStatus == ADDIDATA_DISABLE))	               {	               /********************************************/	               /* The selected TTL digital output is wrong */	               /********************************************/	                                   printk("\nOutput memory disabled");	               i_ReturnValue = -104;	               }	            /************************/	            /* Test the buffer size */	            /************************/                    if (((b_Command == APCI16XX_TTL_WRITEPORT_ON) ||	                 (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) && (insn->n < 2))	               {	               /*******************/	               /* Data size error */	               /*******************/	       	               printk("\nBuffer size error");	               i_ReturnValue = -101;	               }	            }                 else                    {	            /*****************************************/                    /* The selected TTL output port is wrong */                    /*****************************************/                                     printk("\nPort selection error %lX", devpriv->ul_TTLPortConfiguration[0]);                    i_ReturnValue = -102;                    }	         }	      else	         {	         /****************************************/                 /* The selected TTL output port is wrong */                 /****************************************/                                  printk("\nPort selection error %d %d",b_SelectedPort , b_NumberOfPort);                 i_ReturnValue = -102;                 }              }	   else	      {	      /************************/	      /* Config command error */	      /************************/	      	      printk("\nCommand selection error");	      i_ReturnValue = -100;	      }	   }	else	   {	   /*******************/	   /* Data size error */	   /*******************/	       	   printk("\nBuffer size error");	   i_ReturnValue = -101;	   }	   	   	/**************************/	/* Test if no error occur */	/**************************/		if (i_ReturnValue >= 0)	   {           /********************************/	   /* Get the digital output state */           /********************************/	      	   dw_Status = inl(devpriv->iobase + 20 + ((b_SelectedPort / 4) * 4));	   /**********************************/	   /* Test if output memory not used */	   /**********************************/           	   if (devpriv->b_OutputMemoryStatus == ADDIDATA_DISABLE)	      {	      /*********************************/	      /* Clear the selected port value */	      /*********************************/	      	      dw_Status = dw_Status & (0xFFFFFFFFUL - (0xFFUL << (8 * (b_SelectedPort % 4))));	      }	     	   /******************************/	   /* Test if setting channel ON */	   /******************************/ 	   	   if (b_Command == APCI16XX_TTL_WRITECHANNEL_ON)	      {	      dw_Status = dw_Status | (1UL << ((8 * (b_SelectedPort % 4)) + b_OutputChannel));	      }	   /***************************/	   /* Test if setting port ON */	   /***************************/ 	      	   if (b_Command == APCI16XX_TTL_WRITEPORT_ON)	      {	      dw_Status = dw_Status | ((data[1] & 0xFF) << (8 * (b_SelectedPort % 4)));	      }	   /*******************************/	   /* Test if setting channel OFF */	   /*******************************/ 	   	   if (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF)	      {	      dw_Status = dw_Status & (0xFFFFFFFFUL - (1UL << ((8 * (b_SelectedPort % 4)) + b_OutputChannel)));	      }	            	   /****************************/	   /* Test if setting port OFF */	   /****************************/ 	      	   if (b_Command == APCI16XX_TTL_WRITEPORT_OFF)	      {	      dw_Status = dw_Status & (0xFFFFFFFFUL - ((data[1] & 0xFF) << (8 * (b_SelectedPort % 4))));	      }	   	              outl(dw_Status, devpriv->iobase + 20 + ((b_SelectedPort / 4) * 4));	   }	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+| 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_APCI16XX_Reset(comedi_device *dev) 	{	return 0;	}        

⌨️ 快捷键说明

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