PMMain.py 4.7 KB

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