ut-issl / c2a-core Goto Github PK
View Code? Open in Web Editor NEWSatellite Flight Software: Command-Centric Architecture
License: MIT License
Satellite Flight Software: Command-Centric Architecture
License: MIT License
CMakeLists.txt を何とかする
全体的になんとかしたい.
非推奨表記などはなくしたい.
全体的に見直しが完了したら.
NA
Coreのみで開発(S2E build)できるように,ミニマムなuser部を入れる
#2 からの派生.
core のみで開発できるように,core をビルドし,最低限動かすのの必要な user 部をexample としていれる.
core単体でビルドできるようになったら.
NA
pythonで書かれたツール類に,フォーマッタ,リンタを入れる
c2a-coreのみならず, c2a-toolsも.
とはいえ,今まだtools類はもろもろ整ってないので,その後にやるべき.
入ったら.
ビルドCIの結果を,エラー,ワーニングともにreviewdogで表示させ,ワーニング時はCIを落としたい
C89のビルドCI (https://github.com/ut-issl/c2a-core/blob/114781a72a32161a9722fbb20d86def0bea9d981/.github/workflows/build_as_c89.yml) で
ただし,CIでビルドするとき,coreはuser配下でシンボリックリンクされているため,本来のリポジトリ上のパスとは違う場所のファイルを参照してしまっている.この状態でreviewdogに流し込むのは,なにか一工夫が必要そう?
できたら
BCLのdouble型引数を有効化して検証する
当時と若干仕様が変わっているので、ほかのxxx_prepare_paramに合わせて書き直し、SILSで検証を行う。
BCLでdoubleが扱えるようになったら
documentsを入れる
C2Aとは,各種tips,パラメタの説明,コーディングルールなどをいれる.
どこにどのように入れるかも議論する.
いれたら
src_core
をなんとかしたい
src/
src_core/
src_user/
という構造が適切ではないので,なんとかしたい.
なんとかなったら
NA
S2E単体ビルドできるよになったので,ワーニングを撲滅する
#pragma section
とかビルド結果がきれいになったら
とりあえずこのIssueでは-Wall
を倒す.倒し切ったら-Wextra
を追加して別の撲滅Issueを立てる.
SLの抜本改修 (Sequential Item)
現在,SLの登録のたびにSequential Itemが増えることを懸念してこれを廃止している(SL登録は普通のBCと同じようにしている).
このままでいいのか,SL登録時に何らかのラッパを噛ませる等で可読性を上げる改修を入れるのか?
現在のところ,鈴本にはアイデアはない.
なんとなくの方針が固まったら.
暫定的なREADMEを設定する
詳細は後で記載するとして,最低限の情報を記載したものを作る
READMEを設定できたら
NA
CIがコケたらマージできないようにする
どうなったらcloseできるか
ビルドCI Actions の job nameが同じで,branch protectionで区別できない
どっちも build_minimum_user になってるので.
c2a-core/.github/workflows/build_as_c89.yml
Lines 18 to 19 in 62e8353
CCSDS周りのコードをcoreで管理する?
TCPacketまわりを各種OBCで管理するのがだるくなってきたので.
2nd OBCなどは,ビルド対象に含めなければいいだけなので.
方針が決まったら
CTCPの実体はどんなデータ構造でもよくする
現在,CTCPの実体はCCSDSのTCPである.
C2A的には,C2Aを流れるCTCPの実体は何でもよく,TCP以外でも使えるように,ここを疎結合にしたい.
CTCPをインタフェースクラスっぽくし,必要なIFのみ定義し,中の実体はいかなるデータ構造でもよくする.
できたら
C2A coreで,ちょいちょいCTCPではなくTCPを仮定したコードがあるんよなぁ...
WINGSと接続してテストを回すCIを,GitHub-hosted runners で動かす
テストを動かすには,WINGSを立ち上げ,C2Aをビルドし,動かす必要があり,オンプレwindows上では自動化できつつあるが,
https://docs.github.com/ja/actions/hosting-your-own-runners/about-self-hosted-runners#self-hosted-runner-security-with-public-repositories
などにあるように,publicなリポジトリでは, self-hosted runners を使うべきではない.
そこで,テストCIを GitHub-hosted runners で動かすようにしたい.
できたら
NA
Event Handlerの改善
c2a-core/System/EventManager/event_handler.c
Line 672 in 8ff3821
直近では難しそうだが,次のようなアイデアもある
だいたい落ち着いたら.
うるう秒対応
対応したら
つらすぎる...
打ち上げ後に追加のうるう秒決まるとかってありえるんか
お手製CIスクリプトをreviewdogで動かせるようにする
https://github.com/reviewdog/reviewdog をつかって,PR画面に表示させたい.
encodeやコード規約のチェックCIで.
できるようになったら
NA
文字コードをUTF-8にしたい
現在SJISの文字コードをUTF-8にしたい.
ただし,現在のISSLの環境がSJISを要求するので,できるのはそれが解消されてからか.
なったら
様々なセキュリティリスクに気づきやすくする
詳細未定.
依存ライブラリのセキュリティ通知とかに気付けるように,とか,バッファーオーバーフローを検知する(静的解析ツールをいれる),とか?
なんとなく方向性の議論ができたら
C2A間通信で一部不適切コードがあるので,直す
TBW
https://gitlab.com/ut_issl/c2a/c2a_core_oss/-/issues/46#note_687059679
関連:
なおしたら
SILSのみではなく,ある特定のHW上でうごくuser sampleを公開する
Raspberry Piとかで.ベアメタルじゃないけど.
PICもそのうち公開したいな.
公開したら
ISSL内部のCoreを整理し,ある瞬間のスナップショットをこちらに移植する
過去履歴は公開できないものも含まれている可能性があるので,ある断面をこちらに持ってくることで公開する
c2a core本体がpushされたら
NA
S2E側から呼び出すC2Aの初期化関数を,1つづつincludeして呼び出しているのはおかしい
void OBC_C2A::Initialize()
のなかに,各種initがいるのは良くなく,この中のinitはC2A側で持つべき.
C2A側でinit関数が変わったら,そのたびにS2E側も更新しないといけないのはおかしい.
きれいになったら
c89のgcc Wextra Warningに対応すると,あるマイコンIDEにてWarningが出てしまう
const uint32_t
などの返り値を uint32_t
などにした
warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
が発生C0008 (W) Conversion in return
を出してしまう.
c2a-core/Drivers/Super/driver_super.c
Lines 1513 to 1516 in 1280836
どちらの環境でもWarningがでなくなったら
どうしようか.とりあえず,上の例だと,意味はないんだけど (uint16_t)
とキャストさせる?
テレメ,コマンドの UnixTime への対応
以下 UTC ≒ UnixTime として書く
実装が終わったら
NA
C2A間通信を実装したが,こみいっているのできちんとドキュメント化する
2021/1月にC2A間通信を実装し,Ground Station→MOBC→2nd OBCというテレコマ疎通ができるようになった.
また,2nd OBCのTLをMOBCで持てたりするようになった.
機能が複雑なので,ドキュメント化する.
関連:
ドキュメント化できたら
CCP_EXEC_STS が負数なのを正数にしたい
CCP_EXEC_STS
においては負数である.
c2a-core/CmdTlm/common_tlm_cmd_packet.h
Lines 25 to 36 in 114781a
CCP_EXEC_STS
と共通なものかつシステムで使われるものを割り当て,正数としてユーザー定義(cmdごと)値を定義していたものと推定されるc2a-core/System/TaskManager/task_dispatcher.c
Line 119 in 114781a
影響範囲はきちんと調べること.
正数にしたら.
C2A単体をライブラリビルドできるようにする
できたら
doxygenの @file ,じつはファイル名書かなくていいのでは?
参考: https://www.doxygen.nl/manual/commands.html#cmdfile
ちょっと英語がきちんと理解できてないかもしれないが,ファイル名を書かなくていい説がありそう.
適切になったら.
testをいれる
pytestで書かれたやつ.
どこにどのように入れるかも議論する.
いれたら
Cmd_BCT_OVERWRITE_CMD が可変長引数コマンドに対応できていない
param_len
が可変長引数に対応できていない.
直ったら.
Event Logger の軽微な性能向上
2021/09に C2Aの当初から存在した Anomaly Loggerの後継としてEvent Loggerを実装した.
2ヶ月ほど使い,多少の性能改善をしたくなったので,する.
具体的には,
ELの改善が一段落したら
CoreとUserの分離,UserからCoreの利用のスキーマについて,改善を考える
2021年にそれまでOBCごとに1つのrepositoryで作業していたC2AをUserランドとCoreに分離し,すべてのOBCでCoreを共通化した.
一方で,あまり詳細を考えず,鈴本一人でがっと分離・実装してしまっているので,改善していきたい.
userとcoreでincludeが交錯しまくっているのとかもどうにかしたいし,パラメタ管理をもう少しいい感じにもしたい.
とりあえず議論から.議論してから考える
#6 も関連しそう
UTCなどの絶対時刻でTLC (Time Line Command) が打てるようにする
c2a-core/CmdTlm/packet_handler.c
Line 77 in 31dbe6e
c2a-core/CmdTlm/packet_handler.c
Line 94 in 31dbe6e
実装ができたら
C2A初期化時に TMGR_get_master_clock
を呼ぶと,時刻の連続性が失われる
現在,Appの初期化時刻を計測するため, C2A の最初期に 時刻の刻みをスタートし,その後,C2A初期化終了後にRTOSとして動き始める直前に再び TMGR_init
にて master clock を 0 に戻している.
これによって,C2A初期化時にも時刻を使えるが,Driverや様々なAppなどの初期化に,時刻類を初期化する目的で呼ばれている TMGR_get_master_clock
が0 ( {0, 0, 0}
) を返さない.
したがって,その後,diff等をとるさいに,時刻の連続性が失われ,バグを生むリスクがある.
したがって,通常利用においては,初期化中には 0 を返すようにしたい.
なお,初期化時に 0 ではなく,TMGR_get_master_clock
を呼んでいるのは,App等の初期化はC2A起動時以外にもあり得るためである.そのような場合には,現在時刻を入れるほうが,都合がいい.
(例えば制御アプリで制御開始時に初期化し,実行ごとにdtを計算する場合など)
問題が解消されたら.
コマンドのパラメタ取得を定型化したい
uint8_tのパケットの,取得したいパラメタの位置を素でしていしてmemcpyして,enumの場合はtemp変数用意して,,,というのがつらい.
要件
よしなになったら.
Doxyfile を入れる
Reference のリポジトリを作ったら.
入れたら
NA
Coreの開発フローを考える
forkしてPRを出す開発なので,結構しんどいことが発生しそう.
#1 でも述べたが,user側がないと,coreはビルドできないので,coreにPRをだしたら,対応する(core検証用の)userにもPRを出す必要がある.そのときに,userでbuild CIを回すが,build CIはPRのfork先の(PRのマージ元の)オーナーを知るすべがない?(ほんとか? もしかしたらActionsにあるかも)
また,coreを開発するuser側もめんどくさく,開発用userのsubmoduleとしてのcoreのremoteをforkのたびに変えないといけない.
開発フローが考えられ,実装できたら.
NA
リポジトリの設定をきちんとする
設定が完了したら.
NA
ライセンスを設定する
ssia
設定が終わったら
NA
HK発送が 0.5 Hz になっているので1Hz にしたい
最低限S2Eでビルドする & 軽いチェックを行う CI を建てる
ビルドと規約チェックぐらい?
一旦HW依存ビルドは置いておく(coreなので)
#1 からの引き継ぎ内容
CIがたったら
NA
Anomaly Handlerの後継,Event Logger と組み合わせたEvent Handlerをつくる
Event Logger の誕生に伴い,Anomaly Logger が deprecated となった.
それに紐づく,Anomaly Handlerはバグや動かない機能がおおく,Event Handlerとして新たにより良いものを作り直す.
EHの初版が実装されたら
AHのバグは,以下のようなものが知られている.
testのWINGSの認証情報を環境変数で渡せるようにする
jsonで渡すのが渋いので.
できたら
Windowsでの環境変数の取り扱いがいまいちで,ぱっといい方法がわからない.
Linuxなら
HOGE=hoge pytest
でいいんだけど.
C2A間通信がわかるようなexampleを公開する
ここ最近,C2Aを搭載したボード間通信(たとえばMOBC - AOBC)をサポートし始めたので,それがわかるuser example(sample mobc, sample aobcとか)を公開する.
公開したら.
既存のフォーマッタ,リンタを導入したい
現在, https://github.com/ut-issl/c2a-core/blob/feature/add_coding_rule_check_ci/.github/workflows/check_coding_rule.yml で,お手製コード規約チェックCIを動かしているが,お手製なので,既存のもの(clang-formatとか?)を動かせるようにしたい.
ただ,clang-formatの使い勝手が以下の点であってなく,問題になっている.
{}
のない 複数行 if
は禁止)になったりなどなど.
もはや上の細かいことは全て諦め,フォーマッタの出力を正義,とする考えもあり.
フォーマッタ,リンタまわりがなんとかなったら.
src_user/IfWrapper/Sils/*.c にC++のコードを置くことについて議論する
.c
になっており非常に分かりにくいなんとなく今後の方向性が見えてきたら.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.