def get_network_data(self, integrity=False): supervision_period = 0x2D0 enrollment_sate = 1 data = prutils.num_to_chars(self._long_id, 4, 0) + self._dev_type_code + \ chr(self._short_id) + chr(enrollment_sate) # + prutils.num_to_chars(supervision_period, 2, 0) # data = prutils.str_l(data) log.write("network data = %s" % prutils.hexdump(data)) if integrity: return prutils.crc_PGH_20(data) return data
def get_application_data(self, fn_sniffer_wait, integrity=False): # use request to get configuration according to device type config_cache = {} cur_seq = 0xff snum = 0xff data = '' for cfg in self._config_types: device_config_template = self._get_config_type(cfg) if device_config_template is None: log.write("Don't know how to get the 0x%04X device configuration" % cfg) return None dpr_type = device_config_template[1] # log.write("ASK FOR dpr_type = %x" % dpr_type) if dpr_type in config_cache.keys(): packet = config_cache[dpr_type] else: packet = self._Procedures.request_configuration_data(self._short_id, self._long_id, dpr_type) # filter out retransmittions while snum == cur_seq: packet = fn_sniffer_wait(0x10) if packet == False: break packet = packet[5:] # dpr only dprp = DPR_Packet(packet) snum = dprp.snum.value if snum == 0xff: break # special case cur_seq = snum if packet : config_cache[dpr_type] = packet self.send_response(0x07, dprp.snum.value) if packet: dprp = DPR_Packet(packet) rcv_dpr_type = ord(packet[8]) # if dpr_type != rcv_dpr_type: # log.write("wrong TLDV:%d != %d" % (dpr_type, rcv_dpr_type)) value_len_off = dprp.data_len.offset + 2 value_len = ord(packet[value_len_off]) # add config to cash # log.write("len = %d " % value_len) add = prutils.num_to_chars(cfg, 2, 0) # add += prutils.num_to_chars(cfg, 2, 0) # BF [07 05 01 00 01 00 08 20] if len(device_config_template) > 2 : # extract the tldv parameter offset = device_config_template[2][0] size = device_config_template[2][1] tldv_data = dprp.data[offset + 2: offset + size + 2] # log.write("template:%s" % device_config_template) # log.write("dpr data = %s" % prutils.hexdump(dprp.data)) # log.write("0x%X:%d extraction: %s" % (offset, size, prutils.hexdump(tldv_data))) add += chr(len(tldv_data)) + tldv_data # log.write("TLDV:%s => %s" % (prutils.hexdump(packet[8:11]), prutils.hexdump(add))) else: add += chr(value_len) add += packet[value_len_off + 1: value_len_off + value_len + 1] data += add # data = chr(len(data)) + data time.sleep(0.3) else: return None log.write("application data = %s" % prutils.hexdump(data)) if integrity == True: if len(self._config_types) != 0: data = prutils.crc_PGH_20(data) else: data = 0x0000 return data