📄 apci1710_tor.c
字号:
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 + -