diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 7acaa671..95fe1072 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -84,6 +84,7 @@ func _ready(): signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel')) signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(table_index)) interfer.connect('interfer_update', Callable(self, 'on_interfer_update').bind(table_index)) + interfer.connect('interfer_recommendate', Callable(self, 'on_interfer_recommendate')) $table.connect('row_pressed', Callable(self, 'on_row_pressed')) call_deferred('init_table') @@ -159,3 +160,12 @@ func map_th_to_row(ecm) -> Array: if INTERFER_STATE.has(ecm.svk): row[COLUMN_STATE] = '%s' % INTERFER_STATE[ecm.svk] return row + + +func on_interfer_recommendate(ecm): + var sel_rows: Array + $table.get_selected_rows(sel_rows) + if not len(sel_rows): return + var sel_ecm = $table.get_node_user_data(0, sel_rows[0]) + if ecm == sel_ecm: + signaller.emit_signal('interfer_selected', ecm) diff --git a/scripts/interfer.gd b/scripts/interfer.gd index f32db08f..0669a1bd 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'], @@ -139,6 +144,7 @@ signal interfer_run(ecm: Interfer) ## Вызывается в м signal interfer_error(ecm: Interfer, msg: String) ## Вызывается при ошибке. signal interfer_update(ecm: Interfer) ## Вызывается при обновлении помехи. signal interfer_resized(ecms: Dictionary) ## Вызывается при изменении количества сеансов помех. +signal interfer_recommendate(ecm: Interfer) ## Вызывается когда назначается рекомендуемая для цели помеха ## Отправляет словарь помех в юнит, для запаковки и отправки в 5П28. @@ -291,6 +297,11 @@ func on_interfer_create(interfer_name, sel_threats, fs_arr, power, u, ecms) -> v var id = item.id param['freq'] = item.freq param['width'] = item.width + if (item.rkrp != '') and item.fflags.rkrp: + var krp = get_krp(item) + if krp != '': + interfer_name = krp + set_rparams(item, param) if (param['width'] < settings.WIDTH_MIN): param['width'] = settings.WIDTH_MIN elif (param['width'] > settings.WIDTH_MAX): @@ -307,6 +318,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 != '') and th.fflags.rkrp: + var krp = get_krp(th) + if krp != '': + interfer_name = krp + set_rparams(th, param) else: param['freq'] = item[1] param['width'] = item[2] @@ -490,6 +506,13 @@ 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 != '') and threat.fflags.rkrp: + var krp = get_krp(threat) + if krp != '': + ecm.krp = krp + set_rparams(threat, ecm.params) + emit_signal('interfer_recommendate', ecm) ecm.kni = threat.aoa set_nmfs(ecm) if threat.tmod != 'fm': @@ -558,3 +581,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 80c62e69..83de85c5 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 ## Координаты старта, долгота в градусах.