utils.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. # -*- coding: utf-8 -*-
  2. # Copyright (C) 2015-2016 Peter Magnusson <peter@birchroad.net>
  3. """Various utility functions"""
  4. from platform import system
  5. from os import environ
  6. from wrapt import ObjectProxy
  7. from sys import version_info
  8. __all__ = ['default_port', 'system']
  9. PY2 = version_info.major == 2
  10. ENCODING = 'latin1'
  11. def default_port(sysname=system()):
  12. """This returns the default port used for different systems if SERIALPORT env variable is not set"""
  13. system_default = {
  14. 'Windows': 'COM1',
  15. 'Darwin': '/dev/tty.SLAB_USBtoUART'
  16. }.get(sysname, '/dev/ttyUSB0')
  17. return environ.get('SERIALPORT', system_default)
  18. def bytefy(x):
  19. return x if type(x) == bytes else x.encode(ENCODING)
  20. def to_hex(x):
  21. return hex(ord(x))
  22. def hexify(byte_arr):
  23. return ':'.join((to_hex(x)[2:] for x in byte_arr))
  24. def from_file(path):
  25. with open(path, 'rb') as f:
  26. content = f.read()
  27. return content if PY2 else content.decode(ENCODING)
  28. class DecoderWrapper(ObjectProxy):
  29. def read(self, *args, **kwargs):
  30. res = self.__wrapped__.read(*args, **kwargs)
  31. return res if PY2 else res.decode(ENCODING)
  32. def write(self, data):
  33. data = data if PY2 else data.encode(ENCODING)
  34. return self.__wrapped__.write(data)
  35. def wrap(x):
  36. return DecoderWrapper(x)