Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 6 additions & 5 deletions provision/modules/device.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ def __init__(self, paths, args, part_num) -> None:
self.flash_size = None
self.stack_size = None
self.rtt_addr = None
self.firmware = args.str(ID.kGeneratorFW)
self.gen_fw = args.get(ID.kGeneratorFW)
self.override = False # Override commander's part_num with devices.yaml label
self.load(paths, part_num, args.str(ID.kVersion))

def __str__(self) -> str:
return "({}) ram:0x{:08x}, flash:0x{:08x}|0x{:08x}, stack:0x{:04x}, image:{}".format(self.label, self.ram_addr, self.flash_addr, self.flash_size, self.stack_size, self.firmware)
return "({}) ram:0x{:08x}, flash:0x{:08x}|0x{:08x}, stack:0x{:04x}, image:{}".format(self.label, self.ram_addr, self.flash_addr, self.flash_size, self.stack_size, self.gen_fw.value or "?")

def load(self, paths, part_num, version):
filename = paths.base(Device.CONFIG_FILE)
Expand Down Expand Up @@ -48,8 +48,9 @@ def load(self, paths, part_num, version):
self.stack_size = self._int(info, 'stack_size')

# Search for a firmware for the given version, if needed
if self.firmware is None:
if (self.gen_fw.value is None) or os.path.isdir(self.gen_fw.value):
image = None
image_dir = (self.gen_fw.value is not None) and self.gen_fw.value or 'images'
rtt_addr = None
version_len = len(version)
for y in self._list(info, 'firmware'):
Expand All @@ -62,8 +63,8 @@ def load(self, paths, part_num, version):
rtt_addr = self._int(y, 'rtt_addr', None)
if image is None:
_util.fail("Missing firmware for \"{}\" in version \"{}\"".format(part_num, version))

self.firmware = paths.base("images/{}".format(image))
firmware = paths.base(f"{image_dir}/{image}")
self.gen_fw.set(firmware)
self.rtt_addr = rtt_addr

def match(self, pn, id, y):
Expand Down
6 changes: 2 additions & 4 deletions provision/modules/manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,6 @@ def collectDeviceInfo(self, paths, args, conn, comm):
args.get(ID.kFlashAddress).set(dev.flash_addr)
# Flash size
args.get(ID.kFlashSize).set(dev.flash_size)
# Firmware
fw = args.get(ID.kGeneratorFW)
if fw.value is None:
fw.set(dev.firmware)
return dev

def computeDefaults(self, paths, args):
Expand Down Expand Up @@ -178,6 +174,8 @@ def writeGeneratorFirmware(self, args, comm):
def writeProductionFirmware(self, args, comm):
prod_fw = args.str(ID.kProductionFW)
if prod_fw is not None:
if not os.path.exists(prod_fw) or not os.path.isfile(prod_fw):
raise ValueError("Missing Production firmware \"{}\"".format(prod_fw))
print("Writing Production Firmware...")
comm.flash(prod_fw)

Expand Down
1 change: 1 addition & 0 deletions provision/modules/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ class ID:
kPylinkLib = 0x013a
kBufferSize = 0x013b
kReset = 0x013c
kCommanderNoClose = 0x013d
# Instance Info
kSerialNumber = 0x0141
kVendorId = 0x0142
Expand Down
6 changes: 6 additions & 0 deletions provision/modules/parameters.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,12 @@ options:
short: "rs"
type: "flag"

- id: 0x013d
desc: "Commander --noclose"
name: "noclose"
short: "nc"
type: "flag"

instance_info:
- id: 0x0141
desc: "Serial Number"
Expand Down
12 changes: 9 additions & 3 deletions provision/modules/tools.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import datetime
import hashlib
import os
import re
import shutil
import struct
import time
Expand All @@ -15,6 +16,7 @@ class Commander:

def __init__(self, args, conn):
# The "device" argument's value may be reconfigured later
self.no_close = args.bool(ID.kCommanderNoClose)
self.device = args.get(ID.kDevice)
self.auto = ('auto' == args.str(ID.kAction))
self.conn = conn
Expand Down Expand Up @@ -46,16 +48,20 @@ def info(self):
return DeviceInfo(res)

def flash(self, path):
dev = self.device.str().lower()
image_path = _util.Paths.quote(path)
_, ext = os.path.splitext(path)
if self.auto and ('si917' == self.device):
if self.auto and ('si917' == dev):
self.execute(['manufacturing', 'erase', 'userdata'], False, True)
if '.rps' == ext:
self.execute(['rps', 'load', image_path], False, True)
args = ['rps', 'load', image_path]
# Si917 needs time to start
time.sleep(1)
else:
self.execute(['flash', image_path], False, True)
args = ['flash', image_path]
if re.match(r'^si.g301', dev) and self.no_close:
args.append('--noclose')
self.execute(args, False, True)

def reset(self):
self.execute(['device', 'reset'], False, False)
Expand Down