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

📄 apci1710_tor.c

📁 最新版comedi的源码
💻 C
📖 第 1 页 / 共 5 页
字号:
	pb_TorCounterStatus=(PBYTE) &data[0];	pul_TorCounterValue=(PULONG) &data[1];    |+----------------------------------------------------------------------------+| Return Value      :  0: No error                                           ||                     -1: The handle parameter of the board is wrong         ||                     -2: Module selection wrong                             ||                     -3: The module is not a tor counter module             ||                     -4: Tor counter selection is wrong                     ||                     -5: Tor counter not initialised see function           ||                         "i_APCI1710_InitTorCounter"                        ||                     -6: Tor counter not enabled see function               ||                         "i_APCI1710_EnableTorCounter"                      ||                     -7: Timeout parameter is wrong (0 to 65535)            |+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnBitsGetTorCounterProgressStatusAndValue(comedi_device *dev,comedi_subdevice *s,	comedi_insn *insn,lsampl_t *data)	{	INT    i_ReturnValue = 0;	DWORD  dw_Status;	DWORD  dw_TimeOut = 0;	BYTE    b_ModulNbr;	BYTE    b_TorCounter;	BYTE    b_ReadType;	UINT    ui_TimeOut;	PBYTE   pb_TorCounterStatus;	PULONG  pul_TorCounterValue;	i_ReturnValue = insn->n;	b_ModulNbr    = CR_AREF(insn->chanspec);	b_ReadType    = (BYTE) data[0]; 	b_TorCounter  =	(BYTE) data[1];	ui_TimeOut	  = (UINT) data[2];	pb_TorCounterStatus=(PBYTE) &data[0];	pul_TorCounterValue=(PULONG) &data[1];		/**************************/	/* Test the module number */	/**************************/        if(b_ReadType==APCI1710_TOR_READINTERRUPT)        {                                data[0]=devpriv->s_InterruptParameters.						      s_FIFOInterruptParameters [devpriv->										 s_InterruptParameters.										 ui_Read].b_OldModuleMask;                       data[1]=devpriv->s_InterruptParameters.						      s_FIFOInterruptParameters [devpriv->										 s_InterruptParameters.										 ui_Read].ul_OldInterruptMask;                       data[2]=devpriv->s_InterruptParameters.						      s_FIFOInterruptParameters [devpriv->										 s_InterruptParameters.										 ui_Read].ul_OldCounterLatchValue;			     			   /**************************/			   /* Increment the read FIFO */			   /***************************/			   devpriv->			   s_InterruptParameters.			   ui_Read = (devpriv->			   s_InterruptParameters.			   ui_Read + 1) % APCI1710_SAVE_INTERRUPT;          return insn->n;        } 	if (b_ModulNbr < 4)	   {	   /***********************/	   /* Test if tor counter */	   /***********************/	   if ((devpriv->s_BoardInfos.		dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_TOR_COUNTER)	      {	      /**********************************/	      /* Test the tor counter selection */	      /**********************************/	      if (b_TorCounter <= 1)		 {		 /***********************************/		 /* Test if tor counter initialised */		 /***********************************/					dw_Status=inl(devpriv->s_BoardInfos.			ui_Address + 8 + (16 * b_TorCounter) + (64 * b_ModulNbr));		 /*******************************/		 /* Test if counter initialised */		 /*******************************/		 if (dw_Status & 0x10)		    {		    /***************************/		    /* Test if counter enabled */		    /***************************/		    if (dw_Status & 0x1)		       {                  				switch(b_ReadType)				{				case APCI1710_TOR_GETPROGRESSSTATUS:                       /*******************/		       /* Read the status */		       /*******************/							dw_Status=inl(devpriv->s_BoardInfos.			       ui_Address + 4 + (16 * b_TorCounter) + (64 * b_ModulNbr));		       dw_Status = dw_Status & 0xF;		       /*****************/		       /* Test if start */		       /*****************/		       if (dw_Status & 1)			  {			  if (dw_Status & 2)			     {			     if (dw_Status & 4)				{				/************************/				/* Tor counter owerflow */				/************************/				*pb_TorCounterStatus = 3;				}			     else				{				/***********************/				/* Tor counter started */				/***********************/				*pb_TorCounterStatus = 2;				}			     }			  else			     {			     /***********************/			     /* Tor counter started */			     /***********************/			     *pb_TorCounterStatus = 1;			     }			  }		       else			  {			  /***************************/			  /* Tor counter not started */			  /***************************/			  *pb_TorCounterStatus = 0;			  }			 break;                case APCI1710_TOR_GETCOUNTERVALUE :						       /*****************************/		       /* Test the timout parameter */		       /*****************************/		       if ((ui_TimeOut >= 0) && (ui_TimeOut <= 65535UL))			  {			  for (;;)			     {			     /*******************/			     /* Read the status */			     /*******************/								dw_Status=inl(devpriv->s_BoardInfos.				    ui_Address + 4 + (16 * b_TorCounter) + (64 * b_ModulNbr));			     /********************/			     /* Test if overflow */			     /********************/			     if ((dw_Status & 4) == 4)				{				/******************/				/* Overflow occur */				/******************/				*pb_TorCounterStatus = 3;				/******************/				/* Read the value */				/******************/							*pul_TorCounterValue=inl(devpriv->s_BoardInfos.				       ui_Address + 0 + (16 * b_TorCounter) + (64 * b_ModulNbr));				break;				} // if ((dw_Status & 4) == 4)			     else				{				/*******************************/				/* Test if measurement stopped */				/*******************************/				if ((dw_Status & 2) == 2)				   {				   /***********************/				   /* A stop signal occur */				   /***********************/				   *pb_TorCounterStatus = 2;				   /******************/				   /* Read the value */				   /******************/				     *pul_TorCounterValue=inl(devpriv->s_BoardInfos.					  ui_Address + 0 + (16 * b_TorCounter) + (64 * b_ModulNbr));				   break;				   } // if ((dw_Status & 2) == 2)				else				   {				   /*******************************/				   /* Test if measurement started */				   /*******************************/				   if ((dw_Status & 1) == 1)				      {				      /************************/				      /* A start signal occur */				      /************************/				      *pb_TorCounterStatus = 1;				      } // if ((dw_Status & 1) == 1)				   else				      {				      /***************************/				      /* Measurement not started */				      /***************************/				      *pb_TorCounterStatus = 0;				      } // if ((dw_Status & 1) == 1)				   } // if ((dw_Status & 2) == 2)				} // if ((dw_Status & 8) == 8)			     if (dw_TimeOut == ui_TimeOut)				{				/*****************/				/* Timeout occur */				/*****************/				break;				}			     else				{				/*************************/				/* Increment the timeout */				/*************************/				dw_TimeOut = dw_TimeOut + 1;							mdelay(1000);				}			     } // for (;;)			  /*************************/			  /* Test if timeout occur */			  /*************************/			  if ((*pb_TorCounterStatus != 3) && (dw_TimeOut == ui_TimeOut) && (ui_TimeOut != 0))			     {			     /*****************/			     /* Timeout occur */			     /*****************/			     *pb_TorCounterStatus = 4;			     }			  }		       else			  {			  /******************************/			  /* Timeout parameter is wrong */			  /******************************/                     DPRINTK("Timeout parameter is wrong\n");			  i_ReturnValue = -7;			  }			   break;                        default:				 printk("Inputs wrong\n");			} // switch end		       } // if (dw_Status & 0x1)		    else		       {		       /***************************/		       /* Tor counter not enabled */		       /***************************/			   DPRINTK("Tor counter not enabled\n");		       i_ReturnValue = -6;		       } // if (dw_Status & 0x1)		    }		 else		    {		    /*******************************/		    /* Tor counter not initialised */		    /*******************************/			DPRINTK("Tor counter not initialised\n");		    i_ReturnValue = -5;		    }		 } // if (b_TorCounter <= 1)	      else		 {		 /**********************************/		 /* Tor counter selection is wrong */		 /**********************************/		  DPRINTK("Tor counter selection is wrong\n");		 i_ReturnValue = -4;		 } // if (b_TorCounter <= 1)	      }	   else	      {	      /******************************************/	      /* The module is not a tor counter module */	      /******************************************/	       DPRINTK("The module is not a tor counter module\n");  		      i_ReturnValue = -3;	      }	   }	else	   {	   /***********************/	   /* Module number error */	   /***********************/	    DPRINTK("Module number error\n");		   i_ReturnValue = -2;	   }       	return (i_ReturnValue);	}

⌨️ 快捷键说明

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