1 /// Definitions of using types 2 module serialport.types; 3 4 /// 5 enum Parity 6 { 7 none, /// 8 odd, /// 9 even /// 10 } 11 12 /// 13 enum DataBits : uint 14 { 15 data8 = 8, /// 16 data7 = 7, /// 17 data6 = 6, /// 18 data5 = 5, /// 19 } 20 21 /// 22 enum StopBits 23 { 24 one, /// 25 onePointFive, /// 26 two /// 27 } 28 29 package 30 { 31 version(Posix) 32 { 33 import core.sys.posix.unistd; 34 version(linux) 35 import core.sys.linux.termios; 36 else 37 import core.sys.posix.termios; 38 39 import core.sys.posix.fcntl; 40 import core.sys.posix.sys.select; 41 import core.sys.posix.sys.ioctl; 42 import core.stdc.errno; 43 import std.algorithm; 44 import std.file; 45 46 alias posixRead = core.sys.posix.unistd.read; 47 alias posixWrite = core.sys.posix.unistd.write; 48 alias posixClose = core.sys.posix.unistd.close; 49 } 50 version(Windows) 51 { 52 import core.sys.windows.windows; 53 import std.bitmanip; 54 55 enum NOPARITY = 0x0; 56 enum EVENPARITY = 0x2; 57 enum MARKPARITY = 0x3; 58 enum ODDPARITY = 0x1; 59 enum SPACEPARITY = 0x4; 60 61 enum ONESTOPBIT = 0x0; 62 enum ONE5STOPBITS = 0x1; 63 enum TWOSTOPBITS = 0x2; 64 65 struct DCB 66 { 67 DWORD DCBlength; 68 DWORD BaudRate; 69 70 mixin(bitfields!( 71 DWORD, "fBinary", 1, 72 DWORD, "fParity", 1, 73 DWORD, "fOutxCtsFlow", 1, 74 DWORD, "fOutxDsrFlow", 1, 75 DWORD, "fDtrControl", 2, 76 DWORD, "fDsrSensitivity", 1, 77 DWORD, "fTXContinueOnXoff", 1, 78 DWORD, "fOutX", 1, 79 DWORD, "fInX", 1, 80 DWORD, "fErrorChar", 1, 81 DWORD, "fNull", 1, 82 DWORD, "fRtsControl", 2, 83 DWORD, "fAbortOnError", 1, 84 DWORD, "fDummy2", 17)); 85 86 WORD wReserved; 87 WORD XonLim; 88 WORD XoffLim; 89 BYTE ByteSize; 90 BYTE Parity; 91 BYTE StopBits; 92 ubyte XonChar; 93 ubyte XoffChar; 94 ubyte ErrorChar; 95 ubyte EofChar; 96 ubyte EvtChar; 97 WORD wReserved1; 98 } 99 100 struct COMMTIMEOUTS 101 { 102 DWORD ReadIntervalTimeout; 103 DWORD ReadTotalTimeoutMultiplier; 104 DWORD ReadTotalTimeoutConstant; 105 DWORD WriteTotalTimeoutMultiplier; 106 DWORD WriteTotalTimeoutConstant; 107 } 108 109 extern(Windows) 110 { 111 bool GetCommState(HANDLE hFile, DCB* lpDCB); 112 bool SetCommState(HANDLE hFile, DCB* lpDCB); 113 bool SetCommTimeouts(HANDLE hFile, COMMTIMEOUTS* lpCommTimeouts); 114 } 115 } 116 } 117 118 version (Posix) 119 { 120 enum unixBaudList = [ 0: B0, 50: B50, 75: B75, 110: B110, 134: B134, 121 150: B150, 200: B200, 300: B300, 600: B600, 122 1200: B1200, 1800: B1800, 2400: B2400, 123 4800: B4800, 9600: B9600, 19200: B19200, 124 38400: B38400, 57600: B57600, 115200: B115200, 125 230400: B230400 ]; 126 127 enum unixUintBaudList = invert(unixBaudList); 128 129 private auto invert(T)(T list) 130 { 131 static if (is(T == V[K], V, K)) 132 { 133 K[V] ret; 134 foreach (key; list.keys) 135 ret[list[key]] = key; 136 return ret; 137 } 138 else static assert(0, "unsupported type"); 139 } 140 }