90 lines
2.9 KiB
GDScript
90 lines
2.9 KiB
GDScript
extends Node
|
|
|
|
const modulation_dev: Dictionary = {
|
|
0 : 50,
|
|
1 : 51,
|
|
2 : 52,
|
|
3 : 51,
|
|
4 : 52,
|
|
5 : 51,
|
|
6 : 52,
|
|
}
|
|
|
|
var ems_board: Dictionary = {}
|
|
|
|
# Called when the node enters the scene tree for the first time.
|
|
func _ready() -> void:
|
|
check_dir()
|
|
var in_tbl: Array = []
|
|
var out_tbl: Array = []
|
|
for j in yemsconsts.NUM_INPUT_G:
|
|
in_tbl.append([j+1])
|
|
out_tbl.append([j+yemsconsts.STATUS_OUT_OFFSET])
|
|
for i in len(yemsconsts.EMS_G_BOARDS):
|
|
var unit_key = settings.get_unit_key(yemsconsts.EMS_G_BOARDS[i][0])
|
|
var unit_ems = network.units[unit_key]
|
|
var ems_g: yemsboards.EmsBoard = yemsboards.EmsBoard.new(i+3, 0x120, in_tbl, out_tbl, unit_ems)
|
|
ems_board[i+3] = [ems_g, unit_ems]
|
|
ems_g.ems_g_fn = yemsconsts.EMS_G_BOARDS[i][1]
|
|
var params = ['','',0.0, 0,0]
|
|
for item in ems_g.in_tbl:
|
|
var in_dev: yemsdevs.InDev = yemsdevs.InDev.new(item[0], params, 0, 0x120)
|
|
ems_g.in_devs[in_dev.id] = in_dev
|
|
for item in ems_g.out_tbl:
|
|
var out_dev = yemsdevs.OutDev.new(item[0], params, 0, 0x120)
|
|
ems_g.out_devs[out_dev.id] = out_dev
|
|
ems_g.need_write = true
|
|
unit_ems.connect('data_received', Callable(self, 'on_data_ems_received').bind(ems_g))
|
|
unit_ems.connect('command_done', Callable(self, 'on_command_done').bind(ems_g))
|
|
unit_ems.connect('line_changed', Callable(self, 'on_line_changed').bind(ems_g))
|
|
|
|
|
|
func on_line_changed(unit_ems, board):
|
|
if not unit_ems.online:
|
|
board.ems_load = false
|
|
board.state_board = board.WAIT
|
|
board.state_cmd = board.WAIT
|
|
board.need_write = true
|
|
|
|
|
|
func on_data_ems_received(unit_ems, board):
|
|
board.set_status(unit_ems.status)
|
|
if board.state_board == board.WAIT and board.state_cmd == board.WAIT:
|
|
if board.online:
|
|
if board.need_write:
|
|
start_load(board)
|
|
elif not board.ems_load:
|
|
board.set_load_done()
|
|
else:
|
|
board.need_write = true
|
|
|
|
|
|
func on_command_done(unit_ems, board):
|
|
board.on_command_done(unit_ems)
|
|
|
|
|
|
func start_load(board):
|
|
var file = FileAccess.open(yemsconsts.emsg_files_folder + board.ems_g_fn, FileAccess.READ)
|
|
if file == null:
|
|
board.state_board = board.LOAD_FAIL
|
|
return
|
|
var read = file.get_as_text()
|
|
file.close()
|
|
var json_conv: = JSON.new()
|
|
if Error.OK == json_conv.parse(read):
|
|
var json_data = json_conv.get_data()
|
|
board.btn_load(json_data)
|
|
board.state_board = board.WRITE
|
|
board.start_rw_kems(false)
|
|
else:
|
|
board.state_board = board.LOAD_FAIL
|
|
|
|
|
|
## Проверяет ниличие директории, если их нет, создаёт
|
|
func check_dir():
|
|
var dir = DirAccess.open(yemsconsts.emsg_files_folder)
|
|
if dir:
|
|
return
|
|
else:
|
|
DirAccess.make_dir_absolute(yemsconsts.emsg_files_folder)
|