hat.drivers.iec60870.link

IEC 60870-5 link layer

 1"""IEC 60870-5 link layer"""
 2
 3from hat.drivers.iec60870.link.common import (Address,
 4                                              AddressSize,
 5                                              Direction,
 6                                              ConnectionInfo,
 7                                              Connection,
 8                                              connection_info_to_json)
 9from hat.drivers.iec60870.link.unbalanced import (PollClass2Cb,
10                                                  create_master_link,
11                                                  create_slave_link,
12                                                  MasterLink,
13                                                  SlaveLink)
14from hat.drivers.iec60870.link.balanced import (create_balanced_link,
15                                                BalancedLink)
16
17
18__all__ = ['Address',
19           'AddressSize',
20           'Direction',
21           'ConnectionInfo',
22           'Connection',
23           'connection_info_to_json',
24           'PollClass2Cb',
25           'create_master_link',
26           'create_slave_link',
27           'MasterLink',
28           'SlaveLink',
29           'create_balanced_link',
30           'BalancedLink']
Address = <class 'int'>
class AddressSize(enum.Enum):
17class AddressSize(enum.Enum):
18    ZERO = 0
19    ONE = 1
20    TWO = 2
ZERO = <AddressSize.ZERO: 0>
ONE = <AddressSize.ONE: 1>
TWO = <AddressSize.TWO: 2>
class Direction(enum.Enum):
23class Direction(enum.Enum):
24    B_TO_A = 0
25    A_TO_B = 1
B_TO_A = <Direction.B_TO_A: 0>
A_TO_B = <Direction.A_TO_B: 1>
class ConnectionInfo(typing.NamedTuple):
75class ConnectionInfo(typing.NamedTuple):
76    name: str | None
77    port: str
78    address: Address

ConnectionInfo(name, port, address)

ConnectionInfo(name: str | None, port: str, address: int)

Create new instance of ConnectionInfo(name, port, address)

name: str | None

Alias for field number 0

port: str

Alias for field number 1

address: int

Alias for field number 2

class Connection(hat.aio.group.Resource):
81class Connection(aio.Resource):
82
83    @property
84    @abc.abstractmethod
85    def info(self) -> ConnectionInfo:
86        pass
87
88    @abc.abstractmethod
89    async def send(self,
90                   data: util.Bytes,
91                   *,
92                   sent_cb: aio.AsyncCallable[[], None] | None = None,
93                   with_ack: bool = True):
94        pass
95
96    @abc.abstractmethod
97    async def receive(self) -> util.Bytes:
98        pass

Resource with lifetime control based on Group.

info: ConnectionInfo
83    @property
84    @abc.abstractmethod
85    def info(self) -> ConnectionInfo:
86        pass
@abc.abstractmethod
async def send( self, data: bytes | bytearray | memoryview, *, sent_cb: Callable[[], None | Awaitable[None]] | None = None, with_ack: bool = True):
88    @abc.abstractmethod
89    async def send(self,
90                   data: util.Bytes,
91                   *,
92                   sent_cb: aio.AsyncCallable[[], None] | None = None,
93                   with_ack: bool = True):
94        pass
@abc.abstractmethod
async def receive(self) -> bytes | bytearray | memoryview:
96    @abc.abstractmethod
97    async def receive(self) -> util.Bytes:
98        pass
def connection_info_to_json( info: ConnectionInfo) -> None | bool | int | float | str | List[ForwardRef('Data')] | Dict[str, ForwardRef('Data')]:
111def connection_info_to_json(info: ConnectionInfo) -> json.Data:
112    return {'name': info.name,
113            'port': info.port,
114            'address': info.address}
PollClass2Cb = typing.Callable[[Connection], bytes | bytearray | memoryview | None | collections.abc.Awaitable[bytes | bytearray | memoryview | None]]