def send_firmware(self, firmware): # super(DfuTransportSerial, self).send_firmware(firmware) def progress_percentage(part, whole): return int(100 * float(part)/float(whole)) frames = [] # self._send_event(DfuEvent.PROGRESS_EVENT, progress=0, done=False, log_message="") for i in range(0, len(firmware), DfuTransportSerial.DFU_PACKET_MAX_SIZE): data_packet = HciPacket(int32_to_bytes(DFU_DATA_PACKET) + firmware[i:i + DfuTransportSerial.DFU_PACKET_MAX_SIZE]) frames.append(data_packet) frames_count = len(frames) # Send firmware packets for count, pkt in enumerate(frames): self.send_packet(pkt) # self._send_event(DfuEvent.PROGRESS_EVENT, # log_message="", # progress=progress_percentage(count, frames_count), # done=False) # Send data stop packet frame = int32_to_bytes(DFU_STOP_DATA_PACKET) packet = HciPacket(frame) self.send_packet(packet)
def send_firmware(self, firmware): # super(DfuTransportSerial, self).send_firmware(firmware) def progress_percentage(part, whole): return int(100 * float(part) / float(whole)) frames = [] # self._send_event(DfuEvent.PROGRESS_EVENT, progress=0, done=False, log_message="") for i in range(0, len(firmware), DfuTransportSerial.DFU_PACKET_MAX_SIZE): data_packet = HciPacket( int32_to_bytes(DFU_DATA_PACKET) + firmware[i:i + DfuTransportSerial.DFU_PACKET_MAX_SIZE]) frames.append(data_packet) frames_count = len(frames) # Send firmware packets for count, pkt in enumerate(frames): self.send_packet(pkt) sys.stderr.write("\rProgress: %d/%d frames, %d%%" % (count + 1, frames_count, progress_percentage(count + 1, frames_count))) sys.stderr.write('\r\n') # Send data stop packet frame = int32_to_bytes(DFU_STOP_DATA_PACKET) packet = HciPacket(frame) self.send_packet(packet)
def send_start_dfu(self, mode, softdevice_size=None, bootloader_size=None, app_size=None): # super(DfuTransportSerial, self).send_start_dfu(mode, softdevice_size, bootloader_size, app_size) frame = int32_to_bytes(DFU_START_PACKET) frame += int32_to_bytes(mode) frame += self.create_image_size_packet(softdevice_size, bootloader_size, app_size) packet = HciPacket(frame) self.send_packet(packet) time.sleep(DfuTransportSerial.SEND_START_DFU_WAIT_TIME)
def set_head_checksum(self): ha = 0 ha = zlib.crc32(self.data[:206], ha) conv = util.int32_to_bytes(ha) for i in range(0, 4): self.data[self.OffsetHash + i] = conv[i]
def create_image_size_packet(softdevice_size=0, bootloader_size=0, app_size=0): """ Creates an image size packet necessary for sending start dfu. @param softdevice_size: Size of SoftDevice firmware @type softdevice_size: int @param bootloader_size: Size of bootloader firmware @type softdevice_size: int @param app_size: Size of application firmware :return: The image size packet :rtype: str """ softdevice_size_packet = int32_to_bytes(softdevice_size) bootloader_size_packet = int32_to_bytes(bootloader_size) app_size_packet = int32_to_bytes(app_size) image_size_packet = softdevice_size_packet + bootloader_size_packet + app_size_packet return image_size_packet
def wrap_message(uuid, message): data = bytearray(Package.LengthHeadData) user = util.int32_to_bytes(uuid) mess = bytes(message, encoding="utf8") data[defi.MessageOffsetMessageLength] = len(mess) for i in range(len(user)): data[defi.MessageOffsetUUID + i] = user[i] for i in range(len(mess)): data[defi.MessageOffsetMessage + i] = mess[i] return data
def send_init_packet(self,firmware): # super(DfuTransportSerial, self).send_init_packet(init_packet) init_packet = 'ffffffffffffffff0100feff' init_packet += binascii.hexlify(struct.pack('<H', crc16.calc_crc16(firmware, crc=0xffff))) init_packet = binascii.unhexlify(init_packet) frame = int32_to_bytes(DFU_INIT_PACKET) frame += init_packet frame += int16_to_bytes(0x0000) # Padding required packet = HciPacket(frame) self.send_packet(packet) time.sleep(DfuTransportSerial.SEND_INIT_PACKET_WAIT_TIME)
def send_init_packet(self, firmware): # super(DfuTransportSerial, self).send_init_packet(init_packet) init_packet = 'ffffffffffffffff0100feff' init_packet += binascii.hexlify( struct.pack('<H', crc16.calc_crc16(firmware, crc=0xffff))) init_packet = binascii.unhexlify(init_packet) frame = int32_to_bytes(DFU_INIT_PACKET) frame += init_packet frame += int16_to_bytes(0x0000) # Padding required packet = HciPacket(frame) self.send_packet(packet) time.sleep(DfuTransportSerial.SEND_INIT_PACKET_WAIT_TIME)
def set_ack(self, ack): conv = util.int32_to_bytes(ack) for i in range(len(conv)): self.data[self.OffsetACK + i] = conv[i]
def set_seq(self, seq): conv = util.int32_to_bytes(seq) for i in range(len(conv)): self.data[self.OffsetSEQ + i] = conv[i]