예제 #1
0
def _read_property_multiple_callback(tsm):
    try:
        if tsm.exception:
            raise tsm.exception
        r = tsm.response
        recv_callback_helper(r)
        responses = tag.decode(r.data)
        return sequence.context_read_access_result_list(responses)
    except Exception, e:
        return e
예제 #2
0
def _read_property_multiple_callback(tsm):
    try:
        if tsm.exception:
            raise tsm.exception
        r = tsm.response
        recv_callback_helper(r)
        responses = tag.decode(r.data)
        return sequence.context_read_access_result_list(responses)
    except Exception, e:
        return e
예제 #3
0
def _read_property_multiple_g3(device, properties, timeout=3.0, **keywords):
    rp = APDU()
    rp.pdu_type = BACNET_CONFIRMED_SERVICE_REQUEST_PDU
    rp.choice = 14

    rp.data = array.array("c")
    for prop in properties:
        object = prop[0]
        instance = prop[1]
        property = prop[2]
        objID = tag.Context(0, data.BACnetObjectIdentifier(object, instance))

        if isinstance(property, types.TupleType):
            tags = []
            for pid in property:  # loop through list of properties
                if isinstance(pid, types.TupleType):  # may have index
                    if len(pid) > 1:  # index
                        tags.append(tag.Context(0, data.encode_enumerated(pid[0])))
                        tags.append(tag.Context(1, data.encode_unsigned_integer(pid[1])))
                        continue
                    pid = pid[0]  # doen't need to be tuple
                tags.append(tag.Context(0, data.encode_enumerated(pid)))
            propID = tag.Construct(1, tags)  # frame it in contruct tags
        else:
            if len(prop) < 4 or prop[3] == -1:
                propID = tag.Construct(1, [tag.Context(0, data.encode_enumerated(property))])
            else:
                arrayidx = prop[3]
                propID = tag.Construct(
                    1,
                    [
                        tag.Context(0, data.encode_enumerated(property)),
                        tag.Context(1, data.encode_unsigned_integer(arrayidx)),
                    ],
                )
        rp.data.fromstring(objID.encoding)
        rp.data.fromstring(propID.encoding)
    # return rp
    if DEBUG:
        for c in rp.data:
            print hex(ord(c)), "  ",
        print ""
    if keywords.has_key("callback"):
        keywords["callback"].callback(_read_property_multiple_callback)
        network.send_request(device, rp, timeout, **keywords)
        return keywords["callback"]  # used as flag
    request_id = network.send_request(device, rp, timeout)
    r = recv_response(request_id, timeout)
    responses = tag.decode(r.data)
    return sequence.context_read_access_result_list(responses)
예제 #4
0
def _read_property_multiple_g3(device, properties, timeout=3.0, **keywords):
    rp = APDU()
    rp.pdu_type = BACNET_CONFIRMED_SERVICE_REQUEST_PDU
    rp.choice = 14

    rp.data = array.array('c')
    for prop in properties:
        object = prop[0]
        instance = prop[1]
        property = prop[2]
        objID = tag.Context(0,data.BACnetObjectIdentifier(object,instance))

        if isinstance(property, types.TupleType):
            tags = []
            for pid in property: #loop through list of properties
                if isinstance(pid, types.TupleType): #may have index
                    if len(pid) > 1: #index
                        tags.append(tag.Context(0, data.encode_enumerated(pid[0])))
                        tags.append(tag.Context(1, data.encode_unsigned_integer(pid[1])))
                        continue
                    pid = pid[0] #doen't need to be tuple
                tags.append(tag.Context(0,data.encode_enumerated(pid)))
            propID = tag.Construct(1,tags) #frame it in contruct tags
        else:
            if len(prop) < 4 or prop[3] == -1:
                propID =  tag.Construct(
                    1,[tag.Context(0,data.encode_enumerated(property))]
                    )
            else:
                arrayidx = prop[3]
                propID = tag.Construct(
                    1,[tag.Context(0, data.encode_enumerated(property)),
                       tag.Context(1, data.encode_unsigned_integer(arrayidx))]
                    )
        rp.data.fromstring(objID.encoding)
        rp.data.fromstring(propID.encoding)
    #return rp
    if DEBUG:
        for c in rp.data:
            print hex(ord(c)),'  ',
        print ''
    if keywords.has_key('callback'):
        keywords['callback'].callback(_read_property_multiple_callback)
        network.send_request(device, rp, timeout, **keywords)
        return keywords['callback'] #used as flag
    request_id = network.send_request(device, rp, timeout)
    r = recv_response(request_id, timeout)
    responses = tag.decode(r.data)
    return sequence.context_read_access_result_list(responses)