Skip to content

Commit

Permalink
Merge pull request #415 from ut-issl/develop
Browse files Browse the repository at this point in the history
Update main (v3.7.0) on 2022-09-01
  • Loading branch information
meltingrabbit authored Sep 1, 2022
2 parents 954ea0d + 1d0cc8d commit 1e7d4fb
Show file tree
Hide file tree
Showing 244 changed files with 8,687 additions and 3,500 deletions.
36 changes: 21 additions & 15 deletions .github/workflows/build_as_c89.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,14 +25,20 @@ jobs:
"Werror"
"Wextra"
)
examples=(
"minimum_user"
"2nd_obc_user"
)
echo "[" > tmp
for c in "${compiler[@]}"; do
for w in "${warning[@]}"; do
if [ "$c" == "gcc" ] && [ "$w" == "Werror" ]; then
continue
fi
echo "{ \"compiler\": \"${c}\", \"warning\": \"${w}\" }" >> tmp
echo "," >> tmp
for e in "${examples[@]}"; do
for c in "${compiler[@]}"; do
for w in "${warning[@]}"; do
if [ "$c" == "gcc" ] && [ "$w" == "Werror" ]; then
continue
fi
echo "{ \"compiler\": \"${c}\", \"warning\": \"${w}\", \"example\": \"${e}\" }" >> tmp
echo "," >> tmp
done
done
done
sed -i -e '$d' tmp # remove final comma
Expand All @@ -41,7 +47,7 @@ jobs:
jq < tmp
echo "::set-output name=matrix::{\"include\": $(cat tmp) }"
build_minimum_user_as_c89:
build_examples_as_c89:
runs-on: ubuntu-latest
needs: gen_build_matrix
strategy:
Expand Down Expand Up @@ -80,7 +86,7 @@ jobs:
echo "::set-output name=WEXTRA::${WEXTRA}"
- name: cmake
working-directory: ./Examples/minimum_user
working-directory: ./Examples/${{ matrix.example }}
env:
CC: ${{ matrix.compiler }}
run: |
Expand All @@ -92,12 +98,12 @@ jobs:
- name: build
id: build
continue-on-error: ${{ matrix.compiler == 'clang' }}
working-directory: ./Examples/minimum_user/build
working-directory: ./Examples/${{ matrix.example }}/build
run: cmake --build .

- name: run
if: steps.build.outcome == 'success'
working-directory: ./Examples/minimum_user/build
working-directory: ./Examples/${{ matrix.example }}/build
shell: bash
run: timeout 3 ./C2A || exit 0

Expand All @@ -112,22 +118,22 @@ jobs:

- name: clang-tidy
if: matrix.compiler == 'clang'
working-directory: ./Examples/minimum_user/build
working-directory: ./Examples/${{ matrix.example }}/build
run: |
run-clang-tidy-11 \
| sed 's/\/home\/runner\/work\/c2a-core\/c2a-core\///g' \
| sed 's/Examples\/minimum_user\/src\/src_core\///g' \
| sed 's/Examples\/${{ matrix.example }}\/src\/src_core\///g' \
> clang_tidy.log
- name: clang-tidy result
if: matrix.compiler == 'clang'
working-directory: ./Examples/minimum_user/build
working-directory: ./Examples/${{ matrix.example }}/build
run: cat clang_tidy.log

- name: remove duplicate error
if: matrix.compiler == 'clang'
run: |
python Script/CI/remove_duplicate_error.py ./Examples/minimum_user/build/clang_tidy.log "clang-tidy" | tee clang_tidy.log
python Script/CI/remove_duplicate_error.py ./Examples/${{ matrix.example }}/build/clang_tidy.log "clang-tidy" | tee clang_tidy.log
- name: reviewdog clang-tidy (github-pr-review)
if: matrix.compiler == 'clang' && matrix.warning == 'Werror'
Expand Down
24 changes: 19 additions & 5 deletions .github/workflows/build_as_cxx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,15 @@ on:
pull_request:

jobs:
build_minimum_user_as_cxx:
build_example_user_as_cxx:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
example:
- minimum_user
- 2nd_obc_user

steps:
- uses: actions/checkout@v3

Expand All @@ -18,19 +25,26 @@ jobs:
run: ./setup.bat

- name: cmake
working-directory: ./Examples/minimum_user
working-directory: ./Examples/${{ matrix.example }}
run: |
mkdir build
cd build
cmake --version
cmake .. -A Win32
- name: build
working-directory: ./Examples/minimum_user/build
working-directory: ./Examples/${{ matrix.example }}/build
run: cmake --build .

build_s2e_mockup:
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
example:
- minimum_user
- 2nd_obc_user

steps:
- uses: actions/checkout@v3

Expand All @@ -39,13 +53,13 @@ jobs:
run: ./setup.bat

- name: cmake
working-directory: ./Examples/minimum_user/src/s2e_mockup
working-directory: ./Examples/${{ matrix.example }}/src/s2e_mockup
run: |
mkdir build
cd build
cmake --version
cmake .. -A Win32
- name: build
working-directory: ./Examples/minimum_user/src/s2e_mockup/build
working-directory: ./Examples/${{ matrix.example }}/src/s2e_mockup/build
run: cmake --build .
8 changes: 7 additions & 1 deletion .github/workflows/build_with_s2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ jobs:
build_s2e_win:
name: Build on Windows VS2022
runs-on: windows-2022
strategy:
fail-fast: false
matrix:
example:
- minimum_user
- 2nd_obc_user

steps:
- name: checkout S2E core
Expand Down Expand Up @@ -89,5 +95,5 @@ jobs:
run: |
cl.exe
cmake --version
cmake -G "Visual Studio 17 2022" -A Win32 -DCMAKE_CONFIGURATION_TYPES:STRING="Debug" -DEXT_LIB_DIR=../s2e-core/ExtLibraries -DFLIGHT_SW_DIR=../c2a-core -DC2A_NAME=Examples/minimum_user -DUSE_C2A=ON
cmake -G "Visual Studio 17 2022" -A Win32 -DCMAKE_CONFIGURATION_TYPES:STRING="Debug" -DEXT_LIB_DIR=../s2e-core/ExtLibraries -DFLIGHT_SW_DIR=../c2a-core -DC2A_NAME=Examples/${{ matrix.example }} -DUSE_C2A=ON
cmake --build . --clean-first
11 changes: 9 additions & 2 deletions .github/workflows/check_coding_rule.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,13 @@ on:
jobs:
check_coding_rule:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
example:
- minimum_user
- 2nd_obc_user

steps:
- uses: actions/checkout@v3
- uses: actions/setup-python@v4
Expand All @@ -23,7 +30,7 @@ jobs:
id: check
shell: bash -e {0}
continue-on-error: true
working-directory: ./Examples/minimum_user/src
working-directory: ./Examples/${{ matrix.example }}/src
run: |
python ./src_core/Script/CI/check_coding_rule.py ./src_core/Script/CI/check_coding_rule.json | tee /tmp/coding-rule.log
status="${PIPESTATUS[0]}"
Expand All @@ -38,7 +45,7 @@ jobs:
run: |
sed 's/.\/src_core\///g' < /tmp/coding-rule.log \
| > ./coding-rule.log \
sed 's/.\/src_user/Examples\/minimum_user\/src\/src_user/g'
sed 's/.\/src_user/Examples\/${{ matrix.example }}\/src\/src_user/g'
cat ./coding-rule.log
- name: reviewdog(github-pr-review)
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,7 @@ dkms.conf
Examples/minimum_user/src/src_core
Examples/minimum_user/build
Examples/minimum_user/src/src_user/Test/authorization.json
Examples/2nd_obc_user/src/src_core
Examples/2nd_obc_user/build
Examples/2nd_obc_user/src/src_user/Test/authorization.json
*.pyc
4 changes: 3 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ set(C2A_CORE_DIR ${CMAKE_CURRENT_SOURCE_DIR})

set(C2A_SRCS
c2a_core_main.c
Drivers/Protocol/common_tlm_cmd_packet_for_driver_super.c
Drivers/Protocol/eb90_frame_for_driver_super.c
Drivers/Protocol/eb90_packet_for_driver_super.c
Drivers/Super/driver_super.c
Drivers/Super/driver_super_issl_format.c
# System/AnomalyLogger/anomaly_logger.c # deprecated. 使いたい場合は, user 側でビルドターゲットに入れる.
System/ApplicationManager/app_info.c
System/ApplicationManager/app_manager.c
Expand Down
20 changes: 15 additions & 5 deletions Docs/Core/communication.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# Communication

## 概要
通信関連,ネットワーク関連などをまとめる.
通信関連,ネットワーク関連などをまとめる.
コンポーネント間通信については [Driver/Communication with Components](../Driver/communication_with_components.md) などを参照のこと.


## C2A 内部を流れるパケットについて (Common Packet)
C2A 内部を流れるパケットは以下の 3 つである.
Expand All @@ -21,6 +23,9 @@ C2A 標準として, Space Packet が Core 内で定義されており,基


## C2A 標準 Space Packet 定義
C2A 標準 Space Packet は,CCSDS (Consultative Committee for Space Data Systems.宇宙データシステムの標準化を進めている機関) の Space Packet に準拠したものである(参考: [CCSDS SPACE PACKET PROTOCOL](https://public.ccsds.org/Pubs/133x0b2e1.pdf)).
CCSDS Space Packet において, Secondary Header はユーザー定義とされており, C2A 用に Secondary Header がカスタムされたものが C2A 標準 Space Packet である.

現在,C2A 標準 Space Packet として,テレメパケット,コマンドパケットともに, Ver.1 のみ策定している.
ここでは, Ver.1 について記載する.

Expand All @@ -47,16 +52,17 @@ https://github.com/ut-issl/c2a-core/blob/217c3156a07ec503cd60fc7b75978a3234ec2c5
- 以下は CCSDS で規定
- `0b11111111000` - `0b11111111110`: CCSDS Reserved
- `0b11111111111`: Idle Packet
- Packet Sequence Control Field
- Sequence Flag
- `0b00`: Continuation component of higher data structure
- `0b01`: First component of higher data structure
- `0b10`: Last component of higher data structure
- `0b11`: Standalone Packet
- Sequence Count
- APID ごとにパケットの伝送順番を示すカウンタ
- Packet Data Length
- パケット全長から Primary Header 長を引き,さらに 1 を引いたもの
- つまり,これが 0 の時, Secondary Header + User Data Field 長は 1 byte である
- Packet Data Length
- パケット全長から Primary Header 長を引き,さらに 1 を引いたもの
- つまり,これが 0 の時, Secondary Header + User Data Field 長は 1 byte である


### Secondary Header (Telemetry)
Expand Down Expand Up @@ -153,7 +159,7 @@ https://github.com/ut-issl/c2a-core/blob/b84c3d051a1e15ab62c8f1a9744957daa4a62a3
- TLC: GS から MOBC に届き, MOBC で TLC としてエンキューされる.デキューした後, APID を元に, AOBC へ配送される.配送時, Destination Type は自分宛に上書きされ, AOBC で RTC としてキューイング & 実行される.
- BC: GS から MOBC に届き, MOBC で BC 登録される.BC 展開した後, TL にエンキューされ,デキューした後, APID を元に, AOBC へ配送される.配送時, Destination Type は自分宛に上書きされ, AOBC で RTC としてキューイング & 実行される.
- APID: AOBC, Destination Type: AOBC
- GSC: GS から MOBC に届き, MOBC でエンキューされずに,そのまま AOBC へ配送される.配送時, Destination Type は自分宛に上書きされ, AOBC で GSC としてキューイング & 実行される.
- GSC: GS から MOBC に届き, MOBC でエンキューされずに,そのまま AOBC へ配送される.配送時, Destination Type は自分宛に上書きされ, AOBC で RTC としてキューイング & 実行される.
- TLC: GS から MOBC に届き, MOBC でエンキューされずに,そのまま AOBC へ配送される.配送時, Destination Type は自分宛に上書きされ, AOBC で TLC としてキューイング & 実行される.
- BC: GS から MOBC に届き, MOBC で BC 登録されずに,そのまま AOBC へ配送される.配送時, Destination Type は自分宛に上書きされ, AOBC で BC として登録 & 実行される.
- 地上局 SW での実装まとめ
Expand All @@ -176,5 +182,9 @@ https://github.com/ut-issl/c2a-core/blob/b84c3d051a1e15ab62c8f1a9744957daa4a62a3
- https://github.com/ut-issl/c2a-core/blob/f3197d549559d1f571eb3e28497c9a488611f07f/Examples/minimum_user_for_s2e/src/src_user/Settings/TlmCmd/common_cmd_packet_define.h#L10-L11


## C2A 間通信について
上記 [#コマンド配送におけるルーティングについて](#コマンド配送におけるルーティングについて)[Driver/Communication with Components#c2a-間通信](../Driver/communication_with_components.md#c2a-間通信) などを参照すること.


## CCSDS 準拠状況
TBA
113 changes: 113 additions & 0 deletions Docs/Driver/communication_with_components.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
# Communication with Components

## 概要
コンポーネント間通信などをまとめる.
なお,地上局との通信関連や, CCSDS などについて,衛星内コンポーネントのネットワーク関連などについては [Core Layer/Communication](../Core/communication.md) を参照のこと.


## 通信レイヤ
コンポーネント間通信などのための通信レイヤについてまとめる.

### ネットワーク層
コンポーネントや地上局,その他のノードでのデータ配送において,エンド・ツー・エンドの配送に責任を持つ.
CCSDS における APID によって制御されるデータ配送はネットワーク層である.

この層を流れるデータ単位を `Packet` と呼ぶ.

C2A では,地上局との通信や C2A 間通信において, [Core Layer/Communication](../Core/communication.md) の Common Packet が標準的に使用される.
C2A を搭載した OBC と Common Packet に対応していないその他のコンポーネントでは,後述する EB90 Packet を可能な限り用いる.

### データリンク層
隣接するコンポーネントや地上局,その他のノード間でのデータ転送を行う.
例えば,衛星内のコンポーネント A と B 間での UART での通信に対して責任を持つ.
したがって,この場合は, UART 通信で発生しうるノイズへの耐性を提供することが期待される.

この層を流れるデータ単位を `Frame` と呼ぶ.

C2A では,CCSDS に準拠した地上局との通信では,それに準拠し Transfer Frame が使用される.
それ以外では,後述する EB90 Frame を可能な限り用いる.


## ネットワーク層 (Packet)
### Common Packet
[Core Layer/Communication](../Core/communication.md) を参照のこと.

### EB90 Packet
Common Packet ほどリッチな情報をやり取りしない通信に用いる.
したがって, User Data Field 以外の Header には,

- Version ID
- Tlm / Cmd Count
- Tlm / Cmd ID

のみ,定義されている.

直接通信する2者を超え,ネットワークを構築するだけの能力はない.
また,通常データリンク層としては EB90 Frame が用いられる.

現在は Ver.1 のみ策定されており,その定義は以下を参照すること.

https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Drivers/Protocol/eb90_packet_for_driver_super.h#L1-L25

#### 各フィールドの説明
- Version ID
- `0x00`: バージョン不定
- `0x01`: Version 1
- Tlm / Cmd Count
- 送信 Packet 毎にインクリメントされていくカウンタ
- Tlm / Cmd ID
- Packet 種別を表す ID
- User Data Field
- バイト単位で格納されたユーザーデータ

なお,すべてのフィールドのバイトオーダはビッグエンディアンとする.


## データリンク層 (Frame)
### EB90 Frame
UART などで接続されたコンポーネント間の通信といった,軽微な通信ノイズの誤り検出のみ必要な場合に用いる.
ネットワーク層として EB90 Packet や Common Packet などが標準的に使用される.

https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Drivers/Protocol/eb90_frame_for_driver_super.h#L1-L33

#### 各フィールドの説明
- STX
- Frame 先頭識別子
- `0xEB 0x90` 固定
- Packet Length
- Packet Field の長さ
- CRC
- Packet Field 部分の CRC (Header は含めない)
- 使用する CRC の種類は CRC-16/CCITT-FALSE (CRC-16/AUTOSAR, CRC-16/IBM-3740 とも)
- `width=16, poly=0x1021, init=0xffff, refin=false, refout=false, xorout=0x0000, check=0x29b1, residue=0x0000`
- ETX
- Frame 終端識別子
- `0xC5 0x79` 固定
- Packet Field
- バイト単位で格納された送信 Packet
- EB90 Packet や Common Packet などが格納される

なお,すべてのフィールドのバイトオーダはビッグエンディアンとする.


## C2A 間通信
衛星内上の C2A (ないしは互換の Common Packet を用いる FSW)を搭載したコンポーネント(主に OBC)間での通信について記す.
C2A 間通信によって,以下のような機能が提供される.

- OBC 間の簡易な Driver 実装と自動コード生成
- [c2a-tlm-cmd-code-generator](https://github.com/ut-issl/c2a-tlm-cmd-code-generator) 参照.
- [`Examples/minimum_user/src/src_user/Drivers/Aocs`](/Examples/minimum_user/src/src_user/Drivers/Aocs/) などの多くのコードが自動生成される.
- OBC と地上局でネットワークを形成.
- 地上局から MOBC をルーターとして, 2nd OBC へコマンド配送.
- 2nd OBC のテレメトリを MOBC を経由して地上局まで配送.
- OBC A から OBC B に対してコマンド発行 / テレメ送信.
-

C2A 間通信の具体的な実装については,本リポジトリに同封されている User Sample である [`Examples/minimum_user`](/Examples/minimum_user)[`Examples/2nd_obc_user`](/Examples/2nd_obc_user) での通信(前者が MOBC,後者が AOBC を想定)を参考にされたい.
具体的なドライバのコードは以下となる.

- https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Examples/minimum_user/src/src_user/Drivers/Aocs/aobc.c#L1-L164
- https://github.com/ut-issl/c2a-core/blob/9f5154ddc5684f8e626b77c8f8bc7c8215c0e096/Examples/2nd_obc_user/src/src_user/Drivers/Etc/mobc.c#L1-L150

地上局からのコマンドルーティングについては [Core Layer/Communication#コマンド配送におけるルーティングについて](../Core/communication.md#コマンド配送におけるルーティングについて) などを参照すること.

Loading

0 comments on commit 1e7d4fb

Please sign in to comment.