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)
Exemplo n.º 2
0
    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)
Exemplo n.º 4
0
    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
Exemplo n.º 8
0
    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,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)
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
 def set_ack(self, ack):
     conv = util.int32_to_bytes(ack)
     for i in range(len(conv)):
         self.data[self.OffsetACK + i] = conv[i]
Exemplo n.º 12
0
 def set_seq(self, seq):
     conv = util.int32_to_bytes(seq)
     for i in range(len(conv)):
         self.data[self.OffsetSEQ + i] = conv[i]