Дорабтока атт и статус менеджера
This commit is contained in:
55
StatusManager.gd
Normal file
55
StatusManager.gd
Normal file
@@ -0,0 +1,55 @@
|
||||
class_name StatusManager
|
||||
extends RefCounted
|
||||
|
||||
var _device
|
||||
|
||||
func _init(device):
|
||||
_device = device
|
||||
Callable(_emit_initial_ports).call_deferred()
|
||||
|
||||
|
||||
func _emit_initial_ports() -> void:
|
||||
"""Вывод начального состояния через существующий сигнал UDPBroadcast"""
|
||||
# Просто устанавливаем текущие значения (это вызовет update_isa_ports)
|
||||
var current_106 = _device.get_isa_port(0x106)
|
||||
var current_108 = _device.get_isa_port(0x108)
|
||||
|
||||
# Триггерим обновление через установку тех же значений
|
||||
_device.set_isa_port(0x106, current_106)
|
||||
_device.set_isa_port(0x108, current_108)
|
||||
|
||||
# Универсальные методы для работы с битовыми полями
|
||||
func set_status_field(port: int, value: int, bit_mask: int, shift: int = 0) -> void:
|
||||
var current_value = _device.get_isa_port(port)
|
||||
var masked_value = (value & bit_mask) << shift
|
||||
var clear_mask = ~(bit_mask << shift) & 0xFF
|
||||
var new_value = (current_value & clear_mask) | masked_value
|
||||
_device.set_isa_port(port, new_value)
|
||||
|
||||
func get_status_field(port: int, bit_mask: int, shift: int = 0) -> int:
|
||||
return (_device.get_isa_port(port) >> shift) & bit_mask
|
||||
|
||||
# Специфичные методы для каждого статуса
|
||||
func set_dou2_status(status: int) -> void:
|
||||
set_status_field(0x106, status, 0b111, 0)
|
||||
|
||||
func get_dou2_status() -> int:
|
||||
return get_status_field(0x106, 0b111, 0)
|
||||
|
||||
func set_att2_status(status: int) -> void:
|
||||
set_status_field(0x106, status, 0b111, 3)
|
||||
|
||||
func get_att2_status() -> int:
|
||||
return get_status_field(0x106, 0b111, 3)
|
||||
|
||||
func set_dou3_status(status: int) -> void:
|
||||
set_status_field(0x108, status, 0b111, 0)
|
||||
|
||||
func get_dou3_status() -> int:
|
||||
return get_status_field(0x108, 0b111, 0)
|
||||
|
||||
func set_att3_status(status: int) -> void:
|
||||
set_status_field(0x108, status, 0b111, 3)
|
||||
|
||||
func get_att3_status() -> int:
|
||||
return get_status_field(0x108, 0b111, 3)
|
||||
Reference in New Issue
Block a user