?? hwdrv_apci2016.c
字號:
}//else if(data[1]==1) }//elseif(data[1]==0) }//if(data[3]==1); else { printk("\nSpecified functionality does not exist\n"); return -EINVAL; }//if else data[3]==1) }//if else data[3]==0) return insn->n;}/*+----------------------------------------------------------------------------+| Function Name : int i_APCI2016_BitsDigitalOutput || (comedi_device *dev,comedi_subdevice *s, || comedi_insn *insn,lsampl_t *data) |+----------------------------------------------------------------------------+| Task : Read value of the selected channel or port |+----------------------------------------------------------------------------+| Input Parameters : comedi_device *dev : Driver handle || UINT ui_NoOfChannels : No Of Channels To read || UINT *data : Data Pointer to read status |+----------------------------------------------------------------------------+| Output Parameters : -- |+----------------------------------------------------------------------------+| Return Value : TRUE : No error occur || : FALSE : Error occur. Return the error || |+----------------------------------------------------------------------------+*/int i_APCI2016_BitsDigitalOutput(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { UINT ui_Temp; UINT ui_NoOfChannel; ui_NoOfChannel=CR_CHAN(insn->chanspec); if ((ui_NoOfChannel<0) || (ui_NoOfChannel>15)) { comedi_error(dev,"Invalid Channel Numbers !!!, Channel Numbers must be between 0 and 15\n"); return -EINVAL; } // if ((ui_NoOfChannel<0) || (ui_NoOfChannel>15)) if ((data[0]!=0) && (data[0]!=1)) { comedi_error(dev,"Invalid Data[0] value !!!, Data[0] should be 0 or 1\n"); return -EINVAL; } // if ((data[0]!=0) && (data[0]!=1)) ui_Temp=data[0]; *data=inw(devpriv->iobase+APCI2016_DIGITAL_OP_RW); if (ui_Temp==0) { *data=(*data >> ui_NoOfChannel)&0x1; } // if (ui_Temp==0) else { if (ui_Temp==1) { switch (ui_NoOfChannel) { case 2: *data=(*data >>(2*data[1]))&3; break; case 4: *data=(*data >>(4*data[1]))&15; break; case 8: *data=(*data >>(8*data[1]))&255; break; case 15: break; default: comedi_error(dev," chan spec wrong"); return -EINVAL; // "sorry channel spec wrong " }//switch(ui_NoOfChannel) } // if (ui_Temp==1) else { printk("\nSpecified channel not supported \n"); } // else if (ui_Temp==1) } // if (ui_Temp==0) return insn->n;}/*+----------------------------------------------------------------------------+| Function Name : int i_APCI2016_ConfigWatchdog || (comedi_device *dev,comedi_subdevice *s, || comedi_insn *insn,lsampl_t *data) |+----------------------------------------------------------------------------+| Task : Configures The Watchdog |+----------------------------------------------------------------------------+| Input Parameters : comedi_device *dev : Driver handle || comedi_subdevice *s, :pointer to subdevice structure || comedi_insn *insn :pointer to insn structure || lsampl_t *data : Data Pointer to read status | +----------------------------------------------------------------------------+| Output Parameters : -- |+----------------------------------------------------------------------------+| Return Value : TRUE : No error occur || : FALSE : Error occur. Return the error || |+----------------------------------------------------------------------------+*/int i_APCI2016_ConfigWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data) { if (data[0]==0) { //Disable the watchdog outw(0x0,devpriv->i_IobaseAddon+ APCI2016_WATCHDOG_ENABLEDISABLE); //Loading the Reload value outw(data[1],devpriv->i_IobaseAddon+APCI2016_WATCHDOG_RELOAD_VALUE); data[1]=data[1]>>16; outw(data[1],devpriv->i_IobaseAddon+APCI2016_WATCHDOG_RELOAD_VALUE+2); } else { printk("\nThe input parameters are wrong\n"); } return insn->n;}/*+----------------------------------------------------------------------------+| Function Name : int i_APCI2016_StartStopWriteWatchdog || (comedi_device *dev,comedi_subdevice *s, || comedi_insn *insn,lsampl_t *data) |+----------------------------------------------------------------------------+| Task : Start / Stop The Watchdog |+----------------------------------------------------------------------------+| Input Parameters : comedi_device *dev : Driver handle || comedi_subdevice *s, :pointer to subdevice structure || comedi_insn *insn :pointer to insn structure || lsampl_t *data : Data Pointer to read status |+----------------------------------------------------------------------------+| Output Parameters : -- |+----------------------------------------------------------------------------+| Return Value : TRUE : No error occur || : FALSE : Error occur. Return the error || |+----------------------------------------------------------------------------+*/int i_APCI2016_StartStopWriteWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){ switch(data[0]) { case 0://stop the watchdog outw(0x0,devpriv->i_IobaseAddon+ APCI2016_WATCHDOG_ENABLEDISABLE);//disable the watchdog break; case 1://start the watchdog outw(0x0001,devpriv->i_IobaseAddon+ APCI2016_WATCHDOG_ENABLEDISABLE); break; case 2://Software trigger outw(0x0201,devpriv->i_IobaseAddon+ APCI2016_WATCHDOG_ENABLEDISABLE); break; default:printk("\nSpecified functionality does not exist\n"); return -EINVAL; }// switch(data[0]) return insn->n;} /*+----------------------------------------------------------------------------+| Function Name : int i_APCI2016_ReadWatchdog || (comedi_device *dev,comedi_subdevice *s, || comedi_insn *insn,lsampl_t *data) |+----------------------------------------------------------------------------+| Task : Read The Watchdog |+----------------------------------------------------------------------------+| Input Parameters : comedi_device *dev : Driver handle || comedi_subdevice *s, :pointer to subdevice structure | | comedi_insn *insn :pointer to insn structure || lsampl_t *data : Data Pointer to read status |+----------------------------------------------------------------------------+| Output Parameters : -- |+----------------------------------------------------------------------------+| Return Value : TRUE : No error occur || : FALSE : Error occur. Return the error || |+----------------------------------------------------------------------------+*/int i_APCI2016_ReadWatchdog(comedi_device *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data){ udelay(5); data[0]= inw(devpriv->i_IobaseAddon+APCI2016_WATCHDOG_STATUS)&0x1; return insn->n;}/*+----------------------------------------------------------------------------+| Function Name : int i_APCI2016_Reset(comedi_device *dev) | |+----------------------------------------------------------------------------+| Task :resets all the registers |+----------------------------------------------------------------------------+| Input Parameters : comedi_device *dev+----------------------------------------------------------------------------+| Output Parameters : -- |+----------------------------------------------------------------------------+| Return Value : || |+----------------------------------------------------------------------------+*/ INT i_APCI2016_Reset(comedi_device *dev) { outw(0x0,devpriv->iobase+APCI2016_DIGITAL_OP); // Resets the digital output channels outw(0x0,devpriv->i_IobaseAddon+ APCI2016_WATCHDOG_ENABLEDISABLE); outw(0x0,devpriv->i_IobaseAddon+APCI2016_WATCHDOG_RELOAD_VALUE); outw(0x0,devpriv->i_IobaseAddon+APCI2016_WATCHDOG_RELOAD_VALUE+2); return 0;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -