diff --git a/pyren/mod_ecu.py b/pyren/mod_ecu.py index 9f08ea0..08975b8 100755 --- a/pyren/mod_ecu.py +++ b/pyren/mod_ecu.py @@ -195,7 +195,7 @@ class ECU: if len(flist)==0: return flist.sort() dumpname = os.path.join("./dumps/", flist[-1]) - + print 'Loading dump:', dumpname df = open(dumpname,'rt') @@ -491,8 +491,10 @@ class ECU: c = kb.getch() if len(c)!=1: continue if path[:3] == 'FAV': - if ord(c) == 13: + if ord(c) == 13 or ord(c) == 10: + kb.set_normal_term() self.add_favourite() + kb.set_getch_term() else: if mod_globals.opt_csv and (c in mod_globals.opt_usrkey): csvline += ";" + c @@ -521,31 +523,40 @@ class ECU: def add_favourite(self): H = 25 if len(favouriteScreen.datarefs) < H: - userData = raw_input("\nEnter parameter/state that you want to monitor: ").upper() - if userData[:2] == 'PR': - for pr in self.Parameters.keys(): - if self.Parameters[pr].agcdRef == userData: - if not any(pr == dr.name for dr in favouriteScreen.datarefs): - favouriteScreen.datarefs.append(ecu_screen_dataref("",pr,"Parameter")) - else: - for dr in favouriteScreen.datarefs: - if pr == dr.name: - favouriteScreen.datarefs.remove(dr) - elif userData[:2] == 'ET': - for st in self.States.keys(): - if self.States[st].agcdRef == userData: - if not any(st == dr.name for dr in favouriteScreen.datarefs): - favouriteScreen.datarefs.append(ecu_screen_dataref("",st,"State")) - else: - for dr in favouriteScreen.datarefs: - if st == dr.name: - favouriteScreen.datarefs.remove(dr) + userDataStr = raw_input("\nEnter parameter/state that you want to monitor: ").upper() + for userData in userDataStr.split(','): + userData = userData.strip() + if userData[:2] == 'PR': + for pr in self.Parameters.keys(): + if self.Parameters[pr].agcdRef == userData: + if not any(pr == dr.name for dr in favouriteScreen.datarefs): + favouriteScreen.datarefs.append(ecu_screen_dataref("",pr,"Parameter")) + else: + for dr in favouriteScreen.datarefs: + if pr == dr.name: + favouriteScreen.datarefs.remove(dr) + elif userData[:2] == 'ET': + for st in self.States.keys(): + if self.States[st].agcdRef == userData: + if not any(st == dr.name for dr in favouriteScreen.datarefs): + favouriteScreen.datarefs.append(ecu_screen_dataref("",st,"State")) + else: + for dr in favouriteScreen.datarefs: + if st == dr.name: + favouriteScreen.datarefs.remove(dr) clearScreen() def loadFavList(self): - fl = open("./cache/favlist.txt", "r").readlines() + + fn = "./cache/favlist_"+self.ecudata['ecuname']+".txt" + + if not os.path.isfile(fn): + favlistfile = open( fn, "wb" ) + favlistfile.close() + + + fl = open(fn, "r").readlines() if len(fl) > 1: - if(fl[-1] != self.ecudata['ecuname']): return False for drname in fl: drname = drname.strip().replace('\n','') if drname[:1] == "P": @@ -554,6 +565,7 @@ class ECU: favouriteScreen.datarefs.append(ecu_screen_dataref("", drname,"State")) else: return drname + return True else: return False @@ -763,10 +775,9 @@ class ECU: menu.append("") choice = Choice(menu, "Choose :") if choice[0]=="": - fl = open("./cache/favlist.txt", "w") + fl = open("./cache/favlist_"+self.ecudata['ecuname']+".txt", "w") for dr in favouriteScreen.datarefs: fl.write(dr.name + "\n") - fl.write(self.ecudata['ecuname']) fl.close() favouriteScreen.datarefs = [] return @@ -795,16 +806,20 @@ class ECU: gc.collect () continue + fav_sc = self.screens[int(choice[1]) - 1] if choice[0][:3] == "FAV": + for sc in self.screens: + if sc.name.startswith('FAV'): + fav_sc = sc if not favouriteScreen.datarefs: if self.loadFavList(): - self.show_screen(self.screens[int(choice[1])-1]) + self.show_screen(fav_sc) else: self.add_favourite() else: - self.show_screen(self.screens[int(choice[1])-1]) + self.show_screen(fav_sc) else: - self.show_screen(self.screens[int(choice[1])-1]) + self.show_screen(fav_sc) def getLanguageMap(self): diff --git a/pyren/mod_term.py b/pyren/mod_term.py index 244c39f..c7c0bc5 100755 --- a/pyren/mod_term.py +++ b/pyren/mod_term.py @@ -549,6 +549,10 @@ def proc_line( l, elm ): l = l.strip() + if l.startswith(':'): + print l + return + if len(l) == 0: print return @@ -616,6 +620,9 @@ def proc_line( l, elm ): bit_cmd( l.lower()[7:], elm, fnc='exit_if' ) return + if len(l_parts) > 0 and l_parts[0] in ['go','goto']: + print l + return l_parts[1] if l.lower().startswith('_'): print elm.send_raw(l[1:]) @@ -672,7 +679,7 @@ def main(): if auto_macro in macro.keys(): play_macro( auto_macro, elm ) else: - print 'Error: unknown macro mane:', auto_macro + print 'Error: unknown macro name:', auto_macro while True: @@ -688,7 +695,16 @@ def main(): l = "# end of command file" print l - proc_line( l, elm ) + goto = proc_line( l, elm ) + + if goto and len(cmd_lines): + c_str = 0 + for c in cmd_lines: + if c.startswith(':'): + if goto == c[1:].strip(): + cmd_ref = c_str + break + c_str += 1 if __name__ == '__main__': main() diff --git a/pyren/mod_utils.py b/pyren/mod_utils.py index 94528e4..7015f28 100755 --- a/pyren/mod_utils.py +++ b/pyren/mod_utils.py @@ -39,6 +39,9 @@ else: class KBHit: def __init__(self): + self.set_getch_term() + + def set_getch_term(self): '''Creates a KBHit object that you can call to do various keyboard things. ''' @@ -274,7 +277,7 @@ def clearScreen(): def upScreen(): sys.stdout.write(chr(27)+"[;H") -def hex_VIN_plus_CRC( VIN ): +def hex_VIN_plus_CRC( VIN, plusCRC=True): '''The VIN must be composed of 17 alphanumeric characters apart from "I" and "O"''' #VIN ='VF1LM1B0H11111111' @@ -306,7 +309,10 @@ def hex_VIN_plus_CRC( VIN ): sCRC = '0'*(4-len(sCRC))+sCRC # result - return hexVIN+sCRC + if plusCRC: + return hexVIN+sCRC + else: + return hexVIN # Test if __name__ == "__main__": diff --git a/pyren/pyren.py b/pyren/pyren.py index fd77179..a48f7f0 100755 --- a/pyren/pyren.py +++ b/pyren/pyren.py @@ -306,11 +306,7 @@ def main(): ecu = ECU(choosen_ecu, lang.dict ) #loading original data for chosen ECU pickle.dump( ecu, open( ecucashfile, "wb" ) ) #and save cache - if not os.path.isfile("./cache/favlist.txt"): - favlistfile = open( "./cache/favlist.txt", "wb" ) - favlistfile.close() - - ecu.initELM( elm ) #init ELM for chosen ECU + ecu.initELM( elm ) #init ELM for chosen ECU if mod_globals.opt_demo: print "Loading dump"