Change Log ======= All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/). The [milestone](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones) list yields a list of all related PRs for each release. Starting at v2.0.0, this project will adhere to semantic versioning and the the following changes will consitute of a breaking change warranting a new major release: - The TMTC interface changes in any shape of form. - The behaviour of the OBSW changes in a major shape or form relevant for operations # [unreleased] ## Fixed - Small SCEX fix: The temperatur check option was not passed on for commands with a user data size larger than 1. - SCEX: Properly check whether filesystem is usable for filesystem checks. - ACS Controller strategy is now actually written to the dataset for detumbling. - During detumble the fused rotation rate is now calculated. - Detumbling is now exited when its exit value is undercut and not its entry value. - `EiveSystem`: Add a small delay between triggering an event for FDIR reboots and sending the command to the core controller. - PL PDU: Fixed bounds checking logic. Bound checks will only be performed for modules which are enabled. ## Changed - SCEX: Only perform filesystem checks when not in OFF mode. - The `EiveSystem` now only sends reboot commands targetting the same image. - Added 200 ms delay between switching HPA/MPA/TX/X8 and DRO GPIO pin OFF. - PL PCDU ADC set is now automatically enabled for `NORMAL` mode transitions. It is automatically disabled for `OFF` mode transitions. ## Added - PL PCDU for EM build. ## Added - SCEX: Add warning event if filesystem is unusable. # [v6.2.0] 2023-07-26 - `eive-tmtc`: v5.3.1 ## Changed - STR missed reply handling is now moved to DHB rather than the COM interface. The COM IF will still trigger an event if a reply is taking too long, and FDIR should still work via reply timeouts. - Re-ordered some functions of the core controller in the initialize function. - Rad sensor is now only polled every 30 minutes instead of every device cycle to reduce wear of the RADFET electronics. - The SD cards will still be switched OFF on a reboot, but this is done in a non-blocking manner now with a timeout of 10 seconds where the reboot will be performed in any case. - ACS Controller now includes the safe mode from FLP, which will calculate its rotational rate from SUS and MGM measurements. To accommodate these changes, low-pass filters for SUS measurements and rates as well as MGM measurements and rates are included. Usage of the new controller as well as settings of the low-pass filters can be handled via parameter commands. - Simplify and fix the chip and copy protection functions in the core controller. This mechanism now is always performed for the target chip and target copy in the reboot handlers. - Improvement in FSFW: HK generation is now countdown based. ## Added - 5 ms delay after pulling RADFET enable pin high before starting the ADC conversion. - Set STR time in configuration sequence to firmware mode. - The STR `AutoThreshold` parameters are now set from the configuration JSON file at STR startup. - The STR handler can now handle the COM error reply and triggers an low severity event accordingly. - Add SCEX handler for EM. - Radiation sensor handler dummy for the EM. - Added event for SD card information in core controller initialize function. This event will also be triggered after the SD state machine has run, so the event will generally be triggered twice at system boot, and once after commanding SD card switches. ## Fixed - General bugs in the SD card state machine. This might fix some other known bugs for certain combinations of switching ON and OFF SD cards and also makes the whole state machine a lot more robust against hanging up. - SUS dummy handler went to `MODE_NORMAL` for ON commands. - PL PCDU dummy went to `MODE_NORMAL` for ON commands. # [v6.1.0] 2023-07-13 - `eive-tmtc`: v5.2.0 ## Changed - TCS: Remove OBC IF board thermal module, which is exactly identical to OBC module and therefore obsolete. - Swapped PL and PS I2C, BPX battery and MGT are connected to PS I2C now for firmware versions equal or above v4. However, this software version is compatible to both v3 and v4 of the firmware. - The firmware version variables are global statics inititalized early during the program runtime now. This makes it possible to check the firmware version earlier. - The TCS controller will now always command heaters OFF when being blind for thermal components (no sensors available), irrespective of current switch state. - Make OBSW compatible to prospective FW version v5.0.0, where the Q7 I2C devices were moved to a PL I2C block and the TMP sensor devices were moved to the PS I2C0. - Made `Xadc` code a little bit more robust against errors. ## Fixed - TMP1075: Set dataset invalid on shutdown explicitely - Small fixes for TMP1075 FDIR: Use strange and missed reply counters. - TCS controller: Last heater (S-band heater) was skipped for transition completion checks. - TCS controller: A helper member to track the elapsed heater control cycles was not reset properly, which could lead to switch transitions being completed immediately. This can lead to weird bugs like heaters being commanded ON twice and can potentially lead to other bugs. - TMP1075: Devices did not go to OFF mode when being set faulty. - Update PL PCDU 1 in TCS mode tree on the EM. - TMP1075: Possibly ignored health commands. - Bugfix in FSFW where certain packet types could only be sent with source data fields with a maximum size of 255 bytes. - TCS CTRL: Limit number of heater handler messages sent in case there are not sensors available anymore. - Fix to allow adding real STR device for EM. # Added - Two events for heaters being commanded ON and OFF by the TCS controller - Upper limit for burn time of TCS heaters. Currently set to 1 hour for each heater. This mechanism will only track the burn time for heaters which were commanded by the TCS controller. - TCS controller is now observable by introducing a new HK dataset which exposes some internal fields related to TCS control. # [v6.0.0] 2023-07-02 - `q7s-package` version v3.2.0 - Important bugfixes for PTME. See `q7s-package` CHANGELOG. ## Changed - Added back PTME busy bit polling. This is necessary due to changes to the AXI APB interface to the PTME core. ## Fixed - For the live channel (VC0), telemetry was still only dumped if the transmitter is active. Please note that this fix will lead to crashes for FW versions below v3.2. However, it might not be an issue for the oldest firmware on the satellite (v2.5.1). # [v5.2.0] 2023-07-02 ## Fixed - The firmware information event was not triggered even when possible because of an ordering bug in the initializer function. - Empty dumps (no TM in time range) will now correctly be completed immediately ## Changed - PTME was always reset on submode changes. The reset will now only be performed if the actual data rate changes. - Add back ACS board code for the EM. Now that the radiation sensor was removed, the image switching issue has disappeared and adding back the ACS board is worth it for the GPS timekeeping. # [v5.1.0] 2023-06-28 - `eive-tmtc` version v5.1.0 ## Changed - Persistent TM store dumps are now performed in chronological order. - Increase Syrlinks RX HK rate to 5.0 seconds during a pass. - Various robustness improvements for the heater handler. The heater handler will now only process the command queue if it is not busy with switch commanding which reduces the amount of possible bugs. - The heater handler is only able to process messages stricly sequentially now but is scheduled twice in a 0.5 second slot so something like a consecutive heater ON or OFF command can still be handled relatively quickly. ## Added - Sequence counters for PUS and CFDP packets are now stored persistently across graceful reboots. - The PUS packet message type counter will now be incremented properly for each PUS service. - Internal error reporter set is now enabled by default and generated every 120 seconds. # [v5.0.0] 2023-06-26 v3.3.1 and all following version will now be moved to v5.0.0 with the additional changes listed here. This was done because the firmware update (v4.0.0) is not working right now and it is not known when and how it will be fixed. Because of that, all updates to make the SW work with the new firmware, which are limited to a few files will be moved to a dev branch so regular development compatible to the old firmware can continue. TLDR: This version is compatible to the old firmware and some changes which only work with the new firmware have been reverted. ## Changed - Added `sync` syscall in graceful shutdown handler - Graceful shutdown is now performed by the reboot watchdog - There is now a separate file for the total reboot counter. The reboot watchdog has its own local counters to determine whether a reboot is necessary. # [v4.0.1] 2023-06-24 ## Fixed - `PusLiveDemux` packet demultiplexing bugfix where the demultiplexing did not work when there was only one destination available. # [v4.0.0] 2023-06-22 - `eive-tmtc` version v5.0.0 - `q7s-package` version v3.1.1 ## Fixed - Important bugfixes for PTME. See `q7s-package` CHANGELOG. - TCS fixes: Set temperature values to invalid value for MAX31865 RTD handler, SUS handler and STR handler. Also set dataset to invakid for RTD handler. - Fixed H parameter in SUS converter from 1 mm to 2.5 mm. ## Changed - Removed PTME busy/ready signals. Those were not used anyway because register reads are used now. - APB bus access busy checking is not done anymore as this is performed by the bus itself now. - Core controller will now announce version and image information event in addition to reboot event in the `inititalize` function. - Core controller will now try to request and announce the firmware version in addition to the OBSW version as well. - Added core controller action to read reboot mechansm information - GNSS reset pin will now only be asserted for 5 ms instead of 100 ms. ## Added - Added PL I2C reset pin. It is not used/connected for now but could be used for FDIR procedures to restore the PL I2C. - Core controller now announces firmware version as well when requesting a version info event # [v3.3.1] 2023-06-22 ## Fixed - `PusLiveDemux` packet demultiplexing bugfix where the demultiplexing did not work when there was only one destination available. ## Fixed - Fixed H parameter in SUS converter from 1 mm to 2.5 mm. # [v3.3.0] 2023-06-21 Like v3.2.0 but without the custom FM changes related to VC0. # [v3.2.0] 2023-06-21 ## Fixed - Fix sun vector calculation - SUS total vector was not reset to being a zero vector during eclipse due to a wrong memcpy length. ## Changed - Reverted all changes related to VC0 handling to avoid FM bug possibly related to FPGA bug. # [v3.1.1] 2023-06-14 ## Fixed - TMP1075 bugfix where negative temperatures could not be measured because of a two's-complement conversion bug. # [v3.1.0] 2023-06-14 - `eive-tmtc` version v4.1.0 ## Fixed - TCS heater switch enumeration naming was old/wrong and was not updated in sync with the object ID update. This lead to the TCS controller commanding the wrong heaters. ## Changed - Increase number of allowed parallel HK commands to 16 ## Added - Added `CONFIG_SET`, `MAN_HEATER_ON` and `MAN_HEATER_OFF` support for the BPX battery handler # [v3.0.0] 2023-06-11 - `eive-tmtc` version v4.0.0 ## Changed - Adapt EM configuration to include all GomSpace PCDU devices except the ACU. For the ACU (which broke), a dummy will still be used. - Event Manager queue depth is configurable now. - Do not construct and schedule broken TMP1075 device anymore. - Do not track payload modes in system mode tables. - ACS modes derived from system modes. - The CMake build generator will now search for the cross-compiler binaries in the environmental variable named `CROSS_COMPILE_BIN_PATH` first when setting up the build system. This prevents CMake from selecting wrong cross-compilers if multiple cross-compilers with the same name are used on the same system. - Add ACS board for EM by default now. - Add support for MPSoC HK packet. - Add support for MPSoC Flash Directory Content Report. - Dynamically enable and disable HK packets for MPSoC on `ON` and `OFF` commands. - Add support for MPSoC Flash Directory Content Report. - Larger allowed path and file sizes for STR and PLOC MPSoC modules. - More robust MPSoC flash read and write command data handling. - Increase frequency of payload handlers from 0.8 seconds to 0.5 seconds. - Disable missed deadlines per default. Not useful in orbit, and triggers all the time on the EM build after a number of subsequent runs, without any apparent reason (deadlines are not actually missed, thread usage displayed is nominal) - TM store dumpes will not be cancelled anymore if the transmitter is off. The dump can be cancelled with an OFF command, and the PTME is perfectly capable of dumping without the transmitter being on. - Transmitter state is not taken into account anymore for writing into the PTME. The PTME should be perfectly capable of generating a valid CADU, even when the transmitter is not ON for any reason. - OFF mode is ignores in TM store for determining whether a store will be written. The modes will only be used to cancel a transfer. - Handling of multiple RWs in the ACS Controller is improved and can be changed by parameter commands. - The Directory Listing direct dumper now has a state machine to stagger the directory listing dump. This is required because very large dumps will overload the queue capacities in the framework. - The PUS Service 8 now has larger queue sizes to handle more action replies. The PUS Service 1 also has a larger queue size to handle a lot of step replies now. - Moved PDU `vcc` and `vbat` variable from auxiliary dataset to core dataset. - Tweak TCP/IP configuration: Only the TCP server will be included on the EM. For the FM, no TCP/IP servers will be included by default. ## Added - Add the remaining system modes. - PLOC MPSoC flash read command working. - BPX battery handler is added for EM by default. - ACU dummy HK sets - IMTQ HK sets - IMTQ dummy now handles power switch - Added some new ACS parameters - Enabled decimation filter for the ADIS GYRs - Enabled second low-pass filter for L3GD20H GYRs ## Fixed - CFDP low level protocol bugfix. Requires `fsfw` update and `tmtc` update. - Compile fix if SCEX is compiled for the EM. - Set up Rad Sensor chip select even for EM to avoid SPI bus issues. - Correct ADIS Gyroscope type configuration for the EM, where the 16507 type is used instead of the 16505 type. - Host build is working again. Added reduced live TM helper which schedules the PUS and CFDP funnel. - PLOC Supervisor handler now has a power switcher assigned to make PLOC power switching work without an additional PCDU power switch command. - The PLOC Supervisor handler now waits for the replies to the `SET_TIME` command to verify working communication. - The PLOC MPSoC now waits 10 cycles before going to on. These wait cycles are necessary because the MPSoC is not ready to process commands without this additional boot time. - Fixed correction for `GPS Altitude` in case the sensor data is out of the expected bonds. - PLOC MPSoC special communication is now scheduled, which allows flash read and flash write commands to work. - Fixed the MPSoC flash write command. - Added missing ACS parameter. - HK TM store: The HK store dump success event was triggered for cancelled HK dumps. - When a PUS parsing error occured while parsing a TM store file, the dump completion procedure was always executed. - Some smaller logic fixes in the TM store base class - Fixed usage of C `abs` instead of C++ `std::abs`, which results in MTQ commands not being scaled correctly between 1Am² and 0.2Am². - TCS Heater Handler: Always trigger mode event if a heater goes `OFF` or `ON`. This event might soon replace the `HEATER_WENT_ON` and `HEATER_WENT_OFF` events. - Prevent spam of TCS controller heater unavailability event if all heaters are in external control. - TCS heater switch info set contained invalid values because of a faulty `memcpy` in the TCS controller. There is not crash risk but the heater states were invalid. - STR datasets were not set to invalid on shutdown. - Fixed usage of quaternion valid flag, which does not actually represent the validity of the quaternion. - Various fixes for the pointing modes of the `ACS Controller`. All modes should work now as intended. - The variance for the ADIS GYRs now represents the used `-3` version and not the `-1` version - CFDP funnel did not route packets to live channel VC0 # [v2.0.5] 2023-05-11 - The dual lane assembly transition failed handler started new transitions towards the current mode instead of the target mode. This means that if the dual lane assembly never reached the initial submode (e.g. mode normal and submode dual side), it will transition back to the current mode, which miht be `MODE_OFF`. Furthermore, this can lead to invalid internal states, so the subsequent recovery handling becomes stuck in the custom recovery sequence when swichting power back on. - The dual lane custom recovery handling was adapted to always perform proper power switch handling irrespective of current or target modes. # [v2.0.4] 2023-04-19 ## Fixed - The dual lane assembly datasets were not marked invalid properly on OFF transitions. # [v2.0.3] 2023-04-17 - eive-tmtc: v3.1.1 ## Fixed - Fixed shadowing within the `SafeCtrl`, which prevented actuator commands to be calculated during eclipse phase. - EM build idle mode fixes for RW dummy. ## Added - Add `MGT_OVERHEATING` event and fallback to system SAFE mode if the MGT is overheating for whatever reason. ## Changed - Low-pass filters can no longer be executed if no actual data is available. # [v2.0.2] 2023-04-16 - Bump patch version to 2. # [v2.0.1] 2023-04-16 - eive-tmtc: v3.1.0 # [v2.0.0] 2023-04-16 This is the version which will fly on the satellite for the initial launch phase. - q7s-package: v2.5.0 - eive-tmtc: v3.0.0 - `wire` library is now on version v10.7 as well. ## Added - Added `mv`, `cp` and `rm` action helpers for the core controller for common filesystem operations. - Extended directory listing helpers. There is now a directory listing helper which dumps the directory listing as an action data reply immediately. For smaller directory listings, this allows a listing without requiring a separate file downlink (which also has not been implemented yet) ## Changed - The directory listing action commands now allow compressing of either the target output file for the directory listing into file action command, or compression in the helper which dumps the directory listing directly. # [v1.45.0] 2023-04-14 - q7s-package: v2.5.0 - eive-tmtc: v3.0.0 - STR firmware was updated to v10.7. `wire` library still needs to be updated. ## Fixed - Small fix for `install-obsw-yocto.sh` script - Bugfix for STR firmware update procedure where the last remaining bytes were not written properly. - Bugfix for STR where an invalid reply was received for special requests like firmware updates. - Bugfix for shell command executors in command controller which lead to a crash. - Important bugfix for STR solution set. Missing STR mode u8 parameter. - Fix for STR image download. - Possible fix for STR image upload. - Fixed regression where the reply result for ACS board and SUS board devices was set to FAILED even when going to OFF mode. In that case, it has to be set to OK so the device handler can complete the OFF transition. ## Changed - STR `wire` library updated to v10.3. Submodule renamed to `sagittactl`. - Custom FDIR for TMP1075 sensors. The device handlers reject `NEEDS_RECOVERY` health commands anyway, so it does not really make sense to use the default FDIR. - Reject `NEEDS_RECOVERY` health commands for the heater health devices. - Adapted some queue sizes so that EM startup works without queue errors - Event Manager: 120 -> 160 - UDP TMTC Bridge: 50 -> 120 - TCP TMTC Bridge: 50 -> 120 - Service 5: 120 -> 160, number of events handled in one cycle increased to 80 - EM: PCDU dummy is not a device handler anymore, but a custom power switcher object. This avoids some issues where the event manager could not send an event message to the PCDU dummy because the FDIR event queue was too small. ## Added - Add a way for the MAX31865 RTD handlers to recognize faulty/broken/off sensor devices. - Add parameter interface for core controller - Allow setting the preferred SD card via the new parameter interface of the core controller with domain ID 0 and unque ID 0. - Added action commands to reset the PDEC. Also added autonomous reset handling for the PDEC, because there is no way so send TCs with a faulty PDEC. - Added `I2C_REBOOT` and `PDEC_REBOOT` events for EIVE system component to ensure ground gets informed. ## ACS - Commanding from ACS Controller is now enabled. - Safe Controller was reverted to FLP Design. This also introduces safe mode strategies. They contain what the controller does and which data it uses. The controller will automatically based on the available data decide on which strategy to use. If a strategy is undesirable (e.g. the MEKF should not be used) this can be handeld via setting parameters. # [v1.44.1] 2023-04-12 - eive-tmtc: v2.22.1 ## Fixed - Bugfixes and improvements for SDC state machine. Internal state was not updated correctly due to a regression, so commanding the SDC state machine externally lead to confusing results. - Heater states array in TCS controller was too small. - Fixed a bug in persistent TM store, where the active file was not reset of SD card switches. SD card switch from 0 to 1 and vice-versa works without errors from persistent TM stores now. - Add a way for the SUS polling to detect broken or off devices by checking the retrieved temperature for the all-ones value (0x0fff). - Better reply result handling for the ACS board devices. - ADIS1650X initial timeout handling now performed in device handler. - The RW assembly and TCS board assembly now perform proper power switch handling for their recovery handling. ## Changed - Added additional logic for SDC state machine so that the SD cards are marked unusable when the active SD card is switched or there is a transition from hot redundant to cold redundant mode. This gives other tasks some time to register the SD cards being unusable, and therefore provides a way for them to perform any re-initialization tasks necessary after SD card switches. - TCS controller now only has an OFF mode and an ON mode - The TCS controller pauses operations related to the TCS board assembly (reading sensors and the primary control loop) while a TCS board recovery is on-going. - Allow specifying custom OBSW update filename. This allowed keeping a cleaner file structure where each update has a name including the version - The files extracted during an update process are deleted after the update was performed to keep the update directory cleaner. ## Added - TCS controller: SUBMODE_NO_HEATER_CTRL (1) added for ON mode. If this submode is commanded, all heaters will be switched off and then no further heater commanding will be done. - Fixed a bug in persistent TM store, where the active file was not reset of SD card switches. SD card switch from 0 to 1 and vice-versa works without errors from persistent TM stores now. # [v1.44.0] 2023-04-07 - eive-tmtc: v2.22.0 ## Added - Special I2C recovery handling. If the I2C bus is unavailable for whatever reason, the EIVE system component will power-cycle all I2C devices by first going to the OFF/BOOT mode, then power-cycling the 3V3 stack and rebooting the battery, and finally going back to safe mode. If this does not restore the bus, a full reboot will be performed. This special sequence can be commanded as well. ## Fixed - RW Assembly: Correctly transition back to off when more than 1 devices is OFF. Also do this when this was due to two devices being marked faulty. - RW dummy and STR dummy components: Set/Update modes correctly. - RW handlers: Bugfix for TM set retrieval and special request handling in general where the CRC check always failed for special request. Also removed an unnecessary delay for special requests. - RW handlers: Polling is now disabled for RWs which are off. ## Changed - RW shutdown now waits for the speed to be near 0 or for a OFF transition countdown to be expired before going to off. # [v1.43.2] 2023-04-05 ## Changed - Adapted HK data rates to new table for LEOP SAFE mode. - GPS controller HK is now generated periodically as well. - Better mode combination checks for assembly components. This includes: - IMTQ assembly - Syrlinks assembly - Dual Lane Assembly - RWs are no longer commanded by the ACS Controller during safe mode. Instead the RW speed command is set to 0 as part or the `doShutDown` of the RW handler. ## Fixed - Dual lane assemblies: Fix handling when health states are overwritten. Also add better handling when some devices are permanent faulty and some are only faulty. In that case, only the faulty devices will be restored. - ACS dual lane assembly: Gyro 3 helper mode was assigned to the Gyro 2 mode. # [v1.43.1] 2023-04-04 ## Fixed - Generic HK handling: Bug where HKs were generated a lot more often than required. This is the case if a device handler `PERFORM_OPERATION` step is performed more than once per PST cycle. - Syrlinks now goes to `_MODE_TO_ON` when finishing the `doStartUp` transition. ## Changed - Doubled GS PST interval instead of scheduling everything twice. - Syrlinks now only has one `PERFORM_OPERATION` step, but still has two communication steps. - PCDU components only allow setting `NEEDS_RECOVERY`, `HEALTHY` and `EXTERNAL_CONTROL` health states now. TMP sensor components only allow `HEALTHY` , `EXTERNAL_CONTROL`, `FAULTY` and `PERMANENT_FAULTY`. - TCS controller now does a sanity check on the temperature values: Values below -80 C or above 160 C are ignored. # [v1.43.0] 2023-04-04 - q7s-package: v2.4.0 - eive-tmtc: v2.21.0 ## Added - Version of thermal controller which performs basic control tasks. - PCDU handler can now command switch of the 3V3 stack (switch ID 19) - Set STR dev to OFF in assembly when it is faulty. - STR: Reset data link layer and flush RX for regular commands and before performing special commands to ensure consistent start state ## Fixed - PTME was not reset after configuration changes. - GPS health devices: ACS board assembly not reacts to health changes. - STR COM helper: Reset reply size after returning a reply ## Changed - Poll threshold configuration of the PTME IP core is now configurable via a parameter command and is set to 0b010 (4 polls) instead of 0b001 (1 poll) per default. - EIVE system fallback and COM system fallback: Perform general subsystem handling first, then event reception, and finally any new transition handling. - IMTQ MGM integration time lowered to 6 ms. This relaxes scheduling requirements a bit. - PCDU handler switcher HK set now has additional 3V3 switcher state HK. # [v1.42.0] 2023-04-01 - eive-tmtc: v2.20.1 - q7s-package: v2.3.0 ## Changed - SCEX filename updates. Also use T as the file ID / date separator between date and time. - COM TM store and dump handling: Introduce modes for all 4 TM VC/store tasks. The OFF mode can be used to disable ongoing dumps or to prevent writes to the PTME VC. This allows cleaner reset handling of the PTME. All 4 VC/store tasks were attached to the COM mode tree and are commanded as part of the COM sequence as well to ensure consistent state with the CCSDS IP core handler. - Added `PTME_LOCKED` boolean lock which is used to lock the PTME so it is not used by the VC tasks anymore. This lock will be controlled by the CCSDS IP core handler and is locked when the PTME needs to be reset. Examples for this are datarate changes. - Simulate real PCDU in PCDU dummy by remembering commandes switch change and triggering appropriate events. Switch feedback is still immediate. - GomSpace devices are polled with a doubled frequency. This speeds up power switch commanding. ## Fixed - Bugfix for side lane transitions of the dual lane assemblies, which only worked when the assembly was directly commanded. - Syrlinks Handler: Bugfix so transition command is only sent once. - SCEX file name bug: Create file name time stamp with `strftime` similarly to how it's done for the persistent TM store. ## Added - Added GPS0 and GPS1 health device which are used by the ACS board assembly when deciding whether to change to the other side or to go to dual side directly. Setting the health devices to faulty should also trigger a side switch or a switch to dual mode. # [v1.41.0] 2023-03-28 - eive-tmtc: v2.20.0 - q7s-package: v2.2.0 ## Fixed - Proper Faulty/External Control handling for the dual lane assemblies. - ACS board devices: Go to ON mode instead of going to NORMAL mode directly. - SUS device handlers: Go to ON mode on startup instead of NORMAL mode. - Tweaks for the delay handling for the persistent TM stores. This allows pushing the full high datarate when dumping telemetry. The most important and interesting fix is that there needs to be a small delay between the polling of the GPIO. Polling the GPIO without any delay consecutively can lead to scheduling issues. - Bump FSFW for fix of `ControllerBase` class `startTransition` implementation. - Bump FSFW for possible fix of `PowerSwitcherComponent`: Initial mode `MODE_UNDEFINED`. ## Changed - Enabled periodic hosuekeeping generation for release images. - Project structure (linux and mission folder) is subsystem centric now. # [v1.40.0] 2023-03-24 - eive-tmtc: v2.19.4 - q7s-packasge: v2.1.0 - Bumped fsfwgen for bugfix: Event translation can deal with duplicate event names now. ## Fixed - PAPB busy polling now implemented properly with an upper bound of how often the PAPB is allowed to be busy before returning the BUSY returnvalue. Also propagate and check for that case properly. Ideally, this will never be an issue and the PAPB VC interface should never block for a longer period. - The `mekfInvalidCounter` now resets on setting the STR to faulty. - Improve the SD lock handling. The file handling does not need to be locked as it is only handled by one thread. ## Added - The event `MEKF_RECOVERY` will be triggered in case the `MEKF` does manage to recover itself. - The persistent TM stores now have low priorities and behave like background threads now. This should prevent them from blocking or slowing down the system even during dumps (at least in theory). - STR: Fix weird issues on datalink layer data reception which sometimes occur. - Syrlinks FDIR: Fully allow FDIR to do more recoveries. Assembly should take care of preventing the switch to go off. - Allow dual lane assembly side switches. ## Changed - Rework FSFW OSALs to properly support regular scheduling (NICE priorities) and real-time scheduling. - STR: Move datalink layer to `StrComHandler` completely. DLL is now completely hidden from device handler. - STR: Is now scheduled twice in ACS PST. - `StrHelper` renamed to `StrComHandler`, is now a `DeviceHandlerIF` directly and does not wrap a separate UART COM interface anymore. - TCS: Local pool variables are members now. - Syrlinks: Create dedicated COM helper which uses a ring buffer to parse the Syrlinks datalinklayer and should make communication more reliable even on high CPU loads. - Syrlinks: Two communication cycles per PST. - Fine-tuning of various task priorities. - The CSP router now is scheduled with the `SCHED_RR` policy and the same priority as the PCDU handlers as well. - Change project structure to be more subsystem centric for ACS and COM. # [v1.39.1] 2023-03-22 ## Fixed - Bugfix for STR: Some action commands wrongfully declined. - STR: No normal command handling while a special request like an image upload is active. - RS485 data line was not enabled when the transmitter was switched on. # [v1.39.0] 2023-03-21 Requires firmware update for new FPGA design where reset line is routed into the software. 2 relevant PRs: - https://egit.irs.uni-stuttgart.de/eive/q7s-vivado/pulls/53 - https://egit.irs.uni-stuttgart.de/eive/q7s-vivado/pulls/54 eive-tmtc: v2.19.3 ## Added - Added NaN and Inf check for the `MEKF`. If these are detected, the `AcsController` will reset the `MEKF` on its own once. This way, there will not be an event spam and operators will have to look into the reason of wrong outputs. To restore the reset ability, an action command has been added. - Contingency handling for non-working I2C bus bug. Reboot the system if the I2C is not working. ## Fixed - Fixed transition for dual power lane assemblies: When going from dual side submode to single side submode, perform logical commanding first, similarly to when going to OFF mode. - GPS time is only set to valid if at least one satellite is in view. ## Changed - Bugfixes for STR mode transitions: Booting to mode ON with submode FIRMWARE now works properly. Furthermore, the submode in the NORMAL mode now should be 0 instead of some ON mode submode. - Updated GYR bias values to newest measurements. This also corrects the ADIS values to always consit of just one digit. - The CCSDS IP core handler now exposes a parameter to enable the priority select mode for the PTME core. This mode prioritizes virtual channels with a lower index, so for example the virtual channel (VC0) will have the highest priority, while VC3 will have the lowestg priority. This mode will be enabled by default for now, but can be set via the parameter IF with the unique parameter ID 0. The update of this mode requires a PTME reset. Therefore, it will only be performed when the transmitter is off to avoid weird bugs. - Connect and handle reset line for the PTME core in the software now. - Safe mode controller failure event now only triggers once per minute. # [v1.38.0] 2023-03-17 eive-tmtc: v2.19.2 ## Fixed - SA deployment file handling: Use exceptionless API. - Fix deadlock in SD card manager constructor: Double lock of preferred SD card lock. ## Added - Failure of Safe Mode Ctrl will now trigger an event. As this can only be caused by sensors not being in the correct mode, the assemblies should take care that this will never happen and no additional FDIR is needed. ## Changed - Telemetry relevant datasets for the RWs are now set invalid and partially reset on shotdown. - I2C PST now has a polling frequency of 0.4 seconds instead of 0.2 seconds. - GS PST now has a polling frequency of 0.5 seconds instead of 1 second. - Bump FSFW: merged upstream. - Move BPX battery scheduling to ACS PST to avoid clashes with IMTQ scheduling / polling # [v1.37.2] 2023-03-14 - Changed `PoolManager` bugfix implementation in the FSFW. - Some tweaks for IPC and TM store configuration # [v1.37.1] 2023-03-14 This version works on the EM as well. eive-tmtc: v2.19.1 ## Added - Added `EXECUTE_SHELL_CMD` action command for `CoreController` to execute arbitrary Linux commands. - Added some missing PLOC commands. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/462 - Add `PcduHandlerDummy` component. - Added parameter for timeout until `MEKF_INVALID_MODE_VIOLATION` event is triggered. ## Fixed - Pointing control of the `AcsController` was still expecting submodes instead of modes. - Limitation of RW speeds was done before converting them to the correct unit scale. - The Syrlinks task now has a proper name instead of `MAIN_SPI`. - Make whole EIVE system initial transition work for the EM. This was also made possible by always scheduling most EIVE components instead of tying the scheduling to preprocessor defines. - Store more TCP und UDP packets. - Bump fsfw for small tweak in local datapool manager: Re-enable or re-disabling dataset generation will not fail anymore. - Bump FSFW to simplify HK helpers: Was previously buggy and did not allow to use minmum sampling frequency. Now both diagnostics and HK can use minimum sampling frequency for requesting HK - Bump FSFW to allow the TC/TM/IPC pools to spill to higher pools/pool pages. ## Changed - Set `OBSW_ADD_TCS_CTRL` to 1. Always add TCS controller now for both EM and FM. - generators module: Bump `fsfwgen` dependency to v0.3.1. The returnvalue CSV files are now sorted. - generators module: Always generate subsystem ID CSV files now. - The COM subsystem is now not commanded by the EIVE system anymore. Instead, a separate RX_ONLY mode command will be sent at OBSW boot. After that, commanding is done autonomously by the COM subsystem internally or by the operator. This prevents the transmitter from going off during fallbacks to the SAFE mode, which might not always be desired. - Initialize switch states to a special `SWITCH_STATE_UNKNOWN` (2) variable. Return `PowerSwitchIF::SWITCH_UNKNOWN` in switch state getter if this is the state. - Wait 1 second before commanding SAFE mode. This ensures or at least increases the chance that the switch states were initialized. - Dual Lane Assemblies: The returnvalues of the dual lane power state machine FSM are not ignored anymore. # [v1.37.0] 2023-03-11 eive-tmtc: v2.18.1 ## Added - `SensorProcessing` now includes an FDIR for GPS altitude. If the measured GPS altitude is out of bounds of the range defined in the `AcsParameters`, the altitude defaults to an altitude set in the `AcsParameters`. - `AcsController` will now never command a RW speed larger than the maximum allowed speed. ## Fixed - `PAPB_EMPTY_SIGNAL_VC1` GPIO was not set up properly. - Fix for heater names: HPA heater (index 7) is now the Syrlinks heater. - `AcsParameters` setter were previously all for scalar parameters. Now vector and matrix parameters use their respective setters. - Several `AcsController` components had their own implementation of `AcsParameters`. This resulted in those parameters not being updated, while the actual ones were updated. All instances of `AcsParameters` not belonging to `AcsController` are eiter removed or replaced by pointer instances. - Instead of updating the `gsTargetModeControllerParameters`, the `targetModeControllerParameters` were updated. - Instead of updating the `idleModeControllerParameters`, the `targetModeControllerParameters` were updated. - Fixed Idle Mode Controller never calling `ptgLaw` and therefore never calculating control values. - Fixed wrong check on wether file used for persistant boolean flag on successful still existed. - Scaling of MTQ Cmds now scales the current values to command with the current values and not the values of the last step, which would result in undefined behaviour. - Solved naming collision between file used for solar array deployment and confirmation for ACS for solar array deployment. - Fixed that scaling of RW torque would result in a zero vector unless the maximum value was exceeded. - Bias for the GYR data was substracted within the wrong rf (sensor rf vs body rf). ## Changed - Refactored TM pipeline to optimize usage of the PTME and communication downlink bandwidth. This was done by moving the dumping of TMs to the VCs into separate threads with permanent loops. These threads are then able to process high TM loads on demand. The PUS TM funnel will route PUS packets to the approrpiate persisten TM stores and then demultiplex the TM to all registered TM destinations as before. - Service 5 now handles 40 events per cycle instead of 15 - Remove periodic SD card check. The file system is not mounted read-only anymore when using an ext4 filesystem - The `detumbleCounter` now does not get hard reset anymore, if the critical rate does not get violated anymore. Instead it is incrementally reset. - The RW antistiction now only takes the RW speeds in account. - ACS CTRL transition to DETUBMLE is now done in CTRL internally. No system level handling necessary anymore. - More fixes and improvements for SD card handling. Extend SD card setup in core controller to create full initial state for SD card manager are core controller as early as possible, turn execution of setup file update blocking. This might solve the issue with the SD card manager sometimes blocking for a long time. - Request raw MTM measurement twice for IMTQ, might reduce number of times measurement could not be retrieved. - Event manager and event service have larger queues now: 45 -> 120 for Service 5, 80 -> 120 for event manager - ACS mode changes: The ACS CTRL submodes are now modes. DETUBMLE is now submode of SAFE mode. - EIVE system now tracks the mode of the ACS subsyste in SAFE mode. # [v1.36.0] 2023-03-08 eive-tmtc: v2.17.2 ## Added - Star Tracker Assembly - New `REBOOT_COUNTER` and `INDIVIDUAL_BOOT_COUNTS` events. The first contains the total boot count as a u64, the second one contains the individual boot counts as 4 u16. Add new core controller action command `ANNOUNCE_BOOT_COUNTS` with action ID 3 which triggers both events. These events will also be triggered on each reboot. ## Changed - Persistent TM stores will now create new files on each reboot. - Fast ACS subsystem commanding: Command SUS board consecutively with other devices now - Star Tracker: Use ground confguration for EM and flight config for FM by default. ## Fixed - Command TCS controller off first for TCS subsystem transition to off. - Health handling for TCS board assembly - Mode fallback from IDLE mode to SAFE mode due to ACS errors/events now works properly for the ACS subsystem - Bugfix in IDLE transition for system. - `std::filesystem` API usages: Avoid exceptions by using variants which return an error code instead of throwing exceptions. - GPS fix loss was not reported if mode is unset. - Star Tracker: OFF to NORMAL transition now posssible. Requires FSFW bump which sets transition source modes properly for those transitions. FSFW PR: https://egit.irs.uni-stuttgart.de/eive/fsfw/pulls/131 - Star Tracker JSON initialization is now done during object initization instead of redoing it when building a command. This avoids missed deadlines issues in the ACS PST. - Allow arbitrary submodes for dual lane boards to avoid FDIR reactions of subsystem components. Bump FSFW to allow this. - PUS 15 was not scheduled - Transmitter timeout set to 2 minutes instead of 15 minutes. This will prevent to discharge the battery in case the syrlinks starts transmitting due to detection of unintentional bitlock. This happened e.g. on ground when the uplink to the flying latop was established. - ACS system components are now always scheduled (EM specific) # [v1.35.1] 2023-03-04 ## Fixed - ACS Board Assembly FDIR: Prevent permanent SAFE mode fallbacks by introducing special health handling. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/418/files - Watchdog fixes - IMTQ timing fixes ## Added - Add IMTQ assembly # [v1.35.0] 2023-03-04 eive-tmtc: v2.16.4 ## Added - Improved the OBSW watchdog by adding a watch functionality. The watch functionality is optional and has to be enabled specifically by the application being watched by the watchdog when starting the watchdog. If the watch functionality is enabled and the OBSW has not pinged the watchdog via the FIFO for 2 minutes, the watchdog will restart the OBSW service via systemd. The primary OBSW will only activate the watch functionality if it is the OBSW inside the `/usr/bin` directory. This allows debugging the system by leaving flashed or manually copied debugging images 2 minutes to start the watchdog without the watch functionality. ## Fixed - Bumped FSFW: `Countdown` and `Stopwatch` use new monotonic clock API now. - IMTQ: Various fixes, most notably missing buffer time after starting MGM measurement and corrections for actuator commanding. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/430 # [v1.34.0] 2023-03-03 eive-tmtc: v2.16.3 This might include the fix for the race condition where CPU usage jumped to 200 %. The race condition was traced to the `Countdown` class, more specifically to the `getUptime` function where the `/proc/uptime` file is read. ## Changed - The SD card prefix is now set earlier inside the `CoreController` constructor - The watchdog handling was moved outside the `CoreController` into the main loop. - Moved polling of all SPI parts to the same PST. - Allow quicker transition for the EIVE system component by allowing consecutive TCS and ACS component commanding again. - Changed a lot of lock guards to use timeouts - Queue sizes of TCP/UDP servers increased from 20 to 50 - Significantly simplified and improved lock guard handling in TCS and ACS board polling tasks. ## Fixed - IMTQ: Sets were filled with wrong data, e.g. Raw MTM was filled with calibrated MTM measurements. - Set RM3100 dataset to valid. - Fixed units in calculation of ACS control laws safe and detumble. - Bump FSFW for change in Countdown: Use system clock instead of reading uptime from file to prevent possible race condition. - GPS: No fix considered a fault now after 30 minutes instead of 5 hours. - SUS Assembly FDIR: Prevent permanent SAFE mode fallbacks by introducing special health handling. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/418/files ## Added - Added Syrlinks Assembly object to allow recovery handling and to fix faulty FDIR behaviour. # [v1.33.0] 2023-03-01 eive-tmtc: v2.16.2 ## Changed - Move ACS board polling to separate worker thread. - Move SUS board polling to separate worker thread. ## Fixed - Linux GPS handler now checks the individual `*_SET` flags when analysing the `gpsd` struct. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/400 # [v1.32.0] 2023-02-24 eive-tmtc: v2.16.1 ## Fixed - ADIS1650X: Added missing MDL_RANG pool entry for configuration set - Bumped FSFW for bugfix in health service: No execution complete for targeted health announce command. - Removed matrix determinant calculation as part of the `MEKF`, which would take about 300ms of runtime - Resetting the `MEKF` now also actually resets its stored state - Bumped FSFW for bugfix in destination handler: Better error handling and able to process destination folder path. ## Changed - Added basic persistent TM store for PUS telemetry and basic interface to dump and delete telemetry. Implementation is based on a timed rotating files, with the addition that files might be generated more often if the maximum file size of 8192 bytes is exceeded. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/320/files - Commented out commanding of actuators as part of the `AcsController` - Collection sets of the `AcsController` now get updated before running the actual ACS algorithm - `GpsController` now always gets scheduled - The `CoreController` now initializes the initial clock from the time file as early as possible (in the constructor) if possible, which should usually be the case. ## Added - Added basic persistent TM store for PUS telemetry and basic interface to dump and delete telemetry. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/320/files - `ExecutableComIfDummy` class to have a dummy for classes like the RTD polling class. - Added `AcsController` action command to confirm solar array deployment, which then deletes two files - Added `AcsController` action command to reset `MEKF` - `GpsCtrlDummy` now initializes the `gpsSet` - `RwDummy` now initializes with a non faulty state # [v1.31.1] 2023-02-23 ## Fixed - ADIS1650X configuration set was empty because the local pool variables were not registered. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/402 - ACS Controller: Correction for size of MEKF dataset and some optimization and fixes for actuator control which lead to a crash. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/403 # [v1.31.0] 2023-02-23 eive-tmtc: v2.16.0 ## Fixed - Usage of floats as iterators and using them to calculate a uint8_t index in `SusConverter` - Removed unused variables in the `AcsController` - Remove shadowing variables inside ACS assembly classes. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/385 ## Changed COM PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/364 * Moved transmitter timer and handling of carrier and bitlock event from CCSDS handler to COM subsystem * Added parameter command to be able to change the transmitter timeout * Solves [#362](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/362) * Solves [#360](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/360) * Solves [#361](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/361) * Solves [#386](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/386) - All `targetQuat` functions in `Guidance` now return the target quaternion (target in ECI frame), which is passed on to `CtrlValData`. - Moved polling sequence table definitions and source code to `mission/core` folder. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/395 ## Added - `MEKF` now returns an unique returnvalue depending on why the function terminates. These returnvalues are used in the `AcsController` to determine on how to procede with its perform functions. In case the `MEKF` did terminate before estimating the quaternion and rotational rate, an info event will be triggered. Another info event can only be triggered after the `MEKF` has run successfully again. If the `AcsController` tries to perform any pointing mode and the `MEKF` fails, the `performPointingCtrl` function will set the RWs to the last RW speeds and set a zero dipole vector. If the `MEKF` does not recover within 5 cycles (2 mins) the `AcsController` triggers another event, resulting in the `AcsSubsystem` being commanded to `SAFE`. - `MekfData` now includes `mekfStatus` - `CtrlValData` now includes `tgtRotRate` # [v1.30.0] 2023-02-22 eive-tmtc: v2.14.0 Event IDs for PDEC handler have changed in a breaking manner. ## Added and Fixed - PDEC: Added basic FDIR to limit the number of allowed TC interrupts and to allow complete task lockups in the case an IRQ is immediately re-raised by the PDEC module. This is done by only allowing a certain number of handled IRQs (whether they yield a valid TC or not) during time windows of one second. Right now, 800 IRQs/TCs are allowed per time window. This time window is reset if a TC reception timeout after 500ms occurs. TBD whether the maximum allowed number will be a configurable parameter. If the number of occured IRQs is exceeded, an event is triggered and the task is delayed for 400 ms. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/393 # [v1.29.1] 2023-02-21 ## Fixed - Limit number of handled messages for core TM handlers: - https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/391 - https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/390 - https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/389 - HeaterHandler better handling for faulty message reception Issue: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/issues/388 - Disable stopwatch in MAX31865 polling task # [v1.29.0] 2023-02-21 eive-tmtc: v2.13.0 ## Changed - Refactored IMTQ handlers to also perform low level I2C communication tasks in separate thread. This avoids the various delays needed for I2C communication with that device inside the ACS PST. (e.g. 1 ms delay between each transfer, or 10 ms integration delay for MGM measurements). ## Added - Added new heater info set for the TCS controller. This set contains the heater switch states and the current draw. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/351 - The HeaterHandler now exposes a mode which reflects whether the heater power is on or off. It also triggers mode events for its heater children objects which show whether the specific heaters are on or off. The heater handler will be part of the TCS tree. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/351 # [v1.28.1] 2023-02-21 ## Fixed - Patch version which compiles for EM - CFDP Funnel bugfix: CCSDS wrapping was buggy and works properly now. - PDEC: Some adaptions to prevent task lockups on invalid FAR states. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/393 - CMakeLists.txt fix which broke CI/CD builds when server could not retrieve full git SHA. - Possible regression in the MAX31865 polling task: Using a `ManualCsLockGuard` for reconfiguring and then polling the sensor is problematic, invalid sensor values will be read. CS probably needs to be de-asserted or some other HW/SPI specific issue. Letting the SPI ComIF do the locking does the job. ## Changed - Add `-Wshadow=local` shadowing warnings and fixed all of them - Updated generated CSV files: Support for skip directive and explicit "No description" info string - The polling threads for actuator polling now have a slightly higher priority than the ACS PST to ensure timing requirements are met. ## Added - git post checkout hook which initializes and updates the submodules automatically. # [v1.28.0] 2023-02-17 eive-tmtc: v2.12.7 ## Added - In case the ACS Controller does recognize more than one RW to be invalid and therefore not available, it does not perform pointing control but aborts shortly after `sensorProcessing`. If the problem persits for 5 ACS cycles, the `MULTIPLE_RW_INVALID` event is triggered, which invokes the transition of the `AcsSubsystem` to safe mode. ## Changed - Igrf13 model vector now outputs as uT instead of nT - Changed timings for `AcsPst`, more time for sun sensors. - Added values for MGM sensor fusion - Refactored RW Software: Polling runs in separate thread, all RWs are now polled in under 60 ms. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/381 - Bumped FSFW to allow initializing child modes in `SubsystemBase` derived objects. ## Fixed - Fixed values for GYR sensor fusion - Fixed speed types for `rwHandlingParameter` - Pseudo inverse used for allocating torque to RWs and RW antistiction now actually consider the state of the RWs # [v1.27.2] 2023-02-14 Reaction Wheel handling was determined to be (quasi) broken and needs to be fixed in future release to be usable by ACS controller. eive-tmtc: v2.12.6 ## Added - Function for the ACS controller to command MTQ and RWs called by all subroutines - RwHandler now handles commanding of RW speeds via RwSpeedActuationSet - Tracing supports which allows checking whether threads are running as usual. ## Changed - Remove 2 TCS threads. - Move low level polling into ACS PST, move high level device handlers into TCS system task. - ActCmds now returns command vectors as integers as required by the actuators and scales them to the appropriate range - All RwHandler are now polled five times per ACS cycle - Remove 2 TCS threads. Move low level polling into ACS PST, move high level device handlers into TCS system task. - Further reduce number of threads: 1. Remove PUS low priority task, move assigned threads to the generic system task 2. Group events and verification tasks into PUS high priority task 3. Group all other components into PUS medium priority task 4. Add SCEX device handler to PL task, remove dedicated thread ## Removed - lwgps dependency not compiled anymore, is not used # [v1.27.1] 2023-02-13 ## Fixed - Fix for SPI ComIF: Set transfer size to 0 for failed transfers - Fix shadowing issue with locks in MAX31865 low level handler # [v1.27.0] 2023-02-13 eive-tmtc: v2.12.5 Added EIVE system top mode component. Currently, only SAFE and IDLE mode are implemented, and the system does not do more than commanding TCS and ACS into the correct modes. It does not have a lot of mode tracking capabilities yet because the ACS controller might alternate between SAFE and DETUMBLE. It takes around 5-10 seconds for the EIVE system to reach the SAFE mode. The new system is used at software boot to command the satellite into safe mode on each reboot. This behaviour can be disabled with the `OBSW_SWITCH_TO_NORMAL_MODE_AFTER_STARTUP` flag. ## Added - New EIVE system component like explained above. ## Changed - The satellite now commands itself into SAFE mode on each reboot, which triggers a lot of events on each SW reboot. The TCS subsystem will commanded to NORMAL mode immediately while the ACS subsystem will be commanded to SAFE mode. The payload subsystem will be commanded OFF. - `RELEASE_BUILD` flag moved to `commonConfig.h` - The ACS subsystem transitions are now staggered: The SUS board assembly is commanded as a separate transition. This reduces the risk of long bus lockups. - No INFO mode event translations for release builds to reduce number of printouts. - More granular locking inside the MAX31865 low level read handler. ## Fixed - More DHB thermal module fixes. - ACS PST frequency extended to 0.8 seconds in debug builds to avoid SPI bus lockups. - Local datapool fixes for the `PlocSupervisorHandler` # [v1.26.4] 2023-02-10 eive-tmtc: v2.12.3 ## Fixed - `SdCardManager.cpp` `isSdCardUsable`: Use `ext4` instead of `vfat` to check read-only state. # [v1.26.3] 2023-02-09 eive-tmtc: v2.12.2 ## Added - First version of a TCS controller heater control loop, but the loop is disabled for now. ## Changed - Reworked dummy handling for the TCS controller. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/325 - Generator scripts now generate files for hosted and for Q7S build. ## Fixed - GPS Controller: Set fix value to 0 when switching off to allow `GPS_FIX_CHANGE` to work when switching the GPS back on. # [v1.26.2] 2023-02-08 ## Changed - ACS Controller scheduling is now configurable via the `eive/definitions.h` file. Also ensured that scheduling is done in big blocks to reduce risk of missed deadlines. - Replaced chained locks for polling new sensor data to the `AcsController`. - Made TM store even larger. ## Fixed - Bugfix for PDEC handler which causes the PIR register of the PDEC to never be cleared on release builds. The dummy variable used to read the register needs to be declared volatile to avoid compiler optimizations. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/374 - Bumped FSFW for fix of possible memory leaks in TCP/IP TMTC bridge inside the FSFW. ## Added - Create TCS controller for EM build. # [v1.26.1] 2023-02-08 - Initialize parameter helper in ACS controller. # [v1.26.0] 2023-02-08 eive-tmtc v2.12.1 ## Changed ### ACS - Readded calibration matrices for MGM calibration. - Added calculation of satellite velocity vector from GPS position data - Added detumble mode using GYR values - Added inertial pointing mode - Added nadir pointing mode - Added ground station target mode - Added antistiction for RWs - Added `sunTargetSafe` differentiation for LEOP - Added check for existance of `SD_0_SKEWED_PTG_FILE` and `SD_1_SKEWED_PTG_FILE` to determine which `sunTargetSafe` to use - Added `gpsVelocity` and `gpsPosition` to `gpsProcessed` - Removed deprecated `OutputValues` - Added `HasParametersIF` to `AcsParameters` - Added `ReceivesParameterMessagesIF` and `ParameterHelper` to `AcsController` - Updated `AcsParameters` with actual values and changed structure - Sun vector model and magnetic field vector model calculations are always executed now - `domainId` is now used as identifier for parameter structs - Changed onboard GYR value handling from deg/s to rad/s ## Fixed - Single sourcing the version information into `CMakeLists.txt`. The `git describe` functionality is only used to retrieve the git SHA hash now. Also removed `OBSWVersion.h` accordingly. - Build system: Fixed small bug, where the version itself was stored as the git SHA hash in `commonConfig.h`. This will be an empty string now for regular versions. - Bump FSFW for important fix in PUS mode service. ### ACS - Bugfixes in 'SensorProcessing' where previously MGM values would be calibrated before being transformed in body RF. However, the calibration values are in the body RF. Also fixed the validity flag of 'mgmVecTotDerivative'. - Fixed calculation of model sun vector - Fixed calculation of model magnetic field vector - Fixed MEKF algorithm - Fixed several variable initializations - Fixed several variable types - Fixed use of `sunMagAngleMin` for safe mode - Fixed MEKF not using correct `sampleTime` - Fixed assignment of `SUS0` and `SUS6` calibration matrices due to wiring being mixed up - Various smaller bugfixes # [v1.25.0] 2023-02-06 eive-tmtc version: v2.12.0 ## Changed - Updated Subsystem mode IDs to avoid clashes with regular device handler modes. ## Fixed - `GpsHyperionLinuxController`: Fix `gpsd` polling by continuously calling `gps_read` in one cycle until it does not have any data left anymore. Also, the data is now polled in a permanent loop, where controller handling is done on 0.2 second timeouts. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/368 # [v1.24.0] 2023-02-03 - eive-tmtc v2.10.0 - `AcsSubsystem`: OFF, SAFE and DETUMBLE mode were tested. Auto-transitions SAFE <-> DETUMBLE tested as well. Other modes still need to be tested. ## Fixed - `AcsController`: Parameter fix in `DetumbleParameter`. - Set GPS set entries to invalid on MODE_OFF command. - Bump FSFW for bugfix in `setNormalDatapoolEntriesInvalid` where the validity was not set to false properly - Fixed usage of uint instead of int for commanding MTQ. Also fixed the range in which the ACS Ctrl commands the MTQ to match the actual commanding range. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/363 - Regression: Revert swap of SUS0 and SUS6. Those devices are on separate power lines. In a future fix, the calibration matrices of SUS0 and SUS6 will be swapped. ## Changed - Update ACS scheduling to represent the actual ACS design. There is one ACS PST now for all timing sensitive ACS operations. In the debug builds, the new ACS polling sequence table will have a period of 0.6 seconds, but will remain 0.4 seconds for the release build. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/365 - `ACS::SensorValues` is now an ACS controller member to reduce the risk of stack overflow. - ACS Subsystem Sequence Mode IDs updated. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/365 TMTC PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/130 - Update and tweak ACS subsystem to represent the actual ACS design - Event handling in the ACS subsystem for events triggered by the ACS controller. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/365 # [v1.23.1] 2023-02-02 TMTC rev: 15adb9bf2ec68304a4f87b8dd418c1a8353283a3 ## Fixed - Bugfix in FSFW where the sequence flags of the PUS packets were set to continuation segment (0b00) instead of unsegmented (0b11). - Bugfix in FSFW where the MGM RM3100 value Z axis data was parse incorrectly. PR: https://egit.irs.uni-stuttgart.de/eive/fsfw/pulls/123 # [v1.23.0] 2023-02-01 TMTC version: v2.9.0 ## Changed - Bumped FSFW to include improvements and bugfix for Health Service. The health service now supports the announce all health info command. PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/725 ## Fixed - Bumped FSFW to include fixes in the time service. PR: https://egit.irs.uni-stuttgart.de/fsfw/fsfw/pulls/726 - The CCSDS handler starts the transmitter timer each time it is commanded to MODE_ON and times out the timer when the handler is commanded to MODE_OFF - If the timer is timed out the CCSDS handler will disable the TX clock which will cause the syrlinks to got to standby mode - PDEC handler now parses the FAR register also in interrupt mode # [v1.22.1] 2023-01-30 ## Changed - Updated FSFW to include addition where the `SO_REUSEADDR` option is set on the TCP server, which should improve its ergonomics. # [v1.22.0] 2023-01-28 TMTC version: v2.6.1 ## Added - First COM subsystem implementation. It mirrors the Syrlinks mode/submodes but also takes care of commanding the CCSDS handler. It expects the Syrlinks submodes as mode commands. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/358 - The CCSDS handler has has a new submode (3) to configure the default datarate. - Default datarate parameter commanding moved to COM subsystem. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/358 # [v1.21.0] 2023-01-26 TMTC version: v2.5.0 Syrlinks PR: PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/353 ## Fixed - The `OBSW_SYRLINKS_SIMULATED` flag is set to 0 for for both EM and FM. - MGM4 handling in ACS sensor processing: Bugfix in `mulScalar` operation PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/354 - Subsystem ID clash: CORE subsystem ID was the same as Syrlinks subsystem ID. ## Changed - Startracker temperature set and PCDU switcher set are diagnostic now - `SyrlinksHkHandler` renamed to `SyrlinksHandler` to better reflect that it does more than just HK and is also responsible for setting the TX mode of the device. - `SyrlinksHandler`: Go to startup immediately because the Syrlinks device should always be on by default. - `SyrlinksHandler`: Go to normal mode at startup. ## Added - The Syrlinks handler has submodes for the TX mode now: RX Only (0), RX and TX default datarate (1), RX and TX Low Rate (2), RX and TX High Rate (3) and TX Carrier Wave (4). The submodes apply for both ON and NORMAL mode. The default datarate can be updated using a parameter command (domain ID 0 and unique ID 0) with value 0 for low rate and 1 for high rate. - The Syrlinks handler always sets TX to standby when switching off - The Syrlinks handler triggers a new TX_ON event when the transmitter was switched on successfully and a TX_OFF event when it was switched off successfully. - Startracker temperature set and PCDU switcher set are diagnostic now - The CCSDS handler can accept mode commands now. It accepts ON and OFF commands. Furthermore it has a submode for low datarate (1) and high datarate (2) for the ON command. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/352 # [v1.20.0] 2023-01-24 ## Added - The Q7S SW now checks for a file named `boot_delay_secs.txt` in the home directory. If it exists and the file is empty, it will delay for 6 seconds before continuing with the regular boot. It can also try to read delay seconds from the file. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/340. - Basic TCS Subsystem component. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/319 - Expose base set of STR periodic housekeeping packets ## Changed - Moved some PDEC/PTME configuration to `common/config/eive/definitions.h` PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/319 - The ACS Controller Gyro Sets (raw and processed) and the MEKF dataset are diagnostics now. - Bumped FSFW for Service 11 improvement which includes size and CRC check for contained TC - Syrlinks module now always included for both EM and FM - SA Deployment: Allow specifying the switch interval and the initial channel. This allows testing the new deployment procedure where each channel is burned for half of the whole burn duration. It also allows burning only one channel for the whole burn duration. The autonomous mechanism was adapted to burn each channel for half of the burn time by default. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/347 TMTC PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/127 - `Max31865RtdLowlevelHandler.cpp`: For each RTD device, the config is now re-written before every read. This seems to fix some issue with invalid temperature sensor readings. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/345 ## Fixed - `GyroADIS1650XHandler`: Updated handler to determine correct dynamic range from `RANG_MDL` register readout. This is because ADIS16505-3BMLZ devices are used on the ACS board and the previous range setting was wrong. Also fixed a small error properly set internal state on shut-down. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/342 - Syrlinks Handler: Read RX frequency shift as 24 bit signed number now. Also include validity handling for datasets. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/350 - `GyroADIS1650XHandler`: Changed calculation of angular rate to be sensitivity based instead of max. range based, as previous fix still left an margin of error between ADIS16505 sensors and L3GD20 sensors. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/346 # [v1.19.0] 2023-01-10 ## Changed - 5V stack is now off by default ## Fixed - PLOC SUPV: Minor adaptions and important bugfix for UART manager - Allow cloning and building the hosted OBSW version without proprietary libraries, which also avoids the need to have a Gitea account. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/337 ## Added - First version of ACS controller PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/329 - Allow commanding the 5V stack internally in software PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/334 - Add automatic 5V stack commanding for all connected devices PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/335 # [v1.18.0] 2022-12-01 ## Changed - PLOC Supervisor: Changes baudrate to 921600 - Renamed `/dev/ul-plsv` to `/dev/ploc_supv`, is not a UART lite anymore - Renamed `/dev/i2c_eive` to `/dev/i2c_pl` and `/dev/i2c-2` to `/dev/i2c_ps`. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/328 # [v1.17.0] 2022-11-28 ## Added - PLOC Supervisor Update: Update SW to use newest PLOC SUPV version by TAS PR 1: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/316 PR 2: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/324 PR 3: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/326 # [v1.16.0] 2022-11-18 - It is now possible to compile Linux components for the hosted build conditionally PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/322 - ACS Subsystem. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/231 - Payload Subsystem. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/231 - Add IRQ mode for PDEC handler. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/310 - Extended TM funnels to allow multiple TM recipients. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/312 - DHB: Transitions to normal mode now possible directly, which simplifies subsystem implementations PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/313 - MAX3185 Low Level Handler and Device Handler: Simplifications and bugfixes to allow switching off without triggering unrequested replies PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/313 - Add remaining missing TMP1075 device handlers. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/318 # [v1.15.0] 2022-10-27 - Consistent device file naming - Remove rad sensor from EM build, lead to weird bugs on EM which prevented `xsc_boot_copy` from working properly - CFDP closure handling is now working PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/307 - Safety mechanism for SD card handling on graceful reboots PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/308 - Solar Array Deployment handler update PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/305 - IMTQ updates as preparation for ACS controller expansion PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/306 - P60 Module: Reduce number of set IDs, use same set IDs for core, auxiliary and config HK set across the three PCDU modules # [v1.14.1] 11.10.2022 - Various bugfixes and regression fixes - General file handling at program initialization now works properly again - Scratch buffer preferred SD card handling works again - Use scoped locks in TCS controller to avoid deadlocks # [v1.14.0] 10.10.2022 - Provide full SW update capability for the OBSW. This includes very basic CFDP integration, a software update procedure specified in detail in the README and some high level commands to make this easier for operators. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/302 - Update for FSFW: `HasReturnvaluesIF` class replaced by namespace `returnvalue` - Add some GomSpace clients as a submodule dependency. Use this dependency to deserialize the GomSpace TM tables - Add API to retrieve GomSpace device parameter tables PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/287 - Add API to save and load GomSpace config tables PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/293 - Increase number of allowed consescutive action commands from 3 to 16 PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/294 - Fix for EM SW: Always create ACS Task - Added Scex device handler and Scex uart reader PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/303 - ACS Subsystem. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/228 # [v1.13.0] 24.08.2022 - Added first version of ACS Controller with gathers MGM data in a set - Some tweaks for IMTQ handler # [v1.12.1] 05.07.2022 - Disable periodic TCS controller HK generation by default # [v1.12.0] 04.07.2022 ## Added - Dummy components to run OBSW without relying on external hardware PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/266 - Basic Thermal Controller PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/266 - PUS11 TC scheduler PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/259 - Regular reboot command PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/242 - Commands for individual RTD devices PR: https://egit.irs.uni-stuttgart.de/eive/eive-tmtc/pulls/84 - `RwAssembly` added to system components. Assembly works in principle, issues making 4 consecutives RWs communicate at once.. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/224 - Adds a yocto helper script which is able to install the release build binaries (OBSW and Watchdog) into the `q7s-yocto` repository as long as the `q7s-package` or `q7s-yocto` repo was cloned in the same directory the EIVE OBSW repo. This makes updating the root filesystem a lot easier. It also creates and installs a version file. PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/248 - Create the generic image by default for the Q7S build. The unique binary with the username appended at the end is created as a side-product now PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/248 ## Fixed - `q7s-cp.py` bugfix PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/256 - Generator scripts output now produce platform-independent artifacts PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/267 ### Heater - Adds `HealthIF` to heaters. Heaters are own system object with queues now which allows to set them faulty. - SW will attempt to shut down heaters which are on but marked faulty - Some simplifications for `HeaterHandler`, use `std::vector` instead of `std::unordered_map` for primary container. Using the heater indexes 0 to 7 allows to use natural array indexing - Some additional input sanity checks in `executeAction` PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/236 ## Changed - CCSDS handler improvements PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/268 - Build unittest as default side product of hosted builds PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/244 - Let CI/CD build host build and run unittest side product in same step - Catch2 pre-installed in CI/CD docker container, Xiphos SDK installed in CI/CD docker PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/247 - Sun Sensors have names denoting their location and poiting in the satellite now PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/245 - Better RTD names denoting their purpose (and location consequently) PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/246 # [v1.11.0] ## Fixed - Host build working again ## Added - Custom Syrlinks FDIR which disabled most of the default FDIR functionality PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/232 - Custom Gomspace FDIR which disabled most of the default FDIR functionality - Custom Syrlinks FDIR which disabled most of the default FDIR functionality ## Changed - PCDU handler only called once in PST, but can handle multiple messages now PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/221 Bugfix: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/235 - Update rootfs base of Linux, all related OBSW changes - Add `/usr/local/bin` to PATH. All shell scripts are there now - Add Syrlinks and TMP devices to Software by default - Update GPS Linux Hyperion Handler to use socket interface. Still allows switching back to SHM interface, but the SHM interface is a possible cause of SW crashes - Updated code for changed FSFW HAL GPIO API: `readGpio` prototype has changed PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/240 and https://egit.irs.uni-stuttgart.de/eive/fsfw/pulls/76 ### GPS PRs: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/239 - Rename GPS device to `/dev/gps0` - Use gpsd version 3.17 now. Includes API changes ### EM and FM splitup & Build Workflow improvements PR: https://egit.irs.uni-stuttgart.de/eive/eive-obsw/pulls/238 - Split up `bsp_q7s` in separate EM and FM build with module loading set to different default values. The EM object factory is unique which allows building a parallel setup with dummy components - All major BSPs have an own `OBSWConfig.h.in` file which simplifies the file significantly - Renamed Q7S primary build folders: - `cmake-build-debug-q7s` for primary development build - `cmake-build-release-q7s` for primary release build - `cmake-build-debug-q7s-em` for primary development build of the EM software - `cmake-build-release-q7s-em` for primary release build of the EM software - Refactored Q7S helper script handling. It is now intended and preferred to copy the environment script to the same folder level as the `eive-obsw` and source it. This will also add the path containing the shell helper scripts to `PATH` - The actual helper shell scripts were renamed as well to `q7s--.sh` # [v1.10.1] Version bump # [v1.10.0] For all releases equal or prior to v1.10.0, see [milestones](https://egit.irs.uni-stuttgart.de/eive/eive-obsw/milestones)