ut-issl / c2a-core

Satellite Flight Software: Command-Centric Architecture
MIT License
51 stars 10 forks source link

CCSDS周りのコードをcoreで管理する? #51

Closed meltingrabbit closed 12 months ago

meltingrabbit commented 2 years ago

概要

CCSDS周りのコードをcoreで管理する?

詳細

TCPacketまわりを各種OBCで管理するのがだるくなってきたので.
2nd OBCなどは,ビルド対象に含めなければいいだけなので.

close条件

方針が決まったら

関連

meltingrabbit commented 2 years ago

CCSDS周りの整理

今,結構ぐちゃってるので(だいぶまともにはなってきたが),core移植を前に,整理したい.

鈴本がCCSDSわからんので,通信系のレビューがほしい.

CCSDS周りはこれをみながら書いている:

space packetは

現 TCP

tlm cmd packetという意味でC2A初期から使われてそう.

C2Aの抽象化パケットCTCP (common tlm cmd packet) の実体.

space packetと同義なので, spacepacket.c/h 構造体名も SpacePacket に変更したい.
接頭辞は SP

データ長や,2nd headerはユーザー定義だが,ISSL標準として,策定したい.パラメタは,

テレメもコマンドもこれを使っていいんですよね?(2ndヘッダは異なるが.)

現 M_PDU

テレメトリ.

Multiplexing Protocol Data Unit?

であれば, multiplexing_protocol_data_unit.c/h 構造体名も MultiplexingProtocolDataUnit にしたい.
接頭辞は M_PDU.

現 TcpToMPdu

発破解体したい.が,優先度低

現 VCDU

テレメトリ.

virtual_channeldata Uunit.c/h にし,構造体名もVirtualChannelDataUnit にしたい.
接頭辞は VCDU

これの定義は, https://sma.jaxa.jp/TechDoc/Docs/JAXA-JERG-2-402.pdf にはないが,何を見ればい?
これだと, M_PDU は VCDUではなく, AOS TransferFrameに入っているように見える

現 TC Segment

コマンド.

https://sma.jaxa.jp/TechDoc/Docs/JAXA-JERG-2-401.pdf だと,ただの segment

TCつけとく?

だとすると,

tcsegment.c/h にし,構造体名も TcSegment としたい.
接頭辞は TCS

現 TC Frame

コマンド. TCはテレコマではなく,テレコマンド?(TC,ややこしい...)

tc_transferframe.c/h にし,構造体名も TcTransferFrame としたい.
接頭辞は TCTF

meltingrabbit commented 2 years ago

ISSLのあつかう複数のOBCにとって,この機能はcoreだが,OSSとしては,CCSDSの機能はそこまでcoreではないというのが難しいところ.CCSDS非準拠の衛星もおおい.

meltingrabbit commented 2 years ago

@yngyu @yanagida-kanta これ,以下の理由から進めたいんですが,やっぱ微妙ですかね?

なので,coreにいれつつ,使わない人はビルド対象から外してもらう,という運用で,どうでしょう?

core実装の仮定としては,

で,coreに移したら,ドキュメント化します.

meltingrabbit commented 2 years ago

ついでに,exec typeなどで macro cmdの表記が残ってるので,BLCになおしたい.

yngyu commented 2 years ago

common_tlm_cmd_packet なのに TCP がデフォルトなのは違和感がありますが、coreに移すのは良いと思います

meltingrabbit commented 2 years ago

common_tlm_cmd_packet なのに TCP がデフォルトなのは違和感があります

あれ?これなんで?(TCPはSpacePacketにrenameされます)

yngyu commented 2 years ago

なんか語感的に common って付いてる方がデフォルトっぽい... って思ったからです。良くわかってなかったんですが TCP と CTCP の使い分けってなんでしたっけ...? なんかそこら辺の定義ちゃんとしたい、みたいな issue があったのは覚えてるんですが

yngyu commented 2 years ago

あれでも common って付いてるってことは TCP の中にCTCP とか specific TCP とかあるって感じなんですかね... すいません言っててわからなくなってきました

meltingrabbit commented 2 years ago

CTCPはCCSDS関係なく,C2A内部でとびかうcmd, tlmの構造体定義.

で,TCPはCCSDSで規定された,コマンドテレメ定義.

んで,今は,C2A内部のテレコマもTCPでいいじゃんって使ってる感じ.でも2nd OBCにとっては特にTCP使う必要もないし,CCSDSの規定はユーザー定義領域もあるので,TCP自体はuser依存(現在もMOBCとAOBCで違う定義).

CTCPは,そういったTCPとか,その他のパケット定義を抽象化したもので,C2AではこのCTCPというものに対してデータ操作を行う,って感じ.

user側,具体的には,

https://github.com/ut-issl/c2a-core/blob/develop/Examples/minimum_user_for_s2e/src/src_user/CmdTlm/common_tlm_cmd_packet.c

でTCPをCTCPとしてアクセスするIFを定義してあげてる(つまりこれはuser依存.CTCPとしてたとえばHogePacketを使うなら,ここにHogePacketへのアクセスを書く)

yngyu commented 2 years ago

なるほど、理解しました。ありがとうございます

meltingrabbit commented 2 years ago

手始めに,一旦TCPだけcore移植するか.その仮定でexec typeなども整理しよう. https://github.com/ut-issl/c2a-core/issues/64 もあるし.

とはいえ,TCPのAPIDなどはどうしてもuser依存なので,そのあたりの切り出しはやらねばならん.ヘッダファイルのみならず,関数実装(TCPとCTCPのexec type変換とか)もあるので,.c側もuser/core分離せねばならんなぁ.

meltingrabbit commented 2 years ago

ひとまずTCPは移動しよう

https://github.com/ut-issl/c2a-core/issues/205

meltingrabbit commented 12 months ago

https://github.com/arkedge/c2a-core/issues/196 で続きはやる