1# QT5 = True 2import os 3import sys 4 5import psutil 6from PyQt5.QtCore import Qt, QSettings 7from PyQt5.QtGui import QColor 8 9from urh.util.Formatter import Formatter 10from urh.util.Logger import logger 11 12 13global __qt_settings 14def __get_qt_settings(): 15 global __qt_settings 16 17 try: 18 __qt_settings.fileName() 19 except: 20 __qt_settings = QSettings(QSettings.IniFormat, QSettings.UserScope, 'urh', 'urh') 21 22 return __qt_settings 23 24 25def get_qt_settings_filename(): 26 return __get_qt_settings().fileName() 27 28 29MAX_RECENT_FILE_NR = 10 30ZOOM_TICKS = 10 31 32PIXELS_PER_PATH = 5000 33 34SPECTRUM_BUFFER_SIZE = 2 ** 15 35SNIFF_BUFFER_SIZE = 5 * 10 ** 7 36CONTINUOUS_BUFFER_SIZE_MB = 50 37 38PAUSE_TRESHOLD = 10 39RECT_BIT_WIDTH = 10 40BIT_SCENE_HEIGHT = 100 41 42TRANSPARENT_COLOR = QColor(Qt.transparent) 43 44LINECOLOR = QColor.fromRgb(225, 225, 225) 45BGCOLOR = QColor.fromRgb(55, 53, 53) 46AXISCOLOR = QColor.fromRgb(200, 200, 200, 100) 47ARROWCOLOR = QColor.fromRgb(204, 120, 50) 48 49ERROR_BG_COLOR = QColor.fromRgb(255, 0, 0, 150) 50 51SEND_INDICATOR_COLOR = QColor("darkblue") # overwritten by system color (bin/urh) 52 53# ROI-SELECTION COLORS 54SELECTION_COLOR = QColor("darkblue") # overwritten by system color (bin/urh) 55NOISE_COLOR = QColor("red") 56SELECTION_OPACITY = 1 57NOISE_OPACITY = 0.33 58 59# SEPARATION COLORS 60ONES_AREA_COLOR = Qt.green 61ZEROS_AREA_COLOR = Qt.magenta 62SEPARATION_OPACITY = 0.15 63SEPARATION_PADDING = .05 # percent 64 65# PROTOCOL TABLE COLORS 66SELECTED_ROW_COLOR = QColor.fromRgb(0, 0, 255) 67DIFFERENCE_CELL_COLOR = QColor.fromRgb(255, 0, 0) 68 69PROPERTY_FOUND_COLOR = QColor.fromRgb(0, 124, 0, 100) 70PROPERTY_NOT_FOUND_COLOR = QColor.fromRgb(124, 0, 0, 100) 71 72SEPARATION_ROW_HEIGHT = 30 73 74PROJECT_FILE = "URHProject.xml" 75DECODINGS_FILE = "decodings.txt" 76FIELD_TYPE_SETTINGS = os.path.realpath(os.path.join(get_qt_settings_filename(), "..", "fieldtypes.xml")) 77 78# DEVICE SETTINGS 79DEFAULT_IP_USRP = "192.168.10.2" 80DEFAULT_IP_RTLSDRTCP = "127.0.0.1" 81 82# DECODING NAMES 83DECODING_INVERT = "Invert" 84DECODING_DIFFERENTIAL = "Differential Encoding" 85DECODING_REDUNDANCY = "Remove Redundancy" 86DECODING_DATAWHITENING = "Remove Data Whitening (CC1101)" 87DECODING_CARRIER = "Remove Carrier" 88DECODING_BITORDER = "Change Bitorder" 89DECODING_EDGE = "Edge Trigger" 90DECODING_SUBSTITUTION = "Substitution" 91DECODING_EXTERNAL = "External Program" 92DECODING_ENOCEAN = "Wireless Short Packet (WSP)" 93DECODING_CUT = "Cut before/after" 94DECODING_MORSE = "Morse Code" 95DECODING_DISABLED_PREFIX = "[Disabled] " 96 97LABEL_COLORS = [QColor.fromRgb(217, 240, 27, 125), # yellow 98 QColor.fromRgb(41, 172, 81, 125), # green 99 QColor.fromRgb(245, 12, 12, 125), # red 100 QColor.fromRgb(12, 12, 242, 125), # blue 101 QColor.fromRgb(67, 44, 14, 125), # brown 102 QColor.fromRgb(146, 49, 49, 125), # dark red 103 QColor.fromRgb(9, 9, 54, 125), # dark blue 104 QColor.fromRgb(17, 49, 27, 125), # dark green 105 QColor.fromRgb(244, 246, 36, 125), # strong yellow 106 QColor.fromRgb(61, 67, 67, 125), # gray 3 107 QColor.fromRgb(58, 60, 100, 125), # halfdark blue 108 QColor.fromRgb(139, 148, 148, 125), # gray 2 109 QColor.fromRgb(153, 207, 206, 125), # light blue green 110 QColor.fromRgb(207, 223, 223, 125), # gray 1 111 QColor.fromRgb(106, 10, 10, 125), # darker red 112 QColor.fromRgb(12, 142, 242, 125), # light blue 113 QColor.fromRgb(213, 212, 134, 125), # light yellow 114 QColor.fromRgb(240, 238, 244, 125), # gray 0 115 QColor.fromRgb(201, 121, 18, 125), # orange 116 QColor.fromRgb(155, 170, 224, 125), # lighter blue 117 QColor.fromRgb(12, 242, 201, 125), # blue green 118 QColor.fromRgb(7, 237, 78, 125), # light green 119 QColor.fromRgb(154, 37, 111, 125), # pink 120 QColor.fromRgb(159, 237, 7, 125), # yellow green 121 QColor.fromRgb(231, 136, 242, 125), # light pink 122 ] 123 124# full alpha for participant colors, since its used in text html view (signal frame) 125PARTICIPANT_COLORS = [QColor.fromRgb(lc.red(), lc.green(), lc.blue()) for lc in LABEL_COLORS] 126 127BG_COLOR_CORRECT = QColor(0, 255, 0, 150) 128BG_COLOR_WRONG = QColor(255, 0, 0, 150) 129 130HIGHLIGHT_TEXT_BACKGROUND_COLOR = QColor("orange") 131HIGHLIGHT_TEXT_FOREGROUND_COLOR = QColor("white") 132 133PEAK_COLOR = QColor("darkRed") 134 135NUM_CENTERS = 16 136 137SHORTEST_PREAMBLE_IN_BITS = 8 138SHORTEST_CONSTANT_IN_BITS = 8 139 140# used for displaying indented logs e.g. in simulation dialog 141INDENT = 8 142 143# Pause separator in message files 144PAUSE_SEP = "/" 145 146 147def read(key: str, default_value=None, type=str): 148 val = __get_qt_settings().value(key, default_value) 149 if val is None: 150 val = type() 151 152 if type is bool: 153 val = str(val).lower() 154 try: 155 return bool(int(val)) 156 except ValueError: 157 return str(val).lower() == "true" 158 else: 159 return type(val) 160 161 162def write(key: str, value): 163 __get_qt_settings().setValue(key, value) 164 165 166def all_keys(): 167 return __get_qt_settings().allKeys() 168 169 170def sync(): 171 __get_qt_settings().sync() 172 173 174OVERWRITE_RECEIVE_BUFFER_SIZE = None # for unit tests 175 176 177def get_receive_buffer_size(resume_on_full_receive_buffer: bool, spectrum_mode: bool) -> int: 178 if OVERWRITE_RECEIVE_BUFFER_SIZE: 179 return OVERWRITE_RECEIVE_BUFFER_SIZE 180 181 if resume_on_full_receive_buffer: 182 if spectrum_mode: 183 num_samples = SPECTRUM_BUFFER_SIZE 184 else: 185 num_samples = SNIFF_BUFFER_SIZE 186 else: 187 # Take 60% of avail memory 188 threshold = read('ram_threshold', 0.6, float) 189 num_samples = threshold * (psutil.virtual_memory().available / 8) 190 191 # Do not let it allocate too much memory on 32 bit 192 if 8 * 2 * num_samples > sys.maxsize: 193 num_samples = sys.maxsize // (8 * 2 * 1.5) 194 logger.info("Correcting buffer size to {}".format(num_samples)) 195 196 logger.info("Allocate receive buffer with {0}B".format(Formatter.big_value_with_suffix(num_samples * 8))) 197 return int(num_samples) 198