home *** CD-ROM | disk | FTP | other *** search
/ Aminet 10 / aminetcdnumber101996.iso / Aminet / dev / src / SerialClass1_0.lha / SerialClass.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-12-11  |  5.6 KB  |  170 lines

  1. #ifndef _SERIALCLASS
  2. #define _SERIALCLASS
  3.  
  4. //
  5. //    Paul Cimino 1995
  6. //    C++ Class to make basic Amiga serial port access a little easier
  7. //    This code is being released into the public domain
  8. //    feel free to improve upon it, however I ask that you :
  9. //        1) Redistribute the improved code
  10. //        2) Fully document changes to the code :
  11. //            A) Why the changes were made
  12. //            B) Document where your code is added
  13. //            C) Don't remove my code, rather comment it out
  14. //        3) Send me a copy (cimino@mdso.vf.ge.com or if that
  15. //            mail id goes away, 73677,1761@compuserve.com )
  16. //
  17. //      Maybe someone could add WaitForChar() so the code doesn't
  18. //      lock up if it never gets a character ?
  19. //
  20. //     It would be great if someone familiar with Asynchronous
  21. //    Transfer Mode (ATM) and other useful protocals could
  22. //     expand this into a truly useful Class
  23. //
  24. //    Thanks go to J. Edward Hanway for his OptMouse ver 1.2 code
  25. //
  26. // Version
  27. #define VERSION "1.0 Paul Cimino, 1995"
  28. // Version history :
  29. // V 0.1     Basic class structure
  30. // V 0.5    First "usable" class
  31. // V 1.0        Class which handles data in/out, strings in/out
  32. // overloaded operators << and >>
  33. //
  34. // Definitions and macros
  35. #ifndef TRUE
  36. #define TRUE 1
  37. #endif
  38. #ifndef FALSE
  39. #define FALSE 0
  40. #endif
  41. // don't need this for Amiga, types.h takes care of it
  42. //#ifndef UBYTE
  43. //    typedef char UBYTE;
  44. //#endif
  45.  
  46. // Includes
  47. #include <exec/types.h>
  48. #include <devices/serial.h>
  49. #include <devices/input.h>
  50. #include <devices/inputevent.h>
  51. #include <devices/keyboard.h>
  52. #include <libraries/dos.h>
  53. #include <proto/exec.h>
  54. #include <proto/dos.h>
  55. #include <string.h>
  56.  
  57. extern "C" {
  58. #include <stdlib.h>
  59. }
  60. #include <iostream.h>
  61. // 
  62.  
  63.  
  64. // Definitions and macros
  65. typedef enum {NONE = 0, EVEN, ODD, MARK, SPACE} Parity;
  66. typedef enum {OFF = 0, RTSCTS} HandShake;
  67.  
  68. #ifndef SERIALNAME
  69. #define SERIALNAME "serial.device"
  70. #endif
  71.  
  72. // cast iob as an IOExtSer
  73. #define IOB_SER ((struct IOExtSer *)(iob))
  74.  
  75. // Class definition
  76. class SerialClass {
  77. public :
  78.     // constructors and destructor
  79.         SerialClass(char *device = SERIALNAME, // Name of the serial device 
  80.         char *portNm = 0, // name of the port, defaults to <devicename><unit>
  81.         int unit = 0, // Unit number of device
  82.          int baud = 19200, // Baud rate
  83.          int bits = 8, // Number of bits
  84.         int stop = 1, // number of stop bits
  85.         Parity = NONE, // type of parity being used
  86.         HandShake = OFF, // type of handshaking used
  87.         int HighSpeed = FALSE, // high speed mode
  88.         int Share = FALSE);// whether or not the device is shared 
  89.  
  90.        
  91.     ~SerialClass(void);
  92.  
  93.         // management functions
  94.         void    close();
  95.         int     open();
  96.         
  97.     
  98.     // Public access functions
  99.         struct MsgPort *        getPort();
  100.         struct IORequest *      getIO();
  101.         int                     status() { return isOpen; }
  102.             
  103.         void mDoIO(struct IORequest *iob_ptr); // from Serial Mouse program
  104.     int    setBaud(int baudRate);    // Set the baud rate
  105.     int    setBits(int numBits);    // set the number of data bits read and written
  106.     int    setStop(int stopBits);    // set the number of stop bits
  107.     Parity    setParity(Parity parity); // set the parity
  108.     HandShake    setHand(HandShake shake); // set handshaking OFF or RTSCTS
  109.     int    setHighSpeed(int TRUE_or_FALSE); // Set high Speed mode TRUE or FALSE
  110.     int    setShare(int TRUE_or_FALSE); // set shared port status TRUE or FALSE
  111.         void    setParams(void);// Tell the serial port to change setup
  112.  
  113.     // Utility functions
  114.     UBYTE    readByte(); // gets a byte from the port
  115.     UBYTE    writeByte(UBYTE); // writes a byte to the port
  116.     UBYTE    *read(int numBytes); // returns a number of bytes from the port
  117.     UBYTE    *read(char terminationChar = '\r'); // reads until the 
  118.                         // defined termination character 
  119.             // is read, default is "RETURN"
  120.     UBYTE    *writeData(UBYTE *, int numByte); // writes numBytes of data 
  121.         // 
  122.          char    *write(char *, char terminationChar = '\0'); // writes 
  123.                       // data to the port until a termination char
  124.                       // is met, termination character is NOT sent
  125.                       // to the port
  126.                       
  127.         // overload the extraction >> operator and the << insertion
  128.         // operator.  Life would be much easier if someone
  129.         // figure out how to simply make a Serial Class which
  130.         // acts like a file stream
  131.         // Anyone wanna give it a shot ?
  132.         //
  133.         // Here, we can send/receive single characters to/from the port
  134.         // i.e. given a SerialClass instance myport
  135.         // I can use the command :
  136.         // myport << 'm' << 'y';
  137.         // or given a char ch :
  138.         // myport >> ch;
  139.         // Can't use flush or endl, sorry
  140.         class SerialClass &operator<< (char a) { writeByte((UBYTE)a);
  141.                                                 return *this; }
  142.         class SerialClass &operator>> (char &a) { a = (char)readByte();
  143.                                                 return *this; }
  144. /* Haven't gotten the bugs out of this yet
  145.        class SerialClass &operator<< (unsigned char *a) { write(a);
  146.                                                 return *this; }
  147.         // WARNING ! This assumes that "a" has enough memory allocated !                                        
  148.         class SerialClass &operator>> (unsigned char *a) { strcpy(a, read());
  149.                                                 return *this; }
  150. */                                                   
  151.  
  152.  
  153. protected :
  154.     void setParameters(void);            
  155.     struct MsgPort        *port;
  156.     struct IORequest     *iob;
  157.         struct IOExtSer         *iob_ser;
  158.     int             isOpen;
  159.     char            *deviceName;
  160.     char            *portName;
  161.     int            unitNum;
  162. };
  163.  
  164.  
  165. #endif
  166.  
  167.  
  168. // what is : SERF_XDISABLED ??
  169.  
  170.