Esempio n. 1
0
    def _process_queue(self, task):
        """Process the scan thread queue, updating parameter values
           from the UI. Checks to make sure the event is a valid one,
           else it's logged and dropped.

        :param: task: current task object
        :type: ScanningTask object
        :returns: True if an update was processed,
                  False if no update was found.
        """

        processed_something = False
        while task.scanq.update_queued():
            name, value = task.scanq.get_event_update()
            if not name or not value:
                logger.warning("Event update attempt returned None.")
                break
            try:
                key = str(name.split("_", 1)[1])
                if key in task.params:
                    if key in ('range_min', 'range_max'):
                        task.params[key] = khertz_to_hertz(value)
                    else:
                        task.params[key] = value
                else:
                    logger.warning("Invalid key in event update: {}".format(key))
                    break
            except Exception as e:
                 logger.warning("Processing event update failed with {}".format(e))
                 logger.warning("Event list: {} {}".format(name, value))
                 break
            processed_something = True
            logger.info("Queue passed %s %i", name, value)
            logger.info("Params[%s] = %s", key, task.params[key])
        return processed_something
Esempio n. 2
0
    def _frequency(self, task, log):
        """Performs a frequency scan, using the task obj for finding
        all the info. This function is wrapped by Scanning.scan()

        :param task: object that represent a scanning task
        :type task: object from ScanningTask
        :raises: none
        :returns: updates the scanning task object with the new activity found
        """

        mode = task.params["cbb_scan_mode"].get()
        task.rig.set_mode(mode)

        level = []

        pass_count = task.params["passes"]
        interval = khertz_to_hertz(task.params["interval"])
        while self.scan_active:
            freq = task.params["range_min"]
            # If the range is negative, silently bail...
            if freq > task.params["range_max"]:
                self.scan_active = False
            while freq < task.params["range_max"]:
                if self._process_queue(task):
                    freq, pass_count, interval = self._get_task_items(task)
                try:
                    self._frequency_tune(task, freq)
                except (socket.error, socket.timeout):
                    break

                if self._signal_check(task.params["sgn_level"], task.rig,
                                      level):

                    if task.params["record"]:
                        self._start_recording(task)

                    if task.params["auto_bookmark"]:
                        self._autobookmark(level, task, freq)

                    if task.params["log"]:
                        nbm = self._create_new_bookmark(task, freq)
                        log.write('F', nbm, level[0])

                    if self.scan_active:
                        self._queue_sleep(task)

                    if task.params["record"]:
                        self._stop_recording()
                elif self.hold_bookmark:
                    nbm = self._create_new_bookmark(task, self.prev_freq)
                    task.new_bookmark_list.append(nbm)
                    self._prev_bookmark(False, None, None)
                freq = freq + interval
                if not self.scan_active:
                    return task
            pass_count, task = self._pass_count_update(pass_count, task)
        task.scanq.notify_end_of_scan()
        return task
Esempio n. 3
0
    def _check_interval(self):
        """Checks for a sane interval. We don't want to search for signals
        with bandwidth lower than MIN_INTERVAL, if there is such a low interval
        we overwrite and log an error.
        """

        if khertz_to_hertz(self.params["interval"]) < MIN_INTERVAL:
            logger.error("Low interval provided:{}".format(self.params["interval"]))
            logger.error("Overriding with {}".format(MIN_INTERVAL))
            self.params["interval"] = MIN_INTERVAL
Esempio n. 4
0
    def _check_interval(self):
        """Checks for a sane interval. We don't want to search for signals
        with bandwidth lower than MIN_INTERVAL, if there is such a low interval
        we overwrite and log an error.
        """

        if khertz_to_hertz(self.params["interval"]) < MIN_INTERVAL:
            logger.error("Low interval provided:{}".format(
                self.params["interval"]))
            logger.error("Overriding with {}".format(MIN_INTERVAL))
            self.params["interval"] = MIN_INTERVAL
Esempio n. 5
0
    def _frequency(self, task, log):
        """Performs a frequency scan, using the task obj for finding
        all the info. This function is wrapped by Scanning.scan()

        :param task: object that represent a scanning task
        :type task: object from ScanningTask
        :raises: none
        :returns: updates the scanning task object with the new activity found
        """

        level = []
        pass_count = task.params["passes"]
        interval = khertz_to_hertz(task.params["interval"])
        while self.scan_active:
            freq = task.params["range_min"]
            # If the range is negative, silently bail...
            if freq > task.params["range_max"]:
                self.scan_active = False
            while freq < task.params["range_max"]:
                if self._process_queue(task):
                    freq, pass_count, interval = self._get_task_items(task)
                try:
                    self._frequency_tune(task, freq)
                except (socket.error, socket.timeout):
                    break

                if self._signal_check(task.params["sgn_level"],
                                      task.rig,
                                      level):

                    if task.params["record"]:
                        self._start_recording()

                    if task.params["auto_bookmark"]:
                        nbm = self._create_new_bookmark(task, freq)
                        task.new_bookmark_list.append(nbm)

                    if task.params["log"]:
                        nbm = self._create_new_bookmark(task, freq)
                        log.write('F', nbm, level[0])

                    if self.scan_active:
                        self._queue_sleep(task)

                    if task.params["record"]:
                        self._stop_recording()

                freq = freq + interval
                if not self.scan_active:
                    return task
            pass_count, task = self._pass_count_update(pass_count, task)
        task.scanq.notify_end_of_scan()
        return task
Esempio n. 6
0
    def _process_queue(self, task):
        """Process the scan thread queue, updating parameter values
           from the UI. Checks to make sure the event is a valid one,
           else it's logged and dropped.

        :param: task: current task object
        :type: ScanningTask object
        :returns: True if an update was processed,
                  False if no update was found.
        """

        processed_something = False
        while task.scanq.update_queued():
            name, value = task.scanq.get_event_update()
            if not name or not value:
                logger.warning("Event update attempt returned None.")
                break
            try:
                key = str(name.split("_", 1)[1])
                if key in task.params:
                    if key in ('range_min', 'range_max'):
                        task.params[key] = khertz_to_hertz(value)
                    else:
                        task.params[key] = value
                else:
                    logger.warning(
                        "Invalid key in event update: {}".format(key))
                    break
            except Exception as e:
                logger.warning(
                    "Processing event update failed with {}".format(e))
                logger.warning("Event list: {} {}".format(name, value))
                break
            processed_something = True
            logger.info("Queue passed %s %i", name, value)
            logger.info("Params[%s] = %s", key, task.params[key])
        return processed_something
Esempio n. 7
0
    def __init__(self,
                 scanq,
                 mode,
                 bookmarks,
                 nbl,
                 pass_params,
                 rig_controller,
                 log_filename):
        """We do some checks to see if we are good to go with the scan.

        :param scanq: queue used send/receive events from the UI.
        :type scanq: Queue object
        :param pass_params: configuration parameters
        :type pass_params: standard python dictionary
        :param mode: scanning mode, either bookmark or frequency
        :type mode: string
        :param bookmark: the actual list of bookmarks, may be empty
        :type bookmark: list of tuples, every tuple is a bookmark
        :raises: UnsupportedScanningConfigError if action or mode are not
        allowed
        :raises: ValueError if the pass_params dictionary contains invalid data
        :returns: none
        """

        self.error = None
        self.new_bookmark_list = nbl
        self.bookmarks = bookmarks
        self.scanq = scanq
        self.log_filename = log_filename

        if mode.lower() not in SUPPORTED_SCANNING_MODES:
            logger.error("Unsupported scanning mode "\
                          "provided, exiting.")
            logger.error("Provided mode:{}".format(mode))
            logger.error("Supported modes:{}".format(SUPPORTED_SCANNING_MODES))
            raise UnsupportedScanningConfigError

        self.mode = mode
        self.params = pass_params
        self.rig = rig_controller

        try:
            self.params["range_min"] = \
                            khertz_to_hertz(int(filter(str.isdigit,
                                                       self.params["txt_range_min"].get())))
            self.params["range_max"] = \
                            khertz_to_hertz(int(filter(str.isdigit,
                                                       self.params["txt_range_max"].get())))
            self.params["interval"] = int(filter(str.isdigit,
                                                 self.params["txt_interval"].get()))
            self.params["delay"] = int(filter(str.isdigit,
                                              self.params["txt_delay"].get()))
            self.params["passes"] = int(filter(str.isdigit,
                                               self.params["txt_passes"].get()))
            self.params["sgn_level"] = int(re.sub("[^-0-9]",
                                                  "",
                                                  self.params["txt_sgn_level"].get()))
            self.params["log"] = self.params["ckb_log"].is_checked()
            self.params["wait"] = self.params["ckb_wait"].is_checked()
            self.params["record"] = self.params["ckb_record"].is_checked()
            self.params["auto_bookmark"] = self.params["ckb_auto_bookmark"].is_checked()

        except ValueError:
            """We log some info and re raise."""
            logger.exception("One input values is not of the proper type.")
            logger.exception("range_max:{}".format(self.params["txt_range_max"]))
            logger.exception("range_min:{}".format(self.params["txt_range_min"]))
            logger.exception("interval:{}".format(self.params["txt_interval"]))
            logger.exception("delay:{}".format(self.params["txt_delay"]))
            logger.exception("passes:{}".format(self.params["txt_passes"]))
            logger.exception("sgn_level:{}".format(self.params["txt_sgn_level"]))
            raise

        if mode == "frequency":
            self._check_interval()
Esempio n. 8
0
 def _get_task_items(self, task):
     freq = task.params["range_min"]
     pass_count = task.params["passes"]
     interval = khertz_to_hertz(task.params["interval"])
     return freq, pass_count, interval
Esempio n. 9
0
    def __init__(self, scanq, mode, bookmarks, nbl, pass_params,
                 rig_controller, log_filename):
        """We do some checks to see if we are good to go with the scan.

        :param scanq: queue used send/receive events from the UI.
        :type scanq: Queue object
        :param pass_params: configuration parameters
        :type pass_params: standard python dictionary
        :param mode: scanning mode, either bookmark or frequency
        :type mode: string
        :param bookmark: the actual list of bookmarks, may be empty
        :type bookmark: list of tuples, every tuple is a bookmark
        :raises: UnsupportedScanningConfigError if action or mode are not
        allowed
        :raises: ValueError if the pass_params dictionary contains invalid data
        :returns: none
        """

        self.error = None
        self.new_bookmark_list = nbl
        self.bookmarks = bookmarks
        self.scanq = scanq
        self.log_filename = log_filename

        if mode.lower() not in SUPPORTED_SCANNING_MODES:
            logger.error("Unsupported scanning mode " "provided, exiting.")
            logger.error("Provided mode:{}".format(mode))
            logger.error("Supported modes:{}".format(SUPPORTED_SCANNING_MODES))
            raise UnsupportedScanningConfigError

        self.mode = mode
        self.params = pass_params
        self.rig = rig_controller

        try:
            self.params["range_min"] = khertz_to_hertz(
                int(filter(str.isdigit, self.params["txt_range_min"].get())))
            self.params["range_max"] = khertz_to_hertz(
                int(filter(str.isdigit, self.params["txt_range_max"].get())))
            self.params["interval"] = int(
                filter(str.isdigit, self.params["txt_interval"].get()))
            self.params["delay"] = int(
                filter(str.isdigit, self.params["txt_delay"].get()))
            self.params["passes"] = int(
                filter(str.isdigit, self.params["txt_passes"].get()))
            self.params["sgn_level"] = int(
                re.sub("[^-0-9]", "", self.params["txt_sgn_level"].get()))
            self.params["log"] = self.params["ckb_log"].is_checked()
            self.params["wait"] = self.params["ckb_wait"].is_checked()
            self.params["record"] = self.params["ckb_record"].is_checked()
            self.params["auto_bookmark"] = self.params[
                "ckb_auto_bookmark"].is_checked()

        except ValueError:
            """We log some info and re raise."""
            logger.exception("One input values is not of the proper type.")
            logger.exception("range_max:{}".format(
                self.params["txt_range_max"]))
            logger.exception("range_min:{}".format(
                self.params["txt_range_min"]))
            logger.exception("interval:{}".format(self.params["txt_interval"]))
            logger.exception("delay:{}".format(self.params["txt_delay"]))
            logger.exception("passes:{}".format(self.params["txt_passes"]))
            logger.exception("sgn_level:{}".format(
                self.params["txt_sgn_level"]))
            raise

        if mode == "frequency":
            self._check_interval()
Esempio n. 10
0
 def _get_task_items(self, task):
     freq = task.params["range_min"]
     pass_count = task.params["passes"]
     interval = khertz_to_hertz(task.params["interval"])
     return freq, pass_count, interval