From 98c8ea8b21c3bfe13e9fc3266be79b02aaf884a4 Mon Sep 17 00:00:00 2001 From: MaD_CaT Date: Wed, 24 Sep 2025 13:20:20 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0.=20=D0=92=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=80=D0=B5=D0=BA=D0=BE=D0=BC=D0=B5=D0=BD=D0=B4?= =?UTF-8?q?=D0=BE=D0=B2=D0=B0=D0=BD=D0=BD=D0=BE=D0=B9=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D1=86=D0=B5=D0=BB=D0=B8=20=D0=BF=D0=BE=D0=BC=D0=B5=D1=85?= =?UTF-8?q?=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/interfer.gd | 59 ++++++++++++++++++++++++++++++++++++++++++--- scripts/threats.gd | 2 +- 2 files changed, 57 insertions(+), 4 deletions(-) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index b7d6881..70b69c3 100644 --- a/scripts/interfer.gd +++ b/scripts/interfer.gd @@ -20,6 +20,11 @@ const ITERFER_MODE = { 'k1': [INTERFER_IQFILE, K1_PARAMS, 50], 'ozp1': [INTERFER_IQFILE, OZP1_PARAMS, 51] } +const RECOMMEND_INTERFER = { + 'ПСП + ФМ-2': 'srni1', + 'Линейная ЧМ': 'lchm1' +} + const SRNI1_PARAMS = {'par_names' : ['freq', 'width']} const SRNM2_PARAMS = {'par_names' : ['freq', 'width', 'period']} const SRNGPS_PARAMS = {'par_names' : ['freq', 'filename'], @@ -265,17 +270,23 @@ func on_data_capsrpb_received(unit0: capsrpb.CapsRpb, ecms: Dictionary) -> void: ## Вызыватся, когда пользователь выбрал помеху и выбраны цели. func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> void: + var ecm_name = interfer_name for item in sel_threats: var param: Dictionary = {} var kni: float = item.aoa var id = item.id param['freq'] = item.freq param['width'] = item.width + if item.rkrp != '': + var krp = get_krp(item) + if krp != '': + ecm_name = krp + set_rparams(item, param) if (param['width'] < settings.WIDTH_MIN): param['width'] = settings.WIDTH_MIN elif (param['width'] > settings.WIDTH_MAX): param['width'] = settings.WIDTH_MAX - interfer_create(u, interfer_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) + interfer_create(u, ecm_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) for item in fs_arr: var param: Dictionary = {} @@ -287,6 +298,11 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v if th != null: param['freq'] = th.freq param['width'] = th.width + if th.rkrp != '': + var krp = get_krp(th) + if krp != '': + ecm_name = krp + set_rparams(th, param) else: param['freq'] = item[1] param['width'] = item[2] @@ -295,10 +311,10 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v elif (param['width'] > settings.WIDTH_MAX): param['width'] = settings.WIDTH_MAX if th == null: - interfer_create(u, interfer_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) + interfer_create(u, ecm_name, ecms, param, kni, id, fs, SOURCE_INTERFER[1], power) else: id = th.id - interfer_create(u, interfer_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) + interfer_create(u, ecm_name, ecms, param, kni, id, thrs, SOURCE_INTERFER[0], power) func on_interfer_rcv(interfer_params: Array, unit0, ecms) -> void: var err: bool = false @@ -470,6 +486,12 @@ func on_threats_update(threat, ecms, unit_caps): if thrs[ecm_i] == th_id: ecm = ecms[ecm_i] ecm.params['freq'] = threat.freq + ecm.params['width'] = threat.width + if threat.rkrp != '': + var krp = get_krp(threat) + if krp != '': + ecm.krp = krp + set_rparams(threat, ecm.params) ecm.kni = threat.aoa set_nmfs(ecm) if threat.tmod != 'fm': @@ -538,3 +560,34 @@ func find_threat(freq: int, aoa: float): if fs_index_arr[0] == fs_index: return th return null + + +func set_rparams(threat: threats.Threat, params: Dictionary): + if threat.rparams.has('freq'): + params['freq'] = threat.rparams['freq'] + else: + params['freq'] = threat.freq + if threat.rparams.has('period'): + params['period'] = threat.rparams['period'] + if threat.rparams.has('width'): + params['width'] = threat.rparams['width'] + else: + params['width'] = threat.width + if threat.rparams.has('filename'): + params['filename'] = threat.rparams['filename'] + + +func get_krp(threat: threats.Threat): + var krp = '' + if RECOMMEND_INTERFER.has(threat.rkrp): + krp = RECOMMEND_INTERFER[threat.rkrp] + return krp + elif threat.rkrp == INTERFER_IQFILE: + if not threat.rparams.has('filename'): return krp + for key in ITERFER_MODE.keys(): + var ecm_params = ITERFER_MODE[key][1] + if not ecm_params.has('files'): continue + if ecm_params['files'] == threat.rparams['filename']: + krp = key + return krp + return krp diff --git a/scripts/threats.gd b/scripts/threats.gd index 93d34b3..11775bc 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -18,7 +18,7 @@ class Threat: var power: float ## Уровень принимаемого сигнала, дБм. var proto: String ## Тип протокола источника сигнала. var rkrp: String ## Рекомендуемый режим помехи. - var rparams: String ## Рекомендуемые параметры помехи. + var rparams: Dictionary ## Рекомендуемые параметры помехи. var salt: float ## Координаты старта, высота от уровня моря, м. var slat: float ## Координаты старта, широта в градусах. var slon: float ## Координаты старта, долгота в градусах.