Main Page   Class Hierarchy   Alphabetical List   Data Structures   File List   Data Fields   Globals  

parport.c File Reference

#include "parport.h"
#include <stdio.h>

Include dependency graph for parport.c:

Include dependency graph

Go to the source code of this file.

Defines

#define __attribute__(x)
#define PARPORT_IO_WIDTH   3

Functions

char __attribute__ ((unused)) ident[]="$Id
int ioperm (unsigned int addr, int width, int on)
unsigned char inb (unsigned int port)
void outb (unsigned char byte, unsigned int port)
int pptDioInit (const char *stuff)
int pptDioQuit ()
int pptDioMaxInputs ()
int pptDioMaxOutputs ()
int pptDioRead (int index, int *value)
int pptDioCheck (int index, int *value)
int pptDioWrite (int index, int value)
int pptDioByteRead (int index, unsigned char *byte)
int pptDioShortRead (int index, unsigned short *sh)
int pptDioWordRead (int index, unsigned int *word)
int pptDioByteWrite (int index, unsigned char byte)
int pptDioShortWrite (int index, unsigned short sh)
int pptDioWordWrite (int index, unsigned int word)
int pptDioByteCheck (int index, unsigned char *byte)
int pptDioShortCheck (int index, unsigned short *sh)
int pptDioWordCheck (int index, unsigned int *word)


Define Documentation

#define PARPORT_IO_WIDTH   3
 

#define __attribute__  
 

Definition at line 30 of file parport.c.


Function Documentation

char __attribute__ (unused)    [static]
 

Definition at line 34 of file parport.c.

00034                                                   : parport.c,v 1.14 2001/10/10 17:35:46 wshackle Exp $";
00035 
00036 /* set DO_IT FLAG for really writing, else don't do inb(), outb() */
00037 #ifdef LINUX
00038 #define DO_IT
00039 #else
00040 #if defined(rtlinux) || defined(rtai)
00041 #define DO_IT
00042 #endif
00043 #endif
00044 
00045 #ifdef MAIN
00046 
00047 #ifndef UNDER_CE
00048 #include <stdio.h>
00049 #endif
00050 
00051 #include <stdlib.h>
00052 #include <string.h>
00053 
00054 #endif
00055 
00056 #include "parport.h"            /* these decls */
00057 
00058 /* the IO address of the board; override by setting global before call
00059    to pptDioInit() */
00060 unsigned long int PARPORT_IO_ADDRESS = DEFAULT_PARPORT_IO_ADDRESS;
00061 
00062 #define PARPORT_IO_WIDTH 3              /* number of bytes taken up */
00063 
00064 #ifdef DO_IT
00065 
00066 /* real parallel port IO */
00067 
00068 #if !defined(rtlinux) && !defined(rtai)
00069 #include <unistd.h>             /* ioperm() */
00070 #ifdef DEFINE_EXTERN_BEFORE_IO
00071 #define extern
00072 #endif
00073 #endif
00074 
00075 #ifdef __KERNEL__
00076 #include <linux/kernel.h>
00077 #include <linux/fs.h>
00078 #endif
00079 
00080 #ifndef LINUX_VERSION_CODE
00081 #include <linux/version.h>
00082 #endif
00083 
00084 // Pre 2.2 kernels don't seem to have the KERNEL_VERSION macro.
00085 #ifndef KERNEL_VERSION
00086 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
00087 #endif
00088 
00089 #include <sys/io.h>             /* outb, inb */
00090 
00091 #if LINUX_VERSION_CODE > KERNEL_VERSION(2,2,0)
00092 #else
00093 #include <asm/io.h>
00094 #endif
00095 
00096 #else
00097 
00098 /* don't do it */
00099 #ifndef UNDER_CE
00100 #include <stdio.h>
00101 #endif
00102 
00103 static unsigned char parport[PARPORT_IO_WIDTH] = {0xFF, 0xFF, 0xFF};

unsigned char inb unsigned int    port [static]
 

Definition at line 110 of file parport.c.

Referenced by ClrTimeout(), ReadData(), SelRead(), SelWrt16(), emcmotController(), fInP(), pptDioByteCheck(), pptDioByteRead(), pptDioCheck(), pptDioRead(), pptDioShortCheck(), pptDioShortRead(), pptDioWordCheck(), pptDioWordRead(), and pptDioWrite().

00111 {
00112   int index;
00113 
00114   index = port - PARPORT_IO_ADDRESS;
00115   if (index < 0 ||
00116       index >= PARPORT_IO_WIDTH)
00117     {
00118       printf("inb: address out of bounds: %X\n", port);
00119       return 0;
00120     }
00121 
00122   return parport[index];
00123 }

int ioperm unsigned int    addr,
int    width,
int    on
[static]
 

Definition at line 105 of file parport.c.

Referenced by InitializeParPort(), pptDioInit(), and pptDioQuit().

00106 {
00107   return 0;
00108 }

void outb unsigned char    byte,
unsigned int    port
[static]
 

Definition at line 125 of file parport.c.

Referenced by BusReset(), ClrTimeout(), ReadData(), SelAddr(), SelRead(), SelWrt(), SelWrt16(), WriteData(), WriteData16(), __attribute__(), emcmotController(), extMotDout(), pptDioByteWrite(), pptDioWrite(), and stgAdcWait().

00126 {
00127   int index;
00128 
00129   index = port - PARPORT_IO_ADDRESS;
00130   if (index < 0 ||
00131       index >= PARPORT_IO_WIDTH)
00132     {
00133       printf("outb: address out of bounds: %X\n", port);
00134       return;
00135     }
00136 
00137   printf("outb: writing %X to %X\n", (int) byte, port);
00138   parport[index] = byte;
00139 }

int pptDioByteCheck int    index,
unsigned char *    byte
 

Definition at line 370 of file parport.c.

Referenced by extDioByteCheck().

00371 {
00372   if (index == 0)
00373     {
00374       *byte = inb(PARPORT_IO_ADDRESS);
00375       return 0;
00376     }
00377 
00378   if (index == 1)
00379     {
00380       *byte = inb(PARPORT_IO_ADDRESS + 2);
00381       return 0;
00382     }
00383 
00384   *byte = 0;
00385   return -1;
00386 }

int pptDioByteRead int    index,
unsigned char *    byte
 

Definition at line 304 of file parport.c.

Referenced by extDioByteRead().

00305 {
00306   if (index != 0)
00307     {
00308       *byte = 0;
00309       return -1;
00310     }
00311 
00312   *byte = inb(PARPORT_IO_ADDRESS + 1);
00313   *byte >>= 3;                  /* shift down since S3 is bit 0, etc. */
00314   return 0;
00315 }

int pptDioByteWrite int    index,
unsigned char    byte
 

Definition at line 343 of file parport.c.

Referenced by emcmotController(), extDioByteWrite(), pptDioShortWrite(), and pptDioWordWrite().

00344 {
00345   if (index == 0)
00346     {
00347       outb(byte, PARPORT_IO_ADDRESS);
00348       return 0;
00349     }
00350 
00351   if (index == 1)
00352     {
00353       outb(byte, PARPORT_IO_ADDRESS + 2);
00354       return 0;
00355     }
00356 
00357   return -1;
00358 }

int pptDioCheck int    index,
int *    value
 

Definition at line 229 of file parport.c.

Referenced by extDioCheck().

00230 {
00231   unsigned char inByte;
00232   unsigned char mask = 1;       /* start at 00000001 for D0, C0 */
00233 
00234   if (index < 0 ||
00235       index > 11)
00236     {
00237       return -1;
00238     }
00239 
00240   if (index < 8)
00241     {
00242       inByte = inb(PARPORT_IO_ADDRESS);
00243       mask <<= index;
00244       *value = (inByte & mask) ? 1 : 0;
00245       return 0;
00246     }
00247 
00248   /* else index is 8-11 */
00249   inByte = inb(PARPORT_IO_ADDRESS + 2);
00250   mask <<= index - 8;
00251   *value = (inByte & mask) ? 1 : 0;
00252   return 0;
00253 }

int pptDioInit const char *    stuff
 

Definition at line 145 of file parport.c.

Referenced by __attribute__(), and extDioInit().

00146 {
00147   int retval = 0;
00148 
00149 #ifdef linux
00150 #if !defined(rtlinux) && !defined(rtai)
00151   /* turn on port access */
00152   retval = ioperm(PARPORT_IO_ADDRESS, PARPORT_IO_WIDTH, 1);
00153   if(retval) retval=iopl(3);
00154 #endif
00155 #endif
00156 
00157   return retval;
00158 }

int pptDioMaxInputs  
 

Definition at line 182 of file parport.c.

Referenced by extDioMaxInputs().

00183 {
00184   return 5;
00185 }

int pptDioMaxOutputs  
 

Definition at line 187 of file parport.c.

Referenced by extDioMaxOutputs().

00188 {
00189   return 12;
00190 }

int pptDioQuit  
 

Definition at line 160 of file parport.c.

Referenced by extDioQuit(), and extMotQuit().

00161 {
00162   int retval = 0;
00163 
00164 #if !defined(rtlinux) && !defined(rtai)
00165   /* turn off port access */
00166   retval = ioperm(PARPORT_IO_ADDRESS, PARPORT_IO_WIDTH, 0);
00167 #endif
00168 
00169   return retval;
00170 }

int pptDioRead int    index,
int *    value
 

Definition at line 199 of file parport.c.

Referenced by extDioRead(), extHomeSwitchRead(), extMaxLimitSwitchRead(), and extMinLimitSwitchRead().

00200 {
00201   unsigned char inByte;
00202   unsigned char mask = 8;       /* start at 00001000 for S3 */
00203 
00204   if (index < 0 ||
00205       index > 4)
00206     {
00207       *value = 0;
00208       return -1;
00209     }
00210 
00211   /* latch input */
00212   inByte = inb(PARPORT_IO_ADDRESS + 1);
00213   mask <<= index;
00214   *value = (inByte & mask) ? 1 : 0;
00215 
00216   return 0;
00217 }

int pptDioShortCheck int    index,
unsigned short *    sh
 

Definition at line 388 of file parport.c.

Referenced by extDioShortCheck().

00389 {
00390   unsigned char b0, b1;
00391 
00392   if (index != 0)
00393     {
00394       *sh = 0;
00395       return -1;
00396     }
00397 
00398   b0 = inb(PARPORT_IO_ADDRESS);
00399   b1 = inb(PARPORT_IO_ADDRESS + 2);
00400 
00401   *sh = b1;
00402   *sh <<= 8;
00403   *sh += b0;
00404 
00405   return 0;
00406 }

int pptDioShortRead int    index,
unsigned short *    sh
 

Definition at line 317 of file parport.c.

Referenced by extDioShortRead().

00318 {
00319   if (index != 0)
00320     {
00321       *sh = 0;
00322       return -1;
00323     }
00324 
00325   *sh = (unsigned short) inb(PARPORT_IO_ADDRESS + 1);
00326   *sh >>= 3;                    /* shift down since S3 is bit 0, etc. */
00327   return 0;
00328 }

int pptDioShortWrite int    index,
unsigned short    sh
 

Definition at line 360 of file parport.c.

Referenced by extDioShortWrite().

00361 {
00362   return pptDioByteWrite(index, (unsigned char) sh);
00363 }

int pptDioWordCheck int    index,
unsigned int *    word
 

Definition at line 408 of file parport.c.

Referenced by extDioWordCheck().

00409 {
00410   unsigned char b0, b1;
00411 
00412   if (index != 0)
00413     {
00414       *word = 0;
00415       return -1;
00416     }
00417 
00418   b0 = inb(PARPORT_IO_ADDRESS);
00419   b1 = inb(PARPORT_IO_ADDRESS + 2);
00420 
00421   *word = b1;
00422   *word <<= 8;
00423   *word += b0;
00424 
00425   return 0;
00426 }

int pptDioWordRead int    index,
unsigned int *    word
 

Definition at line 330 of file parport.c.

Referenced by extDioWordRead().

00331 {
00332   if (index != 0)
00333     {
00334       *word = 0;
00335       return -1;
00336     }
00337 
00338   *word = (unsigned int) inb(PARPORT_IO_ADDRESS + 1);
00339   *word >>= 3;                  /* shift down since S3 is bit 0, etc. */
00340   return 0;
00341 }

int pptDioWordWrite int    index,
unsigned int    word
 

Definition at line 365 of file parport.c.

Referenced by extDioWordWrite().

00366 {
00367   return pptDioByteWrite(index, (unsigned char) word);
00368 }

int pptDioWrite int    index,
int    value
 

Definition at line 261 of file parport.c.

Referenced by extDioWrite().

00262 {
00263   unsigned char outByte;
00264   unsigned char mask = 1;       /* start at 00000001 for D0, C0 */
00265 
00266   if (index < 0 ||
00267       index > 11)
00268     {
00269       return -1;
00270     }
00271 
00272   if (index < 8)
00273     {
00274       /* read current outputs */
00275       outByte = inb(PARPORT_IO_ADDRESS);
00276       mask <<= index;
00277       if (value)
00278         {
00279           outByte |= mask;
00280         }
00281       else
00282         {
00283           outByte &= ~mask;
00284         }
00285       outb(outByte, PARPORT_IO_ADDRESS);
00286       return 0;
00287     }
00288 
00289   /* read current outputs */
00290   outByte = inb(PARPORT_IO_ADDRESS + 2);
00291   mask <<= index - 8;
00292   if (value)
00293     {
00294       outByte |= mask;
00295     }
00296   else
00297     {
00298       outByte &= ~mask;
00299     }
00300   outb(outByte, PARPORT_IO_ADDRESS + 2);
00301   return 0;
00302 }


Generated on Sun Dec 2 15:28:11 2001 for EMC by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001