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

📄 hwdrv_apci16xx.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 3 页
字号:
+----------------------------------------------------------------------------+| Task              : Read the status from selected TTL digital input        ||                     (b_InputChannel)                                       |+----------------------------------------------------------------------------+| Task              : Read the status from digital input port                ||                     (b_SelectedPort)                                       |+----------------------------------------------------------------------------+| Input Parameters  :                                                        ||              APCI16XX_TTL_READCHANNEL                                      ||                    b_SelectedPort= CR_RANGE(insn->chanspec);               ||                    b_InputChannel= CR_CHAN(insn->chanspec);                ||                    b_ReadType	  = (BYTE) data[0];                          ||                                                                            ||              APCI16XX_TTL_READPORT                                         ||                    b_SelectedPort= CR_RANGE(insn->chanspec);               ||                    b_ReadType	  = (BYTE) data[0];                          |+----------------------------------------------------------------------------+| Output Parameters : data[0]    0 : Channle is not active                   | |                                1 : Channle is active                       |+----------------------------------------------------------------------------+| Return Value      : >0  : No error                                         ||                    -100 : Config command error                             ||                    -101 : Data size error                                  ||                    -102 : The selected TTL input port is wrong             ||                    -103 : The selected TTL digital input is wrong          |+----------------------------------------------------------------------------+*/int  i_APCI16XX_InsnBitsReadTTLIO   (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_InputChannel           = CR_CHAN(insn->chanspec);	BYTE *    pb_Status;	DWORD     dw_Status;		/************************/	/* Test the buffer size */	/************************/		if (insn->n >= 1)	   {	   /*******************/	   /* Get the command */	   /* *****************/	   	   b_Command = (BYTE) data[0];	   	   /********************/	   /* Test the command */	   /********************/	   	   if ((b_Command == APCI16XX_TTL_READCHANNEL) || (b_Command == APCI16XX_TTL_READPORT))	      {	      /**************************/	      /* Test the selected port */	      /**************************/	      	      if (b_SelectedPort < b_NumberOfPort)	         {                 /**********************/                 /* Test if input port */                 /**********************/                 if (((devpriv->ul_TTLPortConfiguration[b_SelectedPort / 4] >> (8 * (b_SelectedPort % 4))) & 0xFF) == 0)                    {                    /***************************/                    /* Test the channel number */                    /***************************/	            if ((b_Command == APCI16XX_TTL_READCHANNEL) && (b_InputChannel > 7))	               {	               /*******************************************/	               /* The selected TTL digital input is wrong */	               /*******************************************/	                                   printk("\nChannel selection error");	               i_ReturnValue = -103;	               }                    }                 else                    {	            /****************************************/                    /* The selected TTL input port is wrong */                    /****************************************/                                     printk("\nPort selection error");                    i_ReturnValue = -102;                    }	         }	      else	         {	         /****************************************/                 /* The selected TTL input port is wrong */                 /****************************************/                                  printk("\nPort selection error");                 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)	   {           pb_Status = (PBYTE) &data[0];                      /*******************************/	   /* Get the digital inpu status */           /*******************************/           	   dw_Status = inl(devpriv->iobase + 8 + ((b_SelectedPort / 4) * 4));	   dw_Status = (dw_Status >> (8 * (b_SelectedPort % 4))) & 0xFF;	   	   /***********************/	   /* Save the port value */	   /***********************/	   	   *pb_Status = (BYTE) dw_Status;	   	   /***************************************/	   /* Test if read channel status command */	   /***************************************/	   	   if (b_Command == APCI16XX_TTL_READCHANNEL)	      {	      *pb_Status = (*pb_Status >> b_InputChannel) & 1;	      }	   }	return (i_ReturnValue);	}/*+----------------------------------------------------------------------------+| Function Name     : INT i_APCI16XX_InsnReadTTLIOAllPortValue               ||                          (comedi_device    *dev,                           ||                           comedi_subdevice *s,                             ||                           comedi_insn      *insn,                          ||                           lsampl_t         *data)                          |+----------------------------------------------------------------------------+| Task              : Read the status from all digital input ports           |+----------------------------------------------------------------------------+| Input Parameters  : -                                                      |+----------------------------------------------------------------------------+| Output Parameters : data[0] : Port 0 to 3 data                             ||                     data[1] : Port 4 to 7 data                             ||                     ....                                                   |+----------------------------------------------------------------------------+| Return Value      : 0: No error                                            ||                    -100 : Read command error                               ||                    -101 : Data size error                                  |+----------------------------------------------------------------------------+*/int i_APCI16XX_InsnReadTTLIOAllPortValue (comedi_device    *dev,                                          comedi_subdevice *s,                                          comedi_insn      *insn,                                          lsampl_t         *data)	{	BYTE         b_Command              = (BYTE) CR_AREF(insn->chanspec);	INT          i_ReturnValue          = insn->n;	BYTE         b_Cpt                  = 0;	BYTE         b_NumberOfPort         = 0;	lsampl_t * pls_ReadData             = data;		/********************/	/* Test the command */	/********************/	   	if ((b_Command == APCI16XX_TTL_READ_ALL_INPUTS) || (b_Command == APCI16XX_TTL_READ_ALL_OUTPUTS))	   {	   /**********************************/	   /* Get the number of 32-Bit ports */	   /**********************************/		   b_NumberOfPort = (BYTE) (devpriv->ps_BoardInfo->i_NbrTTLChannel / 32);	   if ((b_NumberOfPort * 32) < devpriv->ps_BoardInfo->i_NbrTTLChannel)	      {	      b_NumberOfPort = b_NumberOfPort + 1;	      }		   /************************/	   /* Test the buffer size */	   /************************/		   if (insn->n >= b_NumberOfPort)	      {              if (b_Command == APCI16XX_TTL_READ_ALL_INPUTS)                 {                 /**************************/                 /* Read all digital input */                 /**************************/	   	         for (b_Cpt = 0; b_Cpt < b_NumberOfPort; b_Cpt ++)	            {	            /************************/	            /* Read the 32-Bit port */	            /************************/	      	            pls_ReadData [b_Cpt]  = inl(devpriv->iobase + 8 + (b_Cpt * 4));	    	            /**************************************/	            /* Mask all channels used als outputs */	            /**************************************/	     	            pls_ReadData [b_Cpt]  = pls_ReadData [b_Cpt]  & (~devpriv->ul_TTLPortConfiguration[b_Cpt]);	            }	         }	      else                 {                 /****************************/                 /* Read all digital outputs */                 /****************************/	   	         for (b_Cpt = 0; b_Cpt < b_NumberOfPort; b_Cpt ++)	            {	            /************************/	            /* Read the 32-Bit port */	            /************************/	      	            pls_ReadData [b_Cpt] = inl(devpriv->iobase + 20 + (b_Cpt * 4));	     	            /**************************************/	            /* Mask all channels used als outputs */	            /**************************************/	      	            pls_ReadData [b_Cpt]  = pls_ReadData [b_Cpt]  & devpriv->ul_TTLPortConfiguration[b_Cpt];	            }	         }	      }	   else	      {	      /*******************/	      /* Data size error */	      /*******************/	       	      printk("\nBuffer size error");	      i_ReturnValue = -101;	      }	   }	else

⌨️ 快捷键说明

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