RTXI 1.3
comedi/comedi/drivers/addi-data/APCI1710_Ttl.c
Go to the documentation of this file.
00001 
00024 /*
00025     
00026   +-----------------------------------------------------------------------+
00027   | (C) ADDI-DATA GmbH          Dieselstraße 3       D-77833 Ottersweier  |
00028   +-----------------------------------------------------------------------+
00029   | Tel : +49 (0) 7223/9493-0     | email    : info@addi-data.com         |
00030   | Fax : +49 (0) 7223/9493-92    | Internet : http://www.addi-data.com   |
00031   +-----------------------------------------------------------------------+
00032   | Project     : API APCI1710    | Compiler : gcc                        |
00033   | Module name : TTL.C           | Version  : 2.96                       |
00034   +-------------------------------+---------------------------------------+
00035   | Project manager: Eric Stolz   | Date     :  02/12/2002                |
00036   +-----------------------------------------------------------------------+
00037   | Description :   APCI-1710 TTL I/O module                              |
00038   |                                                                       |
00039   |                                                                       |
00040   +-----------------------------------------------------------------------+
00041   |                             UPDATES                                   |
00042   +-----------------------------------------------------------------------+
00043   |   Date   |   Author  |          Description of updates                |
00044   +----------+-----------+------------------------------------------------+
00045   | 13/05/98 | S. Weber  | TTL digital input / output implementation      |
00046   |----------|-----------|------------------------------------------------|
00047   | 08/05/00 | Guinot C  | - 0400/0228 All Function in RING 0             |
00048   |          |           |   available                                    |
00049   +-----------------------------------------------------------------------+
00050   |          |           |                                                |
00051   |          |           |                                                |
00052   +-----------------------------------------------------------------------+
00053 */
00054 
00055 /*
00056 +----------------------------------------------------------------------------+
00057 |                               Included files                               |
00058 +----------------------------------------------------------------------------+
00059 */
00060 
00061 #include "APCI1710_Ttl.h"
00062 
00063 /*
00064 +----------------------------------------------------------------------------+
00065 | Function Name     : _INT_ i_APCI1710_InitTTLIODirection                    |
00066 |                               (BYTE_    b_BoardHandle,                     |
00067 |                                BYTE_    b_ModulNbr,                        |
00068 |                                BYTE_    b_PortAMode,                       |
00069 |                                BYTE_    b_PortBMode,                       |
00070 |                                BYTE_    b_PortCMode,                       |
00071 |                                BYTE_    b_PortDMode)                       |
00072 +----------------------------------------------------------------------------+
00073 | Task           APCI1710_TTL_INIT (using defaults)   : Configure the TTL I/O operating mode from selected     |
00074 |                     module  (b_ModulNbr). You must calling this function be|
00075 |                     for you call any other function witch access of TTL.   |
00076                                  APCI1710_TTL_INITDIRECTION(user inputs for direction) 
00077 
00078 +----------------------------------------------------------------------------+
00079 | Input Parameters  : BYTE_ b_BoardHandle         : Handle of board APCI-1710|
00080 |                     BYTE_ b_ModulNbr            : Module number to         |
00081 |                                                   configure (0 to 3)  
00082                 b_ModulNbr = (BYTE) CR_AREF(insn->chanspec);
00083                 b_InitType = (BYTE) data[0];
00084                 b_PortAMode     = (BYTE) data[1];
00085                 b_PortBMode = (BYTE) data[2];
00086                 b_PortCMode = (BYTE) data[3];
00087                 b_PortDMode     = (BYTE) data[4];|
00088 +----------------------------------------------------------------------------+
00089 | Output Parameters : -                                                      |
00090 +----------------------------------------------------------------------------+
00091 | Return Value      : 0: No error                                            |
00092 |                    -1: The handle parameter of the board is wrong          |
00093 |                    -2: The module parameter is wrong                       |
00094 |                    -3: The module is not a TTL module                      |
00095 |                    -4: Function not available for this version             |
00096 |                    -5: Port A mode selection is wrong                      |
00097 |                    -6: Port B mode selection is wrong                      |
00098 |                    -7: Port C mode selection is wrong                      |
00099 |                    -8: Port D mode selection is wrong                      |
00100 +----------------------------------------------------------------------------+
00101 */
00102 
00103 INT i_APCI1710_InsnConfigInitTTLIO(comedi_device * dev, comedi_subdevice * s,
00104         comedi_insn * insn, lsampl_t * data)
00105 {
00106         INT i_ReturnValue = 0;
00107         BYTE b_ModulNbr;
00108         BYTE b_InitType;
00109         BYTE b_PortAMode;
00110         BYTE b_PortBMode;
00111         BYTE b_PortCMode;
00112         BYTE b_PortDMode;
00113 
00114         b_ModulNbr = (BYTE) CR_AREF(insn->chanspec);
00115         b_InitType = (BYTE) data[0];
00116         i_ReturnValue = insn->n;
00117 
00118         /**************************/
00119         /* Test the module number */
00120         /**************************/
00121 
00122         if (b_ModulNbr < 4) {
00123            /**************************/
00124                 /* Test if TTL I/O module */
00125            /**************************/
00126 
00127                 if ((devpriv->s_BoardInfos.
00128                                 dw_MolduleConfiguration[b_ModulNbr] &
00129                                 0xFFFF0000UL) == APCI1710_TTL_IO) {
00130                         switch (b_InitType) {
00131                         case APCI1710_TTL_INIT:
00132 
00133                                 devpriv->s_ModuleInfo[b_ModulNbr].
00134                                         s_TTLIOInfo.b_TTLInit = 1;
00135 
00136               /***************************/
00137                                 /* Set TTL port A to input */
00138               /***************************/
00139 
00140                                 devpriv->s_ModuleInfo[b_ModulNbr].
00141                                         s_TTLIOInfo.b_PortConfiguration[0] = 0;
00142 
00143               /***************************/
00144                                 /* Set TTL port B to input */
00145               /***************************/
00146 
00147                                 devpriv->s_ModuleInfo[b_ModulNbr].
00148                                         s_TTLIOInfo.b_PortConfiguration[1] = 0;
00149 
00150               /***************************/
00151                                 /* Set TTL port C to input */
00152               /***************************/
00153 
00154                                 devpriv->s_ModuleInfo[b_ModulNbr].
00155                                         s_TTLIOInfo.b_PortConfiguration[2] = 0;
00156 
00157               /****************************/
00158                                 /* Set TTL port D to output */
00159               /****************************/
00160 
00161                                 devpriv->s_ModuleInfo[b_ModulNbr].
00162                                         s_TTLIOInfo.b_PortConfiguration[3] = 1;
00163 
00164               /*************************/
00165                                 /* Set the configuration */
00166               /*************************/
00167 
00168                                 outl(0x8,
00169                                         devpriv->s_BoardInfos.ui_Address + 20 +
00170                                         (64 * b_ModulNbr));
00171                                 break;
00172 
00173                         case APCI1710_TTL_INITDIRECTION:
00174 
00175                                 b_PortAMode = (BYTE) data[1];
00176                                 b_PortBMode = (BYTE) data[2];
00177                                 b_PortCMode = (BYTE) data[3];
00178                                 b_PortDMode = (BYTE) data[4];
00179 
00180               /********************/
00181                                 /* Test the version */
00182               /********************/
00183 
00184                                 if ((devpriv->s_BoardInfos.
00185                                                 dw_MolduleConfiguration
00186                                                 [b_ModulNbr] & 0xFFFF) >=
00187                                         0x3230) {
00188                  /************************/
00189                                         /* Test the port A mode */
00190                  /************************/
00191 
00192                                         if ((b_PortAMode == 0)
00193                                                 || (b_PortAMode == 1)) {
00194                     /************************/
00195                                                 /* Test the port B mode */
00196                     /************************/
00197 
00198                                                 if ((b_PortBMode == 0)
00199                                                         || (b_PortBMode == 1)) {
00200                        /************************/
00201                                                         /* Test the port C mode */
00202                        /************************/
00203 
00204                                                         if ((b_PortCMode == 0)
00205                                                                 || (b_PortCMode
00206                                                                         == 1)) {
00207                           /************************/
00208                                                                 /* Test the port D mode */
00209                           /************************/
00210 
00211                                                                 if ((b_PortDMode == 0) || (b_PortDMode == 1)) {
00212                                                                         devpriv->
00213                                                                                 s_ModuleInfo
00214                                                                                 [b_ModulNbr].
00215                                                                                 s_TTLIOInfo.
00216                                                                                 b_TTLInit
00217                                                                                 =
00218                                                                                 1;
00219 
00220                              /***********************/
00221                                                                         /* Set TTL port A mode */
00222                              /***********************/
00223 
00224                                                                         devpriv->
00225                                                                                 s_ModuleInfo
00226                                                                                 [b_ModulNbr].
00227                                                                                 s_TTLIOInfo.
00228                                                                                 b_PortConfiguration
00229                                                                                 [0]
00230                                                                                 =
00231                                                                                 b_PortAMode;
00232 
00233                              /***********************/
00234                                                                         /* Set TTL port B mode */
00235                              /***********************/
00236 
00237                                                                         devpriv->
00238                                                                                 s_ModuleInfo
00239                                                                                 [b_ModulNbr].
00240                                                                                 s_TTLIOInfo.
00241                                                                                 b_PortConfiguration
00242                                                                                 [1]
00243                                                                                 =
00244                                                                                 b_PortBMode;
00245 
00246                              /***********************/
00247                                                                         /* Set TTL port C mode */
00248                              /***********************/
00249 
00250                                                                         devpriv->
00251                                                                                 s_ModuleInfo
00252                                                                                 [b_ModulNbr].
00253                                                                                 s_TTLIOInfo.
00254                                                                                 b_PortConfiguration
00255                                                                                 [2]
00256                                                                                 =
00257                                                                                 b_PortCMode;
00258 
00259                              /***********************/
00260                                                                         /* Set TTL port D mode */
00261                              /***********************/
00262 
00263                                                                         devpriv->
00264                                                                                 s_ModuleInfo
00265                                                                                 [b_ModulNbr].
00266                                                                                 s_TTLIOInfo.
00267                                                                                 b_PortConfiguration
00268                                                                                 [3]
00269                                                                                 =
00270                                                                                 b_PortDMode;
00271 
00272                              /*************************/
00273                                                                         /* Set the configuration */
00274                              /*************************/
00275 
00276                                                                         outl((b_PortAMode << 0) | (b_PortBMode << 1) | (b_PortCMode << 2) | (b_PortDMode << 3), devpriv->s_BoardInfos.ui_Address + 20 + (64 * b_ModulNbr));
00277                                                                 } else {
00278                              /**********************************/
00279                                                                         /* Port D mode selection is wrong */
00280                              /**********************************/
00281 
00282                                                                         DPRINTK("Port D mode selection is wrong\n");
00283                                                                         i_ReturnValue
00284                                                                                 =
00285                                                                                 -8;
00286                                                                 }
00287                                                         } else {
00288                           /**********************************/
00289                                                                 /* Port C mode selection is wrong */
00290                           /**********************************/
00291 
00292                                                                 DPRINTK("Port C mode selection is wrong\n");
00293                                                                 i_ReturnValue =
00294                                                                         -7;
00295                                                         }
00296                                                 } else {
00297                        /**********************************/
00298                                                         /* Port B mode selection is wrong */
00299                        /**********************************/
00300 
00301                                                         DPRINTK("Port B mode selection is wrong\n");
00302                                                         i_ReturnValue = -6;
00303                                                 }
00304                                         } else {
00305                     /**********************************/
00306                                                 /* Port A mode selection is wrong */
00307                     /**********************************/
00308 
00309                                                 DPRINTK("Port A mode selection is wrong\n");
00310                                                 i_ReturnValue = -5;
00311                                         }
00312                                 } else {
00313                  /*******************************************/
00314                                         /* Function not available for this version */
00315                  /*******************************************/
00316 
00317                                         DPRINTK("Function not available for this version\n");
00318                                         i_ReturnValue = -4;
00319                                 }
00320                                 break;
00321 
00322                                 DPRINTK("\n");
00323                         default:
00324                                 printk("Bad Config Type\n");
00325                         }       // switch end
00326                 } else {
00327               /**********************************/
00328                         /* The module is not a TTL module */
00329               /**********************************/
00330 
00331                         DPRINTK("The module is not a TTL module\n");
00332                         i_ReturnValue = -3;
00333                 }
00334         } else {
00335            /***********************/
00336                 /* Module number error */
00337            /***********************/
00338 
00339                 DPRINTK("Module number error\n");
00340                 i_ReturnValue = -2;
00341         }
00342 
00343         return (i_ReturnValue);
00344 }
00345 
00346 /*
00347 +----------------------------------------------------------------------------+
00348 |                            INPUT FUNCTIONS                                 |
00349 +----------------------------------------------------------------------------+
00350 */
00351 
00352 /*
00353 +----------------------------------------------------------------------------+
00354 | Function Name     : _INT_   i_APCI1710_ReadTTLIOChannelValue               |
00355 |                                       (BYTE_     b_BoardHandle,            |
00356 |                                        BYTE_     b_ModulNbr,               |
00357 |                                        BYTE_     b_SelectedPort,           |
00358 |                                        BYTE_     b_InputChannel,           |
00359 |                                        PBYTE_   pb_ChannelStatus)          |
00360 +----------------------------------------------------------------------------+
00361 | Task              : Read the status from selected TTL digital input        |
00362 |                     (b_InputChannel) 
00363 +----------------------------------------------------------------------------+
00364 | Task              : Read the status from digital input port                |
00365 |                     (b_SelectedPort) from selected TTL module (b_ModulNbr) |
00366 +----------------------------------------------------------------------------+ 
00367 
00368 +----------------------------------------------------------------------------+
00369 | Input Parameters  : BYTE_ b_BoardHandle         : Handle of board APCI-1710|
00370 |                     BYTE_ b_ModulNbr            : Module number to         |
00371 |                                                   configure (0 to 7)       |
00372 |                     BYTE_ b_SelectedPort,       : Selection from TTL I/O   |
00373 |                                                   port (0 to 2)            |
00374 |                                                      0 : Port A selection  |
00375 |                                                      1 : Port B selection  |
00376 |                                                      2 : Port C selection  |
00377 |                                                      3 : Port D selection  |
00378 |                     BYTE_ b_InputChannel        : Selection from digital   |
00379 |                                                   input ( 0 to 2)        
00380 APCI1710_TTL_READCHANNEL  
00381         b_ModulNbr        = CR_AREF(insn->chanspec);
00382         b_SelectedPort= CR_RANGE(insn->chanspec);
00383         b_InputChannel= CR_CHAN(insn->chanspec);
00384         b_ReadType        = (BYTE) data[0];
00385 
00386  APCI1710_TTL_READPORT|
00387         b_ModulNbr        = CR_AREF(insn->chanspec);
00388         b_SelectedPort= CR_RANGE(insn->chanspec);
00389         b_ReadType        = (BYTE) data[0];
00390 
00391 +----------------------------------------------------------------------------+
00392 | Output Parameters : data[0]
00393 
00394         PBYTE_  pb_ChannelStatus    : Digital input channel    |
00395 |                                                   status                   |
00396 |                                                   0 : Channle is not active|
00397 |                                                   1 : Channle is active    |
00398 +----------------------------------------------------------------------------+
00399 | Return Value      : 0: No error                                            |
00400 |                    -1: The handle parameter of the board is wrong          |
00401 |                    -2: The module parameter is wrong                       |
00402 |                    -3: The module is not a TTL module                      |
00403 |                    -4: The selected TTL input port is wrong                |
00404 |                    -5: The selected TTL digital input is wrong             |
00405 |                    -6: TTL I/O not initialised                             |
00406 +----------------------------------------------------------------------------+
00407 */
00408 
00409 INT i_APCI1710_InsnBitsReadTTLIO(comedi_device * dev, comedi_subdevice * s,
00410         comedi_insn * insn, lsampl_t * data)
00411 {
00412         INT i_ReturnValue = 0;
00413         DWORD dw_StatusReg;
00414         BYTE b_ModulNbr;
00415         BYTE b_SelectedPort;
00416         BYTE b_InputChannel;
00417         BYTE b_ReadType;
00418         PBYTE pb_ChannelStatus;
00419         PBYTE pb_PortValue;
00420 
00421         i_ReturnValue = insn->n;
00422         b_ReadType = (BYTE) data[0];
00423         b_ModulNbr = CR_AREF(insn->chanspec);
00424         b_SelectedPort = CR_RANGE(insn->chanspec);
00425         b_InputChannel = CR_CHAN(insn->chanspec);
00426 
00427         /**************************/
00428         /* Test the module number */
00429         /**************************/
00430 
00431         if (b_ModulNbr < 4) {
00432            /**************************/
00433                 /* Test if TTL I/O module */
00434            /**************************/
00435 
00436                 if ((devpriv->s_BoardInfos.
00437                                 dw_MolduleConfiguration[b_ModulNbr] &
00438                                 0xFFFF0000UL) == APCI1710_TTL_IO) {
00439                         switch (b_ReadType) {
00440 
00441                         case APCI1710_TTL_READCHANNEL:
00442                                 pb_ChannelStatus = (PBYTE) & data[0];
00443               /********************************/
00444                                 /* Test the TTL I/O port number */
00445               /********************************/
00446 
00447                                 if (((b_SelectedPort <= 2)
00448                                                 && ((devpriv->s_BoardInfos.
00449                                                                 dw_MolduleConfiguration
00450                                                                 [b_ModulNbr] &
00451                                                                 0xFFFF) ==
00452                                                         0x3130))
00453                                         || ((b_SelectedPort <= 3)
00454                                                 && ((devpriv->s_BoardInfos.
00455                                                                 dw_MolduleConfiguration
00456                                                                 [b_ModulNbr] &
00457                                                                 0xFFFF) >=
00458                                                         0x3230))) {
00459                  /******************************************/
00460                                         /* Test the digital imnput channel number */
00461                  /******************************************/
00462 
00463                                         if (((b_InputChannel <= 7)
00464                                                         && (b_SelectedPort < 3))
00465                                                 || ((b_InputChannel <= 1)
00466                                                         && (b_SelectedPort ==
00467                                                                 3))) {
00468                     /******************************************/
00469                                                 /* Test if the TTL I/O module initialised */
00470                     /******************************************/
00471 
00472                                                 if (devpriv->
00473                                                         s_ModuleInfo
00474                                                         [b_ModulNbr].
00475                                                         s_TTLIOInfo.b_TTLInit ==
00476                                                         1) {
00477                        /***********************************/
00478                                                         /* Test if TTL port used for input */
00479                        /***********************************/
00480 
00481                                                         if (((devpriv->s_BoardInfos.dw_MolduleConfiguration[b_ModulNbr] & 0xFFFF) == 0x3130) || (((devpriv->s_BoardInfos.dw_MolduleConfiguration[b_ModulNbr] & 0xFFFF) >= 0x3230) && (devpriv->s_ModuleInfo[b_ModulNbr].s_TTLIOInfo.b_PortConfiguration[b_SelectedPort] == 0))) {
00482                           /**************************/
00483                                                                 /* Read all digital input */
00484                           /**************************/
00485 
00486                                                                 dw_StatusReg =
00487                                                                         inl
00488                                                                         (devpriv->
00489                                                                         s_BoardInfos.
00490                                                                         ui_Address
00491                                                                         +
00492                                                                         (64 * b_ModulNbr));
00493 
00494                                                                 *pb_ChannelStatus
00495                                                                         =
00496                                                                         (BYTE) (
00497                                                                         (dw_StatusReg
00498                                                                                 >>
00499                                                                                 (8 * b_SelectedPort)) >> b_InputChannel) & 1;
00500                                                         } else {
00501                           /*******************************/
00502                                                                 /* Selected TTL I/O port error */
00503                           /*******************************/
00504 
00505                                                                 DPRINTK("Selected TTL I/O port error\n");
00506                                                                 i_ReturnValue =
00507                                                                         -4;
00508                                                         }
00509                                                 } else {
00510                        /***************************/
00511                                                         /* TTL I/O not initialised */
00512                        /***************************/
00513 
00514                                                         DPRINTK("TTL I/O not initialised\n");
00515                                                         i_ReturnValue = -6;
00516                                                 }
00517                                         } else {
00518                     /********************************/
00519                                                 /* Selected digital input error */
00520                     /********************************/
00521 
00522                                                 DPRINTK("Selected digital input error\n");
00523                                                 i_ReturnValue = -5;
00524                                         }
00525                                 } else {
00526                  /*******************************/
00527                                         /* Selected TTL I/O port error */
00528                  /*******************************/
00529 
00530                                         DPRINTK("Selected TTL I/O port error\n");
00531                                         i_ReturnValue = -4;
00532                                 }
00533                                 break;
00534 
00535                         case APCI1710_TTL_READPORT:
00536                                 pb_PortValue = (PBYTE) & data[0];
00537                           /********************************/
00538                                 /* Test the TTL I/O port number */
00539                           /********************************/
00540 
00541                                 if (((b_SelectedPort <= 2)
00542                                                 && ((devpriv->s_BoardInfos.
00543                                                                 dw_MolduleConfiguration
00544                                                                 [b_ModulNbr] &
00545                                                                 0xFFFF) ==
00546                                                         0x3130))
00547                                         || ((b_SelectedPort <= 3)
00548                                                 && ((devpriv->s_BoardInfos.
00549                                                                 dw_MolduleConfiguration
00550                                                                 [b_ModulNbr] &
00551                                                                 0xFFFF) >=
00552                                                         0x3230))) {
00553                  /******************************************/
00554                                         /* Test if the TTL I/O module initialised */
00555                  /******************************************/
00556 
00557                                         if (devpriv->s_ModuleInfo[b_ModulNbr].
00558                                                 s_TTLIOInfo.b_TTLInit == 1) {
00559                     /***********************************/
00560                                                 /* Test if TTL port used for input */
00561                     /***********************************/
00562 
00563                                                 if (((devpriv->s_BoardInfos.
00564                                                                         dw_MolduleConfiguration
00565                                                                         [b_ModulNbr]
00566                                                                         &
00567                                                                         0xFFFF)
00568                                                                 == 0x3130)
00569                                                         || (((devpriv->s_BoardInfos.dw_MolduleConfiguration[b_ModulNbr] & 0xFFFF) >= 0x3230) && (devpriv->s_ModuleInfo[b_ModulNbr].s_TTLIOInfo.b_PortConfiguration[b_SelectedPort] == 0))) {
00570                        /**************************/
00571                                                         /* Read all digital input */
00572                        /**************************/
00573 
00574                                                         dw_StatusReg =
00575                                                                 inl(devpriv->
00576                                                                 s_BoardInfos.
00577                                                                 ui_Address +
00578                                                                 (64 * b_ModulNbr));
00579 
00580                                                         *pb_PortValue =
00581                                                                 (BYTE) (
00582                                                                 (dw_StatusReg >>
00583                                                                         (8 * b_SelectedPort)) & 0xFF);
00584                                                 } else {
00585                        /*******************************/
00586                                                         /* Selected TTL I/O port error */
00587                        /*******************************/
00588 
00589                                                         DPRINTK("Selected TTL I/O port error\n");
00590                                                         i_ReturnValue = -4;
00591                                                 }
00592                                         } else {
00593                     /***************************/
00594                                                 /* TTL I/O not initialised */
00595                     /***************************/
00596 
00597                                                 DPRINTK("TTL I/O not initialised\n");
00598                                                 i_ReturnValue = -5;
00599                                         }
00600                                 } else {
00601                  /*******************************/
00602                                         /* Selected TTL I/O port error */
00603                  /*******************************/
00604 
00605                                         DPRINTK("Selected TTL I/O port error\n");
00606                                         i_ReturnValue = -4;
00607                                 }
00608                                 break;
00609 
00610                         default:
00611                                 printk("Bad ReadType\n");
00612 
00613                         }       //End Switch
00614                 } else {
00615               /**********************************/
00616                         /* The module is not a TTL module */
00617               /**********************************/
00618 
00619                         DPRINTK("The module is not a TTL module\n");
00620                         i_ReturnValue = -3;
00621                 }
00622         } else {
00623            /***********************/
00624                 /* Module number error */
00625            /***********************/
00626 
00627                 DPRINTK("Module number error\n");
00628                 i_ReturnValue = -2;
00629         }
00630 
00631         return (i_ReturnValue);
00632 }
00633 
00634 /*
00635 +----------------------------------------------------------------------------+
00636 | Function Name     : INT i_APCI1710_InsnReadTTLIOAllPortValue(comedi_device 
00637 *dev,comedi_subdevice *s,comedi_insn *insn,lsampl_t *data)              |
00638 +----------------------------------------------------------------------------+
00639 | Task              : Read the status from all digital input ports           |
00640 |                     (port A, port B and port C) from selected TTL          |
00641 |                     module (b_ModulNbr)                                    |
00642 +----------------------------------------------------------------------------+
00643 | Input Parameters  : BYTE_ b_BoardHandle         : Handle of board APCI-1710|
00644 |                     BYTE_ b_ModulNbr            : Module number to         |
00645 |                                                   configure (0 to 3)       |
00646 +----------------------------------------------------------------------------+
00647 | Output Parameters : PULONG_  pul_PortValue      : Digital TTL inputs port  |
00648 |                                                   status                   |
00649 +----------------------------------------------------------------------------+
00650 | Return Value      : 0: No error                                            |
00651 |                    -1: The handle parameter of the board is wrong          |
00652 |                    -2: The module parameter is wrong                       |
00653 |                    -3: The module is not a TTL module                      |
00654 |                    -4: TTL I/O not initialised                             |
00655 +----------------------------------------------------------------------------+
00656 */
00657 
00658 INT i_APCI1710_InsnReadTTLIOAllPortValue(comedi_device * dev,
00659         comedi_subdevice * s, comedi_insn * insn, lsampl_t * data)
00660 {
00661         INT i_ReturnValue = 0;
00662         DWORD dw_StatusReg;
00663         BYTE b_ModulNbr;
00664         PULONG pul_PortValue;
00665 
00666         b_ModulNbr = (BYTE) CR_AREF(insn->chanspec);
00667         i_ReturnValue = insn->n;
00668         pul_PortValue = (PULONG) & data[0];
00669 
00670         /**************************/
00671         /* Test the module number */
00672         /**************************/
00673 
00674         if (b_ModulNbr < 4) {
00675            /**************************/
00676                 /* Test if TTL I/O module */
00677            /**************************/
00678 
00679                 if ((devpriv->s_BoardInfos.
00680                                 dw_MolduleConfiguration[b_ModulNbr] &
00681                                 0xFFFF0000UL) == APCI1710_TTL_IO) {
00682               /******************************************/
00683                         /* Test if the TTL I/O module initialised */
00684               /******************************************/
00685 
00686                         if (devpriv->
00687                                 s_ModuleInfo[b_ModulNbr].
00688                                 s_TTLIOInfo.b_TTLInit == 1) {
00689                  /**************************/
00690                                 /* Read all digital input */
00691                  /**************************/
00692 
00693                                 dw_StatusReg = inl(devpriv->s_BoardInfos.
00694                                         ui_Address + (64 * b_ModulNbr));
00695 
00696                  /**********************/
00697                                 /* Test if TTL Rev1.0 */
00698                  /**********************/
00699 
00700                                 if ((devpriv->s_BoardInfos.
00701                                                 dw_MolduleConfiguration
00702                                                 [b_ModulNbr] & 0xFFFF) ==
00703                                         0x3130) {
00704                                         *pul_PortValue =
00705                                                 dw_StatusReg & 0xFFFFFFUL;
00706                                 } else {
00707                     /**************************************/
00708                                         /* Test if port A not used for output */
00709                     /**************************************/
00710 
00711                                         if (devpriv->s_ModuleInfo[b_ModulNbr].
00712                                                 s_TTLIOInfo.
00713                                                 b_PortConfiguration[0] == 1) {
00714                                                 *pul_PortValue =
00715                                                         dw_StatusReg &
00716                                                         0x3FFFF00UL;
00717                                         }
00718 
00719                     /**************************************/
00720                                         /* Test if port B not used for output */
00721                     /**************************************/
00722 
00723                                         if (devpriv->
00724                                                 s_ModuleInfo[b_ModulNbr].
00725                                                 s_TTLIOInfo.
00726                                                 b_PortConfiguration[1] == 1) {
00727                                                 *pul_PortValue =
00728                                                         dw_StatusReg &
00729                                                         0x3FF00FFUL;
00730                                         }
00731 
00732                     /**************************************/
00733                                         /* Test if port C not used for output */
00734                     /**************************************/
00735 
00736                                         if (devpriv->
00737                                                 s_ModuleInfo[b_ModulNbr].
00738                                                 s_TTLIOInfo.
00739                                                 b_PortConfiguration[2] == 1) {
00740                                                 *pul_PortValue =
00741                                                         dw_StatusReg &
00742                                                         0x300FFFFUL;
00743                                         }
00744 
00745                     /**************************************/
00746                                         /* Test if port D not used for output */
00747                     /**************************************/
00748 
00749                                         if (devpriv->
00750                                                 s_ModuleInfo[b_ModulNbr].
00751                                                 s_TTLIOInfo.
00752                                                 b_PortConfiguration[3] == 1) {
00753                                                 *pul_PortValue =
00754                                                         dw_StatusReg &
00755                                                         0xFFFFFFUL;
00756                                         }
00757                                 }
00758                         } else {
00759                  /***************************/
00760                                 /* TTL I/O not initialised */
00761                  /***************************/
00762                                 DPRINTK("TTL I/O not initialised\n");
00763                                 i_ReturnValue = -5;
00764                         }
00765                 } else {
00766               /**********************************/
00767                         /* The module is not a TTL module */
00768               /**********************************/
00769                         DPRINTK("The module is not a TTL module\n");
00770                         i_ReturnValue = -3;
00771                 }
00772         } else {
00773            /***********************/
00774                 /* Module number error */
00775            /***********************/
00776                 DPRINTK("Module number error\n");
00777                 i_ReturnValue = -2;
00778         }
00779 
00780         return (i_ReturnValue);
00781 }
00782 
00783 /*
00784 +----------------------------------------------------------------------------+
00785 |                            OUTPUT FUNCTIONS                                |
00786 +----------------------------------------------------------------------------+
00787 */
00788 
00789 /*
00790 +----------------------------------------------------------------------------+
00791 | Function Name     : _INT_ i_APCI1710_SetTTLIOChlOn                         |
00792 |                               (BYTE_           b_BoardHandle,              |
00793 |                                BYTE_           b_ModulNbr,                 |
00794 |                                BYTE_           b_OutputChannel) 
00795 INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device *dev,comedi_subdevice *s,
00796         comedi_insn *insn,lsampl_t *data)           |
00797 +----------------------------------------------------------------------------+
00798 | Task              : Sets or resets  the output witch has been passed with the         |
00799 |                     parameter b_Channel. Setting an output means setting   |
00800 |                     an ouput high.                                         |
00801 +----------------------------------------------------------------------------+
00802 | Input Parameters  : BYTE_ b_BoardHandle   : Handle of board APCI-1710      |
00803 |                     BYTE_ b_ModulNbr      : Selected module number (0 to 3)|
00804 |                     BYTE_ b_OutputChannel : Selection from digital output  |
00805 |                                             channel (0 or 1)               |
00806 |                                                0      : PD0                |
00807 |                                                1      : PD1                |
00808 |                                                2 to 9 : PA                 |
00809 |                                               10 to 17: PB                 |
00810 |                                               18 to 25: PC                 |
00811 
00812   b_ModulNbr       = CR_AREF(insn->chanspec);
00813         b_OutputChannel= CR_CHAN(insn->chanspec);
00814         ui_State           = data[0]; // ON or OFF
00815 +----------------------------------------------------------------------------+
00816 | Output Parameters : -                                                      |
00817 +----------------------------------------------------------------------------+
00818 | Return Value      : 0: No error                                            |
00819 |                    -1: The handle parameter of the board is wrong          |
00820 |                    -2: The module parameter is wrong                       |
00821 |                    -3: The module is not a TTL I/O module                  |
00822 |                    -4: The selected digital output is wrong                |
00823 |                    -5: TTL I/O not initialised see function                |
00824 |                        " i_APCI1710_InitTTLIO"
00825 +----------------------------------------------------------------------------+
00826 */
00827 
00828 INT i_APCI1710_InsnWriteSetTTLIOChlOnOff(comedi_device * dev,
00829         comedi_subdevice * s, comedi_insn * insn, lsampl_t * data)
00830 {
00831         INT i_ReturnValue = 0;
00832         DWORD dw_StatusReg = 0;
00833         BYTE b_ModulNbr;
00834         BYTE b_OutputChannel;
00835         UINT ui_State;
00836 
00837         i_ReturnValue = insn->n;
00838         b_ModulNbr = CR_AREF(insn->chanspec);
00839         b_OutputChannel = CR_CHAN(insn->chanspec);
00840         ui_State = data[0];     // ON or OFF
00841 
00842         /**************************/
00843         /* Test the module number */
00844         /**************************/
00845 
00846         if (b_ModulNbr < 4) {
00847            /**************************/
00848                 /* Test if TTL I/O module */
00849            /**************************/
00850 
00851                 if ((devpriv->s_BoardInfos.
00852                                 dw_MolduleConfiguration[b_ModulNbr] &
00853                                 0xFFFF0000UL) == APCI1710_TTL_IO) {
00854               /******************************************/
00855                         /* Test if the TTL I/O module initialised */
00856               /******************************************/
00857 
00858                         if (devpriv->s_ModuleInfo[b_ModulNbr].
00859                                 s_TTLIOInfo.b_TTLInit == 1) {
00860                  /***********************************/
00861                                 /* Test the TTL I/O channel number */
00862                  /***********************************/
00863 
00864                                 if (((b_OutputChannel <= 1)
00865                                                 && ((devpriv->s_BoardInfos.
00866                                                                 dw_MolduleConfiguration
00867                                                                 [b_ModulNbr] &
00868                                                                 0xFFFF) ==
00869                                                         0x3130))
00870                                         || ((b_OutputChannel <= 25)
00871                                                 && ((devpriv->s_BoardInfos.
00872                                                                 dw_MolduleConfiguration
00873                                                                 [b_ModulNbr] &
00874                                                                 0xFFFF) >=
00875                                                         0x3230))) {
00876                     /****************************************************/
00877                                         /* Test if the selected channel is a output channel */
00878                     /****************************************************/
00879 
00880                                         if (((b_OutputChannel <= 1)
00881                                                         && (devpriv->
00882                                                                 s_ModuleInfo
00883                                                                 [b_ModulNbr].
00884                                                                 s_TTLIOInfo.
00885                                                                 b_PortConfiguration
00886                                                                 [3] == 1))
00887                                                 || ((b_OutputChannel >= 2)
00888                                                         && (b_OutputChannel <=
00889                                                                 9)
00890                                                         && (devpriv->
00891                                                                 s_ModuleInfo
00892                                                                 [b_ModulNbr].
00893                                                                 s_TTLIOInfo.
00894                                                                 b_PortConfiguration
00895                                                                 [0] == 1))
00896                                                 || ((b_OutputChannel >= 10)
00897                                                         && (b_OutputChannel <=
00898                                                                 17)
00899                                                         && (devpriv->
00900                                                                 s_ModuleInfo
00901                                                                 [b_ModulNbr].
00902                                                                 s_TTLIOInfo.
00903                                                                 b_PortConfiguration
00904                                                                 [1] == 1))
00905                                                 || ((b_OutputChannel >= 18)
00906                                                         && (b_OutputChannel <=
00907                                                                 25)
00908                                                         && (devpriv->
00909                                                                 s_ModuleInfo
00910                                                                 [b_ModulNbr].
00911                                                                 s_TTLIOInfo.
00912                                                                 b_PortConfiguration
00913                                                                 [2] == 1))) {
00914                        /************************/
00915                                                 /* Test if PD0 selected */
00916                        /************************/
00917 
00918                                                 if (b_OutputChannel == 0) {
00919 
00920                                                         outl(ui_State,
00921                                                                 devpriv->
00922                                                                 s_BoardInfos.
00923                                                                 ui_Address +
00924                                                                 (64 * b_ModulNbr));
00925                                                 } else {
00926                           /************************/
00927                                                         /* Test if PD1 selected */
00928                           /************************/
00929 
00930                                                         if (b_OutputChannel ==
00931                                                                 1) {
00932 
00933                                                                 outl(ui_State,
00934                                                                         devpriv->
00935                                                                         s_BoardInfos.
00936                                                                         ui_Address
00937                                                                         + 4 +
00938                                                                         (64 * b_ModulNbr));
00939                                                         } else {
00940                                                                 b_OutputChannel
00941                                                                         =
00942                                                                         b_OutputChannel
00943                                                                         - 2;
00944 
00945                              /********************/
00946                                                                 /* Read all channel */
00947                              /********************/
00948 
00949                                                                 dw_StatusReg =
00950                                                                         inl
00951                                                                         (devpriv->
00952                                                                         s_BoardInfos.
00953                                                                         ui_Address
00954                                                                         +
00955                                                                         (64 * b_ModulNbr));
00956                                                                 if (ui_State)   // ON
00957                                                                 {
00958                                                                         dw_StatusReg
00959                                                                                 =
00960                                                                                 (dw_StatusReg
00961                                                                                 >>
00962                                                                                 ((b_OutputChannel / 8) * 8)) & 0xFF;
00963                                                                         dw_StatusReg
00964                                                                                 =
00965                                                                                 dw_StatusReg
00966                                                                                 |
00967                                                                                 (1
00968                                                                                 <<
00969                                                                                 (b_OutputChannel
00970                                                                                         %
00971                                                                                         8));
00972                                                                 } else  // Off
00973                                                                 {
00974                                                                         dw_StatusReg
00975                                                                                 =
00976                                                                                 (dw_StatusReg
00977                                                                                 >>
00978                                                                                 ((b_OutputChannel / 8) * 8)) & 0xFF;
00979                                                                         dw_StatusReg
00980                                                                                 =
00981                                                                                 dw_StatusReg
00982                                                                                 &
00983                                                                                 (0xFF
00984                                                                                 -
00985                                                                                 (1 << (b_OutputChannel % 8)));
00986 
00987                                                                 }
00988 
00989                              /****************************/
00990                                                                 /* Set the new output value */
00991                              /****************************/
00992 
00993                                                                 outl(dw_StatusReg, devpriv->s_BoardInfos.ui_Address + 8 + ((b_OutputChannel / 8) * 4) + (64 * b_ModulNbr));
00994                                                         }
00995                                                 }
00996                                         } else {
00997                        /************************************/
00998                                                 /* The selected TTL output is wrong */
00999                        /************************************/
01000 
01001                                                 DPRINTK(" The selected TTL output is wrong\n");
01002                                                 i_ReturnValue = -4;
01003                                         }
01004                                 } else {
01005                     /************************************/
01006                                         /* The selected TTL output is wrong */
01007                     /************************************/
01008 
01009                                         DPRINTK("The selected TTL output is wrong\n");
01010                                         i_ReturnValue = -4;
01011                                 }
01012                         } else {
01013                  /***************************/
01014                                 /* TTL I/O not initialised */
01015                  /***************************/
01016 
01017                                 DPRINTK("TTL I/O not initialised\n");
01018                                 i_ReturnValue = -5;
01019                         }
01020                 } else {
01021               /**************************************/
01022                         /* The module is not a TTL I/O module */
01023               /**************************************/
01024 
01025                         DPRINTK("The module is not a TTL I/O module\n");
01026                         i_ReturnValue = -3;
01027                 }
01028         } else {
01029            /***********************/
01030                 /* Module number error */
01031            /***********************/
01032 
01033                 DPRINTK("Module number error\n");
01034                 i_ReturnValue = -2;
01035         }
01036 
01037         return (i_ReturnValue);
01038 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines