utils.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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', 'hexify', 'from_file', 'wrap', 'PY2', 'ENCODING']
  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 to_hex(x):
  19. return hex(ord(x))
  20. def hexify(byte_arr):
  21. return ':'.join((to_hex(x)[2:] for x in byte_arr))
  22. def from_file(path):
  23. with open(path, 'rb') as f:
  24. content = f.read()
  25. return content if PY2 else content.decode(ENCODING)
  26. class DecoderWrapper(ObjectProxy):
  27. def read(self, *args, **kwargs):
  28. res = self.__wrapped__.read(*args, **kwargs)
  29. return res if PY2 else res.decode(ENCODING)
  30. def write(self, data):
  31. data = data if PY2 else data.encode(ENCODING)
  32. return self.__wrapped__.write(data)
  33. def wrap(x):
  34. return DecoderWrapper(x)