трасса
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user