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 ErrorClass, 16 StatusRequest, 17 GetNameListRequest, 18 IdentifyRequest, 19 GetVariableAccessAttributesRequest, 20 GetNamedVariableListAttributesRequest, 21 ReadRequest, 22 WriteRequest, 23 DefineNamedVariableListRequest, 24 DeleteNamedVariableListRequest, 25 Request, 26 ErrorResponse, 27 StatusResponse, 28 GetNameListResponse, 29 IdentifyResponse, 30 GetVariableAccessAttributesResponse, 31 GetNamedVariableListAttributesResponse, 32 ReadResponse, 33 WriteResponse, 34 DefineNamedVariableListResponse, 35 DeleteNamedVariableListResponse, 36 Response, 37 EventNotificationUnconfirmed, 38 InformationReportUnconfirmed, 39 UnsolicitedStatusUnconfirmed, 40 Unconfirmed, 41 ArrayData, 42 BcdData, 43 BinaryTimeData, 44 BitStringData, 45 BooleanData, 46 BooleanArrayData, 47 FloatingPointData, 48 GeneralizedTimeData, 49 IntegerData, 50 MmsStringData, 51 ObjIdData, 52 OctetStringData, 53 StructureData, 54 UnsignedData, 55 UtcTimeData, 56 VisibleStringData, 57 Data, 58 ArrayTypeDescription, 59 BcdTypeDescription, 60 BinaryTimeTypeDescription, 61 BitStringTypeDescription, 62 BooleanTypeDescription, 63 FloatingPointTypeDescription, 64 GeneralizedTimeTypeDescription, 65 IntegerTypeDescription, 66 MmsStringTypeDescription, 67 ObjIdTypeDescription, 68 OctetStringTypeDescription, 69 StructureTypeDescription, 70 UnsignedTypeDescription, 71 UtcTimeTypeDescription, 72 VisibleStringTypeDescription, 73 TypeDescription, 74 AaSpecificObjectName, 75 DomainSpecificObjectName, 76 VmdSpecificObjectName, 77 ObjectName, 78 AaSpecificObjectScope, 79 DomainSpecificObjectScope, 80 VmdSpecificObjectScope, 81 ObjectScope, 82 AddressVariableSpecification, 83 InvalidatedVariableSpecification, 84 NameVariableSpecification, 85 ScatteredAccessDescriptionVariableSpecification, 86 VariableDescriptionVariableSpecification, 87 VariableSpecification) 88 89 90__all__ = [ 91 'ConnectionCb', 92 'RequestCb', 93 'UnconfirmedCb', 94 'connect', 95 'listen', 96 'Server', 97 'Connection', 98 'DataAccessError', 99 'ObjectClass', 100 'ErrorClass', 101 'StatusRequest', 102 'GetNameListRequest', 103 'IdentifyRequest', 104 'GetVariableAccessAttributesRequest', 105 'GetNamedVariableListAttributesRequest', 106 'ReadRequest', 107 'WriteRequest', 108 'DefineNamedVariableListRequest', 109 'DeleteNamedVariableListRequest', 110 'Request', 111 'ErrorResponse', 112 'StatusResponse', 113 'GetNameListResponse', 114 'IdentifyResponse', 115 'GetVariableAccessAttributesResponse', 116 'GetNamedVariableListAttributesResponse', 117 'ReadResponse', 118 'WriteResponse', 119 'DefineNamedVariableListResponse', 120 'DeleteNamedVariableListResponse', 121 'Response', 122 'EventNotificationUnconfirmed', 123 'InformationReportUnconfirmed', 124 'UnsolicitedStatusUnconfirmed', 125 'Unconfirmed', 126 'ArrayData', 127 'BcdData', 128 'BinaryTimeData', 129 'BitStringData', 130 'BooleanData', 131 'BooleanArrayData', 132 'FloatingPointData', 133 'GeneralizedTimeData', 134 'IntegerData', 135 'MmsStringData', 136 'ObjIdData', 137 'OctetStringData', 138 'StructureData', 139 'UnsignedData', 140 'UtcTimeData', 141 'VisibleStringData', 142 'Data', 143 'ArrayTypeDescription', 144 'BcdTypeDescription', 145 'BinaryTimeTypeDescription', 146 'BitStringTypeDescription', 147 'BooleanTypeDescription', 148 'FloatingPointTypeDescription', 149 'GeneralizedTimeTypeDescription', 150 'IntegerTypeDescription', 151 'MmsStringTypeDescription', 152 'ObjIdTypeDescription', 153 'OctetStringTypeDescription', 154 'StructureTypeDescription', 155 'UnsignedTypeDescription', 156 'UtcTimeTypeDescription', 157 'VisibleStringTypeDescription', 158 'TypeDescription', 159 'AaSpecificObjectName', 160 'DomainSpecificObjectName', 161 'VmdSpecificObjectName', 162 'ObjectName', 163 'AaSpecificObjectScope', 164 'DomainSpecificObjectScope', 165 'VmdSpecificObjectScope', 166 'ObjectScope', 167 'AddressVariableSpecification', 168 'InvalidatedVariableSpecification', 169 'NameVariableSpecification', 170 'ScatteredAccessDescriptionVariableSpecification', 171 'VariableDescriptionVariableSpecification', 172 'VariableSpecification']
71async def connect(addr: tcp.Address, 72 request_cb: RequestCb | None = None, 73 unconfirmed_cb: UnconfirmedCb | None = None, 74 **kwargs 75 ) -> 'Connection': 76 """Connect to MMS server 77 78 Additional arguments are passed directly to `hat.drivers.acse.connect` 79 (`syntax_name_list`, `app_context_name` and `user_data` are set by 80 this coroutine). 81 82 """ 83 initiate_req = 'initiate-RequestPDU', { 84 'proposedMaxServOutstandingCalling': 5, 85 'proposedMaxServOutstandingCalled': 5, 86 'initRequestDetail': { 87 'proposedVersionNumber': 1, 88 'proposedParameterCBB': _parameter_cbb, 89 'servicesSupportedCalling': _service_support}} 90 req_user_data = _encode(initiate_req) 91 conn = await acse.connect(addr, [_mms_syntax_name], _mms_app_context_name, 92 (_mms_syntax_name, req_user_data), **kwargs) 93 94 try: 95 res_syntax_name, res_user_data = conn.conn_res_user_data 96 if res_syntax_name != _mms_syntax_name: 97 raise Exception("invalid syntax name") 98 99 initiate_res = _decode(res_user_data) 100 if initiate_res[0] != 'initiate-ResponsePDU': 101 raise Exception("invalid initiate response") 102 103 return Connection(conn, request_cb, unconfirmed_cb) 104 105 except Exception: 106 await aio.uncancellable(conn.async_close()) 107 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).
110async def listen(connection_cb: ConnectionCb, 111 addr: tcp.Address = tcp.Address('0.0.0.0', 102), 112 request_cb: RequestCb | None = None, 113 unconfirmed_cb: UnconfirmedCb | None = None, 114 *, 115 bind_connections: bool = False, 116 **kwargs 117 ) -> 'Server': 118 """Create MMS listening server 119 120 Additional arguments are passed directly to `hat.drivers.acse.listen`. 121 122 Args: 123 connection_cb: new connection callback 124 request_cb: received request callback 125 addr: local listening address 126 127 """ 128 server = Server() 129 server._connection_cb = connection_cb 130 server._request_cb = request_cb 131 server._unconfirmed_cb = unconfirmed_cb 132 server._bind_connections = bind_connections 133 134 server._srv = await acse.listen(server._on_validate, 135 server._on_connection, 136 addr, 137 bind_connections=False, 138 **kwargs) 139 140 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
143class Server(aio.Resource): 144 """MMS listening server 145 146 For creating new server see `listen`. 147 148 """ 149 150 @property 151 def async_group(self) -> aio.Group: 152 """Async group""" 153 return self._srv.async_group 154 155 @property 156 def addresses(self) -> list[tcp.Address]: 157 """Listening addresses""" 158 return self._srv.addresses 159 160 async def _on_validate(self, syntax_names, user_data): 161 syntax_name, req_user_data = user_data 162 if syntax_name != _mms_syntax_name: 163 raise Exception('invalid mms syntax name') 164 165 initiate_req = _decode(req_user_data) 166 if initiate_req[0] != 'initiate-RequestPDU': 167 raise Exception('invalid initiate request') 168 169 initiate_res = 'initiate-ResponsePDU', { 170 'negotiatedMaxServOutstandingCalling': 5, 171 'negotiatedMaxServOutstandingCalled': 5, 172 'negotiatedDataStructureNestingLevel': 4, # TODO compatibility 173 'initResponseDetail': { 174 'negotiatedVersionNumber': 1, 175 'negotiatedParameterCBB': _parameter_cbb, 176 'servicesSupportedCalled': _service_support}} 177 if 'localDetailCalling' in initiate_req[1]: 178 initiate_res[1]['localDetailCalled'] = \ 179 initiate_req[1]['localDetailCalling'] 180 181 res_user_data = _encode(initiate_res) 182 return _mms_syntax_name, res_user_data 183 184 async def _on_connection(self, acse_conn): 185 try: 186 try: 187 conn = Connection(acse_conn, self._request_cb, 188 self._unconfirmed_cb) 189 190 except Exception: 191 await aio.uncancellable(acse_conn.async_close()) 192 raise 193 194 try: 195 await aio.call(self._connection_cb, conn) 196 197 except BaseException: 198 await aio.uncancellable(conn.async_close()) 199 raise 200 201 except Exception as e: 202 mlog.error("error creating new incomming connection: %s", 203 e, exc_info=e) 204 return 205 206 if not self._bind_connections: 207 return 208 209 try: 210 await conn.wait_closed() 211 212 except BaseException: 213 await aio.uncancellable(conn.async_close()) 214 raise
MMS listening server
For creating new server see listen
.
150 @property 151 def async_group(self) -> aio.Group: 152 """Async group""" 153 return self._srv.async_group
Async group
155 @property 156 def addresses(self) -> list[tcp.Address]: 157 """Listening addresses""" 158 return self._srv.addresses
Listening addresses
Inherited Members
- hat.aio.group.Resource
- is_open
- is_closing
- is_closed
- wait_closing
- wait_closed
- close
- async_close
217class Connection(aio.Resource): 218 """MMS connection 219 220 For creating new connection see `connect` or `listen`. 221 222 """ 223 224 def __init__(self, 225 conn: acse.Connection, 226 request_cb: RequestCb, 227 unconfirmed_cb: UnconfirmedCb): 228 self._conn = conn 229 self._request_cb = request_cb 230 self._unconfirmed_cb = unconfirmed_cb 231 self._loop = asyncio.get_running_loop() 232 self._next_invoke_ids = itertools.count(0) 233 self._response_futures = {} 234 self._close_pdu = 'conclude-RequestPDU', None 235 self._async_group = aio.Group() 236 237 self.async_group.spawn(aio.call_on_cancel, self._on_close) 238 self.async_group.spawn(self._receive_loop) 239 self.async_group.spawn(aio.call_on_done, conn.wait_closing(), 240 self.close) 241 242 @property 243 def async_group(self) -> aio.Group: 244 """Async group""" 245 return self._async_group 246 247 @property 248 def info(self) -> acse.ConnectionInfo: 249 """Connection info""" 250 return self._conn.info 251 252 async def send_unconfirmed(self, unconfirmed: common.Unconfirmed): 253 """Send unconfirmed message""" 254 if not self.is_open: 255 raise ConnectionError() 256 257 pdu = 'unconfirmed-PDU', { 258 'service': encoder.encode_unconfirmed(unconfirmed)} 259 data = _mms_syntax_name, _encode(pdu) 260 await self._conn.send(data) 261 262 async def send_confirmed(self, 263 req: common.Request 264 ) -> common.Response: 265 """Send confirmed request and wait for response""" 266 if not self.is_open: 267 raise ConnectionError() 268 269 invoke_id = next(self._next_invoke_ids) 270 pdu = 'confirmed-RequestPDU', { 271 'invokeID': invoke_id, 272 'service': encoder.encode_request(req)} 273 data = _mms_syntax_name, _encode(pdu) 274 await self._conn.send(data) 275 276 if not self.is_open: 277 raise ConnectionError() 278 279 try: 280 future = self._loop.create_future() 281 self._response_futures[invoke_id] = future 282 return await future 283 284 finally: 285 self._response_futures.pop(invoke_id, None) 286 287 async def _on_close(self): 288 if self._conn.is_open: 289 try: 290 data = _mms_syntax_name, _encode(self._close_pdu) 291 await self._conn.send(data) 292 await self._conn.drain() 293 294 # TODO: wait for response in case of conclude-RequestPDU 295 296 except Exception as e: 297 mlog.error("on close error: %s", e, exc_info=e) 298 299 await self._conn.async_close() 300 301 async def _receive_loop(self): 302 try: 303 while True: 304 syntax_name, entity = await self._conn.receive() 305 if syntax_name != _mms_syntax_name: 306 continue 307 308 pdu = _decode(entity) 309 name, data = pdu 310 311 if name == 'unconfirmed-PDU': 312 await self._process_unconfirmed(data) 313 314 elif name == 'confirmed-RequestPDU': 315 await self._process_request(data) 316 317 elif name == 'confirmed-ResponsePDU': 318 await self._process_response(data) 319 320 elif name == 'confirmed-ErrorPDU': 321 await self._process_error(data) 322 323 elif name == 'conclude-RequestPDU': 324 self._close_pdu = 'conclude-ResponsePDU', None 325 break 326 327 else: 328 raise Exception('unsupported pdu') 329 330 except ConnectionError: 331 pass 332 333 except Exception as e: 334 mlog.error("receive loop error: %s", e, exc_info=e) 335 336 finally: 337 self.close() 338 339 for response_future in self._response_futures.values(): 340 if not response_future.done(): 341 response_future.set_exception(ConnectionError()) 342 343 async def _process_unconfirmed(self, data): 344 unconfirmed = encoder.decode_unconfirmed(data['service']) 345 346 if self._unconfirmed_cb is None: 347 raise Exception('unconfirmed_cb not defined') 348 349 await aio.call(self._unconfirmed_cb, self, unconfirmed) 350 351 async def _process_request(self, data): 352 invoke_id = data['invokeID'] 353 req = encoder.decode_request(data['service']) 354 355 if self._request_cb is None: 356 raise Exception('request_cb not defined') 357 358 res = await aio.call(self._request_cb, self, req) 359 360 if isinstance(res, common.ErrorResponse): 361 res_pdu = 'confirmed-ErrorPDU', { 362 'invokeID': invoke_id, 363 'serviceError': { 364 'errorClass': (res.error_class.value, res.value)}} 365 366 else: 367 res_pdu = 'confirmed-ResponsePDU', { 368 'invokeID': invoke_id, 369 'service': encoder.encode_response(res)} 370 371 res_data = _mms_syntax_name, _encode(res_pdu) 372 await self._conn.send(res_data) 373 374 async def _process_response(self, data): 375 invoke_id = data['invokeID'] 376 res = encoder.decode_response(data['service']) 377 378 future = self._response_futures.get(invoke_id) 379 if not future or future.done(): 380 mlog.warning("dropping confirmed response (invoke_id: %s)", 381 invoke_id) 382 return 383 384 future.set_result(res) 385 386 async def _process_error(self, data): 387 invoke_id = data['invokeID'] 388 error_class_name, value = data['serviceError']['errorClass'] 389 error_class = common.ErrorClass(error_class_name) 390 res = common.ErrorResponse(error_class, value) 391 392 future = self._response_futures.get(invoke_id) 393 if not future or future.done(): 394 mlog.warning("dropping confirmed error (invoke_id: %s)", invoke_id) 395 return 396 397 future.set_result(res)
224 def __init__(self, 225 conn: acse.Connection, 226 request_cb: RequestCb, 227 unconfirmed_cb: UnconfirmedCb): 228 self._conn = conn 229 self._request_cb = request_cb 230 self._unconfirmed_cb = unconfirmed_cb 231 self._loop = asyncio.get_running_loop() 232 self._next_invoke_ids = itertools.count(0) 233 self._response_futures = {} 234 self._close_pdu = 'conclude-RequestPDU', None 235 self._async_group = aio.Group() 236 237 self.async_group.spawn(aio.call_on_cancel, self._on_close) 238 self.async_group.spawn(self._receive_loop) 239 self.async_group.spawn(aio.call_on_done, conn.wait_closing(), 240 self.close)
242 @property 243 def async_group(self) -> aio.Group: 244 """Async group""" 245 return self._async_group
Async group
247 @property 248 def info(self) -> acse.ConnectionInfo: 249 """Connection info""" 250 return self._conn.info
Connection info
252 async def send_unconfirmed(self, unconfirmed: common.Unconfirmed): 253 """Send unconfirmed message""" 254 if not self.is_open: 255 raise ConnectionError() 256 257 pdu = 'unconfirmed-PDU', { 258 'service': encoder.encode_unconfirmed(unconfirmed)} 259 data = _mms_syntax_name, _encode(pdu) 260 await self._conn.send(data)
Send unconfirmed message
262 async def send_confirmed(self, 263 req: common.Request 264 ) -> common.Response: 265 """Send confirmed request and wait for response""" 266 if not self.is_open: 267 raise ConnectionError() 268 269 invoke_id = next(self._next_invoke_ids) 270 pdu = 'confirmed-RequestPDU', { 271 'invokeID': invoke_id, 272 'service': encoder.encode_request(req)} 273 data = _mms_syntax_name, _encode(pdu) 274 await self._conn.send(data) 275 276 if not self.is_open: 277 raise ConnectionError() 278 279 try: 280 future = self._loop.create_future() 281 self._response_futures[invoke_id] = future 282 return await future 283 284 finally: 285 self._response_futures.pop(invoke_id, None)
Send confirmed request and wait for response
Inherited Members
- hat.aio.group.Resource
- is_open
- is_closing
- is_closed
- wait_closing
- wait_closed
- close
- async_close
61class DataAccessError(enum.Enum): 62 OBJECT_INVALIDATED = 0 63 HARDWARE_FAULT = 1 64 TEMPORARILY_UNAVAILABLE = 2 65 OBJECT_ACCESS_DENIED = 3 66 OBJECT_UNDEFINED = 4 67 INVALID_ADDRESS = 5 68 TYPE_UNSUPPORTED = 6 69 TYPE_INCONSISTENT = 7 70 OBJECT_ATTRIBUTE_INCONSISTENT = 8 71 OBJECT_ACCESS_UNSUPPORTED = 9 72 OBJECT_NON_EXISTENT = 10 73 OBJECT_VALUE_INVALID = 11
An enumeration.
Inherited Members
- enum.Enum
- name
- value
76class ObjectClass(enum.Enum): 77 NAMED_VARIABLE = 0 78 NAMED_VARIABLE_LIST = 2 79 JOURNAL = 8 80 DOMAIN = 9 81 UNDEFINED = 0xFF
An enumeration.
Inherited Members
- enum.Enum
- name
- value
84class ErrorClass(enum.Enum): 85 ACCESS = 'access' 86 APPLICATION_REFERENCE = 'application-reference' 87 CANCEL = 'cancel' 88 CONCLUDE = 'conclude' 89 DEFINITION = 'definition' 90 FILE = 'file' 91 INITIATE = 'initiate' 92 OTHERS = 'others' 93 RESOURCE = 'resource' 94 SERVICE = 'service' 95 SERVICE_PREEMPT = 'service-preempt' 96 TIME_RESOLUTION = 'time-resolution' 97 VMD_STATE = 'vmd-state'
An enumeration.
Inherited Members
- enum.Enum
- name
- value
StatusRequest()
Inherited Members
- builtins.tuple
- index
- count
105@request 106class GetNameListRequest(typing.NamedTuple): 107 object_class: ObjectClass 108 object_scope: ObjectScope 109 continue_after: str | None
GetNameListRequest(object_class, object_scope, continue_after)
Create new instance of GetNameListRequest(object_class, object_scope, continue_after)
Inherited Members
- builtins.tuple
- index
- count
IdentifyRequest()
Inherited Members
- builtins.tuple
- index
- count
117@request 118class GetVariableAccessAttributesRequest(typing.NamedTuple): 119 value: ObjectName | int | str | util.Bytes
GetVariableAccessAttributesRequest(value,)
Create new instance of GetVariableAccessAttributesRequest(value,)
Inherited Members
- builtins.tuple
- index
- count
122@request 123class GetNamedVariableListAttributesRequest(typing.NamedTuple): 124 value: ObjectName
GetNamedVariableListAttributesRequest(value,)
Create new instance of GetNamedVariableListAttributesRequest(value,)
Inherited Members
- builtins.tuple
- index
- count
127@request 128class ReadRequest(typing.NamedTuple): 129 value: list[VariableSpecification] | ObjectName
ReadRequest(value,)
Create new instance of ReadRequest(value,)
Inherited Members
- builtins.tuple
- index
- count
132@request 133class WriteRequest(typing.NamedTuple): 134 specification: list[VariableSpecification] | ObjectName 135 data: list[Data]
WriteRequest(specification, data)
Create new instance of WriteRequest(specification, data)
Inherited Members
- builtins.tuple
- index
- count
138@request 139class DefineNamedVariableListRequest(typing.NamedTuple): 140 name: ObjectName 141 specification: list[VariableSpecification]
DefineNamedVariableListRequest(name, specification)
Create new instance of DefineNamedVariableListRequest(name, specification)
Inherited Members
- builtins.tuple
- index
- count
DeleteNamedVariableListRequest(names,)
Create new instance of DeleteNamedVariableListRequest(names,)
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.
ErrorResponse(error_class, value)
Create new instance of ErrorResponse(error_class, value)
Inherited Members
- builtins.tuple
- index
- count
StatusResponse(logical, physical)
Create new instance of StatusResponse(logical, physical)
Inherited Members
- builtins.tuple
- index
- count
161@response 162class GetNameListResponse(typing.NamedTuple): 163 identifiers: list[str] 164 more_follows: bool
GetNameListResponse(identifiers, more_follows)
Create new instance of GetNameListResponse(identifiers, more_follows)
Inherited Members
- builtins.tuple
- index
- count
167@response 168class IdentifyResponse(typing.NamedTuple): 169 vendor: str 170 model: str 171 revision: str 172 syntaxes: list[asn1.ObjectIdentifier] | None
IdentifyResponse(vendor, model, revision, syntaxes)
Create new instance of IdentifyResponse(vendor, model, revision, syntaxes)
Inherited Members
- builtins.tuple
- index
- count
175@response 176class GetVariableAccessAttributesResponse(typing.NamedTuple): 177 mms_deletable: bool 178 type_description: TypeDescription
GetVariableAccessAttributesResponse(mms_deletable, type_description)
Create new instance of GetVariableAccessAttributesResponse(mms_deletable, type_description)
Inherited Members
- builtins.tuple
- index
- count
181@response 182class GetNamedVariableListAttributesResponse(typing.NamedTuple): 183 mms_deletable: bool 184 specification: list[VariableSpecification]
GetNamedVariableListAttributesResponse(mms_deletable, specification)
Create new instance of GetNamedVariableListAttributesResponse(mms_deletable, specification)
Inherited Members
- builtins.tuple
- index
- count
ReadResponse(results,)
Inherited Members
- builtins.tuple
- index
- count
WriteResponse(results,)
Inherited Members
- builtins.tuple
- index
- count
DefineNamedVariableListResponse()
Inherited Members
- builtins.tuple
- index
- count
202@response 203class DeleteNamedVariableListResponse(typing.NamedTuple): 204 matched: int 205 deleted: int
DeleteNamedVariableListResponse(matched, deleted)
Create new instance of DeleteNamedVariableListResponse(matched, deleted)
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.
208@unconfirmed 209class EventNotificationUnconfirmed(typing.NamedTuple): 210 enrollment: ObjectName 211 condition: ObjectName 212 severity: int 213 time: Data | int | None
EventNotificationUnconfirmed(enrollment, condition, severity, time)
Create new instance of EventNotificationUnconfirmed(enrollment, condition, severity, time)
Inherited Members
- builtins.tuple
- index
- count
216@unconfirmed 217class InformationReportUnconfirmed(typing.NamedTuple): 218 specification: list[VariableSpecification] | ObjectName 219 data: list[DataAccessError | Data]
InformationReportUnconfirmed(specification, data)
Create new instance of InformationReportUnconfirmed(specification, data)
Inherited Members
- builtins.tuple
- index
- count
222@unconfirmed 223class UnsolicitedStatusUnconfirmed(typing.NamedTuple): 224 logical: int 225 physical: int
UnsolicitedStatusUnconfirmed(logical, physical)
Create new instance of UnsolicitedStatusUnconfirmed(logical, physical)
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.
ArrayData(elements,)
Inherited Members
- builtins.tuple
- index
- count
BcdData(value,)
Inherited Members
- builtins.tuple
- index
- count
BinaryTimeData(value,)
Inherited Members
- builtins.tuple
- index
- count
BitStringData(value,)
Inherited Members
- builtins.tuple
- index
- count
BooleanData(value,)
Inherited Members
- builtins.tuple
- index
- count
BooleanArrayData(value,)
Inherited Members
- builtins.tuple
- index
- count
FloatingPointData(value,)
Inherited Members
- builtins.tuple
- index
- count
GeneralizedTimeData(value,)
Inherited Members
- builtins.tuple
- index
- count
IntegerData(value,)
Inherited Members
- builtins.tuple
- index
- count
MmsStringData(value,)
Inherited Members
- builtins.tuple
- index
- count
ObjIdData(value,)
Inherited Members
- builtins.tuple
- index
- count
OctetStringData(value,)
Create new instance of OctetStringData(value,)
Inherited Members
- builtins.tuple
- index
- count
StructureData(elements,)
Inherited Members
- builtins.tuple
- index
- count
UnsignedData(value,)
Inherited Members
- builtins.tuple
- index
- count
298@data 299class UtcTimeData(typing.NamedTuple): 300 value: datetime.datetime 301 leap_second: bool 302 clock_failure: bool 303 not_synchronized: bool 304 accuracy: int | None 305 """accurate fraction bits [0,24]"""
UtcTimeData(value, leap_second, clock_failure, not_synchronized, accuracy)
Create new instance of UtcTimeData(value, leap_second, clock_failure, not_synchronized, accuracy)
Inherited Members
- builtins.tuple
- index
- count
VisibleStringData(value,)
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.
313@type_description 314class ArrayTypeDescription(typing.NamedTuple): 315 number_of_elements: int 316 element_type: TypeDescription | ObjectName
ArrayTypeDescription(number_of_elements, element_type)
Create new instance of ArrayTypeDescription(number_of_elements, element_type)
Inherited Members
- builtins.tuple
- index
- count
BcdTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
BinaryTimeTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
BitStringTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
BooleanTypeDescription()
Inherited Members
- builtins.tuple
- index
- count
339@type_description 340class FloatingPointTypeDescription(typing.NamedTuple): 341 format_width: int 342 exponent_width: int
FloatingPointTypeDescription(format_width, exponent_width)
Create new instance of FloatingPointTypeDescription(format_width, exponent_width)
Inherited Members
- builtins.tuple
- index
- count
GeneralizedTimeTypeDescription()
Inherited Members
- builtins.tuple
- index
- count
IntegerTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
MmsStringTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
ObjIdTypeDescription()
Inherited Members
- builtins.tuple
- index
- count
OctetStringTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
370@type_description 371class StructureTypeDescription(typing.NamedTuple): 372 components: list[tuple[str | None, TypeDescription | ObjectName]]
StructureTypeDescription(components,)
Create new instance of StructureTypeDescription(components,)
Inherited Members
- builtins.tuple
- index
- count
UnsignedTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
UtcTimeTypeDescription()
Inherited Members
- builtins.tuple
- index
- count
VisibleStringTypeDescription(xyz,)
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.
AaSpecificObjectName(identifier,)
Inherited Members
- builtins.tuple
- index
- count
395@object_name 396class DomainSpecificObjectName(typing.NamedTuple): 397 domain_id: str 398 item_id: str
DomainSpecificObjectName(domain_id, item_id)
Create new instance of DomainSpecificObjectName(domain_id, item_id)
Inherited Members
- builtins.tuple
- index
- count
VmdSpecificObjectName(identifier,)
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.
AaSpecificObjectScope()
Inherited Members
- builtins.tuple
- index
- count
DomainSpecificObjectScope(identifier,)
Create new instance of DomainSpecificObjectScope(identifier,)
Inherited Members
- builtins.tuple
- index
- count
VmdSpecificObjectScope()
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.
421@variable_specification 422class AddressVariableSpecification(typing.NamedTuple): 423 address: int | str | asn1.Bytes
AddressVariableSpecification(address,)
Create new instance of AddressVariableSpecification(address,)
Inherited Members
- builtins.tuple
- index
- count
InvalidatedVariableSpecification()
Inherited Members
- builtins.tuple
- index
- count
431@variable_specification 432class NameVariableSpecification(typing.NamedTuple): 433 name: ObjectName
NameVariableSpecification(name,)
Inherited Members
- builtins.tuple
- index
- count
436@variable_specification 437class ScatteredAccessDescriptionVariableSpecification(typing.NamedTuple): 438 specifications: list[VariableSpecification]
ScatteredAccessDescriptionVariableSpecification(specifications,)
Create new instance of ScatteredAccessDescriptionVariableSpecification(specifications,)
Inherited Members
- builtins.tuple
- index
- count
441@variable_specification 442class VariableDescriptionVariableSpecification(typing.NamedTuple): 443 address: int | str | asn1.Bytes 444 type_specification: TypeDescription | ObjectName
VariableDescriptionVariableSpecification(address, type_specification)
Create new instance of VariableDescriptionVariableSpecification(address, type_specification)
Inherited Members
- builtins.tuple
- index
- count
Helper class that provides a standard way to create an ABC using inheritance.