📄 apci1710_ttl.c
字号:
DPRINTK("Module number error\n"); i_ReturnValue = -2; } return (i_ReturnValue); }/*+----------------------------------------------------------------------------+| INPUT FUNCTIONS |+----------------------------------------------------------------------------+*//*+----------------------------------------------------------------------------+| Function Name : _INT_ i_APCI1710_ReadTTLIOChannelValue || (BYTE_ b_BoardHandle, || BYTE_ b_ModulNbr, || BYTE_ b_SelectedPort, || BYTE_ b_InputChannel, || PBYTE_ pb_ChannelStatus) |+----------------------------------------------------------------------------+| Task : Read the status from selected TTL digital input || (b_InputChannel) +----------------------------------------------------------------------------+| Task : Read the status from digital input port || (b_SelectedPort) from selected TTL module (b_ModulNbr) |+----------------------------------------------------------------------------+ +----------------------------------------------------------------------------+| Input Parameters : BYTE_ b_BoardHandle : Handle of board APCI-1710|| BYTE_ b_ModulNbr : Module number to || configure (0 to 7) || BYTE_ b_SelectedPort, : Selection from TTL I/O || port (0 to 2) || 0 : Port A selection || 1 : Port B selection || 2 : Port C selection || 3 : Port D selection || BYTE_ b_InputChannel : Selection from digital || input ( 0 to 2) APCI1710_TTL_READCHANNEL b_ModulNbr = CR_AREF(insn->chanspec); b_SelectedPort= CR_RANGE(insn->chanspec); b_InputChannel= CR_CHAN(insn->chanspec); b_ReadType = (BYTE) data[0]; APCI1710_TTL_READPORT| b_ModulNbr = CR_AREF(insn->chanspec); b_SelectedPort= CR_RANGE(insn->chanspec); b_ReadType = (BYTE) data[0];+----------------------------------------------------------------------------+| Output Parameters : data[0] PBYTE_ pb_ChannelStatus : Digital input channel || status || 0 : Channle is not active|| 1 : Channle is active |+----------------------------------------------------------------------------+| Return Value : 0: No error || -1: The handle parameter of the board is wrong || -2: The module parameter is wrong || -3: The module is not a TTL module || -4: The selected TTL input port is wrong || -5: The selected TTL digital input is wrong || -6: TTL I/O not initialised |+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnBitsReadTTLIO(comedi_device *dev,comedi_subdevice *s, comedi_insn *insn,lsampl_t *data) { INT i_ReturnValue = 0; DWORD dw_StatusReg; BYTE b_ModulNbr; BYTE b_SelectedPort; BYTE b_InputChannel; BYTE b_ReadType; PBYTE pb_ChannelStatus; PBYTE pb_PortValue; i_ReturnValue = insn->n; b_ReadType = (BYTE) data[0]; b_ModulNbr = CR_AREF(insn->chanspec); b_SelectedPort= CR_RANGE(insn->chanspec); b_InputChannel= CR_CHAN(insn->chanspec); /**************************/ /* Test the module number */ /**************************/ if (b_ModulNbr < 4) { /**************************/ /* Test if TTL I/O module */ /**************************/ if ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF0000UL) == APCI1710_TTL_IO) { switch(b_ReadType) { case APCI1710_TTL_READCHANNEL: pb_ChannelStatus = (PBYTE) &data[0]; /********************************/ /* Test the TTL I/O port number */ /********************************/ if (((b_SelectedPort <= 2) && ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130)) || ((b_SelectedPort <= 3) && ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) >= 0x3230))) { /******************************************/ /* Test the digital imnput channel number */ /******************************************/ if (((b_InputChannel <= 7) && (b_SelectedPort < 3)) || ((b_InputChannel <= 1) && (b_SelectedPort == 3))) { /******************************************/ /* Test if the TTL I/O module initialised */ /******************************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_TTLInit == 1) { /***********************************/ /* Test if TTL port used for input */ /***********************************/ if (((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130) || (((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) >= 0x3230) && (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [b_SelectedPort] == 0))) { /**************************/ /* Read all digital input */ /**************************/ dw_StatusReg = inl(devpriv->s_BoardInfos.ui_Address + (64 * b_ModulNbr)); *pb_ChannelStatus = (BYTE) ((dw_StatusReg >> (8 * b_SelectedPort)) >> b_InputChannel) & 1; } else { /*******************************/ /* Selected TTL I/O port error */ /*******************************/ DPRINTK("Selected TTL I/O port error\n"); i_ReturnValue = -4; } } else { /***************************/ /* TTL I/O not initialised */ /***************************/ DPRINTK("TTL I/O not initialised\n"); i_ReturnValue = -6; } } else { /********************************/ /* Selected digital input error */ /********************************/ DPRINTK("Selected digital input error\n"); i_ReturnValue = -5; } } else { /*******************************/ /* Selected TTL I/O port error */ /*******************************/ DPRINTK("Selected TTL I/O port error\n"); i_ReturnValue = -4; } break; case APCI1710_TTL_READPORT: pb_PortValue = (PBYTE) &data[0]; /********************************/ /* Test the TTL I/O port number */ /********************************/ if (((b_SelectedPort <= 2) && ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130)) || ((b_SelectedPort <= 3) && ((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) >= 0x3230))) { /******************************************/ /* Test if the TTL I/O module initialised */ /******************************************/ if (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_TTLInit == 1) { /***********************************/ /* Test if TTL port used for input */ /***********************************/ if (((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) == 0x3130) || (((devpriv->s_BoardInfos. dw_MolduleConfiguration [b_ModulNbr] & 0xFFFF) >= 0x3230) && (devpriv->s_ModuleInfo [b_ModulNbr]. s_TTLIOInfo. b_PortConfiguration [b_SelectedPort] == 0))) { /**************************/ /* Read all digital input */ /**************************/ dw_StatusReg=inl(devpriv->s_BoardInfos.ui_Address + (64 * b_ModulNbr)); *pb_PortValue = (BYTE) ((dw_StatusReg >> (8 * b_SelectedPort)) & 0xFF); } else { /*******************************/ /* Selected TTL I/O port error */ /*******************************/ DPRINTK("Selected TTL I/O port error\n"); i_ReturnValue = -4; } } else { /***************************/ /* TTL I/O not initialised */ /***************************/ DPRINTK("TTL I/O not initialised\n"); i_ReturnValue = -5; } } else { /*******************************/ /* Selected TTL I/O port error */ /*******************************/ DPRINTK("Selected TTL I/O port error\n"); i_ReturnValue = -4; } break; default: printk("Bad ReadType\n"); }//End Switch } else { /**********************************/ /* The module is not a TTL module */ /**********************************/ DPRINTK("The module is not a TTL module\n"); i_ReturnValue = -3; } } else { /***********************/ /* Module number error */ /***********************/ DPRINTK("Module number error\n"); i_ReturnValue = -2; } return (i_ReturnValue); }/*+----------------------------------------------------------------------------+| Function Name : INT i_APCI1710_InsnReadTTLIOAllPortValue(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) |+----------------------------------------------------------------------------+| Task : Read the status from all digital input ports || (port A, port B and port C) from selected TTL || module (b_ModulNbr) |+----------------------------------------------------------------------------+| Input Parameters : BYTE_ b_BoardHandle : Handle of board APCI-1710|| BYTE_ b_ModulNbr : Module number to || configure (0 to 3) |+----------------------------------------------------------------------------+| Output Parameters : PULONG_ pul_PortValue : Digital TTL inputs port || status |+----------------------------------------------------------------------------+| Return Value : 0: No error || -1: The handle parameter of the board is wrong || -2: The module parameter is wrong || -3: The module is not a TTL module || -4: TTL I/O not initialised |+----------------------------------------------------------------------------+*/INT i_APCI1710_InsnReadTTLIOAllPortValue(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { INT i_ReturnValue = 0; DWORD dw_StatusReg; BYTE b_ModulNbr; PULONG pul_PortValue; b_ModulNbr=(BYTE) CR_AREF(insn->chanspec); i_ReturnValue=insn->n; pul_PortValue=(PULONG) &data[0];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -