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 : API APCI1648 | Compiler : gcc | 33c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Module name : TTL.C | Version : 2.96 | 34c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-------------------------------+---------------------------------------+ 35c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Project manager: S. Weber | Date : 25/05/2005 | 36c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 37c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Description : APCI-16XX TTL I/O module | 38c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | 39c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | 40c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 41c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | UPDATES | 42c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 43c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | Date | Author | Description of updates | 44c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +----------+-----------+------------------------------------------------+ 45c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH |25.05.2005| S.Weber | Creation | 46c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH | | | | 47c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH +-----------------------------------------------------------------------+ 48c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 49c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 50c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 51c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 52c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Included files | 53c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 54c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 55c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 56c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH#include "hwdrv_apci16xx.h" 57c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 58c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 59c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 6074b894e56abcb2403894b268100773f4aabe1999Bill Pemberton| Function Name : int i_APCI16XX_InsnConfigInitTTLIO | 6171b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| (struct comedi_device *dev, | 6234c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, | 6390035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn, | 64790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data) | 65c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 66c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task APCI16XX_TTL_INIT (using defaults) : | 67c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Configure the TTL I/O operating mode from all ports | 68c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| You must calling this function be | 69c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| for you call any other function witch access of TTL. | 70c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| APCI16XX_TTL_INITDIRECTION(user inputs for direction) | 71c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 721783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| Input Parameters : b_InitType = (unsigned char) data[0]; | 731783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_Port0Mode = (unsigned char) data[1]; | 741783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_Port1Mode = (unsigned char) data[2]; | 751783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_Port2Mode = (unsigned char) data[3]; | 761783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_Port3Mode = (unsigned char) data[4]; | 77c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| ........ | 78c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 79c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : - | 80c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 81c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value :>0: No error | 82c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -1: Port 0 mode selection is wrong | 83c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -2: Port 1 mode selection is wrong | 84c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -3: Port 2 mode selection is wrong | 85c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -4: Port 3 mode selection is wrong | 86c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -X: Port X-1 mode selection is wrong | 87c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| .... | 88c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -100 : Config command error | 89c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -101 : Data size error | 90c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 91c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 92c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 93da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI16XX_InsnConfigInitTTLIO(struct comedi_device *dev, 94da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) 95c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 9674b894e56abcb2403894b268100773f4aabe1999Bill Pemberton int i_ReturnValue = insn->n; 971783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Command = 0; 981783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Cpt = 0; 991783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_NumberOfPort = 1007e0b3bf3abec4cd30c58e6311f913759a9e324d7Ian Abbott (unsigned char) (this_board->i_NbrTTLChannel / 8); 101c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 102c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 103c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the buffer size */ 104c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 105c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 106c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (insn->n >= 1) { 107c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 108c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Get the command */ 109c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* **************** */ 110c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1111783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton b_Command = (unsigned char) data[0]; 112c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 113c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 114c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the command */ 115c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 116c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 117c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == APCI16XX_TTL_INIT) || 118c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Command == APCI16XX_TTL_INITDIRECTION) || 119c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Command == APCI16XX_TTL_OUTPUTMEMORY)) { 120c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************************/ 121c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the initialisation buffer size */ 122c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************************/ 123c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 124c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == APCI16XX_TTL_INITDIRECTION) 1251783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton && ((unsigned char) (insn->n - 1) != b_NumberOfPort)) { 126c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 127c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Data size error */ 128c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 129c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 130c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nBuffer size error"); 131c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -101; 132c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 133c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 134c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == APCI16XX_TTL_OUTPUTMEMORY) 1351783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton && ((unsigned char) (insn->n) != 2)) { 136c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 137c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Data size error */ 138c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 139c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 140c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nBuffer size error"); 141c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -101; 142c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 143c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 144c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 145c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Config command error */ 146c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 147c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 148c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nCommand selection error"); 149c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -100; 150c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 151c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 152c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 153c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Data size error */ 154c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 155c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 156c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nBuffer size error"); 157c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -101; 158c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 159c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 160c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************************************************************/ 161c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if no error occur and APCI16XX_TTL_INITDIRECTION command selected */ 162c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************************************************************/ 163c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 164c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((i_ReturnValue >= 0) && (b_Command == APCI16XX_TTL_INITDIRECTION)) { 165c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH memset(devpriv->ul_TTLPortConfiguration, 0, 166c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH sizeof(devpriv->ul_TTLPortConfiguration)); 167c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 168c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*************************************/ 169c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the port direction selection */ 170c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*************************************/ 171c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 172c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (b_Cpt = 1; 173c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Cpt <= b_NumberOfPort) && (i_ReturnValue >= 0); 174c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_Cpt++) { 175c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************/ 176c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the direction */ 177c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************/ 178c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 179c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((data[b_Cpt] != 0) && (data[b_Cpt] != 0xFF)) { 180c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 181c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Port direction error */ 182c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 183c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 184c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nPort %d direction selection error", 18574b894e56abcb2403894b268100773f4aabe1999Bill Pemberton (int) b_Cpt); 18674b894e56abcb2403894b268100773f4aabe1999Bill Pemberton i_ReturnValue = -(int) b_Cpt; 187c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 188c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 189c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 190c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Save the configuration */ 191c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 192c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 193c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ul_TTLPortConfiguration[(b_Cpt - 1) / 4] = 194c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->ul_TTLPortConfiguration[(b_Cpt - 195c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1) / 4] | (data[b_Cpt] << (8 * ((b_Cpt - 196c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 1) % 4))); 197c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 198c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 199c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 200c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 201c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if no error occur */ 202c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 203c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 204c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (i_ReturnValue >= 0) { 205c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************************/ 206c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if TTL port initilaisation */ 207c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************************/ 208c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 209c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == APCI16XX_TTL_INIT) 210c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH || (b_Command == APCI16XX_TTL_INITDIRECTION)) { 211c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************************/ 212c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Set all port configuration */ 213c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************************/ 214c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 215c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (b_Cpt = 0; b_Cpt <= b_NumberOfPort; b_Cpt++) { 216c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Cpt % 4) == 0) { 217c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*************************/ 218c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Set the configuration */ 219c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*************************/ 220c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 221c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(devpriv-> 222c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ul_TTLPortConfiguration[b_Cpt / 223c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4], 224c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + 32 + b_Cpt); 225c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 226c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 227c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 228c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 229c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 230c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************************************/ 231c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if output memory initialisation command */ 232c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************************************/ 233c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 234c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_Command == APCI16XX_TTL_OUTPUTMEMORY) { 235c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (data[1]) { 236c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_OutputMemoryStatus = ADDIDATA_ENABLE; 237c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 238c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->b_OutputMemoryStatus = ADDIDATA_DISABLE; 239c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 240c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 241c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 242dae0dc30be7fa21b15a9d9534589286c6c3e68a3Bill Pemberton return i_ReturnValue; 243c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 244c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 245c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 246c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 247c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| INPUT FUNCTIONS | 248c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 249c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 250c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 251c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 252c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 25374b894e56abcb2403894b268100773f4aabe1999Bill Pemberton| Function Name : int i_APCI16XX_InsnBitsReadTTLIO | 25471b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| (struct comedi_device *dev, | 25534c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, | 25690035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn, | 257790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data) | 258c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 259c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Read the status from selected TTL digital input | 260c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| (b_InputChannel) | 261c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 262c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Read the status from digital input port | 263c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| (b_SelectedPort) | 264c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 265c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Input Parameters : | 266c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| APCI16XX_TTL_READCHANNEL | 267c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| b_SelectedPort= CR_RANGE(insn->chanspec); | 268c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| b_InputChannel= CR_CHAN(insn->chanspec); | 2691783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_ReadType = (unsigned char) data[0]; | 270c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 271c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| APCI16XX_TTL_READPORT | 272c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| b_SelectedPort= CR_RANGE(insn->chanspec); | 2731783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_ReadType = (unsigned char) data[0]; | 274c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 275c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : data[0] 0 : Channle is not active | 276c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| 1 : Channle is active | 277c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 278c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : >0 : No error | 279c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -100 : Config command error | 280c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -101 : Data size error | 281c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -102 : The selected TTL input port is wrong | 282c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -103 : The selected TTL digital input is wrong | 283c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 284c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 285c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 286da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI16XX_InsnBitsReadTTLIO(struct comedi_device *dev, 287da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) 288c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 28974b894e56abcb2403894b268100773f4aabe1999Bill Pemberton int i_ReturnValue = insn->n; 2901783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Command = 0; 2911783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_NumberOfPort = 2927e0b3bf3abec4cd30c58e6311f913759a9e324d7Ian Abbott (unsigned char) (this_board->i_NbrTTLChannel / 8); 2931783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_SelectedPort = CR_RANGE(insn->chanspec); 2941783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_InputChannel = CR_CHAN(insn->chanspec); 2951783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char *pb_Status; 296756e9d7ca6292ba21a6a63bf35ed1abc5250b98dBill Pemberton unsigned int dw_Status; 297c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 298c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 299c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the buffer size */ 300c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 301c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 302c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (insn->n >= 1) { 303c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 304c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Get the command */ 305c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* **************** */ 306c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3071783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton b_Command = (unsigned char) data[0]; 308c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 309c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 310c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the command */ 311c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 312c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 313c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == APCI16XX_TTL_READCHANNEL) 314c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH || (b_Command == APCI16XX_TTL_READPORT)) { 315c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 316c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the selected port */ 317c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 318c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 319c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_SelectedPort < b_NumberOfPort) { 320c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************/ 321c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if input port */ 322c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************/ 323c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 324c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (((devpriv->ul_TTLPortConfiguration 325c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH [b_SelectedPort / 326c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4] >> (8 * 327c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_SelectedPort 328c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH % 329c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4))) & 330c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 0xFF) == 0) { 331c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 332c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the channel number */ 333c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 334c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 335c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == 336c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH APCI16XX_TTL_READCHANNEL) 337c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH && (b_InputChannel > 7)) { 338c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************************************/ 339c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* The selected TTL digital input is wrong */ 340c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************************************/ 341c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 342c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nChannel selection error"); 343c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -103; 344c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 345c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 346c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************************/ 347c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* The selected TTL input port is wrong */ 348c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************************/ 349c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 350c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nPort selection error"); 351c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -102; 352c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 353c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 354c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************************/ 355c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* The selected TTL input port is wrong */ 356c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************************/ 357c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 358c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nPort selection error"); 359c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -102; 360c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 361c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 362c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 363c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Config command error */ 364c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 365c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 366c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nCommand selection error"); 367c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -100; 368c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 369c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 370c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 371c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Data size error */ 372c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 373c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 374c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nBuffer size error"); 375c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -101; 376c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 377c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 378c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 379c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if no error occur */ 380c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 381c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 382c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (i_ReturnValue >= 0) { 3839b9bcba0cafa2578cebbe0eca01eaafd49f3e43bBill Pemberton pb_Status = (unsigned char *) &data[0]; 384c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 385c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************************/ 386c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Get the digital inpu status */ 387c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************************/ 388c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 389c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = 390c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inl(devpriv->iobase + 8 + ((b_SelectedPort / 4) * 4)); 391c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = (dw_Status >> (8 * (b_SelectedPort % 4))) & 0xFF; 392c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 393c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************/ 394c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Save the port value */ 395c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************/ 396c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 3971783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton *pb_Status = (unsigned char) dw_Status; 398c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 399c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************************/ 400c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if read channel status command */ 401c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************************/ 402c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 403c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_Command == APCI16XX_TTL_READCHANNEL) { 404c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH *pb_Status = (*pb_Status >> b_InputChannel) & 1; 405c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 406c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 407c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 408dae0dc30be7fa21b15a9d9534589286c6c3e68a3Bill Pemberton return i_ReturnValue; 409c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 410c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 411c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 412c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 41374b894e56abcb2403894b268100773f4aabe1999Bill Pemberton| Function Name : int i_APCI16XX_InsnReadTTLIOAllPortValue | 41471b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| (struct comedi_device *dev, | 41534c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, | 41690035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn, | 417790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data) | 418c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 419c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Read the status from all digital input ports | 420c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 421c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Input Parameters : - | 422c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 423c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : data[0] : Port 0 to 3 data | 424c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[1] : Port 4 to 7 data | 425c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| .... | 426c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 427c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : 0: No error | 428c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -100 : Read command error | 429c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -101 : Data size error | 430c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 431c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 432c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 433da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI16XX_InsnReadTTLIOAllPortValue(struct comedi_device *dev, 434da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) 435c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 4361783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Command = (unsigned char) CR_AREF(insn->chanspec); 43774b894e56abcb2403894b268100773f4aabe1999Bill Pemberton int i_ReturnValue = insn->n; 4381783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Cpt = 0; 4391783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_NumberOfPort = 0; 440790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton unsigned int *pls_ReadData = data; 441c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 442c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 443c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the command */ 444c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 445c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 446c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == APCI16XX_TTL_READ_ALL_INPUTS) 447c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH || (b_Command == APCI16XX_TTL_READ_ALL_OUTPUTS)) { 448c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************************/ 449c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Get the number of 32-Bit ports */ 450c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************************/ 451c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 452c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_NumberOfPort = 4537e0b3bf3abec4cd30c58e6311f913759a9e324d7Ian Abbott (unsigned char) (this_board->i_NbrTTLChannel / 32); 454c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_NumberOfPort * 32) < 4557e0b3bf3abec4cd30c58e6311f913759a9e324d7Ian Abbott this_board->i_NbrTTLChannel) { 456c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_NumberOfPort = b_NumberOfPort + 1; 457c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 458c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 459c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 460c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the buffer size */ 461c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 462c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 463c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (insn->n >= b_NumberOfPort) { 464c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_Command == APCI16XX_TTL_READ_ALL_INPUTS) { 465c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 466c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Read all digital input */ 467c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 468c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 469c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (b_Cpt = 0; b_Cpt < b_NumberOfPort; b_Cpt++) { 470c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 471c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Read the 32-Bit port */ 472c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 473c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 474c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH pls_ReadData[b_Cpt] = 475c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inl(devpriv->iobase + 8 + 476c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Cpt * 4)); 477c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 478c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************************/ 479c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Mask all channels used als outputs */ 480c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************************/ 481c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 482c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH pls_ReadData[b_Cpt] = 483c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH pls_ReadData[b_Cpt] & 484c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (~devpriv-> 485c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ul_TTLPortConfiguration[b_Cpt]); 486c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 487c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 488c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************/ 489c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Read all digital outputs */ 490c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************/ 491c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 492c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH for (b_Cpt = 0; b_Cpt < b_NumberOfPort; b_Cpt++) { 493c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 494c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Read the 32-Bit port */ 495c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 496c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 497c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH pls_ReadData[b_Cpt] = 498c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inl(devpriv->iobase + 20 + 499c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Cpt * 4)); 500c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 501c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************************/ 502c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Mask all channels used als outputs */ 503c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************************/ 504c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 505c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH pls_ReadData[b_Cpt] = 506c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH pls_ReadData[b_Cpt] & devpriv-> 507c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ul_TTLPortConfiguration[b_Cpt]; 508c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 509c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 510c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 511c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 512c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Data size error */ 513c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 514c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 515c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nBuffer size error"); 516c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -101; 517c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 518c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 519c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*****************/ 520c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Command error */ 521c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*****************/ 522c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 523c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nCommand selection error"); 524c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -100; 525c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 526c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 527dae0dc30be7fa21b15a9d9534589286c6c3e68a3Bill Pemberton return i_ReturnValue; 528c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 529c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 530c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 531c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 532c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| OUTPUT FUNCTIONS | 533c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 534c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 535c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 536c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 537c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 53874b894e56abcb2403894b268100773f4aabe1999Bill Pemberton| Function Name : int i_APCI16XX_InsnBitsWriteTTLIO | 53971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| (struct comedi_device *dev, | 54034c43922e62708d45e9660eee4b4f1fb7b4bf2c7Bill Pemberton| struct comedi_subdevice *s, | 54190035c0886b256d75bced13b3b3cea5234aff136Bill Pemberton| struct comedi_insn *insn, | 542790c55415aa31f4c732729f94d2c3a54f7d3bfc2Bill Pemberton| unsigned int *data) | 543c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 544c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Set the state from selected TTL digital output | 545c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| (b_OutputChannel) | 546c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 547c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task : Set the state from digital output port | 548c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| (b_SelectedPort) | 549c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 550c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Input Parameters : | 551c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| APCI16XX_TTL_WRITECHANNEL_ON | APCI16XX_TTL_WRITECHANNEL_OFF | 552c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| b_SelectedPort = CR_RANGE(insn->chanspec); | 553c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| b_OutputChannel= CR_CHAN(insn->chanspec); | 5541783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_Command = (unsigned char) data[0]; | 555c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| | 556c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| APCI16XX_TTL_WRITEPORT_ON | APCI16XX_TTL_WRITEPORT_OFF | 557c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| b_SelectedPort = CR_RANGE(insn->chanspec); | 5581783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton| b_Command = (unsigned char) data[0]; | 559c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 560c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : data[0] : TTL output port 0 to 3 data | 561c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| data[1] : TTL output port 4 to 7 data | 562c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| .... | 563c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 564c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : >0 : No error | 565c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -100 : Command error | 566c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -101 : Data size error | 567c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -102 : The selected TTL output port is wrong | 568c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -103 : The selected TTL digital output is wrong | 569c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| -104 : Output memory disabled | 570c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 571c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 572c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 573da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI16XX_InsnBitsWriteTTLIO(struct comedi_device *dev, 574da91b2692e0939b307f9047192d2b9fe07793e7aBill Pemberton struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) 575c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 57674b894e56abcb2403894b268100773f4aabe1999Bill Pemberton int i_ReturnValue = insn->n; 5771783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_Command = 0; 5781783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_NumberOfPort = 5797e0b3bf3abec4cd30c58e6311f913759a9e324d7Ian Abbott (unsigned char) (this_board->i_NbrTTLChannel / 8); 5801783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_SelectedPort = CR_RANGE(insn->chanspec); 5811783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton unsigned char b_OutputChannel = CR_CHAN(insn->chanspec); 582756e9d7ca6292ba21a6a63bf35ed1abc5250b98dBill Pemberton unsigned int dw_Status = 0; 583c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 584c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 585c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the buffer size */ 586c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 587c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 588c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (insn->n >= 1) { 589c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 590c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Get the command */ 591c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* **************** */ 592c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 5931783fbfe023b7c2b912fbb020e01ff46985aa0abBill Pemberton b_Command = (unsigned char) data[0]; 594c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 595c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 596c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the command */ 597c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************/ 598c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 599c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if ((b_Command == APCI16XX_TTL_WRITECHANNEL_ON) || 600c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Command == APCI16XX_TTL_WRITEPORT_ON) || 601c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) || 602c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) { 603c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 604c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the selected port */ 605c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 606c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 607c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_SelectedPort < b_NumberOfPort) { 608c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************/ 609c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if output port */ 610c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***********************/ 611c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 612c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (((devpriv->ul_TTLPortConfiguration 613c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH [b_SelectedPort / 614c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4] >> (8 * 615c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_SelectedPort 616c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH % 617c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4))) & 618c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 0xFF) == 0xFF) { 619c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 620c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the channel number */ 621c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 622c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 623c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (((b_Command == APCI16XX_TTL_WRITECHANNEL_ON) || (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF)) && (b_OutputChannel > 7)) { 624c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************************************/ 625c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* The selected TTL digital output is wrong */ 626c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************************************/ 627c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 628c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nChannel selection error"); 629c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -103; 630c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 631c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 632c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (((b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) || (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) && (devpriv->b_OutputMemoryStatus == ADDIDATA_DISABLE)) { 633c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************************************/ 634c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* The selected TTL digital output is wrong */ 635c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************************************/ 636c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 637c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nOutput memory disabled"); 638c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -104; 639c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 640c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 641c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 642c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test the buffer size */ 643c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 644c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 645c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (((b_Command == APCI16XX_TTL_WRITEPORT_ON) || (b_Command == APCI16XX_TTL_WRITEPORT_OFF)) && (insn->n < 2)) { 646c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 647c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Data size error */ 648c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 649c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 650c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nBuffer size error"); 651c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -101; 652c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 653c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 654c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*****************************************/ 655c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* The selected TTL output port is wrong */ 656c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*****************************************/ 657c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 658c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nPort selection error %lX", 659c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (unsigned long)devpriv-> 660c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ul_TTLPortConfiguration[0]); 661c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -102; 662c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 663c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 664c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************************/ 665c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* The selected TTL output port is wrong */ 666c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************************/ 667c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 668c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nPort selection error %d %d", 669c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_SelectedPort, b_NumberOfPort); 670c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -102; 671c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 672c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 673c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 674c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Config command error */ 675c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /************************/ 676c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 677c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nCommand selection error"); 678c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -100; 679c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 680c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } else { 681c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 682c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Data size error */ 683c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************/ 684c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 685c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH printk("\nBuffer size error"); 686c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH i_ReturnValue = -101; 687c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 688c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 689c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 690c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if no error occur */ 691c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**************************/ 692c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 693c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (i_ReturnValue >= 0) { 694c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************************/ 695c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Get the digital output state */ 696c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /********************************/ 697c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 698c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = 699c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH inl(devpriv->iobase + 20 + ((b_SelectedPort / 4) * 4)); 700c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 701c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************************/ 702c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if output memory not used */ 703c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /**********************************/ 704c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 705c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (devpriv->b_OutputMemoryStatus == ADDIDATA_DISABLE) { 706c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*********************************/ 707c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Clear the selected port value */ 708c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*********************************/ 709c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 710c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = 711c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status & (0xFFFFFFFFUL - 712c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (0xFFUL << (8 * (b_SelectedPort % 4)))); 713c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 714c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 715c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************************/ 716c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if setting channel ON */ 717c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /******************************/ 718c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 719c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_Command == APCI16XX_TTL_WRITECHANNEL_ON) { 720c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = 721c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status | (1UL << ((8 * (b_SelectedPort % 722c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4)) + b_OutputChannel)); 723c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 724c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 725c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 726c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if setting port ON */ 727c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /***************************/ 728c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 729c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_Command == APCI16XX_TTL_WRITEPORT_ON) { 730c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = 731c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status | ((data[1] & 0xFF) << (8 * 732c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (b_SelectedPort % 4))); 733c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 734c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 735c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************************/ 736c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if setting channel OFF */ 737c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /*******************************/ 738c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 739c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_Command == APCI16XX_TTL_WRITECHANNEL_OFF) { 740c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = 741c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status & (0xFFFFFFFFUL - 742c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH (1UL << ((8 * (b_SelectedPort % 4)) + 743c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH b_OutputChannel))); 744c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 745c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 746c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************/ 747c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /* Test if setting port OFF */ 748c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH /****************************/ 749c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 750c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH if (b_Command == APCI16XX_TTL_WRITEPORT_OFF) { 751c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status = 752c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH dw_Status & (0xFFFFFFFFUL - 753c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH ((data[1] & 0xFF) << (8 * (b_SelectedPort % 754c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 4)))); 755c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 756c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 757c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH outl(dw_Status, 758c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH devpriv->iobase + 20 + ((b_SelectedPort / 4) * 4)); 759c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH } 760c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 761dae0dc30be7fa21b15a9d9534589286c6c3e68a3Bill Pemberton return i_ReturnValue; 762c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 763c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 764c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH/* 765c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 76671b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Function Name : int i_APCI2200_Reset(struct comedi_device *dev) | +----------------------------------------------------------------------------+ 767c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Task :resets all the registers | 768c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 76971b5f4f11971dea972832ad63a994c7e5b45db6bBill Pemberton| Input Parameters : struct comedi_device *dev | 770c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 771c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Output Parameters : - | 772c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 773c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH| Return Value : - | 774c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH+----------------------------------------------------------------------------+ 775c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH*/ 776c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH 777da91b2692e0939b307f9047192d2b9fe07793e7aBill Pembertonint i_APCI16XX_Reset(struct comedi_device *dev) 778c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH{ 779c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH return 0; 780c995fe9475e062bab6f5a45ed28cd2d3d955ef43ADDI-DATA GmbH} 781