abschlussarbeit/_trash/lib/python3.11/site-packages/binhoHostAdapter/binhoUtilities.py

120 lines
4 KiB
Python

## binhoUtilities Python Library
##
## Jonathan Georgino <jonathan@binho.io>
## Binho LLC
## www.binho.io
import sys
import glob
import serial
import warnings
# Source: https://stackoverflow.com/questions/12090503/listing-available-com-ports-with-python
# Claims that it is successfully tested on Windows 8.1 x64, Windows 10 x64, Mac OS X 10.9.x / 10.10.x / 10.11.x and Ubuntu 14.04 / 14.10 / 15.04 / 15.10 with both Python 2 and Python 3.
class binhoUtilities:
def __init__(self):
warnings.warn('The binhoUtilities class has been deprecated and will be removed in a future version, see: htps://support.binho.io/python-libraries/binhoutilities for details',
category=UserWarning)
def listAvailablePorts(self):
warnings.warn('The binhoUtilities class has been deprecated and will be removed in a future version, see: htps://support.binho.io/python-libraries/binhoutilities for details',
category=UserWarning)
return listAvailablePorts()
def listAvailableDevices(self):
warnings.warn('The binhoUtilities class has been deprecated and will be removed in a future version, see: htps://support.binho.io/python-libraries/binhoutilities for details',
category=UserWarning)
return listAvailableDevices()
def getPortByDeviceID(self, deviceID):
warnings.warn('The binhoUtilities class has been deprecated and will be removed in a future version, see: htps://support.binho.io/python-libraries/binhoutilities for details',
category=UserWarning)
return getPortByDeviceID(deviceID)
def _checkForDeviceID(serialPort):
"""
Checks if a device is a binho and returns the response
:param serialPort: serial port address
:type serialPort: str
:return: DeviceID
:rtype: str
"""
comport = serial.Serial(serialPort, baudrate=1000000, timeout=0.025, write_timeout=0.05)
command = '+ID ?\n'
comport.write(command.encode('utf-8'))
receivedData = comport.readline().strip().decode('utf-8')
if len(receivedData) > 0:
if receivedData[0] != "-":
receivedData = comport.readline().strip().decode('utf-8')
comport.close()
return receivedData
def listAvailablePorts():
"""
List serial ports on a system
:return: List of serial port address
:rtype: List[str]
"""
if sys.platform.startswith('win'):
ports = [f'COM{i + 1}' for i in range(256)]
elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
# this excludes your current terminal "/dev/tty"
ports = glob.glob('/dev/tty[A-Za-z]*')
elif sys.platform.startswith('darwin'):
ports = glob.glob('/dev/cu.usbmodem*')
else:
raise EnvironmentError('Unsupported platform')
result = []
for port in ports:
try:
s = serial.Serial(port, timeout=500)
s.close()
result.append(port)
except (OSError, serial.SerialException):
pass
return result
def listAvailableDevices():
"""
Lists connected binhos
:return: List of serial ports that have binhos attached
:rtype: List[str]
"""
ports = listAvailablePorts()
result = []
for port in ports:
try:
resp = _checkForDeviceID(port)
if '-ID' in resp:
result.append(port)
except (OSError, serial.SerialException):
pass
return result
def getPortByDeviceID(deviceID):
"""
Get the port address that a specific binho is attached to
:param deviceID: Device ID string
:type deviceID: str
:return: List of ports with a matching device ID
:rtype: List[str]
"""
ports = listAvailablePorts()
result = []
for port in ports:
try:
resp = _checkForDeviceID(port)
if resp == '-ID ' + deviceID:
result.append(port)
elif resp == '-ID 0x' + deviceID:
result.append(port)
except (OSError, serial.SerialException):
pass
return result
if __name__ == '__main__':
print(listAvailableDevices())