Skip to content

Releases: foxsi/foxsi-4matter

Frame counters and ping packet

04 Jan 04:43
7aac4f8
Compare
Choose a tag to compare

Overview

This release includes two major new features:

1. Frame counters in downlink packets

This enables reliable GSE frame logging in the face of packet loss, which was an issue in the FOXSI-4 flight. Both Formatter and GSE frame counter behaviors are backwards compatible, so this release can be still used with GSE v3.1.0 and earlier.

2. Ping packet transmissoin

This is a new 46 byte downlink packet that the Formatter sends on startup. The packet contains software status information, but the presence of the packet alone can be used to indicate Experiment aliveness in the GSE.

Changes

Full changelog

v1.2.2...v1.3.0

Fix for systems.json mcast_group value

03 Dec 15:04
Compare
Choose a tag to compare

Overview

This is a slightly more flexible version of v1.2.1. In foxsi4-commands/systems.json, in an ethernet_interface block, if mcast_group is encountered that value is used for the remote address. Otherwise this code will fall back to using address.

In all prior versions, the Formatter would transmit GSE packets to gse.ethernet_interface.address even though gse.ethernet_interface.mcast_group was present, so the Formatter's systems.json file needed to be manually edited to have the GSE multicast IP address 224.1.1.118 as the ethernet_interface.address.

This fixes that problem, you can now use fully identical systems.json files for the GSE and Formatter configuration. Or you can use an old systems.json file with hardcoded gse.ethernet_interface.address (this is backwards-compatible).

DE-corrected FOXSI-4 flight

25 Nov 20:45
67a0b3f
Compare
Choose a tag to compare

Overview

This is just like v1.2.0 (FOXSI-4 flight version), but includes a fix to avoid repeatedly downlinking the last available DE frame. The check for the DE's write pointer to advance before reading the latest frame into the formatter now works correctly.

There are also substantial updates to the foxsimile emulator system that enable emulation of all onboard CMOS and CdTe systems simultaneously.

PRs included:

Changelog

Changelog

PFRR pre-sequence test (flight version)

27 Mar 18:14
Compare
Choose a tag to compare

Important

This version was FOXSI-4's flight software, flown on Apr 17 2024 from Poker Flat, AK. It did well in flight.

Summary

This version resolves the "zombie data" problem observed in March 23 2024 x-ray alignment checks of the CdTe detectors. Root cause was the CdTe DE updating the ring buffer write pointer when it starts writing a frame, rather at the end of writing a command.

The fix is for the Formatter to always decrement the CdTe ring buffer write pointer before accessing remote memory. If the ring buffer write pointer for CdTe is the first frame in the ring buffer, the decremented pointer wraps around to the last frame in the buffer. This logic is contained in an if-block that modifies write pointers only for SystemManagers whose name contains the string "cdte". So CMOS readout should be completely unaltered.

The reference commit for this release in foxsi4-commands is 9844c1d.

As of March 27 2024 this is the flight version.

Issues introduced

  1. When the CdTe DE writes fewer than 1 frame per Formatter event loop (a rate of 1 frame / (approximately) 1.2 seconds), the Formatter will repeatedly read the last written frame from the DE ring buffer. This is because I mistakenly inserted src/TransportLayer.cpp lines 745-754 (the main fix in this version) after the condition checking if the prior write pointer is identical to the current write pointer. Because I decrement whatever write pointer I receive from the DE, if no new data has been written, it will always be smaller than the last write pointer I received from the DE. There is no time to resolve, but the easy fix is to move lines 745-754 to right before the condition in lines 738-741.

  2. The very first frame taken from the CdTe DE after power on (and initialization, system start observation, etc) is always garbage data. This is because the Formatter will decrement the write pointer, which starts in frame position 0, around to the end of the ring buffer, which is full of uninitialized memory.

Warning

Use the version of systems.json attached in this release as the configuration file for the Formatter. If you build this release on the Formatter, copy the attached systems.json into the Formatter's folder ~/foxsi-4matter/foxsi4-commands/systems.json.

This version of Formatter code transmits telemetry to the IP address in systems.json's field gse.ethernet_interface.address, not gse.ethernet_interface.mcast_group (which is where the GSE software receives data). The flight release of the GSE (v3.0.0) contains its own version of systems.json that should be used to configure the GSE software.

This discrepancy in configuration is fixed Formatter v1.2.2.

Changes

Full Changelog: v1.1.1...v1.2.0

PFRR pre-x-ray check

23 Mar 06:55
Compare
Choose a tag to compare

Status

  • Uses while-based (rather than asio timer-based) main event loop.
  • Has Timepix back at 9600 baud.
  • Validated with multiple turn on/background data tests with the full system.
  • New CdTe canister HK frame size of 0x330, based on desire to include the counter for DE unsaved frames still in canister memory.

Full Changelog: v1.1.0...v1.1.1

Proposal: `while`-based main event loop

12 Mar 22:03
Compare
Choose a tag to compare

Note

This version was accepted in sealed source and x-ray checks.

Content changes

Modifies implementation of Circle constructor and Circle::update_state() to drive the main event loop with a while loop rather than a boost::asio::steady_timer. This is a significant change to functionality and requires testing before flight use. If there are issues, we can revert to v1.0.0.

Motivation

This is a much simpler loop driver than the timer that was in place before. My hope is that it helps with timeout/latency issues encountered late in February testing, particularly with Timepix and CMOS knock-on effects.

Testing

This version was tested Mar 21 2024 at Poker with the full system (in all runs of the day, though only 6 and 7 involve full system). Need detector teams to confirm behavior.

GSE looks as expected. Downlink data rate was identical to timer-based loop (Formatter reboot interrupts the middle of the trace):
Screenshot 2024-03-21 at 6 05 17 PM

Changes

Full Changelog: v1.0.1...v1.1.0

Update doc

12 Mar 21:17
Compare
Choose a tag to compare
Update doc Pre-release
Pre-release

In this release

Signifant documentation improvements. Nice-looking API documentation can now be built from Doxygen source with sphinx and breathe.

In terms of software functionality, this release should be completely identical to v1.0.0.

Changes

PRs

Changelog

Compare last uart (source branch) to this one: v1.0.1...v1.0.1
Compare last main version to this one: v0.1.1...v1.0.1

v1.0.0

26 Feb 15:58
Compare
Choose a tag to compare

Nominal flight version

Prior to this version, I found an issue in which SpaceWire communications immediately following transfer of CMOS QL data (from either CMOS) would fail. This version changes the main loop order and timing (in Circle::manage_systems(), order defined in apps/main.cpp) so that SpaceWire systems all safely communicate post-CMOS.

Changelog

Full Changelog: v0.1.7...v1.0.0

v0.1.7

16 Feb 05:27
Compare
Choose a tag to compare

Overview

  • Housekeeping board will now be DISCONNECTed if any read operations time out (like ABANDONment, but the Circle::manage_systems() call will still enter the housekeeping part of the function).
  • Uplinked read commands will have their replies downlinked with the RING_BUFFER_TYPE_OPTIONS::REPLY data type indicator.
  • CMOS and CdTe systems should have correctly-sized housekeeping data downlinked.

Changelog

Full Changelog: v0.1.5...v0.1.7

v0.1.6

16 Feb 05:21
Compare
Choose a tag to compare

Implements

  • Enable/disable readout of specific Housekeeping board values.
  • Slower Housekeeping data readout (once per 5 loop cycles).
  • Mechanism for Formatter to intercept commands directed at a System.
  • This version of Formatter runs on boot via systemd/systemctl.

Changelog

Full Changelog: v0.1.15...v0.1.6