コード例 #1
0
    def __init__(self, activ_file, conf_file):
        self.logger = Logger()

        self.act_file_path = activ_file
        self.conf_file_path = conf_file
        self.xml_mapper = XMLMapper(self.act_file_path, self.conf_file_path)
        self.activities = self.parse_activities_file()
        self.recent_acquisitions = self.get_recent_acquisitions()
        self.valid_devices = ["Polar iWL", "ANT+ HR Band"]
        self.conf = None
        self.test_thread = None
        self.acquisition_path = None
        self.testing_device = None
コード例 #2
0
ファイル: MainFacade.py プロジェクト: Tavpritesh/gVarvi
    def __init__(self, activ_file, conf_file):
        self.logger = Logger()

        self.act_file_path = activ_file
        self.conf_file_path = conf_file
        self.xml_mapper = XMLMapper(self.act_file_path, self.conf_file_path)
        self.activities = self.parse_activities_file()
        self.recent_acquisitions = self.get_recent_acquisitions()
        self.valid_devices = ["Polar iWL", "ANT+ HR Band"]
        self.conf = None
        self.test_thread = None
        self.acquisition_path = None
        self.testing_device = None
コード例 #3
0
ファイル: MainFacade.py プロジェクト: Tavpritesh/gVarvi
class MainFacade:
    """
    Class that manages all view operations and delegates
    their execution to specific classes.
    @param activ_file: Path to activities file.
    @param conf_file: Path to configuration file.
    """

    __metaclass__ = Singleton

    def __init__(self, activ_file, conf_file):
        self.logger = Logger()

        self.act_file_path = activ_file
        self.conf_file_path = conf_file
        self.xml_mapper = XMLMapper(self.act_file_path, self.conf_file_path)
        self.activities = self.parse_activities_file()
        self.recent_acquisitions = self.get_recent_acquisitions()
        self.valid_devices = ["Polar iWL", "ANT+ HR Band"]
        self.conf = None
        self.test_thread = None
        self.acquisition_path = None
        self.testing_device = None

    def activate_remote_debug(self, ip, port):
        self.logger.activate_datagram_logging(ip, port)

    def deactivate_remote_debug(self):
        self.logger.deactivate_datagram_logging()

    def parse_activities_file(self):
        self.activities = self.xml_mapper.read_activities_file()
        map(self.logger.debug, self.activities)
        return self.activities

    def check_acquisition_result_files_exists(self):
        if os.path.isfile(self.acquisition_path + ".tag.txt") and os.path.isfile(self.acquisition_path + ".rr.txt"):
            return True
        else:
            return False

    def get_recent_acquisitions(self):
        with open(RECENT_ACQUISITIONS_FILE) as f:
            return [line for line in f.read().split(os.linesep) if line != ""]

    def refresh_activities(self):
        self.activities = self.parse_activities_file()

    def parse_config_file(self):
        self.conf = self.xml_mapper.read_config_file()
        return self.conf

    def reset_config(self):
        self.xml_mapper.reset_config()
        self.parse_config_file()

    def save_config(self):
        self.xml_mapper.save_config(self.conf.__dict__)

    def get_activity(self, activity_id):
        return self.xml_mapper.get_activity(activity_id)

    def add_activity(self, activity_class, *args, **kwargs):
        activity = activity_class(*args, **kwargs)
        self.xml_mapper.save_activity(activity)
        self.refresh_activities()

    def update_activity(self, activity_class, *args, **kwargs):
        activity = activity_class(*args, **kwargs)
        self.xml_mapper.update_activity(activity.id, activity)
        self.refresh_activities()

    def remove_activity(self, activity_id):
        self.xml_mapper.remove_activity(activity_id)
        self.refresh_activities()

    def import_activity_from_file(self, activity_file):
        from activities.PhotoPresentation import PhotoPresentation
        from activities.SoundPresentation import SoundPresentation
        from activities.VideoPresentation import VideoPresentation
        from activities.AssociatedKeyActivity import AssociatedKeyActivity
        from activities.ManualDefinedActivity import ManualDefinedActivity

        try:
            activity_folder = CONF_DIR
            unpack_tar_file_and_remove(activity_file, activity_folder)
            files = os.listdir(os.path.join(activity_folder, "activity_auxiliary_folder"))
            class_dict = {
                "photo.xml": PhotoPresentation,
                "sound.xml": SoundPresentation,
                "video.xml": VideoPresentation,
                "key.xml": AssociatedKeyActivity,
                "manual.xml": ManualDefinedActivity,
            }
            for file_name in class_dict.keys():
                if file_name in files:
                    shutil.rmtree(os.path.join(activity_folder, "activity_auxiliary_folder"))
                    activity = class_dict[file_name].import_from_file(activity_file)
                    self.xml_mapper.save_activity(activity)
                    self.refresh_activities()
                    break
        except OSError:
            raise TarFileNotValid()

    def get_nearby_devices(self):
        devices = []
        if self.conf.bluetoothSupport == "Yes":
            self.logger.debug("Searching for Bluetooth devices")
            devices += BTDevice.find()
        if self.conf.antSupport == "Yes":
            self.logger.debug("Searching for ANT+ Devices")
            devices += ANTDevice.find()
        return devices

    def run_test(self, notify_window, name, mac, dev_type):
        if dev_type == "BT" and name == "Polar iWL":
            device = PolariWL(mac)
            print "Mac: {}".format(mac)
        elif dev_type == "ANT+":
            device = ANTDevice()
        device.connect()
        self.test_thread = device.run_test(notify_window)
        self.testing_device = device

    def end_device_test(self):
        if self.testing_device:
            self.testing_device.finish_test()
        if self.test_thread.is_alive():
            self.test_thread.join()
        if self.testing_device:
            self.testing_device.disconnect()
            self.testing_device = None

    @staticmethod
    def get_supported_devices():
        return ["Polar iWL", "ANT+ HR Band"]

    def is_demo_mode(self):
        return self.conf.defaultMode == "Demo mode"

    def begin_acquisition(self, file_path, activity_id, mode, dev_name, dev_type, dev_dir=None):
        from config import RECENT_ACQUISITIONS_COUNT

        self.acquisition_path = file_path
        writer = TextWriter(file_path + ".tag.txt", file_path + ".rr.txt")
        if mode == DEMO_MODE:
            device = DemoBand()
            activity = self.xml_mapper.get_activity(activity_id)
            ad = AcquisitionFacade(activity, device, writer)
            ad.start()
        elif mode == DEVICE_CONNECTED_MODE:
            if dev_type == "BT" and dev_name == "Polar iWL":
                device = PolariWL(dev_dir)
                activity = self.xml_mapper.get_activity(activity_id)
                ad = AcquisitionFacade(activity, device, writer)
                ad.start()
            elif dev_type == "ANT+" and dev_name == "ANT+ HR Band":
                device = ANTDevice()
                activity = self.xml_mapper.get_activity(activity_id)
                ad = AcquisitionFacade(activity, device, writer)
                ad.start()
        # Save recent acquisition
        while len(self.recent_acquisitions) >= RECENT_ACQUISITIONS_COUNT:
            del self.recent_acquisitions[-1]
        self.recent_acquisitions.insert(0, self.acquisition_path.encode("utf-8"))
        # Save recent acquisitions to file
        with open(RECENT_ACQUISITIONS_FILE, "w") as f:
            f.write("{}".format(os.linesep).join(self.recent_acquisitions))

    @run_in_thread
    def open_ghrv(self):
        """
        Show result data in gHRV application
        """
        rr_file = "{}.rr.txt".format(self.acquisition_path.encode("utf-8"))
        tag_file = "{}.tag.txt".format(self.acquisition_path.encode("utf-8"))
        os.system("/usr/bin/gHRV -loadBeatTXT {0} -loadEpTXT {1}".format(rr_file, tag_file))

    def plot_results(self):
        """
        Plots acquisition results in a new window
        """
        from utils import plot

        rr_file = "{}.rr.txt".format(self.acquisition_path.encode("utf-8"))
        tag_file = "{}.tag.txt".format(self.acquisition_path.encode("utf-8"))
        plot(rr_file, tag_file)

    def open_rr_file(self):
        rr_file = "{}.rr.txt".format(self.acquisition_path.encode("utf-8"))
        open_file(rr_file)

    def open_tag_file(self):
        tag_file = "{}.tag.txt".format(self.acquisition_path.encode("utf-8"))
        open_file(tag_file)
コード例 #4
0
class MainFacade:
    """
    Class that manages all view operations and delegates
    their execution to specific classes.
    @param activ_file: Path to activities file.
    @param conf_file: Path to configuration file.
    """
    __metaclass__ = Singleton

    def __init__(self, activ_file, conf_file):
        self.logger = Logger()

        self.act_file_path = activ_file
        self.conf_file_path = conf_file
        self.xml_mapper = XMLMapper(self.act_file_path, self.conf_file_path)
        self.activities = self.parse_activities_file()
        self.recent_acquisitions = self.get_recent_acquisitions()
        self.valid_devices = ["Polar iWL", "ANT+ HR Band"]
        self.conf = None
        self.test_thread = None
        self.acquisition_path = None
        self.testing_device = None

    def activate_remote_debug(self, ip, port):
        self.logger.activate_datagram_logging(ip, port)

    def deactivate_remote_debug(self):
        self.logger.deactivate_datagram_logging()

    def parse_activities_file(self):
        self.activities = self.xml_mapper.read_activities_file()
        map(self.logger.debug, self.activities)
        return self.activities

    def check_acquisition_result_files_exists(self):
        if os.path.isfile(self.acquisition_path + ".tag.txt") and os.path.isfile(self.acquisition_path + ".rr.txt"):
            return True
        else:
            return False

    def get_recent_acquisitions(self):
        with open(RECENT_ACQUISITIONS_FILE) as f:
            return [line for line in f.read().split(os.linesep) if line != ""]

    def refresh_activities(self):
        self.activities = self.parse_activities_file()

    def parse_config_file(self):
        self.conf = self.xml_mapper.read_config_file()
        return self.conf

    def reset_config(self):
        self.xml_mapper.reset_config()
        self.parse_config_file()

    def save_config(self):
        self.xml_mapper.save_config(self.conf.__dict__)

    def get_activity(self, activity_id):
        return self.xml_mapper.get_activity(activity_id)

    def add_activity(self, activity_class, *args, **kwargs):
        activity = activity_class(*args, **kwargs)
        self.xml_mapper.save_activity(activity)
        self.refresh_activities()

    def update_activity(self, activity_class, *args, **kwargs):
        activity = activity_class(*args, **kwargs)
        self.xml_mapper.update_activity(activity.id, activity)
        self.refresh_activities()

    def remove_activity(self, activity_id):
        self.xml_mapper.remove_activity(activity_id)
        self.refresh_activities()

    def import_activity_from_file(self, activity_file):
        from activities.PhotoPresentation import PhotoPresentation
        from activities.SoundPresentation import SoundPresentation
        from activities.VideoPresentation import VideoPresentation
        from activities.AssociatedKeyActivity import AssociatedKeyActivity
        from activities.ManualDefinedActivity import ManualDefinedActivity
        try:
            activity_folder = CONF_DIR
            unpack_tar_file_and_remove(activity_file, activity_folder)
            files = os.listdir(os.path.join(activity_folder, "activity_auxiliary_folder"))
            class_dict = {"photo.xml": PhotoPresentation,
                          "sound.xml": SoundPresentation,
                          "video.xml": VideoPresentation,
                          "key.xml": AssociatedKeyActivity,
                          "manual.xml": ManualDefinedActivity}
            for file_name in class_dict.keys():
                if file_name in files:
                    shutil.rmtree(os.path.join(activity_folder, "activity_auxiliary_folder"))
                    activity = class_dict[file_name].import_from_file(activity_file)
                    self.xml_mapper.save_activity(activity)
                    self.refresh_activities()
                    break
        except OSError:
            raise TarFileNotValid()

    def get_nearby_devices(self):
        devices = []
        if self.conf.bluetoothSupport == "Yes":
            self.logger.debug("Searching for Bluetooth devices")
            devices += BTDevice.find()
        if self.conf.antSupport == "Yes":
            self.logger.debug("Searching for ANT+ Devices")
            devices += ANTDevice.find()
        return devices

    def run_test(self, notify_window, name, mac, dev_type):
        if dev_type == "BT" and name == "Polar iWL":
            device = PolariWL(mac)
            print "Mac: {}".format(mac)
        elif dev_type == "ANT+":
            device = ANTDevice()
        device.connect()
        self.test_thread = device.run_test(notify_window)
        self.testing_device = device

    def end_device_test(self):
        if self.testing_device:
            self.testing_device.finish_test()
        if self.test_thread.is_alive():
            self.test_thread.join()
        if self.testing_device:
            self.testing_device.disconnect()
            self.testing_device = None

    @staticmethod
    def get_supported_devices():
        return ["Polar iWL", "ANT+ HR Band"]

    def is_demo_mode(self):
        return self.conf.defaultMode == "Demo mode"

    def begin_acquisition(self, file_path, activity_id, mode, dev_name, dev_type, dev_dir=None):
        from config import RECENT_ACQUISITIONS_COUNT
        self.acquisition_path = file_path
        writer = TextWriter(file_path + ".tag.txt", file_path + ".rr.txt")
        if mode == DEMO_MODE:
            device = DemoBand()
            activity = self.xml_mapper.get_activity(activity_id)
            ad = AcquisitionFacade(activity, device, writer)
            ad.start()
        elif mode == DEVICE_CONNECTED_MODE:
            if dev_type == "BT" and dev_name == "Polar iWL":
                device = PolariWL(dev_dir)
                activity = self.xml_mapper.get_activity(activity_id)
                ad = AcquisitionFacade(activity, device, writer)
                ad.start()
            elif dev_type == "ANT+" and dev_name == "ANT+ HR Band":
                device = ANTDevice()
                activity = self.xml_mapper.get_activity(activity_id)
                ad = AcquisitionFacade(activity, device, writer)
                ad.start()
        # Save recent acquisition
        while len(self.recent_acquisitions) >= RECENT_ACQUISITIONS_COUNT:
            del self.recent_acquisitions[-1]
        self.recent_acquisitions.insert(0, self.acquisition_path.encode('utf-8'))
        # Save recent acquisitions to file
        with open(RECENT_ACQUISITIONS_FILE, "w") as f:
            f.write("{}".format(os.linesep).join(self.recent_acquisitions))

    @run_in_thread
    def open_ghrv(self):
        """
        Show result data in gHRV application
        """
        rr_file = "{}.rr.txt".format(self.acquisition_path.encode('utf-8'))
        tag_file = "{}.tag.txt".format(self.acquisition_path.encode('utf-8'))
        os.system("/usr/bin/gHRV -loadBeatTXT {0} -loadEpTXT {1}".format(rr_file, tag_file))

    def plot_results(self):
        """
        Plots acquisition results in a new window
        """
        from utils import plot

        rr_file = "{}.rr.txt".format(self.acquisition_path.encode('utf-8'))
        tag_file = "{}.tag.txt".format(self.acquisition_path.encode('utf-8'))
        plot(rr_file, tag_file)

    def open_rr_file(self):
        rr_file = "{}.rr.txt".format(self.acquisition_path.encode('utf-8'))
        open_file(rr_file)

    def open_tag_file(self):
        tag_file = "{}.tag.txt".format(self.acquisition_path.encode('utf-8'))
        open_file(tag_file)