[RSP-03] SatNOGS decoder support for GMSK beacon (MR submitted, CI pipeline issue)

Hello SatNOGS community,

I’m a member of the Rymansat Project and working on enabling the decoding of our upcoming satellite RSP-03 in SatNOGS.

RSP-03 transmits telemetry beacons using GMSK modulation at 437.050 MHz, 9600bps.
To support this in SatNOGS, I have prepared and submitted a Merge Request (MR) to the satnogs-decoders repository.

:link: Merge Request:

Included files:

  • decode_rsp03_gmsk.py: Python decoder for the beacon packets
  • decode_rsp03_cw.py: Simple CW decoder (for minimal support)
  • README.md

However, the CI pipeline failed with the following message:

“Unable to create pipeline – Identity verification is required in order to run CI jobs.”

As this is a forked repo from a free GitLab account, I’m unable to complete identity verification or run CI jobs.


:hammer_and_wrench: Request:

  • Could someone from the SatNOGS team please review the MR manually, or suggest how to proceed under these restrictions?
  • If necessary, I can also provide the yaml files and WAV sample separately.

Thank you very much for your help and support.

Best regards,
czh00361
(Rymansat Project)

3 Likes

Hi czh00361,

Thank you for your contribution.

Can you sign off your merge request?

However, to support the telemetry beacons in SatNOGS you have to add a decoder in kaitai struct format (.ksy) if you want SatNOGS to be able to decode frames.

73
Daniel

2 Likes

Hello SatNOGS team and community,

We have submitted the following Merge Requests to support the RSP-03 satellite on the SatNOGS Network:

  • !837: YAML files for SatNOGS observation (gmsk/cw modes)
  • !470: Python decoders for GMSK and CW beacons, plus a rsp03_beacon.ksy Kaitai Struct definition

All commits are signed off according to the contributing guidelines.
The Python scripts pass flake8, yapf, and isort checks via a scoped CI pipeline.

Please kindly review them at your convenience.
We would be happy to respond to any questions or suggestions.

Thank you for your support,
czh00361 / RSP-03 ground station team

(日本語補足)リーマンサットプロジェクトのRSP-03衛星のサポートです。CW/GMSKのテレメトリ受信を想定しています。HK Beacom Formatの3つのパターンがあり、kitaiとPythonの2つのファイルを保管しました。また検証用のWAVファイルも保管しました

2 Likes

Some quick notes, do note that I’m not reviewing on -decoders.
the ksy does not need _beacon in the file name.
you cannot add random new directories to the root, like /rsp03/, I think these belong in /contrib/rsp03/. The same goes for the /test_samples/, depending on their size.
no .gitkeep’s
no rewrite of .gitlab-ci.yml

3 Likes

Hi czh00361,

I’ll only comment on rsp03_beacon.ksy.

As far as I understand, you want to let SatNOGS decode the three GMSK beacon types as in RSP-03_GMSK_HKBeaconSample.wav.

Let us take a look at the second HK beacon type:

94 A6 62 B2 A0 82 60 94 A6 62 B2 9E B2 E1 03 F0 00 18 4A 80 01 29 4E 7E 68 78 C0 02 11 00 0C 68 2F 03 00 00 00 00 0B 52 61 2D 98 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

You have to handle the AX.25 header (destination and source callsign, ctl and pid) in the .ksy decoder file.
To do so, please take a look at ax25frames.ksy.
[Line 68 has a little bug, it should be 0x1f.]

Your current decoder file says that beacon type 2 (I’m just guessing it’s the byte in bold in the hex data) has a payload size of 18 bytes and parses it like this:

packet2:
doc: “Housekeeping data (timestamp, temperature, status)”
seq:
- id: timestamp_os
type: u8
doc: “Telemetry OS Time [ms]”
- id: timestamp_sys
type: u8
doc: “Telemetry System Time [ms]”
- id: mobc_temp
type: s1
doc: “MOBC Temperature [°C]”
- id: system_status
type: u1
doc: “System Status”

If you want the decoder to start parsing the payload after the packet_id, you must tell it to do so.

Are you sure 18 bytes is correct?

Additionally, but this is a SatNOGS thing, you also have to include into the .ksy file which value with what name to make accessible to the SatNOGS database.
This is done by the :field lines in the first part of the ksy file, as you may already noticed in ax25frames.ksy.

Daniel

3 Likes

Hello :slight_smile:

Some few words in addition of what @dl7ndr said regarding the kaitai file. Once you will have handled AX25, please add a valid instruction on the callsign property to exclude bad/malformed frame being uploaded to SatNOGS DB (you can find multiple exemple on how to do it inside the ksy folder. Here for instance ksy/enso.ksy · master · librespacefoundation / SatNOGS / satnogs-decoders · GitLab line 141).

Regarding the MR itself, you should only add the ksy file. You can also add sample in the contrib folder (contrib · master · librespacefoundation / SatNOGS / satnogs-decoders · GitLab) if you want or add your name in the README file but that is it. Please remove the rsp-3 folder, gitkeep files, gitlab-ci.yml file and like i said previously, if you want to provide sample, put it in the contrib folder :slight_smile:

Here is an example of what an MR on satnogs-decoder should looks like : https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/-/merge_requests/463/diffs

  • 1 kaitai file
  • Name/callsign whatever in the README file (optional)
  • Only 1 commit (with Signed-off-by:)

I hope my explanations are clear :slight_smile: Thanks for providing a decoder for your satellite :slight_smile:

3 Likes

Dear LSF CORE Contributors: deckbsd, dl7ndr, SA2KNG

Thank you for your thorough review.

  • I have now removed the test_samples WAV file.
  • .gitlab-ci.yml has been reverted to avoid unnecessary modifications.
  • The decoder has been moved under contrib/, with proper formatting and cleaned identifiers.
  • I also added the import: ax25frames.ksy directive in the .ksy file
    (referencing: ksy/ax25frames.ksy · master · librespacefoundation / SatNOGS / satnogs-decoders).

Regarding the comment “Are you sure 18 bytes is correct?”,
you are absolutely right — that was my mistake. I have corrected the .ksy accordingly.

Please let me know if there’s anything else to address. :person_bowing:

Thank you again for your support.

1 Like

Request for review of MR !471: Add rsp03.ksy and cleanup obsolete files

Hello,

I have submitted a merge request (!471) to the satnogs-decoders repository to support RSP-03 satellite telemetry. The changes include:

  • Added rsp03.ksy for decoding full GMSK AX.25 telemetry.
  • Removed obsolete test WAV files and decoder scripts.
  • Moved files to follow project directory conventions.
  • All commits are signed and pass CI checks.

The pipeline has passed successfully: :white_check_mark:
I would appreciate it if someone could review and merge the MR when convenient.

Merge Request link: Add rsp03.ksy and remove obsolete test files (!471) · Merge requests · librespacefoundation / SatNOGS / satnogs-decoders · GitLab

Thanks in advance!

Best regards,
czh00361 (RymanSat Project)

日本語訳(参考)

RSP-03衛星のテレメトリ対応のため、satnogs-decodersにMerge Request(!471)を提出しました。CIも通過済みです。お時間あるときにレビュー・マージをお願いできれば幸いです。

Hi,
looking at MR 471, the ksy file was moved to contrib, this was not what I meant.
all decoders belongs in /ksy, other examples, python scripts etc are welcome in /contrib/rsp03 or similar.
Something odd happened with your rebase, I think it was made into some merge and ended up inside the MR of INNOSAT16.
now, there’s several ways to reset this, but make sure the master is up to date and branch from that. if you have problems pushing, you can use --force to overwrite the remote branch.
normally you rebase the branch on master to make it up to date and put your commit on top of that.
make sure it’s only one commit with everything needed.
hope this helps.

Could you send me the rsp03.ksy to take a look on it?

Dear SA2KNG

Thanks , I’ve now moved rsp03.ksy into the /ksy directory and removed the older version from /contrib/rsp03/.

Also, AX.25 structure is now inlined directly inside rsp03.ksy and the file validates with the Kaitai compiler. Please review when convenient!

Best regards,
czh00361

Dear dl7ndr,

Thank you for your feedback. I’ve updated the rsp03.ksy file and moved it from contrib/rsp03/ to the correct location under the ksy/ directory, as per your guidance.

You can now find the updated version here:

:link: https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/-/blob/rsp03_signed_clean/ksy/rsp03.ksy

I also inlined the AX.25 frame definition instead of using the import feature, and removed the invalid imports block that caused build failures. I’ve tried to align the structure to follow the conventions used in other satellites like snuglite.ksy and ax25frames.ksy.

I suspect it might be due to an outdated or incorrect syntax when referencing the AX.25 type in the type field. I’m reviewing the inline ax25_frame definition and expression syntax now.

Any advice or examples from existing working decoders would be greatly appreciated.

Best regards,
czh00361

The provided link shows a 404 error.
But I found your rsp03.ksy here.

Under packet1 you are trying to parse 16 bytes of signed integer (s16). kaitai struct only supports 8 bytes (s8).
However, you are doing this 36 times. This would sum up to a at least 576 bytes packet. Did you mean 16 bits instead of bytes?

Under packet3 there are even s32 types.

Under packet2 there is a u5 type which is not supported by kaitai struct. You may use b40 (=5 x 8 bytes).
An also unsupported description is float.

At the beginning there are still the field: lines missing.

もう少し頑張ってください。

1 Like

Hi SatNOGS team,

I’ve submitted a Merge Request !472 that adds a new Kaitai Struct decoder file rsp03.ksy for the RSP-03 satellite.

It supports:

  • AX.25 encapsulation
  • GMSK beacon at 9600 bps
  • Packet 1, 2, and 3 structures

CI has passed successfully :white_check_mark:
I’m happy to get any feedback or suggestions from the community.

Merge Request: Add rsp03.ksy for GMSK beacon decoding (AX.25 included) (!472) · Merge requests · librespacefoundation / SatNOGS / satnogs-decoders · GitLab

Best regards,
czh00361

Could you send me the rsp03.ksy to take a look on it?

1 Like

Hmm ? It’s there in the MR.

2 Likes

Dear @SA2KNG @dl7ndr

Thank you for the interest.
Here’s the direct link to the rsp03.ksy file in the MR branch (feature/rsp03_clean):
https://gitlab.com/librespacefoundation/satnogs/satnogs-decoders/-/blob/feature/rsp03_clean/ksy/rsp03.ksy

Of course, the same file is already visible in the MR via the commit. Let me know if you have any questions or feedback.

Your link shows 404 error again.
I took the one from @SA2KNG.

Using the following beginning of the file, it at least throws no more error messages in ide.kaitai.org

meta:
  id: rsp03
  endian: le

seq:
  - id: ax25_frame
    type: ax25_frame
  - id: payload
    type: rsp03_payload

types:
  ax25_frame:
    seq:
      - id: ax25_header
        type: ax25_header

  ax25_header:
    seq:
      - id: dest_callsign_raw
        type: callsign_raw
      - id: dest_ssid_raw
        type: ssid_mask
      - id: src_callsign_raw
        type: callsign_raw
      - id: src_ssid_raw
        type: ssid_mask
      - id: ctl
        type: u1
      - id: pid
        type: u1

  callsign_raw:
    seq:
      - id: callsign_ror
        process: ror(1)
        size: 6
        type: callsign

  callsign:
    seq:
      - id: callsign
        type: str
        encoding: ASCII
        size: 6

  ssid_mask:
    seq:
      - id: ssid_mask
        type: u1
    instances:
      ssid:
        value: (ssid_mask & 0x1f) >> 1


  rsp03_payload:

Since all three beacon types have a 0x00 at the position for packet_type, the decoder doesn’t work.

1 Like

Dear dl7ndr SA2KNG san

!472 MR request done.
Thank you very much for your previous guidance and feedback regarding the RSP-03 decoder implementation.

I have updated the rsp03.ksy file to support AX.25 UI frames (PID 0xF0) with full structure as described in the documentation below. The decoder now includes:

  • Start Flag (0x7E), Control (0x03), PID (0xF0), and End Flag (0x7E)
  • FCS (CRC-16) validation field
  • Payload parsing based on packet_type values
  • Strict structure aligned with the standard AX.25 UI frame format
  • Verified on ide.kaitai.io

The decoder was validated successfully on ide.kaitai.io and passed all GitLab CI checks.

I kindly ask for your review and feedback when convenient.

Thank you again for your kind support and contributions to the SatNOGS community.

Best regards,
@czh00361

Merge Request: Add rsp03.ksy for GMSK beacon decoding (AX.25 included) (!472) · Merge requests · librespacefoundation / SatNOGS / satnogs-decoders · GitLab

The format structure was based on the reference:
:page_facing_up: https://qiita.com/OzoraKobo/items/e411705f2295d5a6f27d