From 3e13642ba04a002972929b2988faf8723ad07d0c Mon Sep 17 00:00:00 2001 From: sasha80 Date: Tue, 25 Jul 2023 15:16:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=92=20=D0=BF=D1=80=D0=BE=D1=86=D0=B5=D1=81?= =?UTF-8?q?=D1=81=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scenes/tab_switch.gd | 2 +- scripts/capsrpb.gd | 20 ++++++---- scripts/repnetwork.gd | 5 +-- scripts/repsettings.gd | 4 +- scripts/threats.gd | 85 +++++++++++++++++++++++++----------------- scripts/tools.gd | 1 + 6 files changed, 70 insertions(+), 47 deletions(-) diff --git a/scenes/tab_switch.gd b/scenes/tab_switch.gd index c287888..6159475 100644 --- a/scenes/tab_switch.gd +++ b/scenes/tab_switch.gd @@ -7,7 +7,7 @@ func _ready() -> void: # Called every frame. 'delta' is the elapsed time since the previous frame. -func _process(delta: float) -> void: +func _process(_delta: float) -> void: pass diff --git a/scripts/capsrpb.gd b/scripts/capsrpb.gd index 435266b..64656ab 100644 --- a/scripts/capsrpb.gd +++ b/scripts/capsrpb.gd @@ -6,17 +6,20 @@ const BUFFER_SIZE = 2048 class CapsRpb: signal line_changed(unit: CapsRpb) - signal command_done(unit: CapsRpb) + signal data_received(unit: CapsRpb) signal command_fail(unit: CapsRpb) + signal parse_error(unit: CapsRpb, msg: String) + + static var json_conv: = JSON.new() var online: = false - var name: = String() - var test_json_conv: JSON + var name: String + var json_dic: Dictionary var tick: = 0.0 var tick_rx: = 0.0 func _to_string() -> String: return String('капсрпб: "%s" %s ' % [self.name, ['отключен', 'на связи'][int(online)]]) + func _init(nm): - test_json_conv = JSON.new() self.name = nm @@ -26,9 +29,12 @@ class CapsRpb: online = true emit_signal('line_changed', self) var utf8_data = data.get_string_from_utf8() - test_json_conv.parse(utf8_data) - var json = test_json_conv.get_data() - print_debug(json) + if Error.OK == json_conv.parse(utf8_data): + json_dic.merge(json_conv.get_data()) + emit_signal('data_received', self) + else: + var msg = json_conv.get_error_message() + emit_signal('parse_error', self, msg) func process(delta: float): diff --git a/scripts/repnetwork.gd b/scripts/repnetwork.gd index dbbf81a..87e7b0a 100644 --- a/scripts/repnetwork.gd +++ b/scripts/repnetwork.gd @@ -40,7 +40,7 @@ func _ready() -> void: var proto = setting[0] if proto in PROTO_TYPE: var unit = PROTO_TYPE[proto].new(key) - var addr = Array([setting[1], setting[2]]) + var addr = REPSettings.get_unit_key(setting) units[addr] = unit unit.connect('line_changed', Callable(logger_page, 'on_line_changed').bind(addr)) unit.connect('command_fail', Callable(logger_page, 'on_command_fail').bind(addr)) @@ -65,5 +65,4 @@ func _process(delta: float) -> void: match unit.process(delta): Error.OK: sock_unicast.send_to(addr, unit.data_tx) Error.FAILED: emit_signal('socket_error', 'ошибка: %s %s:%d' % [unit, addr[0], addr[1]]) - for sock in poll_sockets: - poll_receive(sock) + for sock in poll_sockets: poll_receive(sock) diff --git a/scripts/repsettings.gd b/scripts/repsettings.gd index b7515f6..bd13547 100644 --- a/scripts/repsettings.gd +++ b/scripts/repsettings.gd @@ -23,5 +23,5 @@ extends Node 'уарэп-щ3': ['uart', '/dev/stty0', 115200, 1, 1, false, 1000, 'Прибор Щ3'] } # скорость, стартовых, стоповых, чётность, таймаут в мкс -func _ready() -> void: - Log.info('Модуль настроек готов') +func get_unit_key(item: Array) -> Array: return [item[1], item[2]] +func _ready() -> void: Log.info('Модуль настроек готов') diff --git a/scripts/threats.gd b/scripts/threats.gd index 20d0d3c..cae1699 100644 --- a/scripts/threats.gd +++ b/scripts/threats.gd @@ -1,49 +1,56 @@ extends Node enum ThreatSrc { - SIGMA, + MP405, RLKS, RPB, - MP405 } + SIGMA } class Threat: enum FFlags { # Допустимые значения для Threat.fflags - TMOD = 1 << 0, - BAUD = 1 << 1, - PROTO = 1 << 2, - SLON = 1 << 3, - SLAT = 1 << 4, - SALT = 1 << 5, - LAT = 1 << 6, - LON = 1 << 7, - ALT = 1 << 8, - AOA = 1 << 9, - FREQ = 1 << 10, - WIDTH = 1 << 11, - } + ALT = 1 << 1, + AOA = 1 << 2, + ATIME = 1 << 3, + BAUD = 1 << 4, + FFLAGS = 1 << 5, + FREQ = 1 << 6, + FREQM = 1 << 7, + LAT = 1 << 8, + LON = 1 << 9, + POW_RX = 1 << 10, + PROTO = 1 << 11, + RKRP = 1 << 12, + RPARAMS = 1 << 13, + SALT = 1 << 14, + SLAT = 1 << 15, + SLON = 1 << 16, + TICK = 1 << 17, + TMOD = 1 << 18, + UTIME = 1 << 19, + WIDTH = 1 << 20 } + var alt: float # Текущая высота, метры. var aoa: float # Курсовой угол на источник сигнала, градусы. - var freq: float # Частота несущей или центральная частота, МГц - var width: float # Ширина занимаемого диапазона частот, МГц - var pow_rx: float # Уровень принимаемого сигнала, дБм - var tick: int # Время приёма сигнала, мс - var freqm: String # Режим смены частоты - var rkrp: String # Рекомендуемый режим помехи - var rparams: String # Рекомендуемые параметры помехи - var tmod: String # Тип модуляции - var baud: float # Модуляционная скорость - var proto: String # Тип протокола источника сигнала - var slon: float # Координаты старта, долгота в градусах. Достоверность задана значением Threat.fflags - var slat: float # Координаты старта, широта в градусах. Достоверность задана значением Threat.fflags - var salt: float # Координаты старта, высота от уровня моря. метры. Достоверность задана значением Threat.fflags - var lat: float # Текущие координаты, долгота в градусах. Достоверность задана значением Threat.fflags - var lon: float # Текущие координаты, широта в градусах. Достоверность задана значением Threat.fflags - var alt: float # Текущая высота, метры. Достоверность задана значением Threat.fflags - var atime: Dictionary # Время обнаружения - var utime: Dictionary # Время крайнего обновления - var fflags: FFlags # Флаги достоверности полей + var atime: Dictionary # Время обнаружения. + var baud: float # Модуляционная скорость. + var fflags: FFlags # Флаги достоверности полей. + var freq: float # Частота несущей или центральная частота, МГц. + var freqm: String # Режим смены частоты. + var lat: float # Текущие координаты, долгота в градусах. + var lon: float # Текущие координаты, широта в градусах. + var pow_rx: float # Уровень принимаемого сигнала, дБм. + var proto: String # Тип протокола источника сигнала. + var rkrp: String # Рекомендуемый режим помехи. + var rparams: String # Рекомендуемые параметры помехи. + var salt: float # Координаты старта, высота от уровня моря, м. + var slat: float # Координаты старта, широта в градусах. + var slon: float # Координаты старта, долгота в градусах. + var tick: int # Время приёма сигнала, мс. + var tmod: String # Тип модуляции. + var utime: Dictionary # Время крайнего обновления. + var width: float # Ширина занимаемого диапазона частот, МГц. var _threats = {} @@ -52,7 +59,17 @@ var _threats = {} Источник цели может быть: 'RPB', 'SIGMA', 'RLKS', 'MP405' """ +func on_parse_threads(unit: capsrpb.CapsRpb): + print_debug(unit) + func _ready() -> void: Log.info('Модуль обработки целей готов') + var unit = REPSettings.addrs[] + unit.connect('data_received', Callable(self, 'on_data_capsrpb_received')) + + + +func on_data_capsrpb_received(unit: capsrpb.CapsRpb): + pass diff --git a/scripts/tools.gd b/scripts/tools.gd index cd5e55a..b5071f9 100644 --- a/scripts/tools.gd +++ b/scripts/tools.gd @@ -3,6 +3,7 @@ extends Node func assert_array_ipaddr(val: Array): """ Выкидывает исключение, если массив не содержит ip-адрес """ + assert(val.size() == 2) assert(val[0] is String) assert(val[1] is int) assert((0 < val[1]) and (val[1] < 65536))