Skip to content
Breaking Changes
================
- adds new field to `ros_acomms_msgs/SoundSpeedProfile`: `water_depth`. !130
- breaking changes in `tdma*`:
  - `TdmaStatus` message added field `slot_duration_seconds`. !123
  - __tdma__ slots can take a range for input. The data type is also upgraded from `int8` to `uint16`. Can now support up to __65535__ slots. !129
    - `TdmaStatus`, `TdmaScriptedStatus`, `TdmaSlottedAlohaStatus` and, `TdmaAdvancedStatus` have been updated:
      - `int8 current_slot` now: `uint16`
      - `int8 num_slots` now: `uint16` (*)does not apply to `TdmaStatus` which does not have this field)
  - `TdmaAdvancedStatus` message has new fields: !129 
    - `string[] this_cycle_modem_commands`: list of modem commands send this test cycle
    - `string[] last_cycle_modem_commands`: list of modem commands sent last test cycle
  - removed the unused dynamic reconfigure params from `tdma_advanced` (also effects `tdma_scripted` and `tdma_slotted_aloha` since they use `tdma_advanced`s' dynamic reconfigure method on top of their own). 
  - `tdma_node` will no longer run with a configuration that does not allow transmit because of padding and self imposed guard time. If intentional, this forces users to make use of `tdma_advanced`'s `software_mute` feature (this is the tested and maintained code path for software mute with TDMA). If unintentional, this draws attention to the configuration mistake immediately. !123
  - `tdma_scripted` will not transmit during its very first active slot after enabling a test plan (or when it is reloaded or changed with dynamic reconfigure). Burning the first slot means we can depend on the test plan order defined in the yaml file. !123
  - changes to: `TdmaAdvancedStatus.msg`, `TdmaScriptedStatus.msg`, `TdmaSlottedAlohaStatus.msg`. Switching from nested message types for super class, to a flat message type. e.g., `we_are_active`, etc.. is now at the top level of these messages. Previously they were nested in the super classes type. !123
    - `active_slots` changed field type from int8 to int8\[\].
    - `nav_slots` is now a list type (int8\[\])
    - `comms_slots` is now a list type (int8\[\])
    - `time_to_next_active` in the context of `tdma_slotted_aloha` it means time to next own slot or aloha slot (whichever is closest)
  - `GetNextPacketData.srv` changed `min_priority` to `minimum_priority` to match other calls. !123
  - `GetNextPacketData.srv` and `GetNextQueuedMessage.srv`, `minimum_priority` is type: `int8`. !123
  - All instances of `minimum_priority` and `priority` fields are now type `int8`. !123
- Breaking changes in `ros_acomms_modeling`:
  - `sim_transmission_loss` node: Renamed `bellhop_arrivals` parameter to `use_bellhop_for_latency` for clarity. !125

New Features / Improvements
===========================
- `tdma*` MAC nodes:
  - Added system in tdma super class (`manual_transmit_queue`) for sending modem NMEA messages manually to be queued by tdma and sent in active slot (in place of next packet) !117
  - Added `rospy-yaml-include` parser to `tdma_scripted` for test plan parsing. (!115)
  - !115 now layering scripted dynamic reconfigure for controls related to cycling rates.
  - `tdma_scripted_node` now supports sending arbitrary NMEA modem commands. !129
    - Adds the optional key `modem_commands` to a test block entry and the modem commands in the list will be published to `nmea_to_modem` before each transmit. Examples can be found in `ros_acomms_tests/launch/tdma_scripted_test_plan_modem_cmds.yaml`.
  -`active_slots`, `comms_slots`, `nav_slots` and, `aloha_slots` can be set with a range string (see notes) (!129)
  - New Node: `tdma_slotted_aloha` uses queue priority to gate traffic sent in the `aloha_slots`.  (see notes) (!123)
  - New `DynamicReconfigure` parameters for `tdma_scripted` (overlaid on `tdma_advanced` `DynamicReconfigure`) !123
    - `scripted_test_plan_enabled`, default True if `scripted_test_plan` yaml is passed
    - `scripted_test_plan_file`, filename for test plan yaml
  - New `DynamicReconfigure` parameters for `tdma_slotted_aloha` (overlaid on `tdma_advanced` `DynamicReconfigure`) !123
    - `aloha_slot_priority`
    - `aloha_slots_`, trailing '\_' for this dynamic reconfigure param. This allows changing the `aloha_slots` after launch.
    - `tdma_slotted_aloha` now has `~aloha_slots = []` by default for test cases !121
  - New test cases added: `test_tdma_extended.py` (!121),  `test_tdma_scripted.py` (cases added: (!121), `test_tdma_slotted_aloha.py` (!118)
- new features in `ros_acomms_modeling` for simualation:
  - Add utility to read SSPs from CSV files and use them in `sim_transmission_loss_node.py` (!119)
  - `sim_transmission_loss` sets depth in bellhop env on each ssp update when rosparam `~use_water_depth_from_ssp` is set to `True` (by default this is `False` to preserve the old behavior). (see notes) !130
  - updates to modem sim system: !126
    - added XST to `modem_sim`
    - more descriptive error messages, OWTT/latency and distance information
    - Ping replies that have timed out will now publish ping_reply on topic even though it does not have a transaction for it anymore. 
    - added feature to handle partial packets (which can happen when `sim_packet_performance_node/fixed_frame_error_rate` \>0.0)
    - interpolates the frame_success masks to the size of the packet being processed, finds the first bad frame and clears the rest of the packet (like `acomms_driver_node.py` then publishes the truncated packet)
    - `sim_packet_performance.py` now populates `miniframe_success` in `SimPacketPerformanceResponse`, currently hard coded to succeed (only the dataframe rate is being passed to this service call at the the moment)
  - Bounds checking on platform locations in `sim_transmission_loss`: !125
    - Added bounds checking on location inputs and print errors.
    - Automatically handle near-surface positions by clamping the minimum depth to 0.1m.
    - Handle 0 horizontal distance between modems (same lat/lon for both modems)
- new features in `packet_dispatch`:
  - `packet_dispatch` handles empty packets and zero padded packets (only effects logging) !126
  - Added error checking in codec config parser for multiple entries with the same ID.  Logs an error message but doesn't change behavior otherwise !124 
- Added hardware CI tests (using dual modem box) !114

Bugfixes
========
- sim_packets that are part of a ping transaction now get a shorter (and more realistic) 0.5s duration (!126)
- `tdma_node`, `tdma_slotted_aloha_node` added more informative error messages. 477f2dd0 
- `active_slots` was never allowed to be an empty list but, now the error is more clear and the condition is checked more explicitly. 477f2dd0 
  - if `active_slots` was previously set, tdma will keep the prior `active_slots` rather than raise an Exception (general M.O. only raise exc right away but once we have launched, do everything in our power to keep system up)
- `tdma_scripted` initialization fixes !122
  - #40 `tdma_scripted` will burn it's very first active slot IF there is an active test plan. This assures the rates/buffer sizes are cycled according to the test plan from the very first packet in the slot.
  - #40 `tdma_scripted` sets the parameters for the first transmit from the test plan rather than using values passed in launch for first TX
  - #40 when the test plan is toggled on from an off state (or it's re-read while running via dynamic reconf) the next active slot will be burned (in case the user toggled during an active slot. This keeps the code simple for handling this case and we won't activate a test plan mid slot)
- CI pipeline now uses tag: `pipeline_$CI_PIPELINE_ID` instead of `latest` to avoid issues when running multiple CI pipelines in parallel (!120, !121)
  - e.g., `ros_acomms-tests:latest` is now `ros_acomms-tests:pipeline_$CI_PIPELINE_ID`
- Fixed a bug that caused the `acomms_driver_node` to hang and require SIGTERM when the ROS master is shutdown before the `acomms_driver` node is able to get a `$CCCFQ,SRC` reply from the modem. (!116)