PMMain.py 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. import re
  12. import sys
  13. from pimonitor.PM import PM
  14. from pimonitor.PMConnection import PMConnection
  15. from pimonitor.PMDemoConnection import PMDemoConnection
  16. from pimonitor.PMXmlParser import PMXmlParser
  17. from pimonitor.cu.PMCUParameter import PMCUParameter
  18. from pimonitor.cu.PMCUContext import PMCUContext
  19. from pimonitor.ui.PMScreen import PMScreen
  20. from pimonitor.ui.PMSingleWindow import PMSingleWindow
  21. from pimonitor.ui.PMWindow import PMWindow
  22. def stringSplitByNumbers(x):
  23. r = re.compile('(\d+)')
  24. l = r.split(x.get_id())
  25. return [int(y) if y.isdigit() else y for y in l]
  26. if __name__ == '__main__':
  27. if platform.system() == "Linux":
  28. from evdev import InputDevice, list_devices
  29. devices = map(InputDevice, list_devices())
  30. eventX = ""
  31. for dev in devices:
  32. if dev.name == "ADS7846 Touchscreen":
  33. eventX = dev.fn
  34. os.environ["SDL_FBDEV"] = "/dev/fb1"
  35. os.environ["SDL_MOUSEDRV"] = "TSLIB"
  36. os.environ["SDL_MOUSEDEV"] = eventX
  37. screen = PMScreen()
  38. log_id = PM.log('Application started')
  39. screen.render()
  40. parser = PMXmlParser()
  41. supported_parameters = []
  42. if os.path.isfile("data/data.pkl"):
  43. serializedDataFile = open("data/data.pkl", "rb")
  44. defined_parameters = pickle.load(serializedDataFile)
  45. serializedDataFile.close()
  46. else:
  47. defined_parameters = parser.parse("logger_METRIC_EN_v352.xml")
  48. defined_parameters = sorted(defined_parameters, key=lambda x: x.get_id(), reverse=True)
  49. output = open("data/data.pkl", "wb")
  50. pickle.dump(defined_parameters, output, -1)
  51. output.close()
  52. if len(sys.argv) > 1 and sys.argv[1] == "demo":
  53. connection = PMDemoConnection()
  54. elif platform.system() == "Linux":
  55. connection = PMConnection()
  56. else:
  57. connection = PMDemoConnection()
  58. while True:
  59. try:
  60. connection.open()
  61. ecu_packet = connection.init(1)
  62. tcu_packet = connection.init(2)
  63. ecu_context = PMCUContext(ecu_packet, [1, 3])
  64. ecu_parameters = ecu_context.match_parameters(defined_parameters)
  65. ecu_switch_parameters = ecu_context.match_switch_parameters(defined_parameters)
  66. ecu_calculated_parameters = ecu_context.match_calculated_parameters(defined_parameters, ecu_parameters)
  67. tcu_context = PMCUContext(tcu_packet, [2])
  68. tcu_parameters = tcu_context.match_parameters(defined_parameters)
  69. tcu_switch_parameters = tcu_context.match_switch_parameters(defined_parameters)
  70. tcu_calculated_parameters = tcu_context.match_calculated_parameters(defined_parameters, tcu_parameters)
  71. PM.log("ECU ROM ID: " + ecu_context.get_rom_id())
  72. PM.log("TCU ROM ID: " + tcu_context.get_rom_id())
  73. supported_parameters = ecu_parameters + ecu_switch_parameters + ecu_calculated_parameters + tcu_parameters + tcu_switch_parameters + tcu_calculated_parameters
  74. supported_parameters = sorted(supported_parameters, key=stringSplitByNumbers)
  75. # pids = ["E114", "P104", "P122", "P97", "P203"]
  76. # first_window_parameters = []
  77. #
  78. # for parameter in supported_parameters:
  79. # if parameter.get_id() in pids:
  80. # pids.remove(parameter.get_id())
  81. # first_window_parameters.append(parameter)
  82. #
  83. # window = PMWindow(first_window_parameters)
  84. # screen.add_window(window)
  85. for parameter in supported_parameters:
  86. window = PMSingleWindow(parameter)
  87. screen.add_window(window)
  88. screen.next_window()
  89. while True:
  90. window = screen.get_window()
  91. parameters = window.get_parameters()
  92. # TODO refactor - not possible to test at the moment, so leave working part untouched
  93. if len(parameters) == 1:
  94. parameter = parameters[0]
  95. if parameter.get_cu_type() == PMCUParameter.CU_TYPE_STD_PARAMETER():
  96. packet = connection.read_parameter(parameter)
  97. window.set_packets([packet])
  98. elif parameter.get_cu_type() == PMCUParameter.CU_TYPE_FIXED_ADDRESS_PARAMETER():
  99. packet = connection.read_parameter(parameter)
  100. window.set_packets([packet])
  101. elif parameter.get_cu_type() == PMCUParameter.CU_TYPE_SWITCH_PARAMETER():
  102. packet = connection.read_parameter(parameter)
  103. window.set_packets([packet])
  104. elif parameter.get_cu_type() == PMCUParameter.CU_TYPE_CALCULATED_PARAMETER():
  105. packets = connection.read_parameters(parameter.get_dependencies())
  106. window.set_packets(packets)
  107. elif len(parameters) > 1:
  108. packets = connection.read_parameters(parameters)
  109. window.set_packets(packets)
  110. screen.render()
  111. except IOError as e:
  112. PM.log('I/O error: {0} {1}'.format(e.errno, e.strerror), log_id)
  113. if connection is not None:
  114. connection.close()
  115. time.sleep(3)
  116. continue
  117. screen.close()