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
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)
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)