C2A_Core
telemetry_manager.h
[詳解]
1 
6 #ifndef TELEMETRY_MANAGER_H_
7 #define TELEMETRY_MANAGER_H_
8 
9 #include "../System/ApplicationManager/app_info.h"
10 #include "../TlmCmd/common_cmd_packet.h"
11 #include "../TlmCmd/common_cmd_packet_util.h"
12 #include "../TlmCmd/block_command_table.h"
15 
16 
17 // 以下がともに 10 であることで, 10 x 10 x cycle で 10 秒周期に最大 100 個の tlm を登録できる.
18 #define TLM_MGR_USE_BC_NUM (10)
19 #define TLM_MGR_MAX_CMD_NUM_PER_BC (10)
20 
21 #if BCT_MAX_CMD_NUM < TLM_MGR_MAX_CMD_NUM_PER_BC // FIXME: BCT 側が直ったらなおす
22 #error BCT_MAX_CMD_NUM is not enough for TelemetryManager
23 #endif
24 
25 
31 typedef enum
32 {
41 
42 
48 typedef enum
49 {
54 
55 
61 typedef enum
62 {
70 
71 
76 typedef struct
77 {
78  uint8_t cmd_table_idxes[TLM_MGR_USE_BC_NUM];
83 
84 
89 typedef struct
90 {
94  uint8_t dr_partition;
96 
97 
103 typedef struct
104 {
109 
110 
115 typedef struct
116 {
119 
120 
125 typedef struct
126 {
127  struct
128  {
134  } register_info;
138  uint8_t is_inited;
140 
141 
142 extern const TelemetryManager* const telemetry_manager;
143 
145 
146 
152 
157 
163 
169 
175 
181 
187 
194 
195 // 以下,コマンド登録コマンド
201 
207 
208 // TODO: いきなり設定が変わるのではなく,設定変更 → 反映,にしたい.
209 // CCP_CmdRet Cmd_TLM_MGR_APPLY(const CommonCmdPacket* packet);
210 
211 
212 // *** HOW TO USE ***
213 /*
214 1. 初期化:Cmd_TLM_MGR_INIT
215  - BCをいじるため,Appの初期化では現時点でできないので,明示的に初期化する必要あり
216  - initial SLにいれてもいいかも. DCU を使ってるので, 1 秒ほどかかる
217 2. 非ユーザーテレメの登録
218  - HK TLMを登録しておく ( Cmd_TLM_MGR_REGISTER_HOGE で )
219 3. テレメ送出開始
220  - Cmd_TLM_MGR_START_TLM にてテレメ送出開始
221  - 止めるのは Cmd_TLM_MGR_STOP_TLM
222 4. Cmd_TLM_MGR_REGISTER_HOGE にて,1 Hz, 1/10 Hz のユーザーテレメを各人が好きに登録できる
223 5. 試験などが終わったら Cmd_TLM_MGR_CLEAR_USER_TLM をして,ユーザーテレメを消す
224 6. 次に使う人がいたら,4.から繰り返す
225 7. Cmd_TLM_MGR_DELETE_HOGE で登録したコマンドを指定して削除可能
226 */
227 
228 #endif
CCSDS の APID を定義する
APID
Application Process ID
Definition: apid_define.h:17
uint16_t bct_id_t
コマンド返り値
Space Packet (コマンド用)
BC に登録された(テレメ生成などの)コマンドの情報(BC の block ごと)
bct_id_t bc_id
使う BC ID
TLM_MGR_BC_ROLE bc_role
その BC の役割
TLM_MGR_CmdBlock の 1 cmd の情報
TLM_MGR_CMD_TYPE cmd_type
BC に登録された(テレメ生成などの)コマンドのタイプ (未登録は TLM_MGR_CMD_TYPE_UNREGISTERED (0))
uint8_t dr_partition
登録された tlm 生成コマンドの dr_partition (未登録は 0)
APID apid
登録された tlm 生成コマンドの APID (未登録は 0)
TLM_CODE tlm_id
登録された tlm 生成コマンドの生成 tlm id (未登録は 0)
BC に登録された(テレメ生成などの)コマンドの情報
どう BC を管理し,テレメ生成コマンドを登録し,動かしていくかの情報.途中計算などに使う
uint8_t cmd_table_idxes_size
cmd_table_idxes の配列数
TelemetryManager の AppInfo構造体
TLM_MGR_CmdTable cmd_table
現在 BC に登録された(テレメ生成などの)コマンド
uint8_t is_inited
初期化されているか?
TLM_MGR_RegisterInfo low_freq
TLM_MGR_BC_ROLE_LOW_FREQ_TLM; User テレメ (1/10 Hz)
TLM_MGR_RegisterInfo hk
TLM_MGR_RegisterInfo high_freq
TLM_MGR_BC_ROLE_HIGH_FREQ_TLM; User テレメ (1 Hz)
bct_id_t deploy_bc_id
master BC を deploy する BC の ID
bct_id_t master_bc_id
TLM_MGR_USE_BC_NUM 個の tlm bc を順次実行していく master BC の ID
テレメトリ定義
CCP_CmdRet Cmd_TLM_MGR_CLEAR_USER_TLM(const CommonCmdPacket *packet)
User テレメ (HIGH_FREQ, LOW_FREQ) を初期化
#define TLM_MGR_MAX_CMD_NUM_PER_BC
1 BC に何個のテレメ生成などのコマンドを登録できるか.基本的に 10 固定を想定
#define TLM_MGR_USE_BC_NUM
用いる BC の数.基本的に 10 固定を想定
CCP_CmdRet Cmd_TLM_MGR_DELETE_GENERATE_ST_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_DELETE_FORWARD_AS_ST_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_CLEAR_LOW_FREQ_TLM(const CommonCmdPacket *packet)
LOW_FREQ テレメを初期化
CCP_CmdRet Cmd_TLM_MGR_STOP_TLM(const CommonCmdPacket *packet)
TLM 送出一時停止
const TelemetryManager *const telemetry_manager
CCP_CmdRet Cmd_TLM_MGR_INIT_MASTER_AND_DEPLOY_BC(const CommonCmdPacket *packet)
master bc の初期化
CCP_CmdRet Cmd_TLM_MGR_DELETE_GENERATE_RT_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_CLEAR_HK_TLM(const CommonCmdPacket *packet)
HK テレメを初期化
TLM_MGR_CMD_TYPE
BC に登録された(テレメ生成などの)コマンドのタイプ
@ TLM_MGR_CMD_TYPE_TG_GENERATE_RT_TLM
@ TLM_MGR_CMD_TYPE_TG_FORWARD_AS_RT_TLM
@ TLM_MGR_CMD_TYPE_DR_REPLAY_TLM
@ TLM_MGR_CMD_TYPE_UNREGISTERED
まだ使われていない (これは 0 であることが必要)
@ TLM_MGR_CMD_TYPE_TG_GENERATE_ST_TLM
@ TLM_MGR_CMD_TYPE_TG_FORWARD_AS_ST_TLM
CCP_CmdRet Cmd_TLM_MGR_REGISTER_FORWARD_AS_RT_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_REGISTER_FORWARD_AS_ST_TLM(const CommonCmdPacket *packet)
AppInfo TLM_MGR_create_app(void)
TLM_MGR_BC_ROLE
BC の役割.これにて実行種別が変わる
@ TLM_MGR_BC_ROLE_HK_TLM
HK テレメ (or 全系や system で入れておきたい tlm (1 Hz))
@ TLM_MGR_BC_ROLE_LOW_FREQ_TLM
User (LOW_FREQ) テレメ (1/10 Hz)
@ TLM_MGR_BC_ROLE_HIGH_FREQ_TLM
User (HIGH_FREQ) テレメ (1 Hz)
CCP_CmdRet Cmd_TLM_MGR_INIT(const CommonCmdPacket *packet)
初期化
CCP_CmdRet Cmd_TLM_MGR_START_TLM(const CommonCmdPacket *packet)
TLM 送出開始
CCP_CmdRet Cmd_TLM_MGR_REGISTER_GENERATE_ST_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_REGISTER_GENERATE_RT_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_CLEAR_HIGH_FREQ_TLM(const CommonCmdPacket *packet)
HIGH_FREQ テレメを初期化
CCP_CmdRet Cmd_TLM_MGR_DELETE_REPLAY_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_DELETE_FORWARD_AS_RT_TLM(const CommonCmdPacket *packet)
TLM_MGR_ERR_CODE
汎用エラーコード
@ TLM_MGR_ERR_CODE_CMD_NOT_FOUND
登録コマンド消去時に,コマンドが見つからない
@ TLM_MGR_ERR_CODE_CMD_FULL
これ以上テレメ生成コマンドを登録できない
@ TLM_MGR_ERR_CODE_INVALID_CMD_TYPE
不正な TLM_MGR_CMD_TYPE
@ TLM_MGR_ERR_CODE_OTHER_ERR
その他のエラー
@ TLM_MGR_ERR_CODE_BCT_ERR
BCT 関連のエラー
@ TLM_MGR_ERR_CODE_OK
@ TLM_MGR_ERR_CODE_INVALID_BC_ROLE
不正な TLM_MGR_BC_ROLE
CCP_CmdRet Cmd_TLM_MGR_REGISTER_REPLAY_TLM(const CommonCmdPacket *packet)