hat.drivers.mms

Manufacturing Message Specification

  1"""Manufacturing Message Specification"""
  2
  3from hat.drivers.mms.connection import (
  4    ConnectionCb,
  5    RequestCb,
  6    UnconfirmedCb,
  7    connect,
  8    listen,
  9    Server,
 10    Connection)
 11
 12from hat.drivers.mms.common import (
 13    DataAccessError,
 14    ObjectClass,
 15    AaSpecificObjectName,
 16    DomainSpecificObjectName,
 17    VmdSpecificObjectName,
 18    ObjectName,
 19    AaSpecificObjectScope,
 20    DomainSpecificObjectScope,
 21    VmdSpecificObjectScope,
 22    ObjectScope,
 23    ArrayData,
 24    BcdData,
 25    BinaryTimeData,
 26    BitStringData,
 27    BooleanData,
 28    BooleanArrayData,
 29    FloatingPointData,
 30    GeneralizedTimeData,
 31    IntegerData,
 32    MmsStringData,
 33    ObjIdData,
 34    OctetStringData,
 35    StructureData,
 36    UnsignedData,
 37    UtcTimeData,
 38    VisibleStringData,
 39    Data,
 40    ArrayTypeDescription,
 41    BcdTypeDescription,
 42    BinaryTimeTypeDescription,
 43    BitStringTypeDescription,
 44    BooleanTypeDescription,
 45    FloatingPointTypeDescription,
 46    GeneralizedTimeTypeDescription,
 47    IntegerTypeDescription,
 48    MmsStringTypeDescription,
 49    ObjIdTypeDescription,
 50    OctetStringTypeDescription,
 51    StructureTypeDescription,
 52    UnsignedTypeDescription,
 53    UtcTimeTypeDescription,
 54    VisibleStringTypeDescription,
 55    TypeDescription,
 56    AddressVariableSpecification,
 57    InvalidatedVariableSpecification,
 58    NameVariableSpecification,
 59    ScatteredAccessDescriptionVariableSpecification,
 60    VariableDescriptionVariableSpecification,
 61    VariableSpecification,
 62    StatusRequest,
 63    GetNameListRequest,
 64    IdentifyRequest,
 65    GetVariableAccessAttributesRequest,
 66    GetNamedVariableListAttributesRequest,
 67    ReadRequest,
 68    WriteRequest,
 69    DefineNamedVariableListRequest,
 70    DeleteNamedVariableListRequest,
 71    Request,
 72    StatusResponse,
 73    GetNameListResponse,
 74    IdentifyResponse,
 75    GetVariableAccessAttributesResponse,
 76    GetNamedVariableListAttributesResponse,
 77    ReadResponse,
 78    WriteResponse,
 79    DefineNamedVariableListResponse,
 80    DeleteNamedVariableListResponse,
 81    Response,
 82    VmdStateError,
 83    ApplicationReferenceError,
 84    DefinitionError,
 85    ResourceError,
 86    ServiceError,
 87    ServicePreemptError,
 88    TimeResolutionError,
 89    AccessError,
 90    InitiateError,
 91    ConcludeError,
 92    CancelError,
 93    FileError,
 94    OtherError,
 95    Error,
 96    EventNotificationUnconfirmed,
 97    InformationReportUnconfirmed,
 98    UnsolicitedStatusUnconfirmed,
 99    Unconfirmed)
100
101
102__all__ = [
103    'ConnectionCb',
104    'RequestCb',
105    'UnconfirmedCb',
106    'connect',
107    'listen',
108    'Server',
109    'Connection',
110    'DataAccessError',
111    'ObjectClass',
112    'AaSpecificObjectName',
113    'DomainSpecificObjectName',
114    'VmdSpecificObjectName',
115    'ObjectName',
116    'AaSpecificObjectScope',
117    'DomainSpecificObjectScope',
118    'VmdSpecificObjectScope',
119    'ObjectScope',
120    'ArrayData',
121    'BcdData',
122    'BinaryTimeData',
123    'BitStringData',
124    'BooleanData',
125    'BooleanArrayData',
126    'FloatingPointData',
127    'GeneralizedTimeData',
128    'IntegerData',
129    'MmsStringData',
130    'ObjIdData',
131    'OctetStringData',
132    'StructureData',
133    'UnsignedData',
134    'UtcTimeData',
135    'VisibleStringData',
136    'Data',
137    'ArrayTypeDescription',
138    'BcdTypeDescription',
139    'BinaryTimeTypeDescription',
140    'BitStringTypeDescription',
141    'BooleanTypeDescription',
142    'FloatingPointTypeDescription',
143    'GeneralizedTimeTypeDescription',
144    'IntegerTypeDescription',
145    'MmsStringTypeDescription',
146    'ObjIdTypeDescription',
147    'OctetStringTypeDescription',
148    'StructureTypeDescription',
149    'UnsignedTypeDescription',
150    'UtcTimeTypeDescription',
151    'VisibleStringTypeDescription',
152    'TypeDescription',
153    'AddressVariableSpecification',
154    'InvalidatedVariableSpecification',
155    'NameVariableSpecification',
156    'ScatteredAccessDescriptionVariableSpecification',
157    'VariableDescriptionVariableSpecification',
158    'VariableSpecification',
159    'StatusRequest',
160    'GetNameListRequest',
161    'IdentifyRequest',
162    'GetVariableAccessAttributesRequest',
163    'GetNamedVariableListAttributesRequest',
164    'ReadRequest',
165    'WriteRequest',
166    'DefineNamedVariableListRequest',
167    'DeleteNamedVariableListRequest',
168    'Request',
169    'StatusResponse',
170    'GetNameListResponse',
171    'IdentifyResponse',
172    'GetVariableAccessAttributesResponse',
173    'GetNamedVariableListAttributesResponse',
174    'ReadResponse',
175    'WriteResponse',
176    'DefineNamedVariableListResponse',
177    'DeleteNamedVariableListResponse',
178    'Response',
179    'VmdStateError',
180    'ApplicationReferenceError',
181    'DefinitionError',
182    'ResourceError',
183    'ServiceError',
184    'ServicePreemptError',
185    'TimeResolutionError',
186    'AccessError',
187    'InitiateError',
188    'ConcludeError',
189    'CancelError',
190    'FileError',
191    'OtherError',
192    'Error',
193    'EventNotificationUnconfirmed',
194    'InformationReportUnconfirmed',
195    'UnsolicitedStatusUnconfirmed',
196    'Unconfirmed']
ConnectionCb = typing.Callable[[ForwardRef('Connection')], None | collections.abc.Awaitable[None]]
UnconfirmedCb = typing.Callable[[ForwardRef('Connection'), EventNotificationUnconfirmed | InformationReportUnconfirmed | UnsolicitedStatusUnconfirmed], None | collections.abc.Awaitable[None]]
async def connect( addr: hat.drivers.tcp.Address, local_detail_calling: int | None = None, request_cb: Optional[Callable[[Connection, StatusRequest | GetNameListRequest | IdentifyRequest | GetVariableAccessAttributesRequest | GetNamedVariableListAttributesRequest | ReadRequest | WriteRequest | DefineNamedVariableListRequest | DeleteNamedVariableListRequest], StatusResponse | GetNameListResponse | IdentifyResponse | GetVariableAccessAttributesResponse | GetNamedVariableListAttributesResponse | ReadResponse | WriteResponse | DefineNamedVariableListResponse | DeleteNamedVariableListResponse | VmdStateError | ApplicationReferenceError | DefinitionError | ResourceError | ServiceError | ServicePreemptError | TimeResolutionError | AccessError | InitiateError | ConcludeError | CancelError | FileError | OtherError | Awaitable[StatusResponse | GetNameListResponse | IdentifyResponse | GetVariableAccessAttributesResponse | GetNamedVariableListAttributesResponse | ReadResponse | WriteResponse | DefineNamedVariableListResponse | DeleteNamedVariableListResponse | VmdStateError | ApplicationReferenceError | DefinitionError | ResourceError | ServiceError | ServicePreemptError | TimeResolutionError | AccessError | InitiateError | ConcludeError | CancelError | FileError | OtherError]]] = None, unconfirmed_cb: Optional[Callable[[Connection, EventNotificationUnconfirmed | InformationReportUnconfirmed | UnsolicitedStatusUnconfirmed], None | Awaitable[None]]] = None, **kwargs) -> Connection:
 72async def connect(addr: tcp.Address,
 73                  local_detail_calling: int | None = None,
 74                  request_cb: RequestCb | None = None,
 75                  unconfirmed_cb: UnconfirmedCb | None = None,
 76                  **kwargs
 77                  ) -> 'Connection':
 78    """Connect to MMS server
 79
 80    Additional arguments are passed directly to `hat.drivers.acse.connect`
 81    (`syntax_name_list`, `app_context_name` and `user_data` are set by
 82    this coroutine).
 83
 84    """
 85    initiate_req = 'initiate-RequestPDU', {
 86        'proposedMaxServOutstandingCalling': 5,
 87        'proposedMaxServOutstandingCalled': 5,
 88        'initRequestDetail': {
 89            'proposedVersionNumber': 1,
 90            'proposedParameterCBB': _parameter_cbb,
 91            'servicesSupportedCalling': _service_support}}
 92
 93    if local_detail_calling is not None:
 94        initiate_req[1]['localDetailCalling'] = local_detail_calling
 95
 96    req_user_data = _encode(initiate_req)
 97    conn = await acse.connect(addr=addr,
 98                              syntax_name_list=[_mms_syntax_name],
 99                              app_context_name=_mms_app_context_name,
100                              user_data=(_mms_syntax_name, req_user_data),
101                              **kwargs)
102
103    try:
104        res_syntax_name, res_user_data = conn.conn_res_user_data
105        if res_syntax_name != _mms_syntax_name:
106            raise Exception("invalid syntax name")
107
108        initiate_res = _decode(res_user_data)
109        if initiate_res[0] != 'initiate-ResponsePDU':
110            raise Exception("invalid initiate response")
111
112        return Connection(conn=conn,
113                          request_cb=request_cb,
114                          unconfirmed_cb=unconfirmed_cb)
115
116    except Exception:
117        await aio.uncancellable(conn.async_close())
118        raise

Connect to MMS server

Additional arguments are passed directly to hat.drivers.acse.connect (syntax_name_list, app_context_name and user_data are set by this coroutine).

async def listen( connection_cb: Callable[[hat.drivers.acse.Connection], None | Awaitable[None]], addr: hat.drivers.tcp.Address = Address(host='0.0.0.0', port=102), request_cb: Optional[Callable[[Connection, StatusRequest | GetNameListRequest | IdentifyRequest | GetVariableAccessAttributesRequest | GetNamedVariableListAttributesRequest | ReadRequest | WriteRequest | DefineNamedVariableListRequest | DeleteNamedVariableListRequest], StatusResponse | GetNameListResponse | IdentifyResponse | GetVariableAccessAttributesResponse | GetNamedVariableListAttributesResponse | ReadResponse | WriteResponse | DefineNamedVariableListResponse | DeleteNamedVariableListResponse | VmdStateError | ApplicationReferenceError | DefinitionError | ResourceError | ServiceError | ServicePreemptError | TimeResolutionError | AccessError | InitiateError | ConcludeError | CancelError | FileError | OtherError | Awaitable[StatusResponse | GetNameListResponse | IdentifyResponse | GetVariableAccessAttributesResponse | GetNamedVariableListAttributesResponse | ReadResponse | WriteResponse | DefineNamedVariableListResponse | DeleteNamedVariableListResponse | VmdStateError | ApplicationReferenceError | DefinitionError | ResourceError | ServiceError | ServicePreemptError | TimeResolutionError | AccessError | InitiateError | ConcludeError | CancelError | FileError | OtherError]]] = None, unconfirmed_cb: Optional[Callable[[Connection, EventNotificationUnconfirmed | InformationReportUnconfirmed | UnsolicitedStatusUnconfirmed], None | Awaitable[None]]] = None, *, bind_connections: bool = False, **kwargs) -> Server:
121async def listen(connection_cb: ConnectionCb,
122                 addr: tcp.Address = tcp.Address('0.0.0.0', 102),
123                 request_cb: RequestCb | None = None,
124                 unconfirmed_cb: UnconfirmedCb | None = None,
125                 *,
126                 bind_connections: bool = False,
127                 **kwargs
128                 ) -> 'Server':
129    """Create MMS listening server
130
131    Additional arguments are passed directly to `hat.drivers.acse.listen`.
132
133    Args:
134        connection_cb: new connection callback
135        request_cb: received request callback
136        addr: local listening address
137
138    """
139    server = Server()
140    server._connection_cb = connection_cb
141    server._request_cb = request_cb
142    server._unconfirmed_cb = unconfirmed_cb
143    server._bind_connections = bind_connections
144
145    server._srv = await acse.listen(validate_cb=server._on_validate,
146                                    connection_cb=server._on_connection,
147                                    addr=addr,
148                                    bind_connections=False,
149                                    **kwargs)
150
151    return server

Create MMS listening server

Additional arguments are passed directly to hat.drivers.acse.listen.

Arguments:
  • connection_cb: new connection callback
  • request_cb: received request callback
  • addr: local listening address
class Server(hat.aio.group.Resource):
154class Server(aio.Resource):
155    """MMS listening server
156
157    For creating new server see `listen`.
158
159    """
160
161    @property
162    def async_group(self) -> aio.Group:
163        """Async group"""
164        return self._srv.async_group
165
166    @property
167    def addresses(self) -> list[tcp.Address]:
168        """Listening addresses"""
169        return self._srv.addresses
170
171    async def _on_validate(self, syntax_names, user_data):
172        syntax_name, req_user_data = user_data
173        if syntax_name != _mms_syntax_name:
174            raise Exception('invalid mms syntax name')
175
176        initiate_req = _decode(req_user_data)
177        if initiate_req[0] != 'initiate-RequestPDU':
178            raise Exception('invalid initiate request')
179
180        initiate_res = 'initiate-ResponsePDU', {
181            'negotiatedMaxServOutstandingCalling': 5,
182            'negotiatedMaxServOutstandingCalled': 5,
183            'negotiatedDataStructureNestingLevel': 4,  # TODO compatibility
184            'initResponseDetail': {
185                'negotiatedVersionNumber': 1,
186                'negotiatedParameterCBB': _parameter_cbb,
187                'servicesSupportedCalled': _service_support}}
188        if 'localDetailCalling' in initiate_req[1]:
189            initiate_res[1]['localDetailCalled'] = \
190                initiate_req[1]['localDetailCalling']
191
192        res_user_data = _encode(initiate_res)
193        return _mms_syntax_name, res_user_data
194
195    async def _on_connection(self, acse_conn):
196        try:
197            try:
198                conn = Connection(conn=acse_conn,
199                                  request_cb=self._request_cb,
200                                  unconfirmed_cb=self._unconfirmed_cb)
201
202            except Exception:
203                await aio.uncancellable(acse_conn.async_close())
204                raise
205
206            try:
207                await aio.call(self._connection_cb, conn)
208
209            except BaseException:
210                await aio.uncancellable(conn.async_close())
211                raise
212
213        except Exception as e:
214            mlog.error("error creating new incomming connection: %s",
215                       e, exc_info=e)
216            return
217
218        if not self._bind_connections:
219            return
220
221        try:
222            await conn.wait_closed()
223
224        except BaseException:
225            await aio.uncancellable(conn.async_close())
226            raise

MMS listening server

For creating new server see listen.

async_group: hat.aio.group.Group
161    @property
162    def async_group(self) -> aio.Group:
163        """Async group"""
164        return self._srv.async_group

Async group

addresses: list[hat.drivers.tcp.Address]
166    @property
167    def addresses(self) -> list[tcp.Address]:
168        """Listening addresses"""
169        return self._srv.addresses

Listening addresses

class Connection(hat.aio.group.Resource):
229class Connection(aio.Resource):
230    """MMS connection
231
232    For creating new connection see `connect` or `listen`.
233
234    """
235
236    def __init__(self,
237                 conn: acse.Connection,
238                 request_cb: RequestCb,
239                 unconfirmed_cb: UnconfirmedCb):
240        self._conn = conn
241        self._request_cb = request_cb
242        self._unconfirmed_cb = unconfirmed_cb
243        self._loop = asyncio.get_running_loop()
244        self._next_invoke_ids = itertools.count(0)
245        self._response_futures = {}
246        self._close_pdu = 'conclude-RequestPDU', None
247        self._async_group = aio.Group()
248
249        self.async_group.spawn(aio.call_on_cancel, self._on_close)
250        self.async_group.spawn(self._receive_loop)
251        self.async_group.spawn(aio.call_on_done, conn.wait_closing(),
252                               self.close)
253
254    @property
255    def async_group(self) -> aio.Group:
256        """Async group"""
257        return self._async_group
258
259    @property
260    def info(self) -> acse.ConnectionInfo:
261        """Connection info"""
262        return self._conn.info
263
264    async def send_unconfirmed(self, unconfirmed: common.Unconfirmed):
265        """Send unconfirmed message"""
266        if not self.is_open:
267            raise ConnectionError()
268
269        pdu = 'unconfirmed-PDU', {
270            'service': encoder.encode_unconfirmed(unconfirmed)}
271        data = _mms_syntax_name, _encode(pdu)
272        await self._conn.send(data)
273
274    async def send_confirmed(self,
275                             req: common.Request
276                             ) -> common.Response | common.Error:
277        """Send confirmed request and wait for response"""
278        if not self.is_open:
279            raise ConnectionError()
280
281        invoke_id = next(self._next_invoke_ids)
282        pdu = 'confirmed-RequestPDU', {
283            'invokeID': invoke_id,
284            'service': encoder.encode_request(req)}
285        data = _mms_syntax_name, _encode(pdu)
286        await self._conn.send(data)
287
288        if not self.is_open:
289            raise ConnectionError()
290
291        try:
292            future = self._loop.create_future()
293            self._response_futures[invoke_id] = future
294            return await future
295
296        finally:
297            self._response_futures.pop(invoke_id, None)
298
299    async def _on_close(self):
300        if self._conn.is_open:
301            try:
302                data = _mms_syntax_name, _encode(self._close_pdu)
303                await self._conn.send(data)
304                await self._conn.drain()
305
306                # TODO: wait for response in case of conclude-RequestPDU
307
308            except Exception as e:
309                mlog.error("on close error: %s", e, exc_info=e)
310
311        await self._conn.async_close()
312
313    async def _receive_loop(self):
314        try:
315            while True:
316                syntax_name, entity = await self._conn.receive()
317                if syntax_name != _mms_syntax_name:
318                    continue
319
320                pdu = _decode(entity)
321                name, data = pdu
322
323                if name == 'unconfirmed-PDU':
324                    await self._process_unconfirmed(data)
325
326                elif name == 'confirmed-RequestPDU':
327                    await self._process_request(data)
328
329                elif name == 'confirmed-ResponsePDU':
330                    await self._process_response(data)
331
332                elif name == 'confirmed-ErrorPDU':
333                    await self._process_error(data)
334
335                elif name == 'conclude-RequestPDU':
336                    self._close_pdu = 'conclude-ResponsePDU', None
337                    break
338
339                else:
340                    raise Exception('unsupported pdu')
341
342        except ConnectionError:
343            pass
344
345        except Exception as e:
346            mlog.error("receive loop error: %s", e, exc_info=e)
347
348        finally:
349            self.close()
350
351            for response_future in self._response_futures.values():
352                if not response_future.done():
353                    response_future.set_exception(ConnectionError())
354
355    async def _process_unconfirmed(self, data):
356        unconfirmed = encoder.decode_unconfirmed(data['service'])
357
358        if self._unconfirmed_cb is None:
359            raise Exception('unconfirmed_cb not defined')
360
361        await aio.call(self._unconfirmed_cb, self, unconfirmed)
362
363    async def _process_request(self, data):
364        invoke_id = data['invokeID']
365        req = encoder.decode_request(data['service'])
366
367        if self._request_cb is None:
368            raise Exception('request_cb not defined')
369
370        res = await aio.call(self._request_cb, self, req)
371
372        if isinstance(res, common.Response):
373            res_pdu = 'confirmed-ResponsePDU', {
374                'invokeID': invoke_id,
375                'service': encoder.encode_response(res)}
376
377        elif isinstance(res, common.Error):
378            res_pdu = 'confirmed-ErrorPDU', {
379                'invokeID': invoke_id,
380                'serviceError': encoder.encode_error(res)}
381
382        else:
383            TypeError('unsupported response/error type')
384
385        res_data = _mms_syntax_name, _encode(res_pdu)
386        await self._conn.send(res_data)
387
388    async def _process_response(self, data):
389        invoke_id = data['invokeID']
390        res = encoder.decode_response(data['service'])
391
392        future = self._response_futures.get(invoke_id)
393        if not future or future.done():
394            mlog.warning("dropping confirmed response (invoke_id: %s)",
395                         invoke_id)
396            return
397
398        future.set_result(res)
399
400    async def _process_error(self, data):
401        invoke_id = data['invokeID']
402        error = encoder.decode_error(data['serviceError'])
403
404        future = self._response_futures.get(invoke_id)
405        if not future or future.done():
406            mlog.warning("dropping confirmed error (invoke_id: %s)", invoke_id)
407            return
408
409        future.set_result(error)

MMS connection

For creating new connection see connect or listen.

236    def __init__(self,
237                 conn: acse.Connection,
238                 request_cb: RequestCb,
239                 unconfirmed_cb: UnconfirmedCb):
240        self._conn = conn
241        self._request_cb = request_cb
242        self._unconfirmed_cb = unconfirmed_cb
243        self._loop = asyncio.get_running_loop()
244        self._next_invoke_ids = itertools.count(0)
245        self._response_futures = {}
246        self._close_pdu = 'conclude-RequestPDU', None
247        self._async_group = aio.Group()
248
249        self.async_group.spawn(aio.call_on_cancel, self._on_close)
250        self.async_group.spawn(self._receive_loop)
251        self.async_group.spawn(aio.call_on_done, conn.wait_closing(),
252                               self.close)
async_group: hat.aio.group.Group
254    @property
255    def async_group(self) -> aio.Group:
256        """Async group"""
257        return self._async_group

Async group

259    @property
260    def info(self) -> acse.ConnectionInfo:
261        """Connection info"""
262        return self._conn.info

Connection info

async def send_unconfirmed( self, unconfirmed: EventNotificationUnconfirmed | InformationReportUnconfirmed | UnsolicitedStatusUnconfirmed):
264    async def send_unconfirmed(self, unconfirmed: common.Unconfirmed):
265        """Send unconfirmed message"""
266        if not self.is_open:
267            raise ConnectionError()
268
269        pdu = 'unconfirmed-PDU', {
270            'service': encoder.encode_unconfirmed(unconfirmed)}
271        data = _mms_syntax_name, _encode(pdu)
272        await self._conn.send(data)

Send unconfirmed message

274    async def send_confirmed(self,
275                             req: common.Request
276                             ) -> common.Response | common.Error:
277        """Send confirmed request and wait for response"""
278        if not self.is_open:
279            raise ConnectionError()
280
281        invoke_id = next(self._next_invoke_ids)
282        pdu = 'confirmed-RequestPDU', {
283            'invokeID': invoke_id,
284            'service': encoder.encode_request(req)}
285        data = _mms_syntax_name, _encode(pdu)
286        await self._conn.send(data)
287
288        if not self.is_open:
289            raise ConnectionError()
290
291        try:
292            future = self._loop.create_future()
293            self._response_futures[invoke_id] = future
294            return await future
295
296        finally:
297            self._response_futures.pop(invoke_id, None)

Send confirmed request and wait for response

class DataAccessError(enum.Enum):
11class DataAccessError(enum.Enum):
12    OBJECT_INVALIDATED = 0
13    HARDWARE_FAULT = 1
14    TEMPORARILY_UNAVAILABLE = 2
15    OBJECT_ACCESS_DENIED = 3
16    OBJECT_UNDEFINED = 4
17    INVALID_ADDRESS = 5
18    TYPE_UNSUPPORTED = 6
19    TYPE_INCONSISTENT = 7
20    OBJECT_ATTRIBUTE_INCONSISTENT = 8
21    OBJECT_ACCESS_UNSUPPORTED = 9
22    OBJECT_NON_EXISTENT = 10
23    OBJECT_VALUE_INVALID = 11
OBJECT_INVALIDATED = <DataAccessError.OBJECT_INVALIDATED: 0>
HARDWARE_FAULT = <DataAccessError.HARDWARE_FAULT: 1>
TEMPORARILY_UNAVAILABLE = <DataAccessError.TEMPORARILY_UNAVAILABLE: 2>
OBJECT_ACCESS_DENIED = <DataAccessError.OBJECT_ACCESS_DENIED: 3>
OBJECT_UNDEFINED = <DataAccessError.OBJECT_UNDEFINED: 4>
INVALID_ADDRESS = <DataAccessError.INVALID_ADDRESS: 5>
TYPE_UNSUPPORTED = <DataAccessError.TYPE_UNSUPPORTED: 6>
TYPE_INCONSISTENT = <DataAccessError.TYPE_INCONSISTENT: 7>
OBJECT_ATTRIBUTE_INCONSISTENT = <DataAccessError.OBJECT_ATTRIBUTE_INCONSISTENT: 8>
OBJECT_ACCESS_UNSUPPORTED = <DataAccessError.OBJECT_ACCESS_UNSUPPORTED: 9>
OBJECT_NON_EXISTENT = <DataAccessError.OBJECT_NON_EXISTENT: 10>
OBJECT_VALUE_INVALID = <DataAccessError.OBJECT_VALUE_INVALID: 11>
class ObjectClass(enum.Enum):
26class ObjectClass(enum.Enum):
27    NAMED_VARIABLE = 0
28    NAMED_VARIABLE_LIST = 2
29    JOURNAL = 8
30    DOMAIN = 9
31    UNDEFINED = 0xFF
NAMED_VARIABLE = <ObjectClass.NAMED_VARIABLE: 0>
NAMED_VARIABLE_LIST = <ObjectClass.NAMED_VARIABLE_LIST: 2>
JOURNAL = <ObjectClass.JOURNAL: 8>
DOMAIN = <ObjectClass.DOMAIN: 9>
UNDEFINED = <ObjectClass.UNDEFINED: 255>
class AaSpecificObjectName(typing.NamedTuple):
36class AaSpecificObjectName(typing.NamedTuple):
37    identifier: str

AaSpecificObjectName(identifier,)

AaSpecificObjectName(identifier: str)

Create new instance of AaSpecificObjectName(identifier,)

identifier: str

Alias for field number 0

class DomainSpecificObjectName(typing.NamedTuple):
40class DomainSpecificObjectName(typing.NamedTuple):
41    domain_id: str
42    item_id: str

DomainSpecificObjectName(domain_id, item_id)

DomainSpecificObjectName(domain_id: str, item_id: str)

Create new instance of DomainSpecificObjectName(domain_id, item_id)

domain_id: str

Alias for field number 0

item_id: str

Alias for field number 1

class VmdSpecificObjectName(typing.NamedTuple):
45class VmdSpecificObjectName(typing.NamedTuple):
46    identifier: str

VmdSpecificObjectName(identifier,)

VmdSpecificObjectName(identifier: str)

Create new instance of VmdSpecificObjectName(identifier,)

identifier: str

Alias for field number 0

class AaSpecificObjectScope(typing.NamedTuple):
56class AaSpecificObjectScope(typing.NamedTuple):
57    pass

AaSpecificObjectScope()

AaSpecificObjectScope()

Create new instance of AaSpecificObjectScope()

class DomainSpecificObjectScope(typing.NamedTuple):
60class DomainSpecificObjectScope(typing.NamedTuple):
61    identifier: str

DomainSpecificObjectScope(identifier,)

DomainSpecificObjectScope(identifier: str)

Create new instance of DomainSpecificObjectScope(identifier,)

identifier: str

Alias for field number 0

class VmdSpecificObjectScope(typing.NamedTuple):
64class VmdSpecificObjectScope(typing.NamedTuple):
65    pass

VmdSpecificObjectScope()

VmdSpecificObjectScope()

Create new instance of VmdSpecificObjectScope()

class ArrayData(typing.NamedTuple):
75class ArrayData(typing.NamedTuple):
76    elements: Collection['Data']

ArrayData(elements,)

ArrayData(elements: Collection['Data'])

Create new instance of ArrayData(elements,)

class BcdData(typing.NamedTuple):
79class BcdData(typing.NamedTuple):
80    value: int

BcdData(value,)

BcdData(value: int)

Create new instance of BcdData(value,)

value: int

Alias for field number 0

class BinaryTimeData(typing.NamedTuple):
83class BinaryTimeData(typing.NamedTuple):
84    value: datetime.datetime

BinaryTimeData(value,)

BinaryTimeData(value: datetime.datetime)

Create new instance of BinaryTimeData(value,)

value: datetime.datetime

Alias for field number 0

class BitStringData(typing.NamedTuple):
87class BitStringData(typing.NamedTuple):
88    value: Collection[bool]

BitStringData(value,)

BitStringData(value: Collection[bool])

Create new instance of BitStringData(value,)

value: Collection[bool]

Alias for field number 0

class BooleanData(typing.NamedTuple):
91class BooleanData(typing.NamedTuple):
92    value: bool

BooleanData(value,)

BooleanData(value: bool)

Create new instance of BooleanData(value,)

value: bool

Alias for field number 0

class BooleanArrayData(typing.NamedTuple):
95class BooleanArrayData(typing.NamedTuple):
96    value: Collection[bool]

BooleanArrayData(value,)

BooleanArrayData(value: Collection[bool])

Create new instance of BooleanArrayData(value,)

value: Collection[bool]

Alias for field number 0

class FloatingPointData(typing.NamedTuple):
 99class FloatingPointData(typing.NamedTuple):
100    value: float

FloatingPointData(value,)

FloatingPointData(value: float)

Create new instance of FloatingPointData(value,)

value: float

Alias for field number 0

class GeneralizedTimeData(typing.NamedTuple):
103class GeneralizedTimeData(typing.NamedTuple):
104    value: str

GeneralizedTimeData(value,)

GeneralizedTimeData(value: str)

Create new instance of GeneralizedTimeData(value,)

value: str

Alias for field number 0

class IntegerData(typing.NamedTuple):
107class IntegerData(typing.NamedTuple):
108    value: int

IntegerData(value,)

IntegerData(value: int)

Create new instance of IntegerData(value,)

value: int

Alias for field number 0

class MmsStringData(typing.NamedTuple):
111class MmsStringData(typing.NamedTuple):
112    value: str

MmsStringData(value,)

MmsStringData(value: str)

Create new instance of MmsStringData(value,)

value: str

Alias for field number 0

class ObjIdData(typing.NamedTuple):
115class ObjIdData(typing.NamedTuple):
116    value: asn1.ObjectIdentifier

ObjIdData(value,)

ObjIdData(value: tuple[int, ...])

Create new instance of ObjIdData(value,)

value: tuple[int, ...]

Alias for field number 0

class OctetStringData(typing.NamedTuple):
119class OctetStringData(typing.NamedTuple):
120    value: util.Bytes

OctetStringData(value,)

OctetStringData(value: bytes | bytearray | memoryview)

Create new instance of OctetStringData(value,)

value: bytes | bytearray | memoryview

Alias for field number 0

class StructureData(typing.NamedTuple):
123class StructureData(typing.NamedTuple):
124    elements: Collection['Data']

StructureData(elements,)

StructureData(elements: Collection['Data'])

Create new instance of StructureData(elements,)

class UnsignedData(typing.NamedTuple):
127class UnsignedData(typing.NamedTuple):
128    value: int

UnsignedData(value,)

UnsignedData(value: int)

Create new instance of UnsignedData(value,)

value: int

Alias for field number 0

class UtcTimeData(typing.NamedTuple):
131class UtcTimeData(typing.NamedTuple):
132    value: datetime.datetime
133    leap_second: bool
134    clock_failure: bool
135    not_synchronized: bool
136    accuracy: int | None
137    """accurate fraction bits [0,24]"""

UtcTimeData(value, leap_second, clock_failure, not_synchronized, accuracy)

UtcTimeData( value: datetime.datetime, leap_second: bool, clock_failure: bool, not_synchronized: bool, accuracy: int | None)

Create new instance of UtcTimeData(value, leap_second, clock_failure, not_synchronized, accuracy)

value: datetime.datetime

Alias for field number 0

leap_second: bool

Alias for field number 1

clock_failure: bool

Alias for field number 2

not_synchronized: bool

Alias for field number 3

accuracy: int | None

accurate fraction bits [0,24]

class VisibleStringData(typing.NamedTuple):
140class VisibleStringData(typing.NamedTuple):
141    value: str

VisibleStringData(value,)

VisibleStringData(value: str)

Create new instance of VisibleStringData(value,)

value: str

Alias for field number 0

class ArrayTypeDescription(typing.NamedTuple):
164class ArrayTypeDescription(typing.NamedTuple):
165    number_of_elements: int
166    element_type: typing.Union['TypeDescription', ObjectName]

ArrayTypeDescription(number_of_elements, element_type)

ArrayTypeDescription( number_of_elements: int, element_type: Union[ForwardRef('TypeDescription'), AaSpecificObjectName, DomainSpecificObjectName, VmdSpecificObjectName])

Create new instance of ArrayTypeDescription(number_of_elements, element_type)

number_of_elements: int

Alias for field number 0

class BcdTypeDescription(typing.NamedTuple):
169class BcdTypeDescription(typing.NamedTuple):
170    xyz: int

BcdTypeDescription(xyz,)

BcdTypeDescription(xyz: int)

Create new instance of BcdTypeDescription(xyz,)

xyz: int

Alias for field number 0

class BinaryTimeTypeDescription(typing.NamedTuple):
173class BinaryTimeTypeDescription(typing.NamedTuple):
174    xyz: bool

BinaryTimeTypeDescription(xyz,)

BinaryTimeTypeDescription(xyz: bool)

Create new instance of BinaryTimeTypeDescription(xyz,)

xyz: bool

Alias for field number 0

class BitStringTypeDescription(typing.NamedTuple):
177class BitStringTypeDescription(typing.NamedTuple):
178    xyz: int

BitStringTypeDescription(xyz,)

BitStringTypeDescription(xyz: int)

Create new instance of BitStringTypeDescription(xyz,)

xyz: int

Alias for field number 0

class BooleanTypeDescription(typing.NamedTuple):
181class BooleanTypeDescription(typing.NamedTuple):
182    pass

BooleanTypeDescription()

BooleanTypeDescription()

Create new instance of BooleanTypeDescription()

class FloatingPointTypeDescription(typing.NamedTuple):
185class FloatingPointTypeDescription(typing.NamedTuple):
186    format_width: int
187    exponent_width: int

FloatingPointTypeDescription(format_width, exponent_width)

FloatingPointTypeDescription(format_width: int, exponent_width: int)

Create new instance of FloatingPointTypeDescription(format_width, exponent_width)

format_width: int

Alias for field number 0

exponent_width: int

Alias for field number 1

class GeneralizedTimeTypeDescription(typing.NamedTuple):
190class GeneralizedTimeTypeDescription(typing.NamedTuple):
191    pass

GeneralizedTimeTypeDescription()

GeneralizedTimeTypeDescription()

Create new instance of GeneralizedTimeTypeDescription()

class IntegerTypeDescription(typing.NamedTuple):
194class IntegerTypeDescription(typing.NamedTuple):
195    xyz: int

IntegerTypeDescription(xyz,)

IntegerTypeDescription(xyz: int)

Create new instance of IntegerTypeDescription(xyz,)

xyz: int

Alias for field number 0

class MmsStringTypeDescription(typing.NamedTuple):
198class MmsStringTypeDescription(typing.NamedTuple):
199    xyz: int

MmsStringTypeDescription(xyz,)

MmsStringTypeDescription(xyz: int)

Create new instance of MmsStringTypeDescription(xyz,)

xyz: int

Alias for field number 0

class ObjIdTypeDescription(typing.NamedTuple):
202class ObjIdTypeDescription(typing.NamedTuple):
203    pass

ObjIdTypeDescription()

ObjIdTypeDescription()

Create new instance of ObjIdTypeDescription()

class OctetStringTypeDescription(typing.NamedTuple):
206class OctetStringTypeDescription(typing.NamedTuple):
207    xyz: int

OctetStringTypeDescription(xyz,)

OctetStringTypeDescription(xyz: int)

Create new instance of OctetStringTypeDescription(xyz,)

xyz: int

Alias for field number 0

class StructureTypeDescription(typing.NamedTuple):
210class StructureTypeDescription(typing.NamedTuple):
211    components: Collection[tuple[str | None,
212                                 typing.Union['TypeDescription', ObjectName]]]

StructureTypeDescription(components,)

StructureTypeDescription( components: Collection[tuple[str | None, typing.Union[ForwardRef('TypeDescription'), AaSpecificObjectName, DomainSpecificObjectName, VmdSpecificObjectName]]])

Create new instance of StructureTypeDescription(components,)

class UnsignedTypeDescription(typing.NamedTuple):
215class UnsignedTypeDescription(typing.NamedTuple):
216    xyz: int

UnsignedTypeDescription(xyz,)

UnsignedTypeDescription(xyz: int)

Create new instance of UnsignedTypeDescription(xyz,)

xyz: int

Alias for field number 0

class UtcTimeTypeDescription(typing.NamedTuple):
219class UtcTimeTypeDescription(typing.NamedTuple):
220    pass

UtcTimeTypeDescription()

UtcTimeTypeDescription()

Create new instance of UtcTimeTypeDescription()

class VisibleStringTypeDescription(typing.NamedTuple):
223class VisibleStringTypeDescription(typing.NamedTuple):
224    xyz: int

VisibleStringTypeDescription(xyz,)

VisibleStringTypeDescription(xyz: int)

Create new instance of VisibleStringTypeDescription(xyz,)

xyz: int

Alias for field number 0

class AddressVariableSpecification(typing.NamedTuple):
246class AddressVariableSpecification(typing.NamedTuple):
247    address: int | str | util.Bytes

AddressVariableSpecification(address,)

AddressVariableSpecification(address: int | str | bytes | bytearray | memoryview)

Create new instance of AddressVariableSpecification(address,)

address: int | str | bytes | bytearray | memoryview

Alias for field number 0

class InvalidatedVariableSpecification(typing.NamedTuple):
250class InvalidatedVariableSpecification(typing.NamedTuple):
251    pass

InvalidatedVariableSpecification()

InvalidatedVariableSpecification()

Create new instance of InvalidatedVariableSpecification()

class NameVariableSpecification(typing.NamedTuple):
254class NameVariableSpecification(typing.NamedTuple):
255    name: ObjectName

NameVariableSpecification(name,)

Create new instance of NameVariableSpecification(name,)

class ScatteredAccessDescriptionVariableSpecification(typing.NamedTuple):
258class ScatteredAccessDescriptionVariableSpecification(typing.NamedTuple):
259    specifications: Collection['VariableSpecification']

ScatteredAccessDescriptionVariableSpecification(specifications,)

ScatteredAccessDescriptionVariableSpecification(specifications: Collection['VariableSpecification'])

Create new instance of ScatteredAccessDescriptionVariableSpecification(specifications,)

class VariableDescriptionVariableSpecification(typing.NamedTuple):
262class VariableDescriptionVariableSpecification(typing.NamedTuple):
263    address: int | str | util.Bytes
264    type_specification: TypeDescription | ObjectName

VariableDescriptionVariableSpecification(address, type_specification)

address: int | str | bytes | bytearray | memoryview

Alias for field number 0

class StatusRequest(typing.NamedTuple):
277class StatusRequest(typing.NamedTuple):
278    pass

StatusRequest()

StatusRequest()

Create new instance of StatusRequest()

class GetNameListRequest(typing.NamedTuple):
281class GetNameListRequest(typing.NamedTuple):
282    object_class: ObjectClass
283    object_scope: ObjectScope
284    continue_after: str | None

GetNameListRequest(object_class, object_scope, continue_after)

GetNameListRequest( object_class: ObjectClass, object_scope: AaSpecificObjectScope | DomainSpecificObjectScope | VmdSpecificObjectScope, continue_after: str | None)

Create new instance of GetNameListRequest(object_class, object_scope, continue_after)

object_class: ObjectClass

Alias for field number 0

Alias for field number 1

continue_after: str | None

Alias for field number 2

class IdentifyRequest(typing.NamedTuple):
287class IdentifyRequest(typing.NamedTuple):
288    pass

IdentifyRequest()

IdentifyRequest()

Create new instance of IdentifyRequest()

class GetVariableAccessAttributesRequest(typing.NamedTuple):
291class GetVariableAccessAttributesRequest(typing.NamedTuple):
292    value: ObjectName | int | str | util.Bytes

GetVariableAccessAttributesRequest(value,)

GetVariableAccessAttributesRequest( value: AaSpecificObjectName | DomainSpecificObjectName | VmdSpecificObjectName | int | str | bytes | bytearray | memoryview)

Create new instance of GetVariableAccessAttributesRequest(value,)

value: AaSpecificObjectName | DomainSpecificObjectName | VmdSpecificObjectName | int | str | bytes | bytearray | memoryview

Alias for field number 0

class GetNamedVariableListAttributesRequest(typing.NamedTuple):
295class GetNamedVariableListAttributesRequest(typing.NamedTuple):
296    value: ObjectName

GetNamedVariableListAttributesRequest(value,)

GetNamedVariableListAttributesRequest( value: AaSpecificObjectName | DomainSpecificObjectName | VmdSpecificObjectName)

Create new instance of GetNamedVariableListAttributesRequest(value,)

class ReadRequest(typing.NamedTuple):
299class ReadRequest(typing.NamedTuple):
300    value: Collection[VariableSpecification] | ObjectName

ReadRequest(value,)

class WriteRequest(typing.NamedTuple):
303class WriteRequest(typing.NamedTuple):
304    specification: Collection[VariableSpecification] | ObjectName
305    data: Collection[Data]

WriteRequest(specification, data)

class DefineNamedVariableListRequest(typing.NamedTuple):
308class DefineNamedVariableListRequest(typing.NamedTuple):
309    name: ObjectName
310    specification: Collection[VariableSpecification]

DefineNamedVariableListRequest(name, specification)

Create new instance of DefineNamedVariableListRequest(name, specification)

class DeleteNamedVariableListRequest(typing.NamedTuple):
313class DeleteNamedVariableListRequest(typing.NamedTuple):
314    names: Collection[ObjectName]

DeleteNamedVariableListRequest(names,)

DeleteNamedVariableListRequest( names: Collection[AaSpecificObjectName | DomainSpecificObjectName | VmdSpecificObjectName])

Create new instance of DeleteNamedVariableListRequest(names,)

Alias for field number 0

class StatusResponse(typing.NamedTuple):
330class StatusResponse(typing.NamedTuple):
331    logical: int
332    physical: int

StatusResponse(logical, physical)

StatusResponse(logical: int, physical: int)

Create new instance of StatusResponse(logical, physical)

logical: int

Alias for field number 0

physical: int

Alias for field number 1

class GetNameListResponse(typing.NamedTuple):
335class GetNameListResponse(typing.NamedTuple):
336    identifiers: Collection[str]
337    more_follows: bool

GetNameListResponse(identifiers, more_follows)

GetNameListResponse(identifiers: Collection[str], more_follows: bool)

Create new instance of GetNameListResponse(identifiers, more_follows)

identifiers: Collection[str]

Alias for field number 0

more_follows: bool

Alias for field number 1

class IdentifyResponse(typing.NamedTuple):
340class IdentifyResponse(typing.NamedTuple):
341    vendor: str
342    model: str
343    revision: str
344    syntaxes: Collection[asn1.ObjectIdentifier] | None

IdentifyResponse(vendor, model, revision, syntaxes)

IdentifyResponse( vendor: str, model: str, revision: str, syntaxes: Collection[tuple[int, ...]] | None)

Create new instance of IdentifyResponse(vendor, model, revision, syntaxes)

vendor: str

Alias for field number 0

model: str

Alias for field number 1

revision: str

Alias for field number 2

syntaxes: Collection[tuple[int, ...]] | None

Alias for field number 3

class GetVariableAccessAttributesResponse(typing.NamedTuple):
347class GetVariableAccessAttributesResponse(typing.NamedTuple):
348    mms_deletable: bool
349    type_description: TypeDescription

GetVariableAccessAttributesResponse(mms_deletable, type_description)

mms_deletable: bool

Alias for field number 0

class GetNamedVariableListAttributesResponse(typing.NamedTuple):
352class GetNamedVariableListAttributesResponse(typing.NamedTuple):
353    mms_deletable: bool
354    specification: Collection[VariableSpecification]

GetNamedVariableListAttributesResponse(mms_deletable, specification)

Create new instance of GetNamedVariableListAttributesResponse(mms_deletable, specification)

mms_deletable: bool

Alias for field number 0

class ReadResponse(typing.NamedTuple):
357class ReadResponse(typing.NamedTuple):
358    results: Collection[DataAccessError | Data]

ReadResponse(results,)

class WriteResponse(typing.NamedTuple):
361class WriteResponse(typing.NamedTuple):
362    results: Collection[DataAccessError | None]

WriteResponse(results,)

WriteResponse(results: Collection[DataAccessError | None])

Create new instance of WriteResponse(results,)

results: Collection[DataAccessError | None]

Alias for field number 0

class DefineNamedVariableListResponse(typing.NamedTuple):
365class DefineNamedVariableListResponse(typing.NamedTuple):
366    pass

DefineNamedVariableListResponse()

DefineNamedVariableListResponse()

Create new instance of DefineNamedVariableListResponse()

class DeleteNamedVariableListResponse(typing.NamedTuple):
369class DeleteNamedVariableListResponse(typing.NamedTuple):
370    matched: int
371    deleted: int

DeleteNamedVariableListResponse(matched, deleted)

DeleteNamedVariableListResponse(matched: int, deleted: int)

Create new instance of DeleteNamedVariableListResponse(matched, deleted)

matched: int

Alias for field number 0

deleted: int

Alias for field number 1

class VmdStateError(enum.Enum):
387class VmdStateError(enum.Enum):
388    OTHER = 0
389    VMD_STATE_CONFLICT = 1
390    VMD_OPERATIONAL_PROBLEM = 2
391    DOMAIN_TRANSFER_PROBLEM = 3
392    STATE_MACHINE_ID_INVALID = 4
OTHER = <VmdStateError.OTHER: 0>
VMD_STATE_CONFLICT = <VmdStateError.VMD_STATE_CONFLICT: 1>
VMD_OPERATIONAL_PROBLEM = <VmdStateError.VMD_OPERATIONAL_PROBLEM: 2>
DOMAIN_TRANSFER_PROBLEM = <VmdStateError.DOMAIN_TRANSFER_PROBLEM: 3>
STATE_MACHINE_ID_INVALID = <VmdStateError.STATE_MACHINE_ID_INVALID: 4>
class ApplicationReferenceError(enum.Enum):
395class ApplicationReferenceError(enum.Enum):
396    OTHER = 0
397    APPLICATION_UNREACHABLE = 1
398    CONNECTION_LOST = 2
399    APPLICATION_REFERENCE_INVALID = 3
400    CONTEXT_UNSUPPORTED = 4
APPLICATION_UNREACHABLE = <ApplicationReferenceError.APPLICATION_UNREACHABLE: 1>
APPLICATION_REFERENCE_INVALID = <ApplicationReferenceError.APPLICATION_REFERENCE_INVALID: 3>
class DefinitionError(enum.Enum):
403class DefinitionError(enum.Enum):
404    OTHER = 0
405    OBJECT_UNDEFINED = 1
406    INVALID_ADDRESS = 2
407    TYPE_UNSUPPORTED = 3
408    TYPE_INCONSISTENT = 4
409    OBJECT_EXISTS = 5
410    OBJECT_ATTRIBUTE_INCONSISTENT = 6
OTHER = <DefinitionError.OTHER: 0>
OBJECT_UNDEFINED = <DefinitionError.OBJECT_UNDEFINED: 1>
INVALID_ADDRESS = <DefinitionError.INVALID_ADDRESS: 2>
TYPE_UNSUPPORTED = <DefinitionError.TYPE_UNSUPPORTED: 3>
TYPE_INCONSISTENT = <DefinitionError.TYPE_INCONSISTENT: 4>
OBJECT_EXISTS = <DefinitionError.OBJECT_EXISTS: 5>
OBJECT_ATTRIBUTE_INCONSISTENT = <DefinitionError.OBJECT_ATTRIBUTE_INCONSISTENT: 6>
class ResourceError(enum.Enum):
413class ResourceError(enum.Enum):
414    OTHER = 0
415    MEMORY_UNAVAILABLE = 1
416    PROCESSOR_RESOURCE_UNAVAILABLE = 2
417    MASS_STORAGE_UNAVAILABLE = 3
418    CAPABILITY_UNAVAILABLE = 4
419    CAPABILITY_UNKNOWN = 5
OTHER = <ResourceError.OTHER: 0>
MEMORY_UNAVAILABLE = <ResourceError.MEMORY_UNAVAILABLE: 1>
PROCESSOR_RESOURCE_UNAVAILABLE = <ResourceError.PROCESSOR_RESOURCE_UNAVAILABLE: 2>
MASS_STORAGE_UNAVAILABLE = <ResourceError.MASS_STORAGE_UNAVAILABLE: 3>
CAPABILITY_UNAVAILABLE = <ResourceError.CAPABILITY_UNAVAILABLE: 4>
CAPABILITY_UNKNOWN = <ResourceError.CAPABILITY_UNKNOWN: 5>
class ServiceError(enum.Enum):
422class ServiceError(enum.Enum):
423    OTHER = 0
424    PRIMITIVES_OUT_OF_SEQUENCE = 1
425    OBJECT_STATE_CONFLICT = 2
426    PDU_SIZE = 3
427    CONTINUATION_INVALID = 4
428    OBJECT_CONSTRAINT_CONFLICT = 5
OTHER = <ServiceError.OTHER: 0>
PRIMITIVES_OUT_OF_SEQUENCE = <ServiceError.PRIMITIVES_OUT_OF_SEQUENCE: 1>
OBJECT_STATE_CONFLICT = <ServiceError.OBJECT_STATE_CONFLICT: 2>
PDU_SIZE = <ServiceError.PDU_SIZE: 3>
CONTINUATION_INVALID = <ServiceError.CONTINUATION_INVALID: 4>
OBJECT_CONSTRAINT_CONFLICT = <ServiceError.OBJECT_CONSTRAINT_CONFLICT: 5>
class ServicePreemptError(enum.Enum):
431class ServicePreemptError(enum.Enum):
432    OTHER = 0
433    TIMEOUT = 1
434    DEADLOCK = 2
435    CANCEL = 3
class TimeResolutionError(enum.Enum):
438class TimeResolutionError(enum.Enum):
439    OTHER = 0
440    UNSUPPORTABLE_TIME_RESOLUTION = 1
UNSUPPORTABLE_TIME_RESOLUTION = <TimeResolutionError.UNSUPPORTABLE_TIME_RESOLUTION: 1>
class AccessError(enum.Enum):
443class AccessError(enum.Enum):
444    OTHER = 0
445    OBJECT_ACCESS_UNSUPPORTED = 1
446    OBJECT_NON_EXISTENT = 2
447    OBJECT_ACCESS_DENIED = 3
448    OBJECT_INVALIDATED = 4
OTHER = <AccessError.OTHER: 0>
OBJECT_ACCESS_UNSUPPORTED = <AccessError.OBJECT_ACCESS_UNSUPPORTED: 1>
OBJECT_NON_EXISTENT = <AccessError.OBJECT_NON_EXISTENT: 2>
OBJECT_ACCESS_DENIED = <AccessError.OBJECT_ACCESS_DENIED: 3>
OBJECT_INVALIDATED = <AccessError.OBJECT_INVALIDATED: 4>
class InitiateError(enum.Enum):
451class InitiateError(enum.Enum):
452    OTHER = 0
453    MAX_SERVICES_OUTSTANDING_CALLING_INSUFFICIENT = 3
454    MAX_SERVICES_OUTSTANDING_CALLED_INSUFFICIENT = 4
455    SERVICE_CBB_INSUFFICIENT = 5
456    PARAMETER_CBB_INSUFFICIENT = 6
457    NESTING_LEVEL_INSUFFICIENT = 7
OTHER = <InitiateError.OTHER: 0>
MAX_SERVICES_OUTSTANDING_CALLING_INSUFFICIENT = <InitiateError.MAX_SERVICES_OUTSTANDING_CALLING_INSUFFICIENT: 3>
MAX_SERVICES_OUTSTANDING_CALLED_INSUFFICIENT = <InitiateError.MAX_SERVICES_OUTSTANDING_CALLED_INSUFFICIENT: 4>
SERVICE_CBB_INSUFFICIENT = <InitiateError.SERVICE_CBB_INSUFFICIENT: 5>
PARAMETER_CBB_INSUFFICIENT = <InitiateError.PARAMETER_CBB_INSUFFICIENT: 6>
NESTING_LEVEL_INSUFFICIENT = <InitiateError.NESTING_LEVEL_INSUFFICIENT: 7>
class ConcludeError(enum.Enum):
460class ConcludeError(enum.Enum):
461    OTHER = 0
462    FURTHER_COMMUNICATION_REQUIRED = 1
OTHER = <ConcludeError.OTHER: 0>
FURTHER_COMMUNICATION_REQUIRED = <ConcludeError.FURTHER_COMMUNICATION_REQUIRED: 1>
class CancelError(enum.Enum):
465class CancelError(enum.Enum):
466    OTHER = 0
467    INVOKE_ID_UNKNOWN = 1
468    CANCEL_NOT_POSSIBLE = 2
OTHER = <CancelError.OTHER: 0>
INVOKE_ID_UNKNOWN = <CancelError.INVOKE_ID_UNKNOWN: 1>
CANCEL_NOT_POSSIBLE = <CancelError.CANCEL_NOT_POSSIBLE: 2>
class FileError(enum.Enum):
471class FileError(enum.Enum):
472    OTHER = 0
473    FILENAME_AMBIGUOUS = 1
474    FILE_BUSY = 2
475    FILENAME_SYNTAX_ERROR = 3
476    CONTENT_TYPE_INVALID = 4
477    POSITION_INVALID = 5
478    FILE_ACCESS_DENIED = 6
479    FILE_NON_EXISTENT = 7
480    DUPLICATE_FILENAME = 8
481    INSUFFICIENT_SPACE_IN_FILESTORE = 9
OTHER = <FileError.OTHER: 0>
FILENAME_AMBIGUOUS = <FileError.FILENAME_AMBIGUOUS: 1>
FILE_BUSY = <FileError.FILE_BUSY: 2>
FILENAME_SYNTAX_ERROR = <FileError.FILENAME_SYNTAX_ERROR: 3>
CONTENT_TYPE_INVALID = <FileError.CONTENT_TYPE_INVALID: 4>
POSITION_INVALID = <FileError.POSITION_INVALID: 5>
FILE_ACCESS_DENIED = <FileError.FILE_ACCESS_DENIED: 6>
FILE_NON_EXISTENT = <FileError.FILE_NON_EXISTENT: 7>
DUPLICATE_FILENAME = <FileError.DUPLICATE_FILENAME: 8>
INSUFFICIENT_SPACE_IN_FILESTORE = <FileError.INSUFFICIENT_SPACE_IN_FILESTORE: 9>
class OtherError(typing.NamedTuple):
484class OtherError(typing.NamedTuple):
485    value: int

OtherError(value,)

OtherError(value: int)

Create new instance of OtherError(value,)

value: int

Alias for field number 0

class EventNotificationUnconfirmed(typing.NamedTuple):
505class EventNotificationUnconfirmed(typing.NamedTuple):
506    enrollment: ObjectName
507    condition: ObjectName
508    severity: int
509    time: Data | int | None

EventNotificationUnconfirmed(enrollment, condition, severity, time)

Create new instance of EventNotificationUnconfirmed(enrollment, condition, severity, time)

Alias for field number 0

Alias for field number 1

severity: int

Alias for field number 2

class InformationReportUnconfirmed(typing.NamedTuple):
512class InformationReportUnconfirmed(typing.NamedTuple):
513    specification: Collection[VariableSpecification] | ObjectName
514    data: Collection[DataAccessError | Data]

InformationReportUnconfirmed(specification, data)

class UnsolicitedStatusUnconfirmed(typing.NamedTuple):
517class UnsolicitedStatusUnconfirmed(typing.NamedTuple):
518    logical: int
519    physical: int

UnsolicitedStatusUnconfirmed(logical, physical)

UnsolicitedStatusUnconfirmed(logical: int, physical: int)

Create new instance of UnsolicitedStatusUnconfirmed(logical, physical)

logical: int

Alias for field number 0

physical: int

Alias for field number 1