diff --git a/start.py b/start.py index 923a2b4ca0..3dce836d40 100755 --- a/start.py +++ b/start.py @@ -12,6 +12,11 @@ import shutil import datetime from fnmatch import fnmatch import subprocess +import sys + +lib_path = os.path.abspath(os.path.join( 'sw', 'lib', 'python')) +sys.path.append(lib_path) +import paparazzi class ConfChooser(object): @@ -24,7 +29,7 @@ class ConfChooser(object): current_index = 0 for (i, text) in enumerate(clist): combo.append_text(text) - if os.path.join(self.conf_dir, text) == os.path.realpath(active): + if os.path.join(paparazzi.conf_dir, text) == os.path.realpath(active): current_index = i combo.set_active(current_index) combo.set_sensitive(True) @@ -40,7 +45,7 @@ class ConfChooser(object): else: desc += "broken symlink to " real_conf_path = os.path.realpath(self.conf_xml) - desc += os.path.relpath(real_conf_path, self.conf_dir) + desc += os.path.relpath(real_conf_path, paparazzi.conf_dir) self.conf_explain.set_text(desc) def update_controlpanel_label(self): @@ -54,57 +59,27 @@ class ConfChooser(object): else: desc += "broken symlink to " real_conf_path = os.path.realpath(self.controlpanel_xml) - desc += os.path.relpath(real_conf_path, self.conf_dir) + desc += os.path.relpath(real_conf_path, paparazzi.conf_dir) self.controlpanel_explain.set_text(desc) # CallBack Functions def find_conf_files(self): - conf_files = [] - pattern = "*conf[._-]*xml" - backup_pattern = "*conf[._-]*xml.20[0-9][0-9]-[01][0-9]-[0-3][0-9]_*" - excludes = ["%gconf.xml"] - - for path, subdirs, files in os.walk(self.conf_dir): - for name in files: - if self.exclude_backups and fnmatch(name, backup_pattern): - continue - if fnmatch(name, pattern): - filepath = os.path.join(path, name) - entry = os.path.relpath(filepath, self.conf_dir) - if not os.path.islink(filepath) and entry not in excludes: - conf_files.append(entry) - - conf_files.sort() + conf_files = paparazzi.get_list_of_conf_files(self.exclude_backups) self.update_combo(self.conf_file_combo, conf_files, self.conf_xml) def find_controlpanel_files(self): - controlpanel_files = [] - pattern = "*control_panel[._-]*xml" - backup_pattern = "*control_panel[._-]*xml.20[0-9][0-9]-[01][0-9]-[0-3][0-9]_*" - excludes = [] - - for path, subdirs, files in os.walk(self.conf_dir): - for name in files: - if self.exclude_backups and fnmatch(name, backup_pattern): - continue - if fnmatch(name, pattern): - filepath = os.path.join(path, name) - entry = os.path.relpath(filepath, self.conf_dir) - if not os.path.islink(filepath) and entry not in excludes: - controlpanel_files.append(entry) - - controlpanel_files.sort() + controlpanel_files = paparazzi.get_list_of_controlpanel_files(self.exclude_backups) self.update_combo(self.controlpanel_file_combo, controlpanel_files, self.controlpanel_xml) def about(self, widget): about_d = gtk.AboutDialog() about_d.set_program_name("Paparazzi Configuration Selector") - about_d.set_version("1.0") + about_d.set_version("1.1") about_d.set_copyright("(c) GPL v2") about_d.set_comments("Select the active configuration") about_d.set_website("http://paparazzi.github.com") - about_d.set_logo(gtk.gdk.pixbuf_new_from_file(os.path.join(self.paparazzi_home, "data/pictures/penguin_icon.png"))) + about_d.set_logo(gtk.gdk.pixbuf_new_from_file(os.path.join(paparazzi.PAPARAZZI_HOME, "data/pictures/penguin_icon.png"))) about_d.run() about_d.destroy() @@ -142,13 +117,13 @@ class ConfChooser(object): else: if os.path.exists(self.conf_xml): newname = "conf.xml." + timestr - backup_file = os.path.join(self.conf_dir, newname) + backup_file = os.path.join(paparazzi.conf_dir, newname) shutil.copyfile(self.conf_xml, backup_file) self.print_status("Made a backup: " + newname) if use_personal: backup_name = self.conf_personal_name + "." + timestr - conf_personal_backup = os.path.join(self.conf_dir, backup_name) + conf_personal_backup = os.path.join(paparazzi.conf_dir, backup_name) if os.path.exists(self.conf_personal): self.print_status("Backup conf.xml.personal to " + backup_name) shutil.copyfile(self.conf_personal, conf_personal_backup) @@ -161,19 +136,19 @@ class ConfChooser(object): else: if os.path.exists(self.controlpanel_xml): newname = "control_panel.xml." + timestr - backup_file = os.path.join(self.conf_dir, newname) + backup_file = os.path.join(paparazzi.conf_dir, newname) shutil.copyfile(self.controlpanel_xml, backup_file) self.print_status("Made a backup: " + newname) if use_personal: backup_name = self.controlpanel_personal_name + "." + timestr - controlpanel_personal_backup = os.path.join(self.conf_dir, backup_name) + controlpanel_personal_backup = os.path.join(paparazzi.conf_dir, backup_name) if os.path.exists(self.controlpanel_personal): self.print_status("Backup control_panel.xml.personal to " + backup_name) shutil.copyfile(self.controlpanel_personal, controlpanel_personal_backup) def delete_conf(self, widget): - filename = os.path.join(self.conf_dir, self.conf_file_combo.get_active_text()) + filename = os.path.join(paparazzi.conf_dir, self.conf_file_combo.get_active_text()) ret = self.sure(widget, filename) if ret: if os.path.exists(filename): @@ -183,7 +158,7 @@ class ConfChooser(object): self.print_status("Deleted: " + filename) def delete_controlpanel(self, widget): - filename = os.path.join(self.conf_dir, self.controlpanel_file_combo.get_active_text()) + filename = os.path.join(paparazzi.conf_dir, self.controlpanel_file_combo.get_active_text()) ret = self.sure(widget, filename) if ret: if os.path.exists(filename): @@ -220,7 +195,7 @@ class ConfChooser(object): self.print_status("Your personal conf file already exists!") else: self.backupconf(True) - template_file = os.path.join(self.conf_dir, self.conf_file_combo.get_active_text()) + template_file = os.path.join(paparazzi.conf_dir, self.conf_file_combo.get_active_text()) shutil.copyfile(template_file, self.conf_personal) os.remove(self.conf_xml) os.symlink(self.conf_personal_name, self.conf_xml) @@ -232,7 +207,7 @@ class ConfChooser(object): self.print_status("Your personal control_panel file already exists!") else: self.backupcontrolpanel(True) - template_file = os.path.join(self.conf_dir, self.controlpanel_file_combo.get_active_text()) + template_file = os.path.join(paparazzi.conf_dir, self.controlpanel_file_combo.get_active_text()) shutil.copyfile(template_file, self.controlpanel_personal) os.remove(self.controlpanel_xml) os.symlink(self.controlpanel_personal_name, self.controlpanel_xml) @@ -252,17 +227,13 @@ class ConfChooser(object): self.my_vbox = gtk.VBox() - # if PAPARAZZI_HOME not set, then assume the tree containing this - # file is a reasonable substitute - self.paparazzi_home = os.getenv("PAPARAZZI_HOME", os.path.dirname(os.path.abspath(__file__))) - self.conf_dir = os.path.join(self.paparazzi_home, "conf") - self.conf_xml = os.path.join(self.conf_dir, "conf.xml") + self.conf_xml = os.path.join(paparazzi.conf_dir, "conf.xml") self.conf_personal_name = "conf_personal.xml" - self.conf_personal = os.path.join(self.conf_dir, self.conf_personal_name) + self.conf_personal = os.path.join(paparazzi.conf_dir, self.conf_personal_name) - self.controlpanel_xml = os.path.join(self.conf_dir, "control_panel.xml") + self.controlpanel_xml = os.path.join(paparazzi.conf_dir, "control_panel.xml") self.controlpanel_personal_name = "control_panel_personal.xml" - self.controlpanel_personal = os.path.join(self.conf_dir, self.controlpanel_personal_name) + self.controlpanel_personal = os.path.join(paparazzi.conf_dir, self.controlpanel_personal_name) self.exclude_backups = True self.verbose = False diff --git a/sw/tools/airframe_editor/paparazzi.py b/sw/lib/python/paparazzi.py similarity index 57% rename from sw/tools/airframe_editor/paparazzi.py rename to sw/lib/python/paparazzi.py index 2227c4de07..b83f27b1cd 100755 --- a/sw/tools/airframe_editor/paparazzi.py +++ b/sw/lib/python/paparazzi.py @@ -5,27 +5,73 @@ from __future__ import print_function import glob from collections import namedtuple -from os import path, getenv +from os import path, getenv, walk +from fnmatch import fnmatch #from subprocess import call import commands import lxml.etree as ET +test = 1 + # if PAPARAZZI_HOME not set, then assume the tree containing this # file is a reasonable substitute -home_dir = getenv("PAPARAZZI_HOME", path.normpath(path.join( - path.dirname(path.abspath(__file__)), '../../../'))) +PAPARAZZI_HOME = getenv("PAPARAZZI_HOME", path.normpath(path.join(path.dirname(path.abspath(__file__)), '../../../'))) # Directories -firmwares_dir = path.join(home_dir, "conf/firmwares/") -modules_dir = path.join(home_dir, "conf/modules/") -airframes_dir = path.join(home_dir, "conf/airframes/") -boards_dir = path.join(home_dir, "conf/boards/") +conf_dir = path.join(PAPARAZZI_HOME, "conf/") + +firmwares_dir = path.join(conf_dir, "firmwares/") +modules_dir = path.join(conf_dir, "modules/") +airframes_dir = path.join(conf_dir, "airframes/") +boards_dir = path.join(conf_dir, "boards/") + +flight_plan_dir = path.join(conf_dir, "flight_plans/") # Structures PprzModule = namedtuple("PprzModule", "description defines configures") # List Of Stuff + +def get_list_of_conf_files(exclude_backups = 1): + conf_files = [] + pattern = "*conf[._-]*xml" + backup_pattern = "*conf[._-]*xml.20[0-9][0-9]-[01][0-9]-[0-3][0-9]_*" + excludes = ["%gconf.xml"] + + for cpath, subdirs, files in walk(conf_dir): + for name in files: + if exclude_backups and fnmatch(name, backup_pattern): + continue + if fnmatch(name, pattern): + filepath = path.join(cpath, name) + entry = path.relpath(filepath, conf_dir) + if not path.islink(filepath) and entry not in excludes: + conf_files.append(entry) + + conf_files.sort() + return conf_files + +def get_list_of_controlpanel_files(exclude_backups = 1): + controlpanel_files = [] + pattern = "*control_panel[._-]*xml" + backup_pattern = "*control_panel[._-]*xml.20[0-9][0-9]-[01][0-9]-[0-3][0-9]_*" + excludes = [] + + for cpath, subdirs, files in walk(conf_dir): + for name in files: + if exclude_backups and fnmatch(name, backup_pattern): + continue + if fnmatch(name, pattern): + filepath = path.join(cpath, name) + entry = path.relpath(filepath, conf_dir) + if not path.islink(filepath) and entry not in excludes: + controlpanel_files.append(entry) + controlpanel_files.sort() + return controlpanel_files + + + def get_list_of_files(directory, extension): mylist = glob.glob(path.join(directory, "*" + extension)) mylist.sort() @@ -72,11 +118,11 @@ def get_module_information(module_name): def search(string): - #return call(["grep", "-r", string , home_dir + "/sw/airborne/"]) - #return system("grep -r " + string + " " + home_dir + "/sw/airborne/") - cmd = "grep -r " + string + " " + home_dir + "/sw/airborne/" + #return call(["grep", "-r", string , PAPARAZZI_HOME + "/sw/airborne/"]) + #return system("grep -r " + string + " " + PAPARAZZI_HOME + "/sw/airborne/") + cmd = "grep -r " + string + " " + PAPARAZZI_HOME + "/sw/airborne/" status, output = commands.getstatusoutput(cmd) - return output.replace(home_dir + "/sw/airborne/", "") + return output.replace(PAPARAZZI_HOME + "/sw/airborne/", "") if __name__ == '__main__': diff --git a/sw/tools/airframe_editor/airframe_editor.py b/sw/tools/airframe_editor/airframe_editor.py index 403412da66..f59e54e476 100755 --- a/sw/tools/airframe_editor/airframe_editor.py +++ b/sw/tools/airframe_editor/airframe_editor.py @@ -11,6 +11,12 @@ from os import path # Owm Modules import gui_dialogs import xml_airframe + +import os, sys +lib_path = os.path.abspath(os.path.join('..', '..', 'lib', 'python')) +print(lib_path) +sys.path.append(lib_path) + import paparazzi diff --git a/sw/tools/airframe_editor/xml_airframe.py b/sw/tools/airframe_editor/xml_airframe.py index efaba2b133..3f9fa0f989 100755 --- a/sw/tools/airframe_editor/xml_airframe.py +++ b/sw/tools/airframe_editor/xml_airframe.py @@ -6,7 +6,6 @@ import lxml.etree as ET import StringIO import xml_common -import paparazzi def find_and_add(source, target, search):