123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- # -*- coding: utf-8 -*-
- '''
- Created on 29-03-2013
- @author: citan
- '''
- import array
- import os
- import os.path
- import time
- import cPickle as pickle
- from pimonitor.PM import PM
- from pimonitor.PMConnection import PMConnection
- from pimonitor.PMDemoConnection import PMDemoConnection
- from pimonitor.PMPacket import PMPacket
- from pimonitor.PMParameter import PMParameter
- from pimonitor.PMUtils import PMUtils
- from pimonitor.PMXmlParser import PMXmlParser
- from pimonitor.ui.PMScreen import PMScreen
- from pimonitor.ui.PMSingleWindow import PMSingleWindow
- if __name__ == '__main__':
- 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"):
- input = open("data/data.pkl", "rb")
- defined_parameters = pickle.load(input)
- input.close()
- else:
- defined_parameters = parser.parse("logger_METRIC_EN_v131.xml")
- output = open("data/data.pkl", "wb")
- pickle.dump(defined_parameters, output, -1)
- output.close()
- connection = PMConnection()
- #connection = PMDemoConnection()
- while True:
- try:
- connection.open()
-
- ecu_packet = connection.init(1)
- tcu_packet = connection.init(2)
-
- if ecu_packet == None or tcu_packet == None:
- PM.log("Can't get initial data", log_id)
- continue;
-
- for p in defined_parameters:
- if (p.get_target() & 0x1 == 0x1) and p.is_supported(ecu_packet.to_bytes()[5:]):
- if not filter(lambda x: x.get_id() == p.get_id(), supported_parameters):
- 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()[5:]):
- if not filter(lambda x: x.get_id() == p.get_id(), supported_parameters):
- 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)
-
- # each ID must be in a form P01 - first letter, then a number
- supported_parameters.sort(key=lambda p: int(p.get_id()[1:]), reverse=False)
-
- for p in supported_parameters:
- window = PMSingleWindow(p)
- screen.add_window(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])
-
- #ecu_response_packets = connection.read_parameters(ecu_params)
- #tcu_response_packets = connection.read_parameters(tcu_params)
- #param_no = 0
- #for ecu_packet in ecu_response_packets:
- # param = ecu_params[param_no]
- # window.set_value(param, ecu_packet)
- # param_no += 1
- #param_no = 0
- #for tcu_packet in tcu_response_packets:
- # param = tcu_params[param_no]
- # window.set_value(param, tcu_packet)
- # param_no += 1
- screen.render()
- except IOError as e:
- PM.log('I/O error: {0} {1}'.format(e.errno, e.strerror), log_id)
- if connection != None:
- connection.close()
- time.sleep(3)
- continue
- screen.close()
|