| Viewing file:  win32.py (10.2 KB)      -rw-r--r-- Select action/file-type:
 
  (+) |  (+) |  (+) | Code (+) | Session (+) |  (+) | SDB (+) |  (+) |  (+) |  (+) |  (+) |  (+) | 
 
#! python#
 # Constants and types for use with Windows API, used by serialwin32.py
 #
 # This file is part of pySerial. https://github.com/pyserial/pyserial
 # (C) 2001-2015 Chris Liechti <cliechti@gmx.net>
 #
 # SPDX-License-Identifier:    BSD-3-Clause
 
 from ctypes import *
 from ctypes.wintypes import HANDLE
 from ctypes.wintypes import BOOL
 from ctypes.wintypes import LPCWSTR
 from ctypes.wintypes import DWORD
 from ctypes.wintypes import WORD
 from ctypes.wintypes import BYTE
 _stdcall_libraries = {}
 _stdcall_libraries['kernel32'] = WinDLL('kernel32')
 
 INVALID_HANDLE_VALUE = HANDLE(-1).value
 
 
 # some details of the windows API differ between 32 and 64 bit systems..
 def is_64bit():
 """Returns true when running on a 64 bit system"""
 return sizeof(c_ulong) != sizeof(c_void_p)
 
 # ULONG_PTR is a an ordinary number, not a pointer and contrary to the name it
 # is either 32 or 64 bits, depending on the type of windows...
 # so test if this a 32 bit windows...
 if is_64bit():
 # assume 64 bits
 ULONG_PTR = c_int64
 else:
 # 32 bits
 ULONG_PTR = c_ulong
 
 
 class _SECURITY_ATTRIBUTES(Structure):
 pass
 LPSECURITY_ATTRIBUTES = POINTER(_SECURITY_ATTRIBUTES)
 
 
 try:
 CreateEventW = _stdcall_libraries['kernel32'].CreateEventW
 except AttributeError:
 # Fallback to non wide char version for old OS...
 from ctypes.wintypes import LPCSTR
 CreateEventA = _stdcall_libraries['kernel32'].CreateEventA
 CreateEventA.restype = HANDLE
 CreateEventA.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCSTR]
 CreateEvent = CreateEventA
 
 CreateFileA = _stdcall_libraries['kernel32'].CreateFileA
 CreateFileA.restype = HANDLE
 CreateFileA.argtypes = [LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE]
 CreateFile = CreateFileA
 else:
 CreateEventW.restype = HANDLE
 CreateEventW.argtypes = [LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCWSTR]
 CreateEvent = CreateEventW  # alias
 
 CreateFileW = _stdcall_libraries['kernel32'].CreateFileW
 CreateFileW.restype = HANDLE
 CreateFileW.argtypes = [LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE]
 CreateFile = CreateFileW  # alias
 
 
 class _OVERLAPPED(Structure):
 pass
 
 OVERLAPPED = _OVERLAPPED
 
 
 class _COMSTAT(Structure):
 pass
 
 COMSTAT = _COMSTAT
 
 
 class _DCB(Structure):
 pass
 
 DCB = _DCB
 
 
 class _COMMTIMEOUTS(Structure):
 pass
 
 COMMTIMEOUTS = _COMMTIMEOUTS
 
 GetLastError = _stdcall_libraries['kernel32'].GetLastError
 GetLastError.restype = DWORD
 GetLastError.argtypes = []
 
 LPOVERLAPPED = POINTER(_OVERLAPPED)
 LPDWORD = POINTER(DWORD)
 
 GetOverlappedResult = _stdcall_libraries['kernel32'].GetOverlappedResult
 GetOverlappedResult.restype = BOOL
 GetOverlappedResult.argtypes = [HANDLE, LPOVERLAPPED, LPDWORD, BOOL]
 
 ResetEvent = _stdcall_libraries['kernel32'].ResetEvent
 ResetEvent.restype = BOOL
 ResetEvent.argtypes = [HANDLE]
 
 LPCVOID = c_void_p
 
 WriteFile = _stdcall_libraries['kernel32'].WriteFile
 WriteFile.restype = BOOL
 WriteFile.argtypes = [HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED]
 
 LPVOID = c_void_p
 
 ReadFile = _stdcall_libraries['kernel32'].ReadFile
 ReadFile.restype = BOOL
 ReadFile.argtypes = [HANDLE, LPVOID, DWORD, LPDWORD, LPOVERLAPPED]
 
 CloseHandle = _stdcall_libraries['kernel32'].CloseHandle
 CloseHandle.restype = BOOL
 CloseHandle.argtypes = [HANDLE]
 
 ClearCommBreak = _stdcall_libraries['kernel32'].ClearCommBreak
 ClearCommBreak.restype = BOOL
 ClearCommBreak.argtypes = [HANDLE]
 
 LPCOMSTAT = POINTER(_COMSTAT)
 
 ClearCommError = _stdcall_libraries['kernel32'].ClearCommError
 ClearCommError.restype = BOOL
 ClearCommError.argtypes = [HANDLE, LPDWORD, LPCOMSTAT]
 
 SetupComm = _stdcall_libraries['kernel32'].SetupComm
 SetupComm.restype = BOOL
 SetupComm.argtypes = [HANDLE, DWORD, DWORD]
 
 EscapeCommFunction = _stdcall_libraries['kernel32'].EscapeCommFunction
 EscapeCommFunction.restype = BOOL
 EscapeCommFunction.argtypes = [HANDLE, DWORD]
 
 GetCommModemStatus = _stdcall_libraries['kernel32'].GetCommModemStatus
 GetCommModemStatus.restype = BOOL
 GetCommModemStatus.argtypes = [HANDLE, LPDWORD]
 
 LPDCB = POINTER(_DCB)
 
 GetCommState = _stdcall_libraries['kernel32'].GetCommState
 GetCommState.restype = BOOL
 GetCommState.argtypes = [HANDLE, LPDCB]
 
 LPCOMMTIMEOUTS = POINTER(_COMMTIMEOUTS)
 
 GetCommTimeouts = _stdcall_libraries['kernel32'].GetCommTimeouts
 GetCommTimeouts.restype = BOOL
 GetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS]
 
 PurgeComm = _stdcall_libraries['kernel32'].PurgeComm
 PurgeComm.restype = BOOL
 PurgeComm.argtypes = [HANDLE, DWORD]
 
 SetCommBreak = _stdcall_libraries['kernel32'].SetCommBreak
 SetCommBreak.restype = BOOL
 SetCommBreak.argtypes = [HANDLE]
 
 SetCommMask = _stdcall_libraries['kernel32'].SetCommMask
 SetCommMask.restype = BOOL
 SetCommMask.argtypes = [HANDLE, DWORD]
 
 SetCommState = _stdcall_libraries['kernel32'].SetCommState
 SetCommState.restype = BOOL
 SetCommState.argtypes = [HANDLE, LPDCB]
 
 SetCommTimeouts = _stdcall_libraries['kernel32'].SetCommTimeouts
 SetCommTimeouts.restype = BOOL
 SetCommTimeouts.argtypes = [HANDLE, LPCOMMTIMEOUTS]
 
 WaitForSingleObject = _stdcall_libraries['kernel32'].WaitForSingleObject
 WaitForSingleObject.restype = DWORD
 WaitForSingleObject.argtypes = [HANDLE, DWORD]
 
 ONESTOPBIT = 0  # Variable c_int
 TWOSTOPBITS = 2  # Variable c_int
 ONE5STOPBITS = 1
 
 NOPARITY = 0  # Variable c_int
 ODDPARITY = 1  # Variable c_int
 EVENPARITY = 2  # Variable c_int
 MARKPARITY = 3
 SPACEPARITY = 4
 
 RTS_CONTROL_HANDSHAKE = 2  # Variable c_int
 RTS_CONTROL_DISABLE = 0  # Variable c_int
 RTS_CONTROL_ENABLE = 1  # Variable c_int
 RTS_CONTROL_TOGGLE = 3  # Variable c_int
 SETRTS = 3
 CLRRTS = 4
 
 DTR_CONTROL_HANDSHAKE = 2  # Variable c_int
 DTR_CONTROL_DISABLE = 0  # Variable c_int
 DTR_CONTROL_ENABLE = 1  # Variable c_int
 SETDTR = 5
 CLRDTR = 6
 
 MS_DSR_ON = 32  # Variable c_ulong
 EV_RING = 256  # Variable c_int
 EV_PERR = 512  # Variable c_int
 EV_ERR = 128  # Variable c_int
 SETXOFF = 1  # Variable c_int
 EV_RXCHAR = 1  # Variable c_int
 GENERIC_WRITE = 1073741824  # Variable c_long
 PURGE_TXCLEAR = 4  # Variable c_int
 FILE_FLAG_OVERLAPPED = 1073741824  # Variable c_int
 EV_DSR = 16  # Variable c_int
 MAXDWORD = 4294967295  # Variable c_uint
 EV_RLSD = 32  # Variable c_int
 ERROR_SUCCESS = 0
 ERROR_IO_PENDING = 997  # Variable c_long
 MS_CTS_ON = 16  # Variable c_ulong
 EV_EVENT1 = 2048  # Variable c_int
 EV_RX80FULL = 1024  # Variable c_int
 PURGE_RXABORT = 2  # Variable c_int
 FILE_ATTRIBUTE_NORMAL = 128  # Variable c_int
 PURGE_TXABORT = 1  # Variable c_int
 SETXON = 2  # Variable c_int
 OPEN_EXISTING = 3  # Variable c_int
 MS_RING_ON = 64  # Variable c_ulong
 EV_TXEMPTY = 4  # Variable c_int
 EV_RXFLAG = 2  # Variable c_int
 MS_RLSD_ON = 128  # Variable c_ulong
 GENERIC_READ = 2147483648  # Variable c_ulong
 EV_EVENT2 = 4096  # Variable c_int
 EV_CTS = 8  # Variable c_int
 EV_BREAK = 64  # Variable c_int
 PURGE_RXCLEAR = 8  # Variable c_int
 INFINITE = 0xFFFFFFFF
 
 
 class N11_OVERLAPPED4DOLLAR_48E(Union):
 pass
 
 
 class N11_OVERLAPPED4DOLLAR_484DOLLAR_49E(Structure):
 pass
 
 
 N11_OVERLAPPED4DOLLAR_484DOLLAR_49E._fields_ = [
 ('Offset', DWORD),
 ('OffsetHigh', DWORD),
 ]
 
 PVOID = c_void_p
 
 N11_OVERLAPPED4DOLLAR_48E._anonymous_ = ['_0']
 N11_OVERLAPPED4DOLLAR_48E._fields_ = [
 ('_0', N11_OVERLAPPED4DOLLAR_484DOLLAR_49E),
 ('Pointer', PVOID),
 ]
 _OVERLAPPED._anonymous_ = ['_0']
 _OVERLAPPED._fields_ = [
 ('Internal', ULONG_PTR),
 ('InternalHigh', ULONG_PTR),
 ('_0', N11_OVERLAPPED4DOLLAR_48E),
 ('hEvent', HANDLE),
 ]
 _SECURITY_ATTRIBUTES._fields_ = [
 ('nLength', DWORD),
 ('lpSecurityDescriptor', LPVOID),
 ('bInheritHandle', BOOL),
 ]
 _COMSTAT._fields_ = [
 ('fCtsHold', DWORD, 1),
 ('fDsrHold', DWORD, 1),
 ('fRlsdHold', DWORD, 1),
 ('fXoffHold', DWORD, 1),
 ('fXoffSent', DWORD, 1),
 ('fEof', DWORD, 1),
 ('fTxim', DWORD, 1),
 ('fReserved', DWORD, 25),
 ('cbInQue', DWORD),
 ('cbOutQue', DWORD),
 ]
 _DCB._fields_ = [
 ('DCBlength', DWORD),
 ('BaudRate', DWORD),
 ('fBinary', DWORD, 1),
 ('fParity', DWORD, 1),
 ('fOutxCtsFlow', DWORD, 1),
 ('fOutxDsrFlow', DWORD, 1),
 ('fDtrControl', DWORD, 2),
 ('fDsrSensitivity', DWORD, 1),
 ('fTXContinueOnXoff', DWORD, 1),
 ('fOutX', DWORD, 1),
 ('fInX', DWORD, 1),
 ('fErrorChar', DWORD, 1),
 ('fNull', DWORD, 1),
 ('fRtsControl', DWORD, 2),
 ('fAbortOnError', DWORD, 1),
 ('fDummy2', DWORD, 17),
 ('wReserved', WORD),
 ('XonLim', WORD),
 ('XoffLim', WORD),
 ('ByteSize', BYTE),
 ('Parity', BYTE),
 ('StopBits', BYTE),
 ('XonChar', c_char),
 ('XoffChar', c_char),
 ('ErrorChar', c_char),
 ('EofChar', c_char),
 ('EvtChar', c_char),
 ('wReserved1', WORD),
 ]
 _COMMTIMEOUTS._fields_ = [
 ('ReadIntervalTimeout', DWORD),
 ('ReadTotalTimeoutMultiplier', DWORD),
 ('ReadTotalTimeoutConstant', DWORD),
 ('WriteTotalTimeoutMultiplier', DWORD),
 ('WriteTotalTimeoutConstant', DWORD),
 ]
 __all__ = ['GetLastError', 'MS_CTS_ON', 'FILE_ATTRIBUTE_NORMAL',
 'DTR_CONTROL_ENABLE', '_COMSTAT', 'MS_RLSD_ON',
 'GetOverlappedResult', 'SETXON', 'PURGE_TXABORT',
 'PurgeComm', 'N11_OVERLAPPED4DOLLAR_48E', 'EV_RING',
 'ONESTOPBIT', 'SETXOFF', 'PURGE_RXABORT', 'GetCommState',
 'RTS_CONTROL_ENABLE', '_DCB', 'CreateEvent',
 '_COMMTIMEOUTS', '_SECURITY_ATTRIBUTES', 'EV_DSR',
 'EV_PERR', 'EV_RXFLAG', 'OPEN_EXISTING', 'DCB',
 'FILE_FLAG_OVERLAPPED', 'EV_CTS', 'SetupComm',
 'LPOVERLAPPED', 'EV_TXEMPTY', 'ClearCommBreak',
 'LPSECURITY_ATTRIBUTES', 'SetCommBreak', 'SetCommTimeouts',
 'COMMTIMEOUTS', 'ODDPARITY', 'EV_RLSD',
 'GetCommModemStatus', 'EV_EVENT2', 'PURGE_TXCLEAR',
 'EV_BREAK', 'EVENPARITY', 'LPCVOID', 'COMSTAT', 'ReadFile',
 'PVOID', '_OVERLAPPED', 'WriteFile', 'GetCommTimeouts',
 'ResetEvent', 'EV_RXCHAR', 'LPCOMSTAT', 'ClearCommError',
 'ERROR_IO_PENDING', 'EscapeCommFunction', 'GENERIC_READ',
 'RTS_CONTROL_HANDSHAKE', 'OVERLAPPED',
 'DTR_CONTROL_HANDSHAKE', 'PURGE_RXCLEAR', 'GENERIC_WRITE',
 'LPDCB', 'CreateEventW', 'SetCommMask', 'EV_EVENT1',
 'SetCommState', 'LPVOID', 'CreateFileW', 'LPDWORD',
 'EV_RX80FULL', 'TWOSTOPBITS', 'LPCOMMTIMEOUTS', 'MAXDWORD',
 'MS_DSR_ON', 'MS_RING_ON',
 'N11_OVERLAPPED4DOLLAR_484DOLLAR_49E', 'EV_ERR',
 'ULONG_PTR', 'CreateFile', 'NOPARITY', 'CloseHandle']
 
 |