Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
print(subp.stdout.decode('utf-8'))
if subp.stderr:
print(subp.stderr.decode('utf-8'))
p = subprocess.run(jlink_command.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if p.returncode != 0:
print('ERROR: JTAG returned with error code ' + str(p.returncode))
print_output(p)
raise TockLoaderException('JTAG error')
elif self.args.debug:
print_output(p)
# check that there was a JTAG programmer and that it found a device
stdout = p.stdout.decode('utf-8')
if 'USB...FAILED' in stdout:
raise TockLoaderException('ERROR: Cannot find JLink hardware. Is USB attached?')
if 'Can not connect to target.' in stdout:
raise TockLoaderException('ERROR: Cannot find device. Is JTAG connected?')
if 'Error while programming flash' in stdout:
raise TockLoaderException('ERROR: Problem flashing.')
if write == False:
# Wanted to read binary, so lets pull that
temp_bin.seek(0, 0)
return temp_bin.read()
def print_output (subp):
response = ''
if subp.stdout:
response += subp.stdout.decode('utf-8')
if subp.stderr:
response += subp.stderr.decode('utf-8')
logging.debug(response)
return response
p = subprocess.run(shlex.split(openocd_command), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if p.returncode != 0:
logging.error('ERROR: openocd returned with error code ' + str(p.returncode))
out = print_output(p)
if 'Can\'t find board/' in out:
raise TockLoaderException('ERROR: Cannot find the board configuration file. \
You may need to update OpenOCD to the version in latest git master.')
raise TockLoaderException('openocd error')
elif self.args.debug:
print_output(p)
# check that there was a JTAG programmer and that it found a device
stdout = p.stdout.decode('utf-8')
if 'Error: No J-Link device found.' in stdout:
raise TockLoaderException('ERROR: Cannot find hardware. Is USB attached?')
if write == False:
# Wanted to read binary, so lets pull that
temp_bin.seek(0, 0)
return temp_bin.read()
response = ''
if subp.stdout:
response += subp.stdout.decode('utf-8')
if subp.stderr:
response += subp.stderr.decode('utf-8')
logging.debug(response)
return response
p = subprocess.run(shlex.split(openocd_command), stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if p.returncode != 0:
logging.error('ERROR: openocd returned with error code ' + str(p.returncode))
out = print_output(p)
if 'Can\'t find board/' in out:
raise TockLoaderException('ERROR: Cannot find the board configuration file. \
You may need to update OpenOCD to the version in latest git master.')
raise TockLoaderException('openocd error')
elif self.args.debug:
print_output(p)
# check that there was a JTAG programmer and that it found a device
stdout = p.stdout.decode('utf-8')
if 'Error: No J-Link device found.' in stdout:
raise TockLoaderException('ERROR: Cannot find hardware. Is USB attached?')
if write == False:
# Wanted to read binary, so lets pull that
temp_bin.seek(0, 0)
return temp_bin.read()
contained_files = self.tab.getnames()
# A TBF name is in the format: ..tbf
for contained_file in contained_files:
name_pieces = contained_file.split('.')
if len(name_pieces) >= 2 and name_pieces[-1] == 'tbf':
if name_pieces[0] == arch:
matching_tbf_filenames.append(contained_file)
# Get all of the TBF headers and app binaries to create a TabApp.
tbfs = []
for tbf_filename in matching_tbf_filenames:
binary_tarinfo = self.tab.getmember(tbf_filename)
binary = self.tab.extractfile(binary_tarinfo).read()
# First get the TBF header from the correct binary in the TAB
tbfh = TBFHeader(binary)
if tbfh.is_valid():
# Check that total size actually matches the binary that we got.
if tbfh.get_app_size() < len(binary):
# It's fine if the binary is smaller, but the binary cannot be
# longer than the amount of reserved space (`total_size` in the
# TBF header) for the app.
raise TockLoaderException('Invalid TAB, the app binary is longer than its defined total_size')
tbfs.append((tbfh, binary[tbfh.get_size_before_app():]))
else:
raise TockLoaderException('Invalid TBF found in app in TAB')
return TabApp(tbfs)
help='The JLink speed to pass to JLinkExe.')
parent_channel.add_argument('--jlink-if',
help='The interface type to pass to JLinkExe.')
parent_channel.add_argument('--openocd-board',
help='The cfg file in OpenOCD `board` folder.')
parent_channel.add_argument('--openocd-cmd',
default='openocd',
help='The openocd binary to invoke.')
parent_channel.add_argument('--openocd-options',
default=[],
help='Tockloader-specific flags to direct how Tockloader uses OpenOCD.',
nargs='*')
parent_channel.add_argument('--openocd-commands',
default={},
type=lambda kv: kv.split('=', 1),
action=helpers.ListToDictAction,
help='Directly specify which OpenOCD commands to use for "program", "read", or "erase" actions. Example: "program=flash write_image erase {{binary}} {address:#x};verify_image {{binary}} {address:#x};"',
nargs='*')
parent_channel.add_argument('--board',
default=None,
help='Explicitly specify the board that is being targeted.')
parent_channel.add_argument('--arch',
default=None,
help='Explicitly specify the architecture of the board that is being targeted.')
parent_channel.add_argument('--page-size',
default=0,
type=int,
help='Explicitly specify how many bytes in a flash page.')
parent_channel.add_argument('--baud-rate',
default=115200,
type=int,
help='If using serial, set the target baud rate.')
def set_attribute (self, key, value):
'''
Change an attribute stored on the board.
'''
# Do some checking
if len(key.encode('utf-8')) > 8:
raise TockLoaderException('Key is too long. Must be 8 bytes or fewer.')
if len(value.encode('utf-8')) > 55:
raise TockLoaderException('Value is too long. Must be 55 bytes or fewer.')
# Enter bootloader mode to get things started
with self._start_communication_with_board():
if not self._bootloader_is_present():
raise TockLoaderException('No bootloader found! That means there is nowhere for attributes to go.')
# Create the buffer to write as the attribute
out = bytes([])
# Add key
out += key.encode('utf-8')
out += bytes([0] * (8-len(out)))
# Add length
out += bytes([len(value.encode('utf-8'))])
# Add value
out += value.encode('utf-8')
# Find if this attribute key already exists
open_index = -1
for index, attribute in enumerate(self.channel.get_all_attributes()):
if attribute:
if attribute['key'] == key:
def get_attribute (self, index):
message = struct.pack('
binary = self.tab.extractfile(binary_tarinfo).read()
# First get the TBF header from the correct binary in the TAB
tbfh = TBFHeader(binary)
if tbfh.is_valid():
# Check that total size actually matches the binary that we got.
if tbfh.get_app_size() < len(binary):
# It's fine if the binary is smaller, but the binary cannot be
# longer than the amount of reserved space (`total_size` in the
# TBF header) for the app.
raise TockLoaderException('Invalid TAB, the app binary is longer than its defined total_size')
tbfs.append((tbfh, binary[tbfh.get_size_before_app():]))
else:
raise TockLoaderException('Invalid TBF found in app in TAB')
return TabApp(tbfs)
'''
message = struct.pack('
for attribute in attributes:
if attribute and attribute['key'] == 'board' and self.board == None:
self.board = attribute['value']
if attribute and attribute['key'] == 'arch' and self.arch == None:
self.arch = attribute['value']
if attribute and attribute['key'] == 'openocd':
self.openocd_board = attribute['value']
if attribute and attribute['key'] == 'pagesize' and self.page_size == 0:
self.page_size = attribute['value']
# We might need to fill in if we only got a "board" attribute.
self._configure_from_known_boards()
# Check that we learned what we needed to learn.
if self.board == None or self.arch == None or self.openocd_board == 'cortex-m0' or self.page_size == 0:
raise TockLoaderException('Could not determine the current board or arch or openocd board name')