123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- # -*- coding: utf-8 -*-
- """
- Created on 29-03-2013
- @author: citan
- """
- import os
- import os.path
- import time
- import cPickle as pickle
- import platform
- from pimonitor.PM import PM
- from pimonitor.PMConnection import PMConnection
- from pimonitor.PMDemoConnection import PMDemoConnection
- from pimonitor.PMXmlParser import PMXmlParser
- from pimonitor.ui.PMScreen import PMScreen
- from pimonitor.ui.PMSingleWindow import PMSingleWindow
- if __name__ == '__main__':
- print platform.system()
- if platform.system() == "Linux":
- from evdev import InputDevice, list_devices
- devices = map(InputDevice, list_devices())
- eventX = ""
- for dev in devices:
- if dev.name == "ADS7846 Touchscreen":
- eventX = dev.fn
- os.environ["SDL_FBDEV"] = "/dev/fb1"
- os.environ["SDL_MOUSEDRV"] = "TSLIB"
- os.environ["SDL_MOUSEDEV"] = eventX
- screen = PMScreen()
- log_id = PM.log('Application started')
- screen.render()
- parser = PMXmlParser()
- supported_parameters = []
- if os.path.isfile("data/data.pkl"):
- serializedDataFile = open("data/data.pkl", "rb")
- defined_parameters = pickle.load(serializedDataFile)
- serializedDataFile.close()
- else:
- defined_parameters = parser.parse("logger_METRIC_EN_v263.xml")
- # output = open("data/data.pkl", "wb")
- #pickle.dump(defined_parameters, output, -1)
- #output.close()
- if platform.system() == "Linux":
- connection = PMConnection()
- else:
- connection = PMDemoConnection()
- while True:
- try:
- connection.open()
- ecu_packet = connection.init(1)
- tcu_packet = connection.init(2)
- if ecu_packet is None or tcu_packet is None:
- PM.log("Can't get initial data", log_id)
- continue
- PM.log("ECU ROM ID: " + ecu_packet.get_rom_id())
- PM.log("TCU ROM ID: " + tcu_packet.get_rom_id())
- for p in defined_parameters:
- if (p.get_target() & 0x1 == 0x1) and p.is_supported(ecu_packet.to_bytes()[4:]):
- if not filter(lambda x: x.get_id() == p.get_id(), supported_parameters):
- p.switch_to_ecu_id(ecu_packet.get_rom_id())
- supported_parameters.append(p)
- for p in defined_parameters:
- if ((p.get_target() & 0x2 == 0x2) or (p.get_target() & 0x1 == 0x1)) and p.is_supported(
- tcu_packet.to_bytes()[4:]):
- if not filter(lambda x: x.get_id() == p.get_id(), supported_parameters):
- p.switch_to_ecu_id(tcu_packet.get_rom_id())
- supported_parameters.append(p)
- for p in defined_parameters:
- p_deps = p.get_dependencies()
- if not p_deps:
- continue
- deps_found = ()
- for dep in p_deps:
- deps_found = filter(lambda x: x.get_id() == dep, supported_parameters)
- if not deps_found:
- break
- if len(deps_found) > 1:
- raise Exception('duplicated dependencies', deps_found)
- p.add_parameter(deps_found[0])
- if deps_found:
- supported_parameters.append(p)
- supported_parameters = sorted(supported_parameters)
- for p in supported_parameters:
- window = PMSingleWindow(p)
- screen.add_window(window)
- screen.next_window()
- while True:
- window = screen.get_window()
- param = window.get_parameter()
- parameters = param.get_parameters()
- if parameters:
- packets = connection.read_parameters(parameters)
- window.set_packets(packets)
- else:
- packet = connection.read_parameter(param)
- window.set_packets([packet])
- screen.render()
- except IOError as e:
- PM.log('I/O error: {0} {1}'.format(e.errno, e.strerror), log_id)
- if connection is not None:
- connection.close()
- time.sleep(3)
- continue
- screen.close()
|