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) self._send_event(DfuEvent.PROGRESS_EVENT, progress=100, done=False, log_message="")
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): theframe = [x for x in int32_to_bytes(DFU_DATA_PACKET)] theframe += [chr(x) for x in firmware[i:i + DfuTransportSerial.DFU_PACKET_MAX_SIZE]] data_packet = HciPacket(theframe) 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) self._send_event(DfuEvent.PROGRESS_EVENT, progress=100, done=False, log_message="")
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 += DfuTransport.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 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 = [x for x in int32_to_bytes(DFU_START_PACKET)] frame += [x for x in int32_to_bytes(mode)] frame += [x for x in DfuTransport.create_image_size_packet(softdevice_size, bootloader_size, app_size)] packet = HciPacket(frame) self.send_packet(packet) self.sd_size = softdevice_size self.total_size = softdevice_size+bootloader_size+app_size #logger.info("Wait after Init Packet %s second", self.get_erase_wait_time()) time.sleep( self.get_erase_wait_time() )
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): theframe = [x for x in int32_to_bytes(DFU_DATA_PACKET)] theframe += [ chr(x) for x in firmware[i:i + DfuTransportSerial.DFU_PACKET_MAX_SIZE] ] data_packet = HciPacket(theframe) 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=count, done=False) # After 8 frames (4096 Bytes), nrf5x will erase and write to flash. While erasing/writing to flash # nrf5x's CPU is blocked. We better wait a few ms, just to be safe if count % 8 == 0: time.sleep(DfuTransportSerial.FLASH_PAGE_WRITE_TIME) # Wait for last page to write time.sleep(DfuTransportSerial.FLASH_PAGE_WRITE_TIME) # Send data stop packet frame = int32_to_bytes(DFU_STOP_DATA_PACKET) packet = HciPacket(frame) self.send_packet(packet) self._send_event(DfuEvent.PROGRESS_EVENT, progress=100, done=False, log_message="")
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 send_init_packet(self, init_packet): super(DfuTransportSerial, self).send_init_packet(init_packet) frame = [x for x in int32_to_bytes(DFU_INIT_PACKET)] frame += [chr(x) for x in bytes(init_packet)] frame += [x for x in int16_to_bytes(0x0000)] # Padding required packet = HciPacket(frame) self.send_packet(packet)
def send_init_packet(self, init_packet): super(DfuTransportSerial, self).send_init_packet(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)