Доработка. Приём и исполнение внешних ЦУ от 5П-28
This commit is contained in:
@@ -26,6 +26,14 @@ const MOD_TYPES: Array = ['',
|
||||
'psk',
|
||||
'ofdm',]
|
||||
|
||||
const CU_STATE: Dictionary = {
|
||||
0:2, # Подготовка к выполнению
|
||||
1:1, # Выполняется
|
||||
2:9, # Ошибка в команде
|
||||
3:7, # Занят выполнением другого ЦУ
|
||||
4:9, # Неисправность
|
||||
}
|
||||
|
||||
class TCP5P28:
|
||||
const PACK_TYPE_CMD: int = 1
|
||||
const PACK_TYPE_RES: int = 2
|
||||
@@ -38,6 +46,7 @@ class TCP5P28:
|
||||
signal command_fail(unit: TCP5P28) ## Сигнал при не выполнении команды
|
||||
signal parse_error(unit: TCP5P28, msg: String) ## Сигнал ошибки разбора сообщения
|
||||
signal get_threats(unit: TCP5P28) ## Сигнал запрос целей
|
||||
signal get_interfers(unit: TCP5P28) ## Запрос состояния выполнения целеуказания
|
||||
|
||||
var online: = false ## Состояние связи с источником сообщений
|
||||
var name: String ## Имя экземпляра
|
||||
@@ -58,6 +67,11 @@ class TCP5P28:
|
||||
var cmd_type = data.decode_u8(8)
|
||||
if cmd_type == CMD_TYPE_TH:
|
||||
emit_signal('get_threats')
|
||||
if cmd_type == CMD_TYPE_STATE:
|
||||
emit_signal('get_interfers')
|
||||
var external_cu = ProjectSettings.get_setting('application/config/external_cu', false)
|
||||
if cmd_type == CMD_TYPE_IN and external_cu:
|
||||
set_interfer(data)
|
||||
|
||||
func process(now_tick: int):
|
||||
if online and ((now_tick - rx_tick) > ONLINE_TIMEOUT):
|
||||
@@ -70,19 +84,44 @@ class TCP5P28:
|
||||
else:
|
||||
return Error.ERR_UNAVAILABLE
|
||||
|
||||
func pack_threats(threats):
|
||||
func pack_threats(ths):
|
||||
var data = PackedByteArray()
|
||||
var data_len = 4 + len(threats) * 80 # длинна блока данных в байтах
|
||||
var data_len = 4 + len(ths) * 80 # длинна блока данных в байтах
|
||||
var tick = Time.get_ticks_msec()
|
||||
data.resize(4)
|
||||
data.encode_u16(0, 0) # Код ошибки
|
||||
data.encode_u16(2, len(threats)) # Количество целей
|
||||
for th in threats.values():
|
||||
data.encode_u16(2, len(ths)) # Количество целей
|
||||
for th in ths.values():
|
||||
data.append_array(get_threats_data(th, int(tick)))
|
||||
var data_to_send: PackedByteArray = create_header(data_len)
|
||||
data_to_send.append_array(data)
|
||||
tx_stack.append(data_to_send)
|
||||
|
||||
|
||||
func pack_interfers(interfers, ecms):
|
||||
var data = PackedByteArray()
|
||||
var data_len = 12 # длинна блока данных в байтах
|
||||
data.resize(data_len)
|
||||
data.encode_u16(0, 0) # Код ошибки
|
||||
data.encode_u16(2, len(interfers)) # Количество целей
|
||||
data.encode_u32(4, 0) # Состояние УА-РЕП
|
||||
data.encode_u32(8, 0) # Состояние линий связи
|
||||
for id in interfers.values():
|
||||
var cu_data: PackedByteArray = []
|
||||
cu_data.resize(4)
|
||||
var cu = ecms[id]
|
||||
cu_data.encode_u16(0, cu.ispp)
|
||||
var state: int
|
||||
if CU_STATE.has(cu.svk):
|
||||
state = CU_STATE[cu.svk]
|
||||
else:
|
||||
state = 9
|
||||
cu_data.encode_u8(2, state) # Состояние выполнения команды
|
||||
cu_data.encode_u8(3, 0xFF) # Эффективность работы помехи
|
||||
data.append_array(cu_data)
|
||||
var data_to_send: PackedByteArray = create_header(data_len + 4 * len(interfers))
|
||||
data_to_send.append_array(data)
|
||||
tx_stack.append(data_to_send)
|
||||
|
||||
func create_header(data_len):
|
||||
var head_data = PackedByteArray()
|
||||
head_data.resize(8) # Размер заголовка
|
||||
@@ -133,4 +172,23 @@ class TCP5P28:
|
||||
for i in len(cp866_proto):
|
||||
th_data[28 + i] = cp866_proto[i]
|
||||
|
||||
|
||||
func set_interfer(data):
|
||||
var mode = data.decode_u8(9)
|
||||
var id = data.decode_u16(10)
|
||||
var aoa = float(data.decode_u16(12)) / 10
|
||||
var ela = float(data.decode_u16(14)) / 10
|
||||
var freq = data.decode_u16(16)
|
||||
var width = data.decode_u16(18)
|
||||
var interfer_params: Array = [mode, id, aoa, ela, freq, width]
|
||||
signaller.emit_signal('interfer_rcv', interfer_params)
|
||||
|
||||
func on_interfer_accept(err: bool):
|
||||
var data_tx = PackedByteArray()
|
||||
var data_len = 2 # длинна блока данных в байтах
|
||||
var tick = Time.get_ticks_msec()
|
||||
data_tx.resize(data_len)
|
||||
data_tx.encode_u16(0, err) # Код ошибки
|
||||
var data_to_send: PackedByteArray = create_header(data_len)
|
||||
data_to_send.append_array(data_tx)
|
||||
tx_stack.append(data_to_send)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user