Skip to content

Commit

Permalink
Merge pull request #111 from arkedge/feature/import-c2a-tlm-cmd-code-…
Browse files Browse the repository at this point in the history
…generator

Import c2a-tlm-cmd-code-generator
  • Loading branch information
sksat authored Oct 4, 2023
2 parents 34c26b0 + 503e775 commit 2d0f0d9
Show file tree
Hide file tree
Showing 15 changed files with 1,484 additions and 4 deletions.
3 changes: 2 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,8 @@
- 設定ファイル中のディレクトリの設定を C2A user のトップディレクトリからの相対パスに変更
- [ut-issl/c2a-enum-loader](https://github.com/ut-issl/c2a-enum-loader) を c2a-core リポジトリで管理するように変更: [#99](https://github.com/arkedge/c2a-core/pull/99)
- import したバージョン: [ut-issl/c2a-enum-loader ae-v2.0.0](https://github.com/ut-issl/c2a-enum-loader/releases/tag/ae-v2.0.0)
- [ut-issl/c2a-tlm-cmd-code-generator](https://github.com/ut-issl/c2a-tlm-cmd-code-generator) を c2a-core リポジトリで管理するように変更: [#111](https://github.com/arkedge/c2a-core/pull/111)
- import したバージョン: [ut-issl/c2a-tlm-cmd-code-generator ae-v2.0.0](https://github.com/ut-issl/c2a-tlm-cmd-code-generator/releases/tag/ae-v2.0.0)


### Enhancements
Expand Down Expand Up @@ -56,7 +58,6 @@

- [ut-issl/tlm-cmd-db v2.4.0](https://github.com/ut-issl/tlm-cmd-db/releases/tag/v2.4.0)
- [ut-issl/python-wings-interface v1.5.1](https://github.com/ut-issl/python-wings-interface/releases/tag/v1.5.1)
- [ut-issl/c2a-tlm-cmd-code-generator ae-v2.0.0](https://github.com/ut-issl/c2a-tlm-cmd-code-generator/releases/tag/ae-v2.0.0)
- [arkedge/gaia v0.5.0](https://github.com/arkedge/gaia/releases/tag/v0.5.0)
- [tlmcmddb-cli 0.2.0](https://crates.io/crates/tlmcmddb-cli/0.2.0)
- [kble 0.2.0](https://crates.io/crates/kble/0.2.0)
Expand Down
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@ C2A Core の採用実績のある衛星 OBC や動作実績のあるボードの
## 関連リンク
### C2A 関連ツール
- https://github.com/ut-issl/tlm-cmd-db
- https://github.com/ut-issl/c2a-tlm-cmd-code-generator
- https://github.com/ut-issl/python-wings-interface
- https://github.com/ut-issl/s2e-user-for-c2a-core
- https://github.com/arkedge/c2a-tlmcmddb
Expand Down
2 changes: 1 addition & 1 deletion docs/driver/communication_with_components.md
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ https://github.com/arkedge/c2a-core/blob/45d78a05c339c285b5aa0c2fcbf57c1b105137e
C2A 間通信によって,以下のような機能が提供される.

- OBC 間の簡易な Driver 実装と自動コード生成
- [c2a-tlm-cmd-code-generator](https://github.com/ut-issl/c2a-tlm-cmd-code-generator) 参照.
- [c2a-tlm-cmd-code-generator](../../tlm-cmd-code-generator/) 参照.
- [`examples/mobc/src/src_user/Drivers/Aocs`](/examples/mobc/src/src_user/Drivers/Aocs/) などの多くのコードが自動生成される.
- OBC と地上局でネットワークを形成.
- 地上局から MOBC をルーターとして, sub OBC へコマンド配送.
Expand Down
1 change: 0 additions & 1 deletion docs/general/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,5 @@ Tool のリリースには,以下に注意する.

例:

- https://github.com/ut-issl/c2a-tlm-cmd-code-generator/releases
- https://github.com/ut-issl/python-wings-interface/releases
- https://github.com/ut-issl/tlm-cmd-db/releases
8 changes: 8 additions & 0 deletions tlm-cmd-code-generator/.flake8
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
[flake8]
max-line-length = 100
ignore =
# black と競合するので
E203,
E501,
W503,
W504
16 changes: 16 additions & 0 deletions tlm-cmd-code-generator/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# OSX
.DS_Store
.AppleDouble
.LSOverride
Icon

# Thumbnails
._*

# Files that might appear on external disk
.Spotlight-V100
.Trashes

# others
*.pyc
gstos_files/*
53 changes: 53 additions & 0 deletions tlm-cmd-code-generator/GenerateC2ACode.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# coding: UTF-8
"""
python 3.7以上を要求
"""

import json
import sys

import my_mod.load_db
import my_mod.cmd_def
import my_mod.tlm_def
import my_mod.tlm_buffer


# import pprint
# import os.path
# import msvcrt # Enter不要な入力用
# import subprocess


# 環境変数
DEBUG = 0
# 0 : Release
# 1 : all
SETTING_FILE_PATH = "settings.json"


def main():
with open(SETTING_FILE_PATH, mode="r") as fh:
settings = json.load(fh)
# print(settings["path_to_src"]);

cmd_db = my_mod.load_db.LoadCmdDb(settings)
tlm_db = my_mod.load_db.LoadTlmDb(settings)
# pprint.pprint(cmd_db)
# pprint.pprint(tlm_db)
# print(tlm_db)

my_mod.cmd_def.GenerateCmdDef(settings, cmd_db["sgc"])
my_mod.cmd_def.GenerateBctDef(settings, cmd_db["bct"])
my_mod.tlm_def.GenerateTlmDef(settings, tlm_db["tlm"])

if settings["is_main_obc"]:
my_mod.cmd_def.GenerateOtherObcCmdDef(settings, cmd_db["other_obc"])
my_mod.tlm_def.GenerateOtherObcTlmDef(settings, tlm_db["other_obc"])
my_mod.tlm_buffer.GenerateTlmBuffer(settings, tlm_db["other_obc"])

print("Completed!")
sys.exit(0)


if __name__ == "__main__":
main()
106 changes: 106 additions & 0 deletions tlm-cmd-code-generator/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
# c2a-tlm-cmd-code-generator
[TlmCmd DB](https://github.com/ut-issl/tlm-cmd-db)からC2Aのコードを生成するためのスクリプト

以下が自動生成される.
- command_definitions.c
- command_definitions.h
- telemetry_definitions.c
- telemetry_definitions.h
- block_command_definitions.h

## 実行
```
$ python GenerateC2ACode.py
```

## 設定
`settings.json` にて記述する.

`is_main_obc` は,MOBC(地上局と通信するOBC.2nd OBCのtlm/cmdを取りまとめる)かそれ以外のOBC(2nd OBC.MOBCと通信するOBC)かを制御する.
`1` とした場合,MOBCを意図したコードが生成され,加えて以下が生成される.
- 2nd_obc_command_definitions.h
- 2nd_obc_telemetry_definitions.h
- 2nd_obc_telemetry_buffer.c
- 2nd_obc_telemetry_buffer.h
- 2nd_obc_telemetry_data_definitions.h

```
{
# `src_core`, `src_user` のあるディレクトリへのパス
"path_to_src" : "../../c2a/src/",
# テレコマ DB のあるディレクトリへのパス
"path_to_db" : "../../c2a/database/",
# TlmCmdDBのファイル名の接頭辞
"db_prefix" : "SAMPLE_MOBC",
# TLM ID の定義域
"tlm_id_range" : ["0x00", "0x100"],
# Cmd DB の Name に "Cmd_" の接頭辞が含まれるか?(今後は含まれないのが基本とする)
"is_cmd_prefixed_in_db" : 0,
# 入力 Tlm Cmd DB のエンコーディング
"input_file_encoding" : "utf-8",
# 出力ファイルのエンコーディング
"output_file_encoding" : "utf-8",
# MOBCか?(他のOBCのtlm/cmdを取りまとめるか?) 0/1
# 2nd OBCのコードを生成するときなどは 0 にする
# 0 の場合,以後のパラメタは無効
"is_main_obc" : 1,
"other_obc_data" : [
{
# OBC名
"name" : "AOBC",
# コードを生成するか?
"is_enable" : 1,
"db_prefix" : "SAMPLE_AOBC",
"tlm_id_range" : ["0x90", "0xc0"],
"is_cmd_prefixed_in_db" : 0,
"input_file_encoding" : "utf-8",
# DBがあるディレクトリへのパス(絶対でも相対でもOK)
"path_to_db" : "../../c2a_sample_aobc/database/",
# MOBC で保持するテレメの TLM ID の最大値(=テレメ種類数)
"max_tlm_num" : 256,
"driver_path" : "Aocs/",
"driver_type" : "AOBC_Driver",
"driver_name" : "aobc",
"code_when_tlm_not_found" : "aobc_driver->info.comm.rx_err_code = AOBC_RX_ERR_CODE_TLM_NOT_FOUND;"
},
{
# OBC名
"name" : "TOBC",
# コードを生成するか?
"is_enable" : 1,
"db_prefix" : "SAMPLE_TOBC",
"tlm_id_range" : ["0xc0", "0xf0"],
"is_cmd_prefixed_in_db" : 0,
"input_file_encoding" : "utf-8",
# DBがあるディレクトリへのパス(絶対でも相対でもOK)
"path_to_db" : ""../../c2a_sample_tobc/database/",
# MOBC で保持するテレメの TLM ID の最大値(=テレメ種類数)
"max_tlm_num" : 256,
"driver_path" : "Thermal/",
"driver_type" : "TOBC_Driver",
"driver_name" : "tobc",
"code_when_tlm_not_found" : "tobc_driver->info.comm.rx_err_code = TOBC_RX_ERR_CODE_TLM_NOT_FOUND;"
}
]
}
```

## 開発方針
- `main`: リリース版
- `feature/*` : 開発ブランチ

というブランチを用いる.

[C2A Core](https://github.com/ut-issl/c2a-core) との互換性などは,[Releases](https://github.com/ut-issl/c2a-tlm-cmd-code-generator/releases) を参照すること([詳細](https://github.com/ut-issl/c2a-core/tree/develop/Docs/.General/release.md)

## 要求
- python 3.7 以上
- 必要ライブラリは `./requirements.txt` に記載.
- なお,現在は標準ライブラリのみしか使っていない
- 以下で一括インストール可能
```
$ pip install -r requirements.txt
```

## その他
- MOBCと2nd OBCのC2A間通信の例は (TBA).
Loading

0 comments on commit 2d0f0d9

Please sign in to comment.