1c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/** 2c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH@verbatim 3c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHCopyright (C) 2004,2005 ADDI-DATA GmbH for the source code of this module. 5c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 6356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton ADDI-DATA GmbH 7356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton Dieselstrasse 3 8356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton D-77833 Ottersweier 9356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton Tel: +19(0)7223/9493-0 10356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton Fax: +49(0)7223/9493-92 1125417922694e60f04cd4dc8448ada9236f18c532Justin P. Mattock http://www.addi-data.com 12356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton info@addi-data.com 13c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 14c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHThis program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. 15c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 16c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. 17c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 18c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbHYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2039cfb97b0d89a99c8e50782b17e65114b89c2e59Adam BuchbinderYou should also find the complete GPL in the COPYING file accompanying this source code. 21c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 22c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH@endverbatim 23c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 24c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 25c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 26c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 27c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | (C) ADDI-DATA GmbH Dieselstraße 3 D-77833 Ottersweier | 28c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 29c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Tel : +49 (0) 7223/9493-0 | email : info@addi-data.com | 30c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Fax : +49 (0) 7223/9493-92 | Internet : http://www.addi-data.com | 31c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-------------------------------+---------------------------------------+ 32c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Project : APCI-1516 | Compiler : GCC | 33c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Module name : hwdrv_apci1516.c| Version : 2.96 | 34c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-------------------------------+---------------------------------------+ 35c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Project manager: Eric Stolz | Date : 02/12/2002 | 36c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-------------------------------+---------------------------------------+ 376cd5a9a35c3de4ed28b55212698fe69c328e4206Uwe Kleine-König | Description : Hardware Layer Access For APCI-1516 | 38c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 39c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | UPDATES | 40c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------+-----------+------------------------------------------------+ 41c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Date | Author | Description of updates | 42c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------+-----------+------------------------------------------------+ 43c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | | | 44c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | | | 45c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | | | 46c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------+-----------+------------------------------------------------+ 47c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 48c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 49c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 50c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 51c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Included files | 52c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 53c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 54c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#include "hwdrv_apci1516.h" 55c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 56c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 57c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 58c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function Name : int i_APCI1516_Read1DigitalInput | 5934c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| (struct comedi_device *dev,struct comedi_subdevice *s, | 6090035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn,unsigned int *data) | 61c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 62c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Return the status of the digital input | 63c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 6471b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev : Driver handle | 6534c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, :pointer to subdevice structure 66356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_insn *insn :pointer to insn structure | 67790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data : Data Pointer to read status | 68c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 69c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 70c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 71c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : TRUE : No error occur | 72c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| : FALSE : Error occur. Return the error | 73c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 74c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 75c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 76da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_Read1DigitalInput(struct comedi_device *dev, struct comedi_subdevice *s, 77da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 78c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 79117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_TmpValue = 0; 80117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Channel; 81c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Channel = CR_CHAN(insn->chanspec); 82dc8af06898c4326cee1739e2bc100bed2b601721Roel Kluin if (ui_Channel <= 7) { 83117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton ui_TmpValue = (unsigned int) inw(devpriv->iobase + APCI1516_DIGITAL_IP); 842696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton /* since only 1 channel reqd to bring it to last bit it is rotated */ 852696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton /* 8 +(chan - 1) times then ANDed with 1 for last bit. */ 86c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (ui_TmpValue >> ui_Channel) & 0x1; 872696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(ui_Channel >= 0 && ui_Channel <=7) */ 88c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 892696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton /* comedi_error(dev," \n chan spec wrong\n"); */ 902696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return -EINVAL; /* "sorry channel spec wrong " */ 912696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* else if(ui_Channel >= 0 && ui_Channel <=7) */ 92c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 93c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 94c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 95c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 96c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 97c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 98c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function Name : int i_APCI1516_ReadMoreDigitalInput | 9934c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| (struct comedi_device *dev,struct comedi_subdevice *s, | 10090035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn,unsigned int *data) | 101c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 102c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Return the status of the Requested digital inputs | 103c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 10471b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev : Driver handle | 10534c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, :pointer to subdevice structure 106356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_insn *insn :pointer to insn structure | 107790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data : Data Pointer to read status | 108c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 109c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 110c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 111c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : TRUE : No error occur | 112c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| : FALSE : Error occur. Return the error | 113c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 114c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 115c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 116c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 117da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_ReadMoreDigitalInput(struct comedi_device *dev, struct comedi_subdevice *s, 118da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 119c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 120c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 121117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_PortValue = data[0]; 122117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Mask = 0; 123117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_NoOfChannels; 124c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 125c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_NoOfChannels = CR_CHAN(insn->chanspec); 126c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 127117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton *data = (unsigned int) inw(devpriv->iobase + APCI1516_DIGITAL_IP); 128c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (ui_NoOfChannels) { 129c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 130c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Mask = 3; 131c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (*data >> (2 * ui_PortValue)) & ui_Mask; 132c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 133c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 4: 134c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Mask = 15; 135c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (*data >> (4 * ui_PortValue)) & ui_Mask; 136c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 137c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 7: 138c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 139c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 140c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 141c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nWrong parameters\n"); 1422696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return -EINVAL; /* "sorry channel spec wrong " */ 143c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 1442696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* switch(ui_NoOfChannels) */ 145c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 146c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 147c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 148c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 149c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 150c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 15171b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function Name : int i_APCI1516_ConfigDigitalOutput (struct comedi_device *dev, 152356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_subdevice *s struct comedi_insn *insn,unsigned int *data) | 153c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 154c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 155c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Configures The Digital Output Subdevice. | 156c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 15771b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev : Driver handle | 158790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data : Data Pointer contains | 159c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| configuration parameters as below | 16034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, :pointer to subdevice structure 161356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_insn *insn :pointer to insn structure | 162c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[0] :1:Memory on | 163c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| 0:Memory off | 164c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 165c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 166c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 167c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 168c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 169c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : TRUE : No error occur | 170c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| : FALSE : Error occur. Return the error | 171c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 172c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 173c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 174da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_ConfigDigitalOutput(struct comedi_device *dev, struct comedi_subdevice *s, 175da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 176c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 177c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_OutputMemoryStatus = data[0]; 178c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 179c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 180c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 181c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 182c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 183c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function Name : int i_APCI1516_WriteDigitalOutput | 18490035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| (struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn, 185356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| unsigned int *data) | 186c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 187c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Writes port value To the selected port | 188c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 18971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev : Driver handle | 19034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, :pointer to subdevice structure 191356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_insn *insn :pointer to insn structure | 192790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data : Data Pointer to read status | 193c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 194c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 195c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 196c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : TRUE : No error occur | 197c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| : FALSE : Error occur. Return the error | 198c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 199c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 200c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 201c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 202da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_WriteDigitalOutput(struct comedi_device *dev, struct comedi_subdevice *s, 203da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 204c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 205117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Temp, ui_Temp1; 2062696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton unsigned int ui_NoOfChannel = CR_CHAN(insn->chanspec); /* get the channel */ 207c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 208c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("EL311003 : @=%x\n", devpriv->iobase + APCI1516_DIGITAL_OP); 209c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 210c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_OutputMemoryStatus) { 211c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp = inw(devpriv->iobase + APCI1516_DIGITAL_OP); 212c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2132696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(devpriv->b_OutputMemoryStatus ) */ 214c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 215c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp = 0; 2162696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(devpriv->b_OutputMemoryStatus ) */ 217c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[3] == 0) { 218c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[1] == 0) { 219c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = (data[0] << ui_NoOfChannel) | ui_Temp; 220c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(data[0], devpriv->iobase + APCI1516_DIGITAL_OP); 221c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 222c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("EL311003 : d=%d @=%x\n", data[0], 223c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI1516_DIGITAL_OP); 224c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2252696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(data[1]==0) */ 226c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 227c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[1] == 1) { 228c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (ui_NoOfChannel) { 229c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 230c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 231c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = 232c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (data[0] << (2 * 233c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[2])) | ui_Temp; 234c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 235c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 236c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 4: 237c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = 238c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (data[0] << (4 * 239c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[2])) | ui_Temp; 240c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 241c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 242c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 7: 243c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = data[0] | ui_Temp; 244c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 245c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 246c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 247c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, " chan spec wrong"); 2482696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return -EINVAL; /* "sorry channel spec wrong " */ 249c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2502696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* switch(ui_NoOfChannels) */ 251c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 252c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(data[0], 253c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI1516_DIGITAL_OP); 254c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 255c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("EL311003 : d=%d @=%x\n", data[0], 256c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI1516_DIGITAL_OP); 2572696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(data[1]==1) */ 258c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 259c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nSpecified channel not supported\n"); 2602696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* else if(data[1]==1) */ 2612696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* elseif(data[1]==0) */ 2622696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(data[3]==0) */ 263c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 264c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[3] == 1) { 265c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[1] == 0) { 266c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = ~data[0] & 0x1; 267c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = 1; 268c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = ui_Temp1 << ui_NoOfChannel; 269c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp = ui_Temp | ui_Temp1; 270c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = (data[0] << ui_NoOfChannel) ^ 0xff; 271c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = data[0] & ui_Temp; 272c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(data[0], 273c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI1516_DIGITAL_OP); 274c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 275c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("EL311003 : d=%d @=%x\n", data[0], 276c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + APCI1516_DIGITAL_OP); 277c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 2782696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(data[1]==0) */ 279c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 280c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[1] == 1) { 281c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (ui_NoOfChannel) { 282c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 283c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 284c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = ~data[0] & 0x3; 285c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = 3; 286c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = 287c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 << 2 * data[2]; 288c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp = ui_Temp | ui_Temp1; 289c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = 290c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((data[0] << (2 * 291c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data 292c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH [2])) ^ 293c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 0xff) & ui_Temp; 294c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 295c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 296c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 4: 297c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = ~data[0] & 0xf; 298c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = 15; 299c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 = 300c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp1 << 4 * data[2]; 301c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp = ui_Temp | ui_Temp1; 302c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = 303c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((data[0] << (4 * 304c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data 305c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH [2])) ^ 306c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 0xff) & ui_Temp; 307c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 308c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 309c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 7: 310c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 311c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 312c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 313c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, 314c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH " chan spec wrong"); 3152696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return -EINVAL; /* "sorry channel spec wrong " */ 316c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3172696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* switch(ui_NoOfChannels) */ 318c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 319c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(data[0], 320c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + 321c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI1516_DIGITAL_OP); 322c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 323c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("EL311003 : d=%d @=%x\n", 324c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0], 325c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + 326c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI1516_DIGITAL_OP); 3272696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(data[1]==1) */ 328c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 329c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nSpecified channel not supported\n"); 3302696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* else if(data[1]==1) */ 3312696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* elseif(data[1]==0) */ 3322696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(data[3]==1); */ 333c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 334c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nSpecified functionality does not exist\n"); 335c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 3362696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if else data[3]==1) */ 3372696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if else data[3]==0) */ 338859171ca92f2865453b4b2e17bf679c67044a833Joe Perches return (insn->n); 339c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 340c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 341c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 342c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 343c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function Name : int i_APCI1516_ReadDigitalOutput | 34490035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| (struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn, 345356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| unsigned int *data) | 346c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 347c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Read value of the selected channel or port | 348c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 34971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev : Driver handle | 35034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, :pointer to subdevice structure 351356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_insn *insn :pointer to insn structure | 352790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data : Data Pointer to read status | 353c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 354c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 355c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 356c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : TRUE : No error occur | 357c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| : FALSE : Error occur. Return the error | 358c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 359c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 360c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 361c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 362da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_ReadDigitalOutput(struct comedi_device *dev, struct comedi_subdevice *s, 363da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 364c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 365c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 366117102b0f6e0a9ab3ea4fa9fd89b7eb4a8888fb9Bill Pemberton unsigned int ui_Temp; 3672696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton unsigned int ui_NoOfChannel = CR_CHAN(insn->chanspec); /* get the channel */ 368c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ui_Temp = data[0]; 369c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = inw(devpriv->iobase + APCI1516_DIGITAL_OP_RW); 370c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (ui_Temp == 0) { 371c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (*data >> ui_NoOfChannel) & 0x1; 3722696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(ui_Temp==0) */ 373c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 374c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (ui_Temp == 1) { 375c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (ui_NoOfChannel) { 376c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 377c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 2: 378c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (*data >> (2 * data[1])) & 3; 379c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 380c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 381c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 4: 382c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *data = (*data >> (4 * data[1])) & 15; 383c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 384c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 385c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH case 7: 386c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 387c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 388c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 389c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH comedi_error(dev, " chan spec wrong"); 3902696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton return -EINVAL; /* "sorry channel spec wrong " */ 391c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3922696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* switch(ui_NoOfChannels) */ 3932696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(ui_Temp==1) */ 394c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 395c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nSpecified channel not supported \n"); 3962696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* elseif(ui_Temp==1) */ 3972696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* elseif(ui_Temp==0) */ 398c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 399c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 400c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 401c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 402c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 40371b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function Name : int i_APCI1516_ConfigWatchdog(struct comedi_device *dev, 404356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_subdevice *s,struct comedi_insn *insn,unsigned int *data) | 405c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 406c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 407c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Configures The Watchdog | 408c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 40971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev : Driver handle | 41034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, :pointer to subdevice structure 411356cdbcb838ebcc234a43ec81621a39231fdcb7aBill Pemberton| struct comedi_insn *insn :pointer to insn structure | 412790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data : Data Pointer to read status | 413c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 414c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 415c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 416c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : TRUE : No error occur | 417c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| : FALSE : Error occur. Return the error | 418c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 419c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 420c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 421c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 422da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_ConfigWatchdog(struct comedi_device *dev, struct comedi_subdevice *s, 423da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 424c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 425c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[0] == 0) { 4262696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton /* Disable the watchdog */ 427c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0x0, 428c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 429c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI1516_WATCHDOG_ENABLEDISABLE); 4302696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton /* Loading the Reload value */ 431c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(data[1], 432c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 433c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI1516_WATCHDOG_RELOAD_VALUE); 434c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[1] = data[1] >> 16; 435c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(data[1], 436c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 437c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI1516_WATCHDOG_RELOAD_VALUE + 2); 4382696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* if(data[0]==0) */ 439c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH else { 440c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nThe input parameters are wrong\n"); 441c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 4422696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* elseif(data[0]==0) */ 443c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 444c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 445c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 446c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 447c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* 448c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------------------------------------------------------------------------+ 449c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Function Name : int i_APCI1516_StartStopWriteWatchdog | 45034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton | (struct comedi_device *dev,struct comedi_subdevice *s, 45190035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton struct comedi_insn *insn,unsigned int *data); | 452c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------------------------------------------------------------------------+ 453c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Task : Start / Stop The Watchdog | 454c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------------------------------------------------------------------------+ 45571b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton | Input Parameters : struct comedi_device *dev : Driver handle | 45634c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton | struct comedi_subdevice *s, :pointer to subdevice structure 45790035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton struct comedi_insn *insn :pointer to insn structure | 458790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton | unsigned int *data : Data Pointer to read status | 459c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------------------------------------------------------------------------+ 460c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Output Parameters : -- | 461c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------------------------------------------------------------------------+ 462c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Return Value : TRUE : No error occur | 463c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | : FALSE : Error occur. Return the error | 464c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | 465c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------------------------------------------------------------------------+ 466c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH */ 467c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 468da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_StartStopWriteWatchdog(struct comedi_device *dev, struct comedi_subdevice *s, 469da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 470c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 471c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH switch (data[0]) { 4722696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton case 0: /* stop the watchdog */ 4732696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton outw(0x0, devpriv->i_IobaseAddon + APCI1516_WATCHDOG_ENABLEDISABLE); /* disable the watchdog */ 474c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 4752696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton case 1: /* start the watchdog */ 476c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0x0001, 477c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 478c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI1516_WATCHDOG_ENABLEDISABLE); 479c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 4802696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton case 2: /* Software trigger */ 481c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0x0201, 482c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->i_IobaseAddon + 483c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI1516_WATCHDOG_ENABLEDISABLE); 484c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH break; 485c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH default: 486c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nSpecified functionality does not exist\n"); 487c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return -EINVAL; 4882696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton } /* switch(data[0]) */ 489c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 490c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 491c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 492c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 493c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 494c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Function Name : int i_APCI1516_ReadWatchdog | 49590035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| (struct comedi_device *dev,struct comedi_subdevice *s,struct comedi_insn *insn, 496790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton unsigned int *data); | 497c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 498c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Read The Watchdog | 499c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 50071b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev : Driver handle | 50134c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, :pointer to subdevice structure 50290035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton struct comedi_insn *insn :pointer to insn structure | 503790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data : Data Pointer to read status | 504c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 505c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 506c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 507c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : TRUE : No error occur | 508c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| : FALSE : Error occur. Return the error | 509c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 510c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 511c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 512c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 513da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_ReadWatchdog(struct comedi_device *dev, struct comedi_subdevice *s, 514da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_insn *insn, unsigned int *data) 515c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 516c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH data[0] = inw(devpriv->i_IobaseAddon + APCI1516_WATCHDOG_STATUS) & 0x1; 517c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return insn->n; 518c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 519c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 520c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 521c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 52271b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function Name : int i_APCI1516_Reset(struct comedi_device *dev) | | 523c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 524c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task :resets all the registers | 525c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 52671b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev 527c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 528c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : -- | 529c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 530c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : | 531c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 532c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 533c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 534c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 535da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI1516_Reset(struct comedi_device *dev) 536c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 5372696fb57e6af653dd8b4df41b16754579f42fc78Bill Pemberton outw(0x0, devpriv->iobase + APCI1516_DIGITAL_OP); /* RESETS THE DIGITAL OUTPUTS */ 538c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0x0, devpriv->i_IobaseAddon + APCI1516_WATCHDOG_ENABLEDISABLE); 539c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0x0, devpriv->i_IobaseAddon + APCI1516_WATCHDOG_RELOAD_VALUE); 540c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outw(0x0, devpriv->i_IobaseAddon + APCI1516_WATCHDOG_RELOAD_VALUE + 2); 541c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 542c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 543