трасса

This commit is contained in:
lepshiy
2025-09-11 09:19:24 +03:00
parent 523996bc46
commit 5206d57f65

View File

@@ -1,12 +1,84 @@
class_name trassa_unit extends Node
const ONLINE_TIMEOUT: int = 5000 ## Время ожидания данных
const REQUEST_PERIOD: int = 3000 ## Переиод запроса, мс
class Trassa extends unit.Unit:
func process(tick: int):
return Error.ERR_BUSY
enum CmdCode {
START = 1,
STOP = 0,
INFO = 4,
}
func _init(unit_name: StringName):
self.name = unit_name
func parse(data: PackedByteArray, now_tick: int):
pass
func sciCalcFCS(src: PackedByteArray) -> int:
var fcs: int = 0
for b in src:
fcs ^= b
print("FCS: ", fcs)
return fcs & 0xFF
func _init(nm: StringName) -> void:
self.name = nm
tx_data.resize(10)
tx_data[0] = 0 #ID
tx_data[1] = 0 #Nc
tx_data[2] = 0 #RKS
tx_data[3] = 0 #RR
tx_data[4] = 0 #Td
tx_data[5] = 0 #Nt
tx_data[6] = 0 #Пакет от uarep-ctl
tx_data[7] = CmdCode.INFO #SRN
tx_data[8] = CmdCode.INFO #JTIDS
tx_data[9] = 0 #CRC
print("INIT: ", self.name)
func parse(rx_data: PackedByteArray, tick: int):
print("PARSE: ", tick, "size:", rx_data.size())
if rx_data.size() != 40:
print("PARSE: ")
emit_signal("parse_failed", self)
return
var expected_fcs = sciCalcFCS(rx_data.slice(0, 39))
if expected_fcs != rx_data[39]:
print("PARSE: ", expected_fcs, "Got:", rx_data[39])
emit_signal("parse_failed", self)
return
var strings := []
for i in range(10):
var offset = i * 4
var line = rx_data.slice(offset, offset + 4)
print("PARSE: ", i, ":", line)
strings.append(line)
print("PARSE: ")
emit_signal("data_received", strings)
func process(tick: int) -> int:
var rc: = Error.ERR_BUSY
if (tick - tx_tick) > REQUEST_PERIOD:
tx_tick = tick
rc = Error.OK
print("PROCESS: ", tick)
if online:
if (tick - rx_tick) > ONLINE_TIMEOUT:
online = false
emit_signal('line_changed', self)
return rc
func build_packet() -> PackedByteArray:
var packet := PackedByteArray()
packet.resize(40)
for i in range(10):
var offset = i * 4
packet[offset + 0] = i
packet[offset + 1] = i + 1
packet[offset + 2] = i + 2
packet[offset + 3] = i + 3
packet[39] = sciCalcFCS(packet.slice(0, 39))
print("BUILD: ", packet)
return packet