@@ -14,8 +14,13 @@ class ChipInfo:
"""
name: str
+ """Name of the chip."""
+
label: str
+ """Label of the chip."""
+
num_lines: int
+ """Number of lines exposed by the chip."""
def __str__(self) -> str:
return f'<ChipInfo name="{self.name}" label="{self.label}" num_lines={self.num_lines}>'
@@ -16,14 +16,23 @@ class EdgeEvent:
"""
class Type(Enum):
+ """Possible edge event types."""
+
RISING_EDGE = _ext.EDGE_EVENT_TYPE_RISING
+ """Rising edge event."""
FALLING_EDGE = _ext.EDGE_EVENT_TYPE_FALLING
+ """Falling edge event."""
event_type: Type
+ """Edge event type."""
timestamp_ns: int
+ """Timestamp of the event in nanoseconds."""
line_offset: int
+ """Offset of the line on which this event was registered."""
global_seqno: int
+ """Global sequence number of this event."""
line_seqno: int
+ """Event sequence number specific to the concerned line."""
def __init__(
self,
@@ -17,13 +17,21 @@ class InfoEvent:
"""
class Type(Enum):
+ """Line status change event types."""
+
LINE_REQUESTED = _ext.INFO_EVENT_TYPE_LINE_REQUESTED
+ """Line has been requested."""
LINE_RELEASED = _ext.INFO_EVENT_TYPE_LINE_RELEASED
+ """Previously requested line has been released."""
LINE_CONFIG_CHANGED = _ext.INFO_EVENT_TYPE_LINE_CONFIG_CHANGED
+ """Line configuration has changed."""
event_type: Type
+ """Event type of the status change event."""
timestamp_ns: int
+ """Timestamp of the event."""
line_info: LineInfo
+ """Snapshot of line-info associated with the event."""
def __init__(self, event_type: int, timestamp_ns: int, line_info: LineInfo):
object.__setattr__(self, "event_type", InfoEvent.Type(event_type))
@@ -13,7 +13,9 @@ class Value(Enum):
"""Logical line states."""
INACTIVE = _ext.VALUE_INACTIVE
+ """Line is logically inactive."""
ACTIVE = _ext.VALUE_ACTIVE
+ """Line is logically active."""
def __bool__(self) -> bool:
return self == self.ACTIVE
@@ -23,40 +25,58 @@ class Direction(Enum):
"""Direction settings."""
AS_IS = _ext.DIRECTION_AS_IS
+ """Request the line(s), but don't change direction."""
INPUT = _ext.DIRECTION_INPUT
+ """Direction is input - for reading the value of an externally driven GPIO line."""
OUTPUT = _ext.DIRECTION_OUTPUT
+ """Direction is output - for driving the GPIO line."""
class Bias(Enum):
"""Internal bias settings."""
AS_IS = _ext.BIAS_AS_IS
+ """Don't change the bias setting when applying line config."""
UNKNOWN = _ext.BIAS_UNKNOWN
+ """The internal bias state is unknown."""
DISABLED = _ext.BIAS_DISABLED
+ """The internal bias is disabled."""
PULL_UP = _ext.BIAS_PULL_UP
+ """The internal pull-up bias is enabled."""
PULL_DOWN = _ext.BIAS_PULL_DOWN
+ """The internal pull-down bias is enabled."""
class Drive(Enum):
"""Drive settings."""
PUSH_PULL = _ext.DRIVE_PUSH_PULL
+ """Drive setting is push-pull."""
OPEN_DRAIN = _ext.DRIVE_OPEN_DRAIN
+ """Line output is open-drain."""
OPEN_SOURCE = _ext.DRIVE_OPEN_SOURCE
+ """Line output is open-source."""
class Edge(Enum):
"""Edge detection settings."""
NONE = _ext.EDGE_NONE
+ """Line edge detection is disabled."""
RISING = _ext.EDGE_RISING
+ """Line detects rising edge events."""
FALLING = _ext.EDGE_FALLING
+ """Line detects falling edge events."""
BOTH = _ext.EDGE_BOTH
+ """Line detects both rising and falling edge events."""
class Clock(Enum):
"""Event clock settings."""
MONOTONIC = _ext.CLOCK_MONOTONIC
+ """Line uses the monotonic clock for edge event timestamps."""
REALTIME = _ext.CLOCK_REALTIME
+ """Line uses the realtime clock for edge event timestamps."""
HTE = _ext.CLOCK_HTE
+ """Line uses the hardware timestamp engine for event timestamps."""
@@ -16,17 +16,29 @@ class LineInfo:
"""
offset: int
+ """Offset of the line."""
name: str
+ """Name of the line."""
used: bool
+ """Indicates whether line is in use."""
consumer: str
+ """Name of the consumer of the line."""
direction: Direction
+ """Direction setting of the line."""
active_low: bool
+ """Active-low setting of the line."""
bias: Bias
+ """Bias setting of the line."""
drive: Drive
+ """Drive setting of the line."""
edge_detection: Edge
+ """Edge detection setting of the line."""
event_clock: Clock
+ """Event clock setting used for edge event timestamps for the line."""
debounced: bool
+ """Indicates whether line is debounced."""
debounce_period: timedelta
+ """Debounce period of the line."""
def __init__(
self,
@@ -17,13 +17,21 @@ class LineSettings:
"""
direction: Direction = Direction.AS_IS
+ """Line direction."""
edge_detection: Edge = Edge.NONE
+ """Edge detection setting."""
bias: Bias = Bias.AS_IS
+ """Line bias setting."""
drive: Drive = Drive.PUSH_PULL
+ """Line drive setting."""
active_low: bool = False
+ """Active-low switch."""
debounce_period: timedelta = timedelta()
+ """Debounce period of the line."""
event_clock: Clock = Clock.MONOTONIC
+ """Edge event timestamping clock setting."""
output_value: Value = Value.INACTIVE
+ """Output value of the line."""
# __repr__ generated by @dataclass uses repr for enum members resulting in
# an unusable representation as those are of the form: <NAME: $value>