Files
imitator-case-y5/StatusManager.gd
2025-11-23 13:58:11 +03:00

61 lines
2.2 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
var current_10A = _device.get_isa_port(0x10A)
# Триггерим обновление через установку тех же значений
_device.set_isa_port(0x106, current_106)
_device.set_isa_port(0x108, current_108)
_device.set_isa_port(0x10A, current_10A)
# Универсальные методы для работы с битовыми полями
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_att1_status(status: int) -> void:
set_status_field(0x10A, status, 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)