Рефактор.
This commit is contained in:
@@ -55,7 +55,7 @@ const UM_MAX: = 55.0
|
||||
func _ready() -> void:
|
||||
if Engine.is_editor_hint():
|
||||
return
|
||||
var settings_file = settings.get_settings_file_path()
|
||||
var settings_file = get_settings_file_path()
|
||||
var abs_path = ProjectSettings.globalize_path(settings_file)
|
||||
log.info('Путь к файлу настроек: \"%s\"' % abs_path)
|
||||
var file = FileAccess.open(settings_file, FileAccess.READ)
|
||||
|
||||
@@ -24,7 +24,7 @@ class Unit extends Object:
|
||||
var tx_tick: int = 0 ## Тик-время отправки буфера
|
||||
var rx_tick: int = 0 ## Тик-время последнего приёма данных
|
||||
var online: bool = false ## Состояние подключения устройства
|
||||
var name: String = '<без имени>' ## Уникальное имя устройства
|
||||
var name: StringName = '<без имени>' ## Уникальное имя устройства
|
||||
func _init(nm) -> void: self.name = nm
|
||||
func _to_string() -> String:
|
||||
return String('Unit(\"%s\", %s)' % [self.name, 'на связи' if online else 'отключен'])
|
||||
|
||||
@@ -2,11 +2,11 @@ class_name yau_07 extends Node
|
||||
|
||||
## Протокол ячейки ЯУ-07.
|
||||
|
||||
const ONLINE_TIMEOUT = 5000 ## Время ожидания пакета от ячейки, милисекунды
|
||||
const RESEND_TIMEOUT = 300 ## Задержка для повторной отправки команды, милисекунды
|
||||
const RESEND_TIMEOUT_FLASH = 1500 ## Задержка для повторной отправки команды флеш, милисекунды
|
||||
const RETRY_COUNT = 5 ## Количество повторных отправок
|
||||
const BUFFER_SIZE = 2048 ## Размер буфера для приёма датаграмм
|
||||
const ONLINE_TIMEOUT: = 5000 ## Время ожидания пакета от ячейки, милисекунды
|
||||
const RESEND_TIMEOUT: = 300 ## Задержка для повторной отправки команды, милисекунды
|
||||
const RESEND_TIMEOUT_FLASH: = 1500 ## Задержка для повторной отправки команды флеш, милисекунды
|
||||
const RETRY_COUNT: = 5 ## Количество повторных отправок
|
||||
const BUFFER_SIZE: = 2048 ## Размер буфера для приёма датаграмм
|
||||
|
||||
|
||||
## Ячейка ЯУ-07.
|
||||
@@ -30,10 +30,10 @@ class YaU07 extends unit.Unit:
|
||||
var cmd_num_rx: = 0 ## Номер команды принятый
|
||||
var cmd_num_tx: = 0 ## Номер команды переданный
|
||||
var cmd_result: = 1 ## Результат выполнения команды. Устанавливается в ЯУ-07
|
||||
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
||||
var cmd_data: = PackedByteArray() ## Данные команды. Устанавливается в ЯУ-07
|
||||
var cmd_retry: = RETRY_COUNT ## Счётчик оставшихся попыток выполнить команду
|
||||
var cmd_code_rx = 0 ## Код последней выполненой команды
|
||||
var cmd_code_tx = 0 ## Код последней отправленной команды
|
||||
var cmd_code_rx: = 0 ## Код последней выполненой команды
|
||||
var cmd_code_tx: = 0 ## Код последней отправленной команды
|
||||
var cmd_tick_tx: = 0 ## Время последней отправки команды
|
||||
var cmd_tick_rx: = 0 ## Время последнего приёма команды
|
||||
var status: = PackedByteArray() ## Поле "состояние прибора"
|
||||
@@ -46,7 +46,7 @@ class YaU07 extends unit.Unit:
|
||||
func _to_string() -> String: return String('яу07: %s %s' % [self.name, ['отключен', 'на связи'][int(online)]])
|
||||
|
||||
|
||||
func _init(nm):
|
||||
func _init(nm: StringName):
|
||||
self.name = nm
|
||||
tx_data.resize(BUFFER_SIZE)
|
||||
tx_data.fill(0)
|
||||
@@ -57,7 +57,7 @@ class YaU07 extends unit.Unit:
|
||||
online = false
|
||||
emit_signal('line_changed', self)
|
||||
|
||||
var rc = Error.ERR_BUSY
|
||||
var rc: = Error.ERR_BUSY
|
||||
if cmd_state == CmdState.SEND:
|
||||
rc = Error.OK
|
||||
cmd_tick_tx = tick
|
||||
@@ -96,16 +96,16 @@ class YaU07 extends unit.Unit:
|
||||
elif cmd_code == CmdCode.WRITE_FLASH:
|
||||
tx_data.encode_u8(7, 1)
|
||||
tx_data.encode_u16(8, 0)
|
||||
tx_data.encode_u16(10, len(fl_data))
|
||||
tx_len = 11 + len(fl_data) * 2
|
||||
for i in len(fl_data):
|
||||
tx_data.encode_u16(10, fl_data.size())
|
||||
tx_len = 11 + fl_data.size() * 2
|
||||
for i in fl_data.size():
|
||||
tx_data.encode_u16(12 + i * 2, fl_data[i])
|
||||
elif cmd_code == CmdCode.WRITE_FLASH_MP550:
|
||||
tx_data.encode_u8(7, id_sector)
|
||||
tx_data.encode_u16(8, 0)
|
||||
tx_data.encode_u16(10, len(fl_data) * 2)
|
||||
tx_len = 12 + len(fl_data) * 2
|
||||
for i in len(fl_data):
|
||||
tx_data.encode_u16(10, fl_data.size() * 2)
|
||||
tx_len = 12 + fl_data.size() * 2
|
||||
for i in fl_data.size():
|
||||
tx_data.encode_u16(12 + i * 2, fl_data[i])
|
||||
elif cmd_code == CmdCode.READ_FLASH:
|
||||
tx_len = 11
|
||||
@@ -130,7 +130,7 @@ class YaU07 extends unit.Unit:
|
||||
|
||||
cmd_num_tx = (cmd_num_rx + 1) % 0xffff
|
||||
|
||||
var ports_count = ports_data.size()
|
||||
var ports_count: = ports_data.size()
|
||||
tx_len = ports_count * 2 + 8
|
||||
tx_data.encode_u16(0, cmd_retry) # Исправление для сетевого стека "nm-callback" процессоров STM
|
||||
tx_data.encode_u16(2, cmd_num_tx)
|
||||
@@ -191,49 +191,49 @@ class YaU07 extends unit.Unit:
|
||||
## Возвращает - Код команды не найден, 0...255 - код команды.
|
||||
func get_cmd_code(rx_data: PackedByteArray):
|
||||
|
||||
var rx_data_len = rx_data.size()
|
||||
var rx_data_len: = rx_data.size()
|
||||
if rx_data_len < 7:
|
||||
return null
|
||||
var status_len = rx_data.decode_u16(6) # Длина массива байтового "состояние прибора"
|
||||
if rx_data_len <= (status_len + 6): # Нет поля "ответ на команду", разбор пакета завершить
|
||||
var status_len: = rx_data.decode_u16(6) # Длина массива байтового "состояние прибора"
|
||||
if rx_data_len <= (status_len + 6): # Нет поля "ответ на команду", разбор пакета завершить
|
||||
return null
|
||||
var cmd_code_pos = status_len + 8 # Положение в приёмном буфере "кода команды"
|
||||
var cmd_code_pos: = status_len + 8 # Положение в приёмном буфере "кода команды"
|
||||
if rx_data_len <= cmd_code_pos:
|
||||
return null
|
||||
return rx_data[cmd_code_pos] # "код команды"
|
||||
return rx_data[cmd_code_pos] # "код команды"
|
||||
|
||||
|
||||
func parse_isa(rx_data: PackedByteArray, status_len) -> bool:
|
||||
var ports_count_pos = status_len + 10 # Положение в приёмном буфере количества портов
|
||||
func parse_isa(rx_data: PackedByteArray, status_len: int) -> bool:
|
||||
var ports_count_pos: = status_len + 10 # Положение в приёмном буфере количества портов
|
||||
if rx_data.size() < ports_count_pos:
|
||||
return false
|
||||
var ports_count = rx_data[ports_count_pos] # Количество портов
|
||||
var counted_len = status_len + (ports_count * 4) + 11 # Вычисленная длина пакета
|
||||
var ports_count: = rx_data[ports_count_pos] # Количество портов
|
||||
var counted_len: = status_len + (ports_count * 4) + 11 # Вычисленная длина пакета
|
||||
if rx_data.size() < counted_len:
|
||||
return false
|
||||
var addr_pos = status_len + 11 # Смещение положения адреса в приёмном буфере
|
||||
var data_pos = status_len + 13 # Смещение положения данных в приёмном буфере
|
||||
var addr_pos: = status_len + 11 # Смещение положения адреса в приёмном буфере
|
||||
var data_pos: = status_len + 13 # Смещение положения данных в приёмном буфере
|
||||
var i: = 0
|
||||
while i < ports_count:
|
||||
var shift: = i * 4
|
||||
if rx_data.size() < (data_pos + shift):
|
||||
return false
|
||||
var isa_addr = rx_data.decode_u16(addr_pos + shift) # Адрес порта ISA яу-07
|
||||
var isa_data = rx_data.decode_u16(data_pos + shift) # Данные порта ISA яу-07
|
||||
var isa_addr: = rx_data.decode_u16(addr_pos + shift) # Адрес порта ISA яу-07
|
||||
var isa_data: = rx_data.decode_u16(data_pos + shift) # Данные порта ISA яу-07
|
||||
isa_ports[isa_addr] = isa_data
|
||||
i += 1
|
||||
cmd_data = rx_data.slice(addr_pos, (addr_pos + ports_count * 4) - 1)
|
||||
return i > 0
|
||||
|
||||
func parse_block(rx_data: PackedByteArray, status_len) -> bool:
|
||||
var ports_count_pos = status_len + 7 # Положение в приёмном буфере количества портов
|
||||
func parse_block(rx_data: PackedByteArray, status_len: int) -> bool:
|
||||
var ports_count_pos: = status_len + 7 # Положение в приёмном буфере количества портов
|
||||
if rx_data.size() < ports_count_pos:
|
||||
return false
|
||||
if rx_data.size() < (ports_count_pos + 5):
|
||||
return false
|
||||
var block_len = rx_data.decode_u16(ports_count_pos + 3)
|
||||
var block_adr = rx_data.decode_u16(ports_count_pos + 5)
|
||||
var block_data = []
|
||||
var block_len: = rx_data.decode_u16(ports_count_pos + 3)
|
||||
var block_adr: = rx_data.decode_u16(ports_count_pos + 5)
|
||||
var block_data: = []
|
||||
if rx_data.size() < (ports_count_pos + 7 + (block_len - 1) * 2):
|
||||
return false
|
||||
for i in block_len:
|
||||
@@ -242,7 +242,7 @@ class YaU07 extends unit.Unit:
|
||||
isa_block[block_adr] = block_data
|
||||
return true
|
||||
|
||||
func parse_flash(rx_data: PackedByteArray, status_len, cmd_code) -> bool:
|
||||
func parse_flash(rx_data: PackedByteArray, status_len: int, cmd_code: CmdCode) -> bool:
|
||||
if cmd_code == CmdCode.READ_FLASH:
|
||||
if rx_data.size() < (status_len + 14):
|
||||
return false
|
||||
@@ -268,7 +268,7 @@ class YaU07 extends unit.Unit:
|
||||
online = true
|
||||
emit_signal('line_changed', self)
|
||||
|
||||
var rx_data_len = rx_data.size()
|
||||
var rx_data_len: int = rx_data.size()
|
||||
if rx_data_len < 10:
|
||||
return false
|
||||
|
||||
@@ -276,14 +276,14 @@ class YaU07 extends unit.Unit:
|
||||
if cmd_state == CmdState.UNCK:
|
||||
cmd_state = CmdState.DONE
|
||||
|
||||
var status_len = rx_data.decode_u16(6) # Длина массива байтового "состояние прибора"
|
||||
var status_len: int = rx_data.decode_u16(6) # Длина массива байтового "состояние прибора"
|
||||
if rx_data_len < (status_len + 6):
|
||||
return false
|
||||
var i: = 0
|
||||
var len_rx_data: = rx_data.size()
|
||||
status.resize(status_len)
|
||||
while i < status_len:
|
||||
var byte_i = i + 8
|
||||
var byte_i: = i + 8
|
||||
if byte_i < len_rx_data:
|
||||
status[i] = rx_data[byte_i] # Массив байтовый "состояние прибора"
|
||||
i += 1
|
||||
@@ -292,11 +292,11 @@ class YaU07 extends unit.Unit:
|
||||
if rx_data_len == (status_len + 6):
|
||||
return true # Нет поля "ответ на команду", разбор пакета завершить
|
||||
|
||||
var cmd_code_pos = status_len + 8 # Положение в приёмном буфере "код команды"
|
||||
var cmd_code_pos: = status_len + 8 # Положение в приёмном буфере "код команды"
|
||||
if rx_data_len <= cmd_code_pos:
|
||||
return false
|
||||
|
||||
var cmd_status_pos = status_len + 9 # Положение в приёмном буфере "состояния выполнения команды"
|
||||
var cmd_status_pos: = status_len + 9 # Положение в приёмном буфере "состояния выполнения команды"
|
||||
if rx_data_len <= cmd_status_pos:
|
||||
return false
|
||||
cmd_result = rx_data[cmd_status_pos]
|
||||
@@ -304,7 +304,7 @@ class YaU07 extends unit.Unit:
|
||||
return false
|
||||
|
||||
var cmd_code: CmdCode = rx_data[cmd_code_pos] as CmdCode # "код команды"
|
||||
var rc = true
|
||||
var rc: = true
|
||||
if (cmd_code == CmdCode.READ_ISA) or (cmd_code == CmdCode.WRITE_ISA):
|
||||
rc = parse_isa(rx_data, status_len)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user