OLD | NEW |
(Empty) | |
| 1 from ctypes import * |
| 2 from ctypes.wintypes import HANDLE |
| 3 from ctypes.wintypes import BOOL |
| 4 from ctypes.wintypes import LPCWSTR |
| 5 _stdcall_libraries = {} |
| 6 _stdcall_libraries['kernel32'] = WinDLL('kernel32') |
| 7 from ctypes.wintypes import DWORD |
| 8 from ctypes.wintypes import WORD |
| 9 from ctypes.wintypes import BYTE |
| 10 |
| 11 INVALID_HANDLE_VALUE = HANDLE(-1).value |
| 12 |
| 13 # some details of the windows API differ between 32 and 64 bit systems.. |
| 14 def is_64bit(): |
| 15 """Returns true when running on a 64 bit system""" |
| 16 return sizeof(c_ulong) != sizeof(c_void_p) |
| 17 |
| 18 # ULONG_PTR is a an ordinary number, not a pointer and contrary to the name it |
| 19 # is either 32 or 64 bits, depending on the type of windows... |
| 20 # so test if this a 32 bit windows... |
| 21 if is_64bit(): |
| 22 # assume 64 bits |
| 23 ULONG_PTR = c_int64 |
| 24 else: |
| 25 # 32 bits |
| 26 ULONG_PTR = c_ulong |
| 27 |
| 28 |
| 29 class _SECURITY_ATTRIBUTES(Structure): |
| 30 pass |
| 31 LPSECURITY_ATTRIBUTES = POINTER(_SECURITY_ATTRIBUTES) |
| 32 |
| 33 |
| 34 try: |
| 35 CreateEventW = _stdcall_libraries['kernel32'].CreateEventW |
| 36 except AttributeError: |
| 37 # Fallback to non wide char version for old OS... |
| 38 from ctypes.wintypes import LPCSTR |
| 39 CreateEventA = _stdcall_libraries['kernel32'].CreateEventA |
| 40 CreateEventA.restype = HANDLE |
| 41 CreateEventA.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCSTR] |
| 42 CreateEvent=CreateEventA |
| 43 |
| 44 CreateFileA = _stdcall_libraries['kernel32'].CreateFileA |
| 45 CreateFileA.restype = HANDLE |
| 46 CreateFileA.argtypes = [LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD,
DWORD, HANDLE] |
| 47 CreateFile = CreateFileA |
| 48 else: |
| 49 CreateEventW.restype = HANDLE |
| 50 CreateEventW.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCWSTR] |
| 51 CreateEvent = CreateEventW # alias |
| 52 |
| 53 CreateFileW = _stdcall_libraries['kernel32'].CreateFileW |
| 54 CreateFileW.restype = HANDLE |
| 55 CreateFileW.argtypes = [LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD,
DWORD, HANDLE] |
| 56 CreateFile = CreateFileW # alias |
| 57 |
| 58 class _OVERLAPPED(Structure): |
| 59 pass |
| 60 OVERLAPPED = _OVERLAPPED |
| 61 |
| 62 class _COMSTAT(Structure): |
| 63 pass |
| 64 COMSTAT = _COMSTAT |
| 65 |
| 66 class _DCB(Structure): |
| 67 pass |
| 68 DCB = _DCB |
| 69 |
| 70 class _COMMTIMEOUTS(Structure): |
| 71 pass |
| 72 COMMTIMEOUTS = _COMMTIMEOUTS |
| 73 |
| 74 GetLastError = _stdcall_libraries['kernel32'].GetLastError |
| 75 GetLastError.restype = DWORD |
| 76 GetLastError.argtypes = [] |
| 77 |
| 78 LPOVERLAPPED = POINTER(_OVERLAPPED) |
| 79 LPDWORD = POINTER(DWORD) |
| 80 |
| 81 GetOverlappedResult = _stdcall_libraries['kernel32'].GetOverlappedResult |
| 82 GetOverlappedResult.restype = BOOL |
| 83 GetOverlappedResult.argtypes = [HANDLE, LPOVERLAPPED, LPDWORD, BOOL] |
| 84 |
| 85 ResetEvent = _stdcall_libraries['kernel32'].ResetEvent |
| 86 ResetEvent.restype = BOOL |
| 87 ResetEvent.argtypes = [HANDLE] |
| 88 |
| 89 LPCVOID = c_void_p |
| 90 |
| 91 WriteFile = _stdcall_libraries['kernel32'].WriteFile |
| 92 WriteFile.restype = BOOL |
| 93 WriteFile.argtypes = [HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED] |
| 94 |
| 95 LPVOID = c_void_p |
| 96 |
| 97 ReadFile = _stdcall_libraries['kernel32'].ReadFile |
| 98 ReadFile.restype = BOOL |
| 99 ReadFile.argtypes = [HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED] |
| 100 |
| 101 CloseHandle = _stdcall_libraries['kernel32'].CloseHandle |
| 102 CloseHandle.restype = BOOL |
| 103 CloseHandle.argtypes = [HANDLE] |
| 104 |
| 105 ClearCommBreak = _stdcall_libraries['kernel32'].ClearCommBreak |
| 106 ClearCommBreak.restype = BOOL |
| 107 ClearCommBreak.argtypes = [HANDLE] |
| 108 |
| 109 LPCOMSTAT = POINTER(_COMSTAT) |
| 110 |
| 111 ClearCommError = _stdcall_libraries['kernel32'].ClearCommError |
| 112 ClearCommError.restype = BOOL |
| 113 ClearCommError.argtypes = [HANDLE, LPDWORD, LPCOMSTAT] |
| 114 |
| 115 SetupComm = _stdcall_libraries['kernel32'].SetupComm |
| 116 SetupComm.restype = BOOL |
| 117 SetupComm.argtypes = [HANDLE, DWORD, DWORD] |
| 118 |
| 119 EscapeCommFunction = _stdcall_libraries['kernel32'].EscapeCommFunction |
| 120 EscapeCommFunction.restype = BOOL |
| 121 EscapeCommFunction.argtypes = [HANDLE, DWORD] |
| 122 |
| 123 GetCommModemStatus = _stdcall_libraries['kernel32'].GetCommModemStatus |
| 124 GetCommModemStatus.restype = BOOL |
| 125 GetCommModemStatus.argtypes = [HANDLE, LPDWORD] |
| 126 |
| 127 LPDCB = POINTER(_DCB) |
| 128 |
| 129 GetCommState = _stdcall_libraries['kernel32'].GetCommState |
| 130 GetCommState.restype = BOOL |
| 131 GetCommState.argtypes = [HANDLE, LPDCB] |
| 132 |
| 133 LPCOMMTIMEOUTS = POINTER(_COMMTIMEOUTS) |
| 134 |
| 135 GetCommTimeouts = _stdcall_libraries['kernel32'].GetCommTimeouts |
| 136 GetCommTimeouts.restype = BOOL |
| 137 GetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS] |
| 138 |
| 139 PurgeComm = _stdcall_libraries['kernel32'].PurgeComm |
| 140 PurgeComm.restype = BOOL |
| 141 PurgeComm.argtypes = [HANDLE, DWORD] |
| 142 |
| 143 SetCommBreak = _stdcall_libraries['kernel32'].SetCommBreak |
| 144 SetCommBreak.restype = BOOL |
| 145 SetCommBreak.argtypes = [HANDLE] |
| 146 |
| 147 SetCommMask = _stdcall_libraries['kernel32'].SetCommMask |
| 148 SetCommMask.restype = BOOL |
| 149 SetCommMask.argtypes = [HANDLE, DWORD] |
| 150 |
| 151 SetCommState = _stdcall_libraries['kernel32'].SetCommState |
| 152 SetCommState.restype = BOOL |
| 153 SetCommState.argtypes = [HANDLE, LPDCB] |
| 154 |
| 155 SetCommTimeouts = _stdcall_libraries['kernel32'].SetCommTimeouts |
| 156 SetCommTimeouts.restype = BOOL |
| 157 SetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS] |
| 158 |
| 159 WaitForSingleObject = _stdcall_libraries['kernel32'].WaitForSingleObject |
| 160 WaitForSingleObject.restype = DWORD |
| 161 WaitForSingleObject.argtypes = [HANDLE, DWORD] |
| 162 |
| 163 ONESTOPBIT = 0 # Variable c_int |
| 164 TWOSTOPBITS = 2 # Variable c_int |
| 165 ONE5STOPBITS = 1 |
| 166 |
| 167 NOPARITY = 0 # Variable c_int |
| 168 ODDPARITY = 1 # Variable c_int |
| 169 EVENPARITY = 2 # Variable c_int |
| 170 MARKPARITY = 3 |
| 171 SPACEPARITY = 4 |
| 172 |
| 173 RTS_CONTROL_HANDSHAKE = 2 # Variable c_int |
| 174 RTS_CONTROL_DISABLE = 0 # Variable c_int |
| 175 RTS_CONTROL_ENABLE = 1 # Variable c_int |
| 176 RTS_CONTROL_TOGGLE = 3 # Variable c_int |
| 177 SETRTS = 3 |
| 178 CLRRTS = 4 |
| 179 |
| 180 DTR_CONTROL_HANDSHAKE = 2 # Variable c_int |
| 181 DTR_CONTROL_DISABLE = 0 # Variable c_int |
| 182 DTR_CONTROL_ENABLE = 1 # Variable c_int |
| 183 SETDTR = 5 |
| 184 CLRDTR = 6 |
| 185 |
| 186 MS_DSR_ON = 32 # Variable c_ulong |
| 187 EV_RING = 256 # Variable c_int |
| 188 EV_PERR = 512 # Variable c_int |
| 189 EV_ERR = 128 # Variable c_int |
| 190 SETXOFF = 1 # Variable c_int |
| 191 EV_RXCHAR = 1 # Variable c_int |
| 192 GENERIC_WRITE = 1073741824 # Variable c_long |
| 193 PURGE_TXCLEAR = 4 # Variable c_int |
| 194 FILE_FLAG_OVERLAPPED = 1073741824 # Variable c_int |
| 195 EV_DSR = 16 # Variable c_int |
| 196 MAXDWORD = 4294967295L # Variable c_uint |
| 197 EV_RLSD = 32 # Variable c_int |
| 198 ERROR_IO_PENDING = 997 # Variable c_long |
| 199 MS_CTS_ON = 16 # Variable c_ulong |
| 200 EV_EVENT1 = 2048 # Variable c_int |
| 201 EV_RX80FULL = 1024 # Variable c_int |
| 202 PURGE_RXABORT = 2 # Variable c_int |
| 203 FILE_ATTRIBUTE_NORMAL = 128 # Variable c_int |
| 204 PURGE_TXABORT = 1 # Variable c_int |
| 205 SETXON = 2 # Variable c_int |
| 206 OPEN_EXISTING = 3 # Variable c_int |
| 207 MS_RING_ON = 64 # Variable c_ulong |
| 208 EV_TXEMPTY = 4 # Variable c_int |
| 209 EV_RXFLAG = 2 # Variable c_int |
| 210 MS_RLSD_ON = 128 # Variable c_ulong |
| 211 GENERIC_READ = 2147483648L # Variable c_ulong |
| 212 EV_EVENT2 = 4096 # Variable c_int |
| 213 EV_CTS = 8 # Variable c_int |
| 214 EV_BREAK = 64 # Variable c_int |
| 215 PURGE_RXCLEAR = 8 # Variable c_int |
| 216 INFINITE = 0xFFFFFFFFL |
| 217 |
| 218 |
| 219 class N11_OVERLAPPED4DOLLAR_48E(Union): |
| 220 pass |
| 221 class N11_OVERLAPPED4DOLLAR_484DOLLAR_49E(Structure): |
| 222 pass |
| 223 N11_OVERLAPPED4DOLLAR_484DOLLAR_49E._fields_ = [ |
| 224 ('Offset', DWORD), |
| 225 ('OffsetHigh', DWORD), |
| 226 ] |
| 227 |
| 228 PVOID = c_void_p |
| 229 |
| 230 N11_OVERLAPPED4DOLLAR_48E._anonymous_ = ['_0'] |
| 231 N11_OVERLAPPED4DOLLAR_48E._fields_ = [ |
| 232 ('_0', N11_OVERLAPPED4DOLLAR_484DOLLAR_49E), |
| 233 ('Pointer', PVOID), |
| 234 ] |
| 235 _OVERLAPPED._anonymous_ = ['_0'] |
| 236 _OVERLAPPED._fields_ = [ |
| 237 ('Internal', ULONG_PTR), |
| 238 ('InternalHigh', ULONG_PTR), |
| 239 ('_0', N11_OVERLAPPED4DOLLAR_48E), |
| 240 ('hEvent', HANDLE), |
| 241 ] |
| 242 _SECURITY_ATTRIBUTES._fields_ = [ |
| 243 ('nLength', DWORD), |
| 244 ('lpSecurityDescriptor', LPVOID), |
| 245 ('bInheritHandle', BOOL), |
| 246 ] |
| 247 _COMSTAT._fields_ = [ |
| 248 ('fCtsHold', DWORD, 1), |
| 249 ('fDsrHold', DWORD, 1), |
| 250 ('fRlsdHold', DWORD, 1), |
| 251 ('fXoffHold', DWORD, 1), |
| 252 ('fXoffSent', DWORD, 1), |
| 253 ('fEof', DWORD, 1), |
| 254 ('fTxim', DWORD, 1), |
| 255 ('fReserved', DWORD, 25), |
| 256 ('cbInQue', DWORD), |
| 257 ('cbOutQue', DWORD), |
| 258 ] |
| 259 _DCB._fields_ = [ |
| 260 ('DCBlength', DWORD), |
| 261 ('BaudRate', DWORD), |
| 262 ('fBinary', DWORD, 1), |
| 263 ('fParity', DWORD, 1), |
| 264 ('fOutxCtsFlow', DWORD, 1), |
| 265 ('fOutxDsrFlow', DWORD, 1), |
| 266 ('fDtrControl', DWORD, 2), |
| 267 ('fDsrSensitivity', DWORD, 1), |
| 268 ('fTXContinueOnXoff', DWORD, 1), |
| 269 ('fOutX', DWORD, 1), |
| 270 ('fInX', DWORD, 1), |
| 271 ('fErrorChar', DWORD, 1), |
| 272 ('fNull', DWORD, 1), |
| 273 ('fRtsControl', DWORD, 2), |
| 274 ('fAbortOnError', DWORD, 1), |
| 275 ('fDummy2', DWORD, 17), |
| 276 ('wReserved', WORD), |
| 277 ('XonLim', WORD), |
| 278 ('XoffLim', WORD), |
| 279 ('ByteSize', BYTE), |
| 280 ('Parity', BYTE), |
| 281 ('StopBits', BYTE), |
| 282 ('XonChar', c_char), |
| 283 ('XoffChar', c_char), |
| 284 ('ErrorChar', c_char), |
| 285 ('EofChar', c_char), |
| 286 ('EvtChar', c_char), |
| 287 ('wReserved1', WORD), |
| 288 ] |
| 289 _COMMTIMEOUTS._fields_ = [ |
| 290 ('ReadIntervalTimeout', DWORD), |
| 291 ('ReadTotalTimeoutMultiplier', DWORD), |
| 292 ('ReadTotalTimeoutConstant', DWORD), |
| 293 ('WriteTotalTimeoutMultiplier', DWORD), |
| 294 ('WriteTotalTimeoutConstant', DWORD), |
| 295 ] |
| 296 __all__ = ['GetLastError', 'MS_CTS_ON', 'FILE_ATTRIBUTE_NORMAL', |
| 297 'DTR_CONTROL_ENABLE', '_COMSTAT', 'MS_RLSD_ON', |
| 298 'GetOverlappedResult', 'SETXON', 'PURGE_TXABORT', |
| 299 'PurgeComm', 'N11_OVERLAPPED4DOLLAR_48E', 'EV_RING', |
| 300 'ONESTOPBIT', 'SETXOFF', 'PURGE_RXABORT', 'GetCommState', |
| 301 'RTS_CONTROL_ENABLE', '_DCB', 'CreateEvent', |
| 302 '_COMMTIMEOUTS', '_SECURITY_ATTRIBUTES', 'EV_DSR', |
| 303 'EV_PERR', 'EV_RXFLAG', 'OPEN_EXISTING', 'DCB', |
| 304 'FILE_FLAG_OVERLAPPED', 'EV_CTS', 'SetupComm', |
| 305 'LPOVERLAPPED', 'EV_TXEMPTY', 'ClearCommBreak', |
| 306 'LPSECURITY_ATTRIBUTES', 'SetCommBreak', 'SetCommTimeouts', |
| 307 'COMMTIMEOUTS', 'ODDPARITY', 'EV_RLSD', |
| 308 'GetCommModemStatus', 'EV_EVENT2', 'PURGE_TXCLEAR', |
| 309 'EV_BREAK', 'EVENPARITY', 'LPCVOID', 'COMSTAT', 'ReadFile', |
| 310 'PVOID', '_OVERLAPPED', 'WriteFile', 'GetCommTimeouts', |
| 311 'ResetEvent', 'EV_RXCHAR', 'LPCOMSTAT', 'ClearCommError', |
| 312 'ERROR_IO_PENDING', 'EscapeCommFunction', 'GENERIC_READ', |
| 313 'RTS_CONTROL_HANDSHAKE', 'OVERLAPPED', |
| 314 'DTR_CONTROL_HANDSHAKE', 'PURGE_RXCLEAR', 'GENERIC_WRITE', |
| 315 'LPDCB', 'CreateEventW', 'SetCommMask', 'EV_EVENT1', |
| 316 'SetCommState', 'LPVOID', 'CreateFileW', 'LPDWORD', |
| 317 'EV_RX80FULL', 'TWOSTOPBITS', 'LPCOMMTIMEOUTS', 'MAXDWORD', |
| 318 'MS_DSR_ON', 'MS_RING_ON', |
| 319 'N11_OVERLAPPED4DOLLAR_484DOLLAR_49E', 'EV_ERR', |
| 320 'ULONG_PTR', 'CreateFile', 'NOPARITY', 'CloseHandle'] |
OLD | NEW |