Доработка. Рекомендуемые помехи
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ## Координаты старта, долгота в градусах.
|
||||
|
||||
Reference in New Issue
Block a user