PMMain.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on 29-03-2013
  4. @author: citan
  5. """
  6. import os
  7. import os.path
  8. import time
  9. import cPickle as pickle
  10. import platform
  11. from pimonitor.PM import PM
  12. from pimonitor.PMConnection import PMConnection
  13. from pimonitor.PMDemoConnection import PMDemoConnection
  14. from pimonitor.PMXmlParser import PMXmlParser
  15. from pimonitor.ui.PMScreen import PMScreen
  16. from pimonitor.ui.PMSingleWindow import PMSingleWindow
  17. if __name__ == '__main__':
  18. print platform.system()
  19. if platform.system() == "Linux":
  20. from evdev import InputDevice, list_devices
  21. devices = map(InputDevice, list_devices())
  22. eventX = ""
  23. for dev in devices:
  24. if dev.name == "ADS7846 Touchscreen":
  25. eventX = dev.fn
  26. os.environ["SDL_FBDEV"] = "/dev/fb1"
  27. os.environ["SDL_MOUSEDRV"] = "TSLIB"
  28. os.environ["SDL_MOUSEDEV"] = eventX
  29. screen = PMScreen()
  30. log_id = PM.log('Application started')
  31. screen.render()
  32. parser = PMXmlParser()
  33. supported_parameters = []
  34. if os.path.isfile("data/data.pkl"):
  35. serializedDataFile = open("data/data.pkl", "rb")
  36. defined_parameters = pickle.load(serializedDataFile)
  37. serializedDataFile.close()
  38. else:
  39. defined_parameters = parser.parse("logger_METRIC_EN_v263.xml")
  40. # output = open("data/data.pkl", "wb")
  41. #pickle.dump(defined_parameters, output, -1)
  42. #output.close()
  43. if platform.system() == "Linux":
  44. connection = PMConnection()
  45. else:
  46. connection = PMDemoConnection()
  47. while True:
  48. try:
  49. connection.open()
  50. ecu_packet = connection.init(1)
  51. tcu_packet = connection.init(2)
  52. if ecu_packet is None or tcu_packet is None:
  53. PM.log("Can't get initial data", log_id)
  54. continue
  55. PM.log("ECU ROM ID: " + ecu_packet.get_rom_id())
  56. PM.log("TCU ROM ID: " + tcu_packet.get_rom_id())
  57. for p in defined_parameters:
  58. if (p.get_target() & 0x1 == 0x1) and p.is_supported(ecu_packet.to_bytes()[4:]):
  59. if not filter(lambda x: x.get_id() == p.get_id(), supported_parameters):
  60. p.switch_to_ecu_id(ecu_packet.get_rom_id())
  61. supported_parameters.append(p)
  62. for p in defined_parameters:
  63. if ((p.get_target() & 0x2 == 0x2) or (p.get_target() & 0x1 == 0x1)) and p.is_supported(
  64. tcu_packet.to_bytes()[4:]):
  65. if not filter(lambda x: x.get_id() == p.get_id(), supported_parameters):
  66. p.switch_to_ecu_id(tcu_packet.get_rom_id())
  67. supported_parameters.append(p)
  68. for p in defined_parameters:
  69. p_deps = p.get_dependencies()
  70. if not p_deps:
  71. continue
  72. deps_found = ()
  73. for dep in p_deps:
  74. deps_found = filter(lambda x: x.get_id() == dep, supported_parameters)
  75. if not deps_found:
  76. break
  77. if len(deps_found) > 1:
  78. raise Exception('duplicated dependencies', deps_found)
  79. p.add_parameter(deps_found[0])
  80. if deps_found:
  81. supported_parameters.append(p)
  82. supported_parameters = sorted(supported_parameters)
  83. for p in supported_parameters:
  84. window = PMSingleWindow(p)
  85. screen.add_window(window)
  86. screen.next_window()
  87. while True:
  88. window = screen.get_window()
  89. param = window.get_parameter()
  90. parameters = param.get_parameters()
  91. if parameters:
  92. packets = connection.read_parameters(parameters)
  93. window.set_packets(packets)
  94. else:
  95. packet = connection.read_parameter(param)
  96. window.set_packets([packet])
  97. screen.render()
  98. except IOError as e:
  99. PM.log('I/O error: {0} {1}'.format(e.errno, e.strerror), log_id)
  100. if connection is not None:
  101. connection.close()
  102. time.sleep(3)
  103. continue
  104. screen.close()