| Index: tools/telemetry/third_party/pyserial/serial/win32.py
|
| diff --git a/tools/telemetry/third_party/pyserial/serial/win32.py b/tools/telemetry/third_party/pyserial/serial/win32.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..61b3d7a931f6c94b2bf3d56a9fcc05240151dd2a
|
| --- /dev/null
|
| +++ b/tools/telemetry/third_party/pyserial/serial/win32.py
|
| @@ -0,0 +1,320 @@
|
| +from ctypes import *
|
| +from ctypes.wintypes import HANDLE
|
| +from ctypes.wintypes import BOOL
|
| +from ctypes.wintypes import LPCWSTR
|
| +_stdcall_libraries = {}
|
| +_stdcall_libraries['kernel32'] = WinDLL('kernel32')
|
| +from ctypes.wintypes import DWORD
|
| +from ctypes.wintypes import WORD
|
| +from ctypes.wintypes import BYTE
|
| +
|
| +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 = 4294967295L # Variable c_uint
|
| +EV_RLSD = 32 # Variable c_int
|
| +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 = 2147483648L # 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 = 0xFFFFFFFFL
|
| +
|
| +
|
| +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']
|
|
|