Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

新packetと新C2A間通信に対応した GENERATE_TLM Cmdを検討し実装する #247

Closed
Tracked by #225 ...
meltingrabbit opened this issue Feb 8, 2022 · 16 comments
Assignees
Labels
help wanted Extra attention is needed priority::high priorityg high

Comments

@meltingrabbit
Copy link
Collaborator

meltingrabbit commented Feb 8, 2022

概要

新packetと新C2A間通信に対応した GENERATE_TLM Cmdを検討し実装する

詳細

  • 現在のはこれ
    • CCP_EXEC_STS Cmd_GENERATE_TLM(const CommonCmdPacket* packet)
      {
      static CommonTlmPacket ctp_;
      uint8_t category = CCP_get_param_from_packet(packet, 0, uint8_t);
      TLM_CODE id = (TLM_CODE)CCP_get_param_from_packet(packet, 1, uint8_t);
      uint8_t num_dumps = CCP_get_param_from_packet(packet, 2, uint8_t);
      int len;
      uint8_t dr_partition_mask = 0x1f; // 00011111b // FIXME: 一時的な対応
      uint8_t dest_flags_mask = 0xe0; // 11100000b // FIXME: 一時的な対応
      uint8_t dr_partition;
      ctp_dest_flags_t dest_flags;
      if (num_dumps >= 8)
      {
      // パケット生成回数の上限は8回とする。
      // 32kbpsでのDL時に8VCDU/secで1秒分の通信量。
      // これを超える場合は複数回コマンドを送信して対応する。
      return CCP_EXEC_ILLEGAL_PARAMETER;
      }
      // ADU生成
      // ADU分割が発生しない場合に限定したコードになっている。
      // TLM定義シート上で定義するADUはADU長をADU分割が発生しない長さに制限する。
      len = TF_generate_contents(id,
      ctp_.packet,
      TSP_MAX_LEN);
      // 範囲外のTLM IDを除外
      if (len == TF_NOT_DEFINED) return CCP_EXEC_ILLEGAL_PARAMETER;
      if (len < 0) return CCP_EXEC_ILLEGAL_CONTEXT; // TODO: lenがマイナスの値たちをどうするか?
      // TCPacketヘッダ設定
      // FIXME: Space Packet 依存を直す
      TSP_setup_primary_hdr(&ctp_, APID_MIS_TLM, (uint16_t)len);
      TSP_set_board_time(&ctp_, (uint32_t)(TMGR_get_master_total_cycle()));
      // FIXME: 他の時刻も入れる
      TSP_set_global_time(&ctp_, 0.0);
      TSP_set_on_board_subnet_time(&ctp_, 0);
      // FIXME: 他 OBC からのパケットは別処理する
      // FIXME: 一旦雑に category を処理してるが後でちゃんと直す
      dr_partition = (uint8_t)(category & dr_partition_mask);
      dest_flags = (uint8_t)( (category & dest_flags_mask) >> 5 );
      if (dest_flags == 0)
      {
      dest_flags = CTP_DEST_FLAG_RP;
      }
      TSP_set_dest_flgas(&ctp_, dest_flags);
      TSP_set_dr_partition(&ctp_, dr_partition);
      TSP_set_tlm_id(&ctp_, id);
      TSP_set_seq_count(&ctp_, TG_get_next_adu_counter_());
      // 生成したパケットを指定された回数配送処理へ渡す
      while (num_dumps != 0)
      {
      PH_analyze_tlm_packet(&ctp_);
      --num_dumps;
      }
      return CCP_EXEC_SUCCESS;
      }
    • C2A内のpacket標準としてCCSDS Space Packet を実装する.そして,Common Packet を抽象化する. #217 でcategoryがなくなったので,一時的な対応をしている
    • また,DR記録とテレメ配送が同時にできるように,設定している
  • 今後,これをどうしていくか考える.ポイントは
    • 新しいテレメトリフォーマットはこれ
    • https://github.com/ut-issl/c2a-core/blob/develop/Docs/Core/communication.md#secondary-header-telemetry
    • 既存の Cmd_GENERATE_TLM は後方互換性のために残す?
    • Tlm headerをすべて手打ちできる低レベルコマンドはつくる
      • Cmd_GT_GENERATE_TLM みたいな名前?
    • Destination Flags を打たなくていい便利コマンドを作る?
      • Cmd_GT_GENERATE_HK_TLM, Cmd_GT_GENERATE_MS_TLM, Cmd_GT_GENERATE_DR_TLM
      • DRだけ引数に DR Partition を追加
      • GENERATEって命名はどうなんだ?
  • 別OBCからのテレメトリパケットを取得し流すコマンドも作る
    • Cmd_GT_GENERATE_TLM_OF_OHTER_OBC ?
    • 命名考えたい...キャッシュ or bufferから吸い出しているイメージの命名.別にここでpacketを作ってるわけではないので.(MOBCで止めていたパケットを転送するだけ)
    • ボードを指定するための引数は,APID?enum?
    • これも,無印とHK, MS, DR を作る?

close条件

検討して実装したら

その他

これとときを同じくして, Tlm mgrも改修しないとね

@meltingrabbit meltingrabbit added help wanted Extra attention is needed priority::high priorityg high labels Feb 8, 2022
@meltingrabbit meltingrabbit self-assigned this Feb 8, 2022
@yngyu
Copy link
Contributor

yngyu commented Feb 8, 2022

  • 既存の Cmd_GENERATE_TLM は後方互換性のために残す?
    • 暫く残す(deprecated) で良いんじゃないでしょうか、その後の使い勝手次第で残すか消すか決めて良いと思います。
  • Tlm headerをすべて手打ちできる低レベルコマンドはつくる
    • Tlm Header 手打ちってどこまで指定しますか? Header とか 2nd header まで含めますか?
  • Destination Flags を打たなくていい便利コマンドを作る?
    • これは flag 複数あるので無しでいい気はします(今後ここらへんが変わると個別Generate_Tlmを変更しなければいけないのが面倒そう)
  • 別OBCからのテレメトリパケットを取得し流すコマンドも作る
    • MOBCだけ特別で、他は各コンポにコンポID割り振ってGENERATE_COMPO_TLM で良い気がします、というかコンポIDではなくAPIDで良い?

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Feb 8, 2022

Tlm headerをすべて手打ちできる低レベルコマンドはつくる

Destination Flags を打たなくていい便利コマンドを作る?

書き方悪かったね.Dest FlagsDR Partition です.

これ直打ちするモチベは,flagを複数あげて,DR記録しながらMS tlmとして下ろす,とかができるって感じ.

とはいえ,ほぼ使わない(使わず済むならつかいたくない)って感じなので,別途 dest flagごとのgenerate tlmコマンドほしいなぁって(そっちのほうがミスが少ない & コマンドファイル見たときに意図がわかりやすい)思ったんだけど,なくてもいいか.

そしたら

Cmd_TG_GENERATE_TLM ${tlm id} ${dest_flags} ${dr_partiton} ${送出回数}

って感じかしら?

@meltingrabbit
Copy link
Collaborator Author

既存の Cmd_GENERATE_TLM は後方互換性のために残す

これは残しましょうか

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Feb 8, 2022

MOBCだけ特別で、他は各コンポにコンポID割り振ってGENERATE_COMPO_TLM で良い気がします、というかコンポIDではなくAPIDで良い?

"コンポ" ってのが不明瞭な単語で,space pacektを出力しないコンポは,APIDはMOBCになるし,MOBCの普通のテレメと一緒なので普通に(新しく作るコマンドの方の) Cmd_GENERATE_TLM で大丈夫.

一方,space pacektを出力するAOBCとかは,パケットをMOBCでためていて,それを配送するためのコマンドが必要って意味かな.この場合,tlm idはMOBCとは独立なので,別途コマンドが必要.

って意味で, COMPO_TLM はちょっとミスリードだなあってのと, GENERATE してなくね? っていうのも悩みポイント.

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Feb 8, 2022

DRとの親和性考えて(DRからの再送,と別OBC packetのbufferからの再送って意味で)

Cmd_TG_REPLAY_TLM ${obc指定enum or APID} ${tlm id} ${dest_flags} ${dr_partiton} ${送出回数}

ってのは?

APID,複雑だしAPIDから特定のOBCを引っ張ってくるの今の構造だと大変なので(Cだとdict型がないので...),enumかなぁ...と

@yngyu
Copy link
Contributor

yngyu commented Feb 8, 2022

書き方悪かったね.Dest Flags と DR Partition です.
これ直打ちするモチベは,flagを複数あげて,DR記録しながらMS tlmとして下ろす,とかができるって感じ.
とはいえ,ほぼ使わない(使わず済むならつかいたくない)って感じなので,別途 dest flagごとのgenerate tlmコマンドほし いなぁって(そっちのほうがミスが少ない & コマンドファイル見たときに意図がわかりやすい)思ったんだけど,なくてもいいか.
そしたら
Cmd_GT_GENERATE_TLM ${tlm id} ${dest_flags} ${dr_partiton} ${送出回数}
って感じかしら?

あると便利ではあると思うんですが将来的にFlagが増えた時に2^n で種類が増えると嫌だなぁ... と思いました。

@yngyu
Copy link
Contributor

yngyu commented Feb 8, 2022

APID,複雑だしAPIDから特定のOBCを引っ張ってくるの今の構造だと大変なので(Cだとdict型がないので...),enumかなぁ...と

Enum作ってsubOBC叩くのとAPID経由でsubOBC叩くのって変わらなくないですか?APID持ってる = C2A 載っててTLM降ろせるでいい気がします

@yngyu
Copy link
Contributor

yngyu commented Feb 8, 2022

Cmd_TG_REPLAY_TLM ${obc指定enum} ${tlm id} ${dest_flags} ${dr_partiton} ${送出回数}

これで良いと思いますが、個人的にはちょっと性質が変わるのでMOBCのDRと subOBCからのbufferTLMは分けたい気がします(結局内部でDR叩くか、buffer 叩くかで変わってきて、内部関数変わるので)

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Feb 8, 2022

Enum作ってsubOBC叩くのとAPID経由でsubOBC叩くのって変わらなくないですか?

うん,変わんない.

enumだと,配列にできて,sub obcのtlm packet buffer叩くところをいい感じにできるなって思ったのと,APID長いなぁ...って思っただけなんだけど,新しいindex作るのはそれはそれで管理がめんどくさいし,今後の拡張考えたらAPIDにすべきなので,APIDにしますか.

これで良いと思いますが、個人的にはちょっと性質が変わるのでMOBCのDRと subOBCからのbufferTLMは分けたい気がします(結局内部でDR叩くか、buffer 叩くかで変わってきて、内部関数変わるので)

分ける予定よ.(一緒にするつもり無いよ)

DRはどのOBC packet入ってるかわからないし.(=DRはAPIDをしらない)

DRは引き続き,

Cmd_DR_REPLAY_TLM

の予定

@meltingrabbit
Copy link
Collaborator Author

tlm managerとの兼ね合いがちょっとめんどくさいなこれ.

Cmd_TG_REPLAY_TLM でAPIDが自分だったら Cmd_GENERATE_TLM に読み替えてほしいけど,それはそれでミスリーディングっていう...

@meltingrabbit
Copy link
Collaborator Author

CCP_EXEC_STS Cmd_TLM_MGR_REGISTER_HK_TLM_FOR_GENERATE_TLM(const CommonCmdPacket* packet);
CCP_EXEC_STS Cmd_TLM_MGR_REGISTER_HK_TLM_FOR_REPPLAY_TLM(const CommonCmdPacket* packet);
CCP_EXEC_STS Cmd_TLM_MGR_REGISTER_HK_TLM_FOR_REPLAY_DATA_RECORDER(const CommonCmdPacket* packet);

みたいにするしかないのか?

@meltingrabbit
Copy link
Collaborator Author

@meltingrabbit
Copy link
Collaborator Author

口頭で話したメモ

Cmd_GENERATE_TLM      : これまでまま
Cmd_TG_GENERATE_TLM   : 自分のOBCテレメ生成
  引数: tlm id
      : Dest type (for DR 保存,など)
      : Dest info
      : 生成回数
Cmd_TG_REPEAT(REPLAY)_TLM  : 2nd OBCのテレメバッファー再送
  引数: APID or APIDを示すenum?
      : tlm id
      : Dest type (for DR 保存,など)
      : Dest info
      : 生成回数
Cmd_DR_REPLAY_TLM: これまで(categoryなどは TG_GENERATE に準拠)

@meltingrabbit
Copy link
Collaborator Author

meltingrabbit commented Mar 16, 2023

Cmd_TG_REPEAT(REPLAY)_TLM

FORWARD がただしい,ということなので,動詞はこれで.

(repeater は,電気信号を複製してるイメージが強い)

@meltingrabbit
Copy link
Collaborator Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed priority::high priorityg high
Projects
None yet
Development

No branches or pull requests

2 participants