def verifyFile(self, inputFile=None, startAddress=None, progressReport=None):
		if inputFile is not None:
			self.inputFile = inputFile
		if startAddress is not None:
			self.startAddress = startAddress
		returnValue = True
		f = fileFormatReader(self.inputFile, self.startAddress)
		try:
			item0, item1 = f.getRawBinary()
			self.startAddress = item0
			file_content = item1
		except IOError:
			errorMessage((('File ' + self.inputFile) + ' open failed\n'))
			returnValue = False
		if returnValue:
			file_size = len(file_content)
			packet = []
			address = self.startAddress
		size = 0
		errors = 0
		while returnValue:
			packet = []
			packet_size = self.packetSize
			packet_string = file_content[size:(size + packet_size)]
			packet_size = len(packet_string)
			if packet_size == 0:
				infoMessage('\n')
				break
			else:
				size = (size + packet_size)
				packet.extend(packet_string)
				if progressReport:
					progressReport(size, file_size)
				else:
					infoMessage(('Verifying %05d/%05d\r' % (size, file_size)))
				arg1 = u32ToArray(address)
				arg1.reverse()
				reply = self.sendCommand('READ', [arg1, [(len(packet) - 1)]])
				if reply[:3] != [ACK, ACK, ACK]:
					errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size)))
					returnValue = False
				if len(reply[3:]) != len(packet):
					errorMessage(('Invalid data read, expected length = %d, received bytes = %d\n' % (len(packet), len(reply[3:]))))
					returnValue = False
				if (returnValue and reply[3:] != packet):
					returnValue = False
					infoMessage('Verify failed								 \n')
					infoMessage(('%-8s: %5s %5s\n' % ('Addr', 'Flash', 'file')))
					for i in range(len(packet)):
						if (reply[(3 + i)]) != (packet[i]):
							infoMessage(('%08x:		%02x		%02x\n' % ((address + i), (reply[(i + 3)]), (packet[i]))))
							errors = (errors + 1)
							if errors > 64:
								break
							else:
								continue
						else:
							continue
				address = (address + packet_size)
				continue
		if returnValue:
			if progressReport == None:
				infoMessage('Done\n')
		return returnValue
 def verifyFile(self,
                inputFile=None,
                startAddress=None,
                progressReport=None):
     if inputFile is not None:
         self.inputFile = inputFile
     if startAddress is not None:
         self.startAddress = startAddress
     returnValue = True
     f = fileFormatReader(self.inputFile, self.startAddress)
     try:
         item0, item1 = f.getRawBinary()
         self.startAddress = item0
         file_content = item1
     except IOError:
         errorMessage((('File ' + self.inputFile) + ' open failed\n'))
         returnValue = False
     if returnValue:
         file_size = len(file_content)
         packet = []
         address = self.startAddress
     size = 0
     errors = 0
     while returnValue:
         packet = []
         packet_size = self.packetSize
         packet_string = file_content[size:(size + packet_size)]
         packet_size = len(packet_string)
         if packet_size == 0:
             infoMessage('\n')
             break
         else:
             size = (size + packet_size)
             packet.extend(packet_string)
             if progressReport:
                 progressReport(size, file_size)
             else:
                 infoMessage(('Verifying %05d/%05d\r' % (size, file_size)))
             arg1 = u32ToArray(address)
             arg1.reverse()
             reply = self.sendCommand('READ', [arg1, [(len(packet) - 1)]])
             if reply[:3] != [ACK, ACK, ACK]:
                 errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' %
                               (repr(reply), packet_size)))
                 returnValue = False
             if len(reply[3:]) != len(packet):
                 errorMessage((
                     'Invalid data read, expected length = %d, received bytes = %d\n'
                     % (len(packet), len(reply[3:]))))
                 returnValue = False
             if (returnValue and reply[3:] != packet):
                 returnValue = False
                 infoMessage('Verify failed								 \n')
                 infoMessage(
                     ('%-8s: %5s %5s\n' % ('Addr', 'Flash', 'file')))
                 for i in range(len(packet)):
                     if (reply[(3 + i)]) != (packet[i]):
                         infoMessage(
                             ('%08x:		%02x		%02x\n' % ((address + i),
                                                       (reply[(i + 3)]),
                                                       (packet[i]))))
                         errors = (errors + 1)
                         if errors > 64:
                             break
                         else:
                             continue
                     else:
                         continue
             address = (address + packet_size)
             continue
     if returnValue:
         if progressReport == None:
             infoMessage('Done\n')
     return returnValue
	def loadFile(self, inputFile=None, startAddress=None, progressReport=None, doErase=True):
		if inputFile is not None:
			self.inputFile = inputFile
		if startAddress is not None:
			self.startAddress = startAddress
		returnValue = True
		f = fileFormatReader(self.inputFile, self.startAddress)
		try:
			item0, item1 = f.getRawBinary()
			self.startAddress = item0
			file_content = item1
		except IOError:
			errorMessage((('File ' + self.inputFile) + ' open failed\n'))
			returnValue = False
		if returnValue:
			file_size = len(file_content)
			packet = []
			address = self.startAddress
			pages = int(((file_size + 1023) / 1024))
			startPage = (((self.startAddress & 4294966272L) - 134217728) / 1024)
			eraseArg = ([(pages - 1)] + range(startPage, (startPage + pages), 1))
			infoMessage(('Erasing pages from %d to %d...' % (startPage, ((startPage + pages) - 1))))
			if ('STM32W_FLASHER_JLINK_DONT_ERASE' in os.environ or (not doErase)):
				infoMessage('(skipped)', False)
			else:
				reply = self.sendCommand('ERASE', [eraseArg], timeout=10)
				if reply != [ACK, ACK]:
					errorMessage(('Unexpected reply %s\n' % repr(reply)))
					returnValue = False
			if returnValue:
				infoMessage('done\n', False)
		size = 0
		while returnValue:
			packet = []
			packet_size = self.packetSize
			packet_string = file_content[size:(size + packet_size)]
			packet_size = len(packet_string)
			if packet_size == 0:
				infoMessage('\n')
				break
			else:
				size = (size + packet_size)
				packet.extend(packet_string)
				if (len(packet) % 2) != 0:
					packet = (packet + [255])
				packet = ([(len(packet) - 1)] + packet)
				if progressReport:
					progressReport(size, file_size)
				else:
					infoMessage(('Programming %05d/%05d\r' % (size, file_size)))
				arg1 = u32ToArray(address)
				arg1.reverse()
				if (self.serialMode or size == packet_size):
					reply = self.sendCommand('WRITE', [arg1, packet])
					if reply != [ACK, ACK, ACK]:
						errorMessage(('\n\n+Unexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size)))
						returnValue = False
				else:
					retries = 0
					MAX_RETRIES = 3
					while returnValue:
						reply = self.sendCommand('WRITE_INCREMENTAL', [packet])
						if reply != [ACK, ACK]:
							retries = (retries + 1)
							if retries > MAX_RETRIES:
								errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size)))
								returnValue = False
								break
							else:
								errorMessage(('\n\nUnexpected reply %s, packet_size=%d\n' % (repr(reply), packet_size)))
								infoMessage('Retrying...\n')
								continue
						else:
							break
				address = (address + packet_size)
				continue
		if returnValue:
			if progressReport == None:
				infoMessage('Done\n')
		return returnValue
 def loadFile(self,
              inputFile=None,
              startAddress=None,
              progressReport=None,
              doErase=True):
     if inputFile is not None:
         self.inputFile = inputFile
     if startAddress is not None:
         self.startAddress = startAddress
     returnValue = True
     f = fileFormatReader(self.inputFile, self.startAddress)
     try:
         item0, item1 = f.getRawBinary()
         self.startAddress = item0
         file_content = item1
     except IOError:
         errorMessage((('File ' + self.inputFile) + ' open failed\n'))
         returnValue = False
     if returnValue:
         file_size = len(file_content)
         packet = []
         address = self.startAddress
         pages = int(((file_size + 1023) / 1024))
         startPage = (((self.startAddress & 4294966272L) - 134217728) /
                      1024)
         eraseArg = ([(pages - 1)] + range(startPage,
                                           (startPage + pages), 1))
         infoMessage(('Erasing pages from %d to %d...' %
                      (startPage, ((startPage + pages) - 1))))
         if ('STM32W_FLASHER_JLINK_DONT_ERASE' in os.environ
                 or (not doErase)):
             infoMessage('(skipped)', False)
         else:
             reply = self.sendCommand('ERASE', [eraseArg], timeout=10)
             if reply != [ACK, ACK]:
                 errorMessage(('Unexpected reply %s\n' % repr(reply)))
                 returnValue = False
         if returnValue:
             infoMessage('done\n', False)
     size = 0
     while returnValue:
         packet = []
         packet_size = self.packetSize
         packet_string = file_content[size:(size + packet_size)]
         packet_size = len(packet_string)
         if packet_size == 0:
             infoMessage('\n')
             break
         else:
             size = (size + packet_size)
             packet.extend(packet_string)
             if (len(packet) % 2) != 0:
                 packet = (packet + [255])
             packet = ([(len(packet) - 1)] + packet)
             if progressReport:
                 progressReport(size, file_size)
             else:
                 infoMessage(
                     ('Programming %05d/%05d\r' % (size, file_size)))
             arg1 = u32ToArray(address)
             arg1.reverse()
             if (self.serialMode or size == packet_size):
                 reply = self.sendCommand('WRITE', [arg1, packet])
                 if reply != [ACK, ACK, ACK]:
                     errorMessage(
                         ('\n\n+Unexpected reply %s, packet_size=%d\n' %
                          (repr(reply), packet_size)))
                     returnValue = False
             else:
                 retries = 0
                 MAX_RETRIES = 3
                 while returnValue:
                     reply = self.sendCommand('WRITE_INCREMENTAL', [packet])
                     if reply != [ACK, ACK]:
                         retries = (retries + 1)
                         if retries > MAX_RETRIES:
                             errorMessage((
                                 '\n\nUnexpected reply %s, packet_size=%d\n'
                                 % (repr(reply), packet_size)))
                             returnValue = False
                             break
                         else:
                             errorMessage((
                                 '\n\nUnexpected reply %s, packet_size=%d\n'
                                 % (repr(reply), packet_size)))
                             infoMessage('Retrying...\n')
                             continue
                     else:
                         break
             address = (address + packet_size)
             continue
     if returnValue:
         if progressReport == None:
             infoMessage('Done\n')
     return returnValue