summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2011-08-21 23:38:26 +0000
committercliechti <cliechti@f19166aa-fa4f-0410-85c2-fa1106f25c8a>2011-08-21 23:38:26 +0000
commit4339d9cfcb493b11d32a09c05890d58ed7eb3c8e (patch)
tree6a2a08fe013852ba524b7c89dce86356f282356e
parent34710372a365db94f156bfd0f1740aff246f765e (diff)
downloadpyserial-4339d9cfcb493b11d32a09c05890d58ed7eb3c8e.tar.gz
fix types that are not yet available in Python older 2.x
git-svn-id: http://svn.code.sf.net/p/pyserial/code/trunk/pyserial@420 f19166aa-fa4f-0410-85c2-fa1106f25c8a
-rw-r--r--serial/tools/list_ports_windows.py23
1 files changed, 14 insertions, 9 deletions
diff --git a/serial/tools/list_ports_windows.py b/serial/tools/list_ports_windows.py
index a18095b..52270d7 100644
--- a/serial/tools/list_ports_windows.py
+++ b/serial/tools/list_ports_windows.py
@@ -15,23 +15,27 @@ from ctypes.wintypes import DWORD
from ctypes.wintypes import WORD
from ctypes.wintypes import LONG
from ctypes.wintypes import ULONG
-from ctypes.wintypes import PDWORD
-from ctypes.wintypes import LPDWORD
-from ctypes.wintypes import PBYTE
-from ctypes.wintypes import LPBYTE
from ctypes.wintypes import LPCSTR
-from ctypes.wintypes import PHKEY
from ctypes.wintypes import HKEY
-
+from ctypes.wintypes import BYTE
HDEVINFO = ctypes.c_int
PCTSTR = ctypes.c_char_p
CHAR = ctypes.c_char
+LPDWORD = PDWORD = ctypes.POINTER(DWORD)
+#~ LPBYTE = PBYTE = ctypes.POINTER(BYTE)
+LPBYTE = PBYTE = ctypes.c_void_p # XXX avoids error about types
+PHKEY = ctypes.POINTER(HKEY)
ACCESS_MASK = DWORD
REGSAM = ACCESS_MASK
+def byte_buffer(length):
+ """Get a buffer for a string"""
+ return (ctypes.c_char*length)()
+
+
class GUID(ctypes.Structure):
_fields_ = [
('Data1', ctypes.c_ulong),
@@ -122,6 +126,7 @@ DIREG_DEV = 0x00000001
KEY_READ = 0x20019
REG_SZ = 1
+
def comports():
"""This generator scans the device registry for com ports and yields port, desc, hwid"""
g_hdi = SetupDiGetClassDevs(ctypes.byref(GUID_CLASS_COMPORT), None, NULL, DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);
@@ -157,14 +162,14 @@ def comports():
raise ctypes.WinError()
# hardware ID
- szHardwareID = ctypes.create_string_buffer('\0' * 250)
+ szHardwareID = byte_buffer(250)
if not SetupDiGetDeviceRegistryProperty(g_hdi, ctypes.byref(devinfo), SPDRP_HARDWAREID, None, ctypes.byref(szHardwareID), ctypes.sizeof(szHardwareID) - 1, None):
# Ignore ERROR_INSUFFICIENT_BUFFER
if GetLastError() != ERROR_INSUFFICIENT_BUFFER:
raise ctypes.WinError()
# friendly name
- szFriendlyName = ctypes.create_string_buffer('\0' * 250)
+ szFriendlyName = byte_buffer(250)
if not SetupDiGetDeviceRegistryProperty(g_hdi, ctypes.byref(devinfo), SPDRP_FRIENDLYNAME, None, ctypes.byref(szFriendlyName), ctypes.sizeof(szFriendlyName) - 1, None):
# Ignore ERROR_INSUFFICIENT_BUFFER
if ctypes.GetLastError() != ERROR_INSUFFICIENT_BUFFER:
@@ -173,7 +178,7 @@ def comports():
else:
# the real com port name has to read differently...
hkey = SetupDiOpenDevRegKey(g_hdi, ctypes.byref(devinfo), DICS_FLAG_GLOBAL, 0, DIREG_DEV, KEY_READ)
- port_name_buffer = ctypes.create_string_buffer('\0' * 250)
+ port_name_buffer = byte_buffer(250)
port_name_length = ULONG(ctypes.sizeof(port_name_buffer))
RegQueryValueEx(hkey, "PortName", None, None, ctypes.byref(port_name_buffer), ctypes.byref(port_name_length))
RegCloseKey(hkey)