summaryrefslogtreecommitdiff
path: root/devices/base_device.py
diff options
context:
space:
mode:
Diffstat (limited to 'devices/base_device.py')
-rw-r--r--devices/base_device.py22
1 files changed, 12 insertions, 10 deletions
diff --git a/devices/base_device.py b/devices/base_device.py
index 9803867..e3eed65 100644
--- a/devices/base_device.py
+++ b/devices/base_device.py
@@ -20,17 +20,19 @@ class DeviceStatus(Enum):
@dataclass
-class ChannelConfig:
- """Configuration for a single I/O channel."""
- channel_id: str
+class SignalConfig:
+ """Configuration for a single physical Signal — one I/O stream coming
+ off a Device (e.g. an Arduino analog pin, a digital line). Contrast
+ with a Channel (core/signal_processor.py), which takes one or more
+ Signals and applies math/filters to produce a new derived stream."""
+ signal_id: str
name: str
unit: str = ""
min_value: float = 0.0
max_value: float = 100.0
enabled: bool = True
- is_output: bool = False
color: str = "#00d4ff"
- writable: bool = False # True if this channel accepts write_channel() calls
+ writable: bool = False # True if this signal accepts write_channel() calls
extra: Dict[str, Any] = field(default_factory=dict)
@@ -39,13 +41,13 @@ class DeviceInfo:
"""Metadata describing a device module."""
device_id: str
name: str
- device_type: str # "analog_input" | "digital_io" | "serial" | "temperature"
+ device_type: str # "arduino" | "serial" | "nidaqmx" | ...
description: str = ""
manufacturer: str = ""
model: str = ""
version: str = "1.0.0"
icon: str = "⚙"
- channels: List[ChannelConfig] = field(default_factory=list)
+ signals: List[SignalConfig] = field(default_factory=list)
class BaseDevice(ABC):
@@ -75,7 +77,7 @@ class BaseDevice(ABC):
@abstractmethod
def read_channels(self) -> Dict[str, float]:
- """Return {channel_id: value} for all enabled channels."""
+ """Return {signal_id: value} for all enabled signals."""
@abstractmethod
def write_channel(self, channel_id: str, value: Any) -> bool:
@@ -97,8 +99,8 @@ class BaseDevice(ABC):
except Exception:
pass
- def get_channel(self, channel_id: str) -> Optional[ChannelConfig]:
- return next((c for c in self.info.channels if c.channel_id == channel_id), None)
+ def get_signal(self, signal_id: str) -> Optional[SignalConfig]:
+ return next((s for s in self.info.signals if s.signal_id == signal_id), None)
def __repr__(self):
return f"<{self.__class__.__name__} id={self.info.device_id} status={self.status.value}>"