56 lines
2.4 KiB
GDScript
56 lines
2.4 KiB
GDScript
class_name yems_boards extends Node
|
||
|
||
class EmsBoard:
|
||
var id_board: int ## id платы
|
||
var in_devs: Dictionary ## Словарь с входными устройствами.
|
||
var out_devs: Dictionary ## Словарь с выходными устройствами.
|
||
var base_addr_isa: int ## Базовый адрес ячейки isa.
|
||
var in_tbl: Array
|
||
var out_tbl: Array
|
||
var online: bool
|
||
var ems_load: bool
|
||
|
||
func _init(id, base_addr, in_table, out_table):
|
||
id_board = id
|
||
in_tbl = in_table
|
||
out_tbl = out_table
|
||
base_addr_isa = base_addr
|
||
|
||
func set_status(status):
|
||
var offset = 0
|
||
if id_board == 1: offset = 26
|
||
elif id_board == 2: offset = 52
|
||
var bit_online = 0 + id_board
|
||
var bit_load = 3 + id_board
|
||
online = (status[0] >> bit_online) & 1
|
||
ems_load = (status[0] >> bit_load) & 1
|
||
var in_blank = int(status[1 + offset] | (status[2 + offset] << 8) | (status[3 + offset] << 16) | \
|
||
(status[4 + offset] << 24) | (status[5 + offset] << 32))
|
||
var in_imp = int(status[7 + offset] | (status[8 + offset] << 8) | (status[9 + offset] << 16) | \
|
||
(status[10 + offset] << 24) | (status[11 + offset] << 32))
|
||
var out_blank = int(status[13 + offset] | (status[14 + offset] << 8) | (status[15 + offset] << 16) | \
|
||
(status[16 + offset] << 24) | (status[17 + offset] << 32))
|
||
var out_imp = int(status[19 + offset] | (status[20 + offset] << 8) | (status[21 + offset] << 16)| \
|
||
(status[22 + offset] << 24) | (status[23 + offset] << 32))
|
||
var out_kz = int(status[25 + offset] | (status[26 + offset] << 8))
|
||
if id_board > 0:
|
||
out_kz = 0
|
||
|
||
for in_dev in in_devs.values():
|
||
if (in_blank >> (in_dev.id - 1)) & 1:
|
||
in_dev.state = 1
|
||
elif (in_imp >> (in_dev.id - 1)) & 1:
|
||
in_dev.state = 2
|
||
else:
|
||
in_dev.state = 0
|
||
|
||
for out_dev in out_devs.values():
|
||
if (out_kz >> (out_dev.id - 1)) & 1:
|
||
out_dev.state = 3
|
||
elif (out_blank >> (out_dev.id - 1)) & 1:
|
||
out_dev.state = 1
|
||
elif (out_imp >> (out_dev.id - 1)) & 1:
|
||
out_dev.state = 2
|
||
else:
|
||
out_dev.state = 0
|