123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366 |
- #! 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
- # pylint: disable=invalid-name,too-few-public-methods,protected-access,too-many-instance-attributes
- from __future__ import absolute_import
- from ctypes import c_ulong, c_void_p, c_int64, c_char, \
- WinDLL, sizeof, Structure, Union, POINTER
- 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():
- ULONG_PTR = c_int64
- else:
- 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]
- WaitCommEvent = _stdcall_libraries['kernel32'].WaitCommEvent
- WaitCommEvent.restype = BOOL
- WaitCommEvent.argtypes = [HANDLE, LPDWORD, LPOVERLAPPED]
- CancelIoEx = _stdcall_libraries['kernel32'].CancelIoEx
- CancelIoEx.restype = BOOL
- CancelIoEx.argtypes = [HANDLE, LPOVERLAPPED]
- 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_NOT_ENOUGH_MEMORY = 8
- ERROR_OPERATION_ABORTED = 995
- ERROR_IO_INCOMPLETE = 996
- ERROR_IO_PENDING = 997 # Variable c_long
- ERROR_INVALID_USER_BUFFER = 1784
- 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
- CE_RXOVER = 0x0001
- CE_OVERRUN = 0x0002
- CE_RXPARITY = 0x0004
- CE_FRAME = 0x0008
- CE_BREAK = 0x0010
- 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']
|