Skip to content

Commit

Permalink
ref: use flash_args file
Browse files Browse the repository at this point in the history
  • Loading branch information
horw committed Dec 13, 2023
1 parent 4529d2d commit 680deac
Showing 1 changed file with 58 additions and 80 deletions.
138 changes: 58 additions & 80 deletions pytest-embedded-idf/pytest_embedded_idf/serial.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import hashlib
import logging
import os
import tempfile
from typing import Optional, TextIO, Union

import esptool
Expand Down Expand Up @@ -120,85 +119,64 @@ def flash(self) -> None:
logging.error('No flash settings detected. Skipping auto flash...')
return

flash_files = []
encrypt_files = []
for file in self.app.flash_files:
if file.encrypted:
encrypt_files.append(str(file.offset))
encrypt_files.append(str(file.file_path))
else:
flash_files.append(str(file.offset))
flash_files.append(str(file.file_path))

nvs_file = None
try:
if self.erase_nvs:
address = self.app.partition_table['nvs']['offset']
size = self.app.partition_table['nvs']['size']
nvs_file = tempfile.NamedTemporaryFile(delete=False)
nvs_file.write(b'\xff' * size)
if not isinstance(address, int):
address = int(address, 0)

if self.app.flash_settings['encrypt']:
encrypt_files.append(str(address))
encrypt_files.append(str(nvs_file.name))
else:
flash_files.append(str(address))
flash_files.append(str(nvs_file.name))

# write_flash expects the parameter encrypt_files to be None and not
# an empty list, so perform the check here

addition_kwargs = self.app.flash_args.get('extra_esptool_args', {})
addition_kwargs.pop('stub')

default_kwargs = {
'addr_filename': flash_files,
'encrypt_files': encrypt_files or None,
'no_stub': False,
'compress': True,
'verify': False,
'ignore_flash_encryption_efuse_setting': False,
'erase_all': False,
'force': False,
}

for k in default_kwargs:
if k in addition_kwargs:
default_kwargs[k] = addition_kwargs.pop(k)

_args = []

def _kwargs_extend_list(_items):
for _k, _v in _items:
if not _v:
continue
_args.append(f'--{_k}')

if isinstance(_v, bool):
continue
if isinstance(_v, list):
_args.extend(_v)
continue
_args.append(_v.strip())

_kwargs_extend_list(addition_kwargs.items())
_args.extend(['write_flash', *default_kwargs.pop('addr_filename')])

_kwargs_extend_list((default_kwargs | self.app.flash_settings).items())

esptool.main(['-b', str(self.esptool_baud), *_args, '--flash_size', 'detect'], esp=self.esp)

if self._meta:
self._meta.set_port_app_cache(self.port, self.app)
finally:
if nvs_file:
nvs_file.close()
try:
os.remove(nvs_file.name)
except OSError:
pass
# if self.erase_nvs: ??
# # esptool --erase-flash
# parttool.py erase_partition --help

# address = self.app.partition_table['nvs']['offset']
# size = self.app.partition_table['nvs']['size']
# nvs_file = tempfile.NamedTemporaryFile(delete=False)
# nvs_file.write(b'\xff' * size)
# if not isinstance(address, int):
# address = int(address, 0)

addition_kwargs = self.app.flash_args.get('extra_esptool_args', {})
addition_kwargs['no-stub'] = not addition_kwargs.pop('stub')

write_flash_args = {
'erase-all': False,
'no-progress': False,
'verify': False,
'encrypt': False,
'encrypt-files': False,
'ignore-flash-encryption-efuse-setting': False,
'force': False,
'compress': True,
'no-compress': False,
}

for k, v in list(addition_kwargs.items()):
rk = k.replace('_', '-')
if rk in write_flash_args:
write_flash_args[rk] = addition_kwargs.pop(k)

_args = []

def _kwargs_extend_list(_items):
for _k, _v in _items:
if not _v:
continue
_args.append(f'--{_k}')

if isinstance(_v, bool):
continue
if isinstance(_v, list):
_args.extend(_v)
continue
_args.append(_v.strip())

current_wk = os.getcwd()
os.chdir(self.app.binary_path)

_kwargs_extend_list(addition_kwargs.items())
_args.extend(['write_flash', '@flash_args'])
_kwargs_extend_list(write_flash_args.items())
esptool.main(['-b', str(self.esptool_baud), *_args], esp=self.esp)

os.chdir(current_wk)

if self._meta:
self._meta.set_port_app_cache(self.port, self.app)

@EspSerial.use_esptool()
def dump_flash(
Expand Down

0 comments on commit 680deac

Please sign in to comment.