Releases: stfc-aeg/loki
v1.3.1
Version 1.3.1
Hotfix: config variables for control adapter from kwargs are now explicitly cast from string default to whatever type they are expected to be, on a variable-by-variable basis.
This has caused issues with various variables that only exhibit when those config variables are later edited. The watchdog has also been made more robust to non-numeric inputs for interval times.
Full Changelog: v1.3.0...v1.3.1
v1.3.0
What's Changed
- loki-update tool Backup, Restore and Image Metadata Inspection by @josephnobes-stfc in #60
- v1.3.0-staging by @josephnobes-stfc in #61
Full Changelog: v1.2.3...v1.3.0
v1.2.3
Bugfix: errors occurring while context of a mutex is acquired are now handled better such that mutex is freed, resulting in errors being handled without freezing up systems.
Full Changelog: v1.2.2...v1.2.3
v1.2.2
What's Changed
- General LOKI build improvements by @josephnobes-stfc in #58
- Register controller and build improvements, support for LED enable/disable by @josephnobes-stfc in #59
Full Changelog: v1.2.0...v1.2.2
v1.2.1
Full Changelog: v1.2.0...v1.2.1
Bugfix, non-breaking: register controller properly handles exceptions raised during managed context when acquired.
v1.2.0
Init Script Overhaul
Init scripts have been overhauled for a more robust, standardised boot process. This has had a focus on defining predictable behaviour for every detector system and removing the requirement for non-standard boot scripts placed in SD cards varying by system causing confusion. Everything is now central. A particular focus has been placed on ensuring that a machine set up for interfacing with LOKI-based control systems does not require any additional configuration when switching between LOKI control boards, detectors, or even detector types.
- Persistent files and directories have been moved from flash to eMMC. This is because the SoM is now considered an interchangeable part, and therefore all storage of detector-specifics are stored on the LOKI control PCB itself.
- Dedicated eMMC bootstrapping script will automatically format and partition the eMMC on first boot, making the first bring-up of a new LOKI board no different to any other boot.
- This script also bind mounts persistent network interface settings from an eMMC. See networking below.
- Dedicated system ID recovery script will recover a System ID from the eMMC. This can be programmed manually with the use of a new helper function (see below), but will default to the already unique serial number of the eMMC module.
- Default configuration directory for odin-control is now in eMMC
- Dedicated host mounting script will search for a controlling host PC and mount directories from it
- The host PC IP and export location can be overridden with a file in eMMC
- The export directory will automatically be separated by application (detector type) name
- Exact structure, and what is or isn't included is the choice of the host; they create a
layout.conf
file to specify what is present, and the LOKI system will interpret it- If there is no file yet present, an example will be dropped in
- It is possible to either share configuration with all detectors of the same type, or have separated directories by System ID
- This can be specified on a per-directory basis
- For example, one could provide sequences for every HEXITEC-MHz system from a common directory, but have different detectors have different SPI data export directories.
- The host machine doesn't have to provide anything at all; no export directory will not prevent boot, and will still allow interfacing with the web UI
ECDSA SSH Host Key Support:
- Dropbear now generates an ECDSA host key alongside the RSA one, which prevents issues connecting from systems refusing to use old ciphers.
Helper Aliases / Functions:
- Several helper functions have been added to the environment (all starting with
loki_
) to make common operations easierloki_info
prints out some basic information about the application, module, versionsloki_set_system_id
will set the System ID stored in the eMMCloki_system_id
will return the current System IDloki_update_image_flash
will program a specifiedimage.ub
file into the SoM flash (not typical)loki_update_image_emmc
will program a specifiedimage.ub
file into the eMMC (reccomended)loki_remount_host
will remove and re-mount the control host directoriesloki_set_static_ip
a quick way of writing a config to eMMC that will be picked up by the networking service to add a static address- This uses an alias, therefore not preventing DHCP from operating at the same time; good as a fallback
- This would mean the control host could be a machine without a DHCP server
loki_restart_app
will restart theodin-control
instanceloki_stop_app
will stop theodin-control
instance
Networking Upgrades:
- DHCP by default, support for static addresses (or anything that could be specified in an interfaces file). See helpers.
What's Changed
- Version 1.2.0 by @josephnobes-stfc in #54
Full Changelog: v1.1.1...v1.2.0
v1.1.1
What's Changed
- V1.1.1 staging by @josephnobes-stfc in #53
- Increased threads for thread executor pool to account for number currently used
- Expanded allowed flags for GPIOD lines to include biases (pull-up and pull-down), though this will not be properly supported until kernel is upgraded.
- The default configuration directory searched is now eMMC rather than flash, which means SoMs can be switched without issue, with the LOKI carrier being the 'detector board'.
Full Changelog: v1.1.0...v1.1.1
v1.1.0
New Features
- New Watchdog thread will monitor other threads, meaning they now report failure after getting stuck as well as when actually encountering errors.
- Each thread can now (optionally) add a watchdog kick period
- If the kick is not received in time, status will be reported in the parameter tree, log an error and optionally call a custom callback
- Kicks are made with an easy function call; the function determines the calling task automatically
- Can be added to user-created threads
- Has been added to all existing base-class threads
- LTC2986 temperature monitor is now configured at start-up of carrier class
- Also provides easy functions to enable a PT100 connected directly to the LOKI board
- Register Controller updates
- Now counts failed requests (requests when ASIC is disabled) and reports similarly to the cached / direct stats.
- Now properly uses a mutex to protect transactions, especially those that are actually comprised of multiple transactions internally (like writing to fields that span multiple registers)
Fixes
- Fixed conflict between I2S routing and main connnector. I2C was removed from the design.
- Fixed wrong constraints for backplane / application presence
- Restored EMIO names returned by
gpioinfo
to the EMIO numbers - Removed more BabyD specifics
- Removed .petalinux (now an empty directory containing .gitignore) since its contents is just regenerated
- DAC numbering has been changed (for the v1 board) to be 0-7, matching the designations on the LOKI carrier rather than the specific DAC chip in use. The hardware on-board should not define the use of the standardised outward-facing interface.
What's Changed
- V1.1.0 staging by @josephnobes-stfc in #50
Full Changelog: v1.0.1...v1.1.0
v1.0.1
Bumped Versions
- odin-detector/odin-control from 1.3.0 to 1.5.0
- Improved shutdown and autoreload
- This is now utilised by LOKI for cleanly terminating threads
New Features
- More system performance information added to LOKI adapter with access functions and parameter tree entries for:
- Memory
- Uptime
- Network address and interface speed
- Disk usage percentage for specific directories. Can be extended, but by default:
- Flash mtd partition
- uSD card
- Exports directory (often mounted external network filesystem)
- CPU load averages
- CPU percentage utilisation
- CPU times (as percentages)
- Register Controller added: a class used as the parent for ASICs (currently BabyD and HEXITEC-MHz)
- Allows 'fields' to be defined with clear names, to construct an easily modifiable register map which is made flexible through being passed read/write functions
- Fields can span multiple registers
- Fields can be made up of sub-fields in completely different places
- Customisable word width
- Caching of registers depending on whether fields are defined as 'volatile' or not. Default assumes all values are volatile and therefore could have changed since last read. This has been shown with most chips under control to replace around 99% of direct transactions with cache accesses instead, which is far more efficient
- Allows 'fields' to be defined with clear names, to construct an easily modifiable register map which is made flexible through being passed read/write functions
What's Changed
- V1.0.0 staging by @josephnobes-stfc in #47
- V1.0.1 staging by @josephnobes-stfc in #48
Full Changelog: v1.0.0...v1.0.1
v1.0.0
This will be the first version of the 'neoloki' releases, designed for operation primarily on the new LOKI carrier boards produced by STFC. Releases to support the original HEXITEC-MHz will be maintained initially with version numbers <1.0.0, but it is anticipated that this will be replaced with a neoloki-based workflow in due time.
This marks a major migration of project architecture to becoming cross-platform (both for new first revision LOKI SoM carriers as well as later versions, and the original TEBF09808 carrier from Trenz).
In addition, rather than being a control system specifically for HEXITEC-MHz (MERCURY) detectors, this will now be cross-application, designed to operate many detector systems moving forwards. This currently includes:
This will be a quick turn-around release, so that development on multiple projects can move ahead using a fixed tag. Anticipate more releases soon for new architecture documentation etc.
Also note that this project is now built by other repositories that use this as a submodule, and therefore there will be no built images added as assets. In future, there will be a 'base' image built, possibly by this repo, but more likely by another designed to produce bootloading and test images with no particular application system in mind.
Full Changelog: v0.1.4...v1.0.0