def from_binary(data): nid = NodeId() encoding = ord(data.read(1)) nid.NodeIdType = NodeIdType(encoding & 0b00111111) if nid.NodeIdType == NodeIdType.TwoByte: nid.Identifier = ord(data.read(1)) elif nid.NodeIdType == NodeIdType.FourByte: nid.NamespaceIndex, nid.Identifier = struct.unpack("<BH", data.read(3)) elif nid.NodeIdType == NodeIdType.Numeric: nid.NamespaceIndex, nid.Identifier = struct.unpack("<HI", data.read(6)) elif nid.NodeIdType == NodeIdType.String: nid.NamespaceIndex = uabin.Primitives.UInt16.unpack(data) nid.Identifier = uabin.Primitives.String.unpack(data) elif nid.NodeIdType == NodeIdType.ByteString: nid.NamespaceIndex = uabin.Primitives.UInt16.unpack(data) nid.Identifier = uabin.Primitives.Bytes.unpack(data) elif nid.NodeIdType == NodeIdType.Guid: nid.NamespaceIndex = uabin.Primitives.UInt16.unpack(data) nid.Identifier = uabin.Primitives.Guid.unpack(data) else: raise UaError("Unknown NodeId encoding: " + str(nid.NodeIdType)) if uabin.test_bit(encoding, 7): nid.NamespaceUri = uabin.Primitives.String.unpack(data) if uabin.test_bit(encoding, 6): nid.ServerIndex = uabin.Primitives.UInt32.unpack(data) return nid
def get_name_and_doc(val): if val in code_to_name_doc: return code_to_name_doc[val] else: if uabin.test_bit(val, 31): return 'Bad', 'Unknown StatusCode value: {}'.format(val) elif uabin.test_bit(val, 30): return 'UncertainIn', 'Unknown StatusCode value: {}'.format(val) else: return 'Good', 'Unknown StatusCode value: {}'.format(val)
def from_binary(data): dimensions = None array = False encoding = ord(data.read(1)) int_type = encoding & 0b00111111 vtype = datatype_to_varianttype(int_type) if uabin.test_bit(encoding, 7): value = uabin.unpack_uatype_array(vtype, data) array = True else: value = uabin.unpack_uatype(vtype, data) if uabin.test_bit(encoding, 6): dimensions = uabin.unpack_uatype_array(VariantType.Int32, data) value = reshape(value, dimensions) return Variant(value, vtype, dimensions, is_array=array)
def from_binary(data): dimensions = None encoding = ord(data.read(1)) int_type = encoding & 0b00111111 vtype = DataType_to_VariantType(int_type) if vtype == VariantType.Null: return Variant(None, vtype, encoding) if uabin.test_bit(encoding, 7): value = uabin.unpack_uatype_array(vtype, data) else: value = uabin.unpack_uatype(vtype, data) if uabin.test_bit(encoding, 6): dimensions = uabin.unpack_uatype_array(VariantType.Int32, data) value = reshape(value, dimensions) return Variant(value, vtype, dimensions)