PMMain.py 3.7 KB

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