12 #include "../TlmCmd/block_command_loader.h"
13 #include "../TlmCmd/block_command_executor.h"
14 #include "../TlmCmd/command_analyze.h"
15 #include "../Library/print.h"
16 #include "../Library/endian.h"
17 #include "../Library/result.h"
18 #include "../TlmCmd/common_cmd_packet_util.h"
25 #define TLM_MGR_BC_ROLE_AT_BC_0 (TLM_MGR_BC_ROLE_HK_TLM)
26 #define TLM_MGR_BC_ROLE_AT_BC_1 (TLM_MGR_BC_ROLE_HIGH_FREQ_TLM)
27 #define TLM_MGR_BC_ROLE_AT_BC_2 (TLM_MGR_BC_ROLE_HIGH_FREQ_TLM)
28 #define TLM_MGR_BC_ROLE_AT_BC_3 (TLM_MGR_BC_ROLE_HIGH_FREQ_TLM)
29 #define TLM_MGR_BC_ROLE_AT_BC_4 (TLM_MGR_BC_ROLE_LOW_FREQ_TLM)
30 #define TLM_MGR_BC_ROLE_AT_BC_5 (TLM_MGR_BC_ROLE_HIGH_FREQ_TLM)
31 #define TLM_MGR_BC_ROLE_AT_BC_6 (TLM_MGR_BC_ROLE_HIGH_FREQ_TLM)
32 #define TLM_MGR_BC_ROLE_AT_BC_7 (TLM_MGR_BC_ROLE_HIGH_FREQ_TLM)
33 #define TLM_MGR_BC_ROLE_AT_BC_8 (TLM_MGR_BC_ROLE_HIGH_FREQ_TLM)
34 #define TLM_MGR_BC_ROLE_AT_BC_9 (TLM_MGR_BC_ROLE_LOW_FREQ_TLM)
41 #if !(TLM_MGR_BC_ROLE_AT_BC_9 == TLM_MGR_BC_ROLE_LOW_FREQ_TLM)
42 #error TLM_MGR_BC_ROLE_AT_BC_9 should be TLM_MGR_BC_ROLE_LOW_FREQ_TLM
121 uint8_t dr_partition);
138 uint8_t dr_partition);
162 uint8_t dr_partition);
190 uint8_t dr_partition);
214 uint8_t dr_partition);
244 uint8_t dr_partition);
293 uint8_t dr_partition);
308 uint8_t dr_partition);
430 cmd_block->
bc_id = bc_id;
455 uint16_t exec_counter;
456 uint8_t cmd_table_idx;
471 if (exec_counter == bc_num)
499 uint8_t dr_partition)
542 uint8_t dr_partition)
570 param[0] = (uint8_t)tlm_id;
585 uint8_t dr_partition)
590 param[0] = (uint8_t)tlm_id;
591 param[1] = dr_partition;
612 temp = (uint16_t)apid;
614 param[2] = (uint8_t)tlm_id;
630 uint8_t dr_partition)
636 temp = (uint16_t)apid;
638 param[2] = (uint8_t)tlm_id;
639 param[3] = dr_partition;
653 #ifdef TLM_MGR_ENABLE_DR_REPLAY_TLM
657 param[0] = dr_partition;
662 Cmd_CODE_DR_REPLAY_TLM,
680 uint8_t dr_partition)
706 if (delete_cmd_elem == last_cmd_elem)
772 uint8_t dr_partition)
774 if (cmd_elem == NULL)
return;
776 cmd_elem->
apid = apid;
777 cmd_elem->
tlm_id = tlm_id;
784 if (cmd_elem == NULL)
return;
786 memset(cmd_elem, 0x00,
sizeof(*cmd_elem));
794 uint8_t idx_of_cmd_table_idxes;
795 uint8_t cmd_table_idx;
808 cmd_table_idx = register_info->
cmd_table_idxes[idx_of_cmd_table_idxes];
825 uint8_t idx_of_cmd_table_idxes;
826 uint8_t cmd_table_idx;
838 cmd_table_idx = register_info->
cmd_table_idxes[idx_of_cmd_table_idxes];
857 uint8_t dr_partition)
859 uint8_t idx_of_cmd_table_idxes;
862 uint8_t cmd_table_idx;
874 for (idx_of_cmd_table_idxes = 0; idx_of_cmd_table_idxes < register_info->
cmd_table_idxes_size; ++idx_of_cmd_table_idxes)
876 cmd_table_idx = register_info->
cmd_table_idxes[idx_of_cmd_table_idxes];
889 *found_cmd_elem = cmd_elem;
904 uint8_t dr_partition)
910 cmd_elem->
tlm_id == tlm_id)
917 cmd_elem->
tlm_id == tlm_id &&
925 cmd_elem->
apid == apid &&
926 cmd_elem->
tlm_id == tlm_id)
932 cmd_elem->
apid == apid &&
933 cmd_elem->
tlm_id == tlm_id &&
963 uint8_t cmd_table_idx;
1026 uint16_t exec_counter;
1027 const uint16_t exec_counter_offset = 2;
1042 if (exec_counter == 0)
1046 else if (exec_counter == 1)
APID
Application Process ID
AppInfo AI_create_app_info(const char *name, void(*initializer)(void), void(*entry_point)(void))
AppInfo を作る
void BCL_tool_register_rotate(cycle_t ti, bct_id_t bct_id)
ブロックコマンドの最後にローテーターの実行コマンドを追加する
void BCL_load_bc(bct_id_t pos, void(*BCL_load_func)(void))
指定されたブロックコマンドIDへの登録を安全に行うためのwrapper関数
void BCL_tool_register_deploy(cycle_t ti, bct_id_t bct_id, TLCD_ID tlcd_id)
ブロックコマンドの最後にブロックコマンドの展開コマンドを追加する
void BCL_tool_register_combine(cycle_t ti, bct_id_t bct_id)
ブロックコマンドの最後にコンバイナーの実行コマンドを追加する
void BCL_tool_register_cmd(cycle_t ti, CMD_CODE cmd_id)
ブロックコマンドの最後にコマンドを追加する
BCT_ACK BCT_overwrite_cmd(const BCT_Pos *pos, const CommonCmdPacket *packet)
既に登録されている BC の Cmd の中身を外部から上書きする
BCT_ACK BCT_make_pos(BCT_Pos *pos, const bct_id_t block, const uint8_t cmd)
BCT_Pos* を引数から作る
BCT_ACK BCT_load_cmd(const BCT_Pos *pos, CommonCmdPacket *packet)
保存データを CCP にコピーする.
BCT_ACK
BCT 関係の関数のエラーステータス
@ Cmd_CODE_TG_GENERATE_ST_TLM
@ Cmd_CODE_TG_FORWARD_AS_ST_TLM
@ Cmd_CODE_TLM_MGR_CLEAR_LOW_FREQ_TLM
@ Cmd_CODE_TLM_MGR_CLEAR_HIGH_FREQ_TLM
@ Cmd_CODE_TG_GENERATE_RT_TLM
@ Cmd_CODE_TG_FORWARD_AS_RT_TLM
@ Cmd_CODE_TLM_MGR_STOP_TLM
@ Cmd_CODE_TLM_MGR_INIT_MASTER_AND_DEPLOY_BC
@ Cmd_CODE_TLCD_CLEAR_ALL_TIMELINE
@ Cmd_CODE_TLM_MGR_CLEAR_HK_TLM
@ CCP_EXEC_ILLEGAL_PARAMETER
コマンド実行時のパラメタエラー
@ CCP_EXEC_ILLEGAL_CONTEXT
コマンド実行時のその他のエラー
CCP_UTIL_ACK CCP_form_tlc(CommonCmdPacket *packet, cycle_t ti, CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
Timeline command を生成
CCP_CmdRet CCP_form_and_exec_rtc(CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
Realtime command を生成し,即時実行する
CCP_CmdRet CCP_form_and_exec_block_deploy_cmd(TLCD_ID tl_no, bct_id_t block_no)
BC展開 command を生成し,即時実行する
CCP_CmdRet CCP_make_cmd_ret(CCP_EXEC_STS exec_sts, uint32_t err_code)
コマンド返り値である CCP_CmdRet を作成
CCP_CmdRet CCP_make_cmd_ret_without_err_code(CCP_EXEC_STS exec_sts)
コマンド返り値である CCP_CmdRet を作成(エラーコード不使用版)
CCP_UTIL_ACK
CCP Utility の汎用返り値
#define CCP_get_param_from_packet(packet, n, type)
CCP packet から,n番目のコマンド引数を取得する
void DCU_report_err(CMD_CODE cmd_code, CCP_EXEC_STS last_exec_sts)
DCUに,途中でエラーが発生したことを伝える
DCU_ACK DCU_register_next(CMD_CODE cmd_code, const uint8_t *param, uint16_t len)
次の分割の実行を登録
DCU_STATUS DCU_check_in(CMD_CODE cmd_code, uint16_t *exec_counter)
DCUにチェックインする.分割コマンド実行時,最初に呼び出す関数.
void DCU_report_finish(CMD_CODE cmd_code, CCP_EXEC_STS last_exec_sts)
DCUに,分割コマンドが実行終了したことを伝える
@ DCU_STATUS_FINISHED
実行終了 or 未実行
void * ENDIAN_memcpy(void *dest, const void *src, size_t size)
エンディアンを考慮した memcpy
RESULT
Rust でいうところの Result<(), ()> のような,汎用的な成功したかどうかだけの返り値用 enum
@ RESULT_OK
OK (C2A では慣習的に OK 系列挙子は 0 を使うので,万が一他の enum に cast されても事故が起きにくいように)
uint8_t cmd
そのブロック内でどのコマンドを指すか
CCP_EXEC_STS exec_sts
CCP_EXEC_STS.Cmd の統一的なエラーコード
BC に登録された(テレメ生成などの)コマンドの情報(BC の block ごと)
TLM_MGR_CmdElem cmds[TLM_MGR_MAX_CMD_NUM_PER_BC]
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)
TLM_MGR_CmdBlock cmd_blocks[TLM_MGR_USE_BC_NUM]
BC の各 Block ごとの情報
どう BC を管理し,テレメ生成コマンドを登録し,動かしていくかの情報.途中計算などに使う
uint8_t cmd_table_idxes_size
cmd_table_idxes の配列数
uint8_t cmd_table_idxes[TLM_MGR_USE_BC_NUM]
TLM_MGR_CmdTable.cmd_blocks のどの idx を使うか.static 確保のため,最大数 TLM_MGR_USE_BC_NUM の配列を確保
uint8_t registered_cmd_num
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 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
struct TelemetryManager::@0 register_info
CCP_CmdRet Cmd_TLM_MGR_CLEAR_USER_TLM(const CommonCmdPacket *packet)
User テレメ (HIGH_FREQ, LOW_FREQ) を初期化
static TLM_MGR_ERR_CODE TLM_MGR_form_register_tlc_(CommonCmdPacket *packet, cycle_t ti, TLM_MGR_CMD_TYPE cmd_type, APID apid, TLM_CODE tlm_id, uint8_t dr_partition)
TLM_MGR_CMD_TYPE に応じて, TLM MGR に登録する TLC を生成する
static void TLM_MGR_load_deploy_bc_(void)
master BC を deploy する BC の構築
static TLM_MGR_ERR_CODE TLM_MGR_form_tg_forward_as_rt_tlm_(CommonCmdPacket *packet, cycle_t ti, APID apid, TLM_CODE tlm_id)
TLM MGR に登録する TLC (TLM_MGR_CMD_TYPE_TG_FORWARD_AS_RT_TLM) を生成する
#define TLM_MGR_BC_ROLE_AT_BC_7
static CommonCmdPacket TLM_MGR_packet_
CCP_CmdRet Cmd_TLM_MGR_DELETE_GENERATE_ST_TLM(const CommonCmdPacket *packet)
static TLM_MGR_ERR_CODE TLM_MGR_form_dr_replay_tlm_(CommonCmdPacket *packet, cycle_t ti, uint8_t dr_partition)
TLM MGR に登録する TLC (TLM_MGR_CMD_TYPE_DR_REPLAY_TLM) を生成する
static RESULT TLM_MGR_clear_info_(void)
AppInfo 構造体のクリア
#define TLM_MGR_BC_ROLE_AT_BC_8
static RESULT TLM_MGR_init_1_(void)
初期化(分割 1/2)
CCP_CmdRet Cmd_TLM_MGR_DELETE_FORWARD_AS_ST_TLM(const CommonCmdPacket *packet)
static void TLM_MGR_init_by_am_(void)
App初期化関数
static TLM_MGR_ERR_CODE TLM_MGR_form_tg_forward_as_st_tlm_(CommonCmdPacket *packet, cycle_t ti, APID apid, TLM_CODE tlm_id, uint8_t dr_partition)
TLM MGR に登録する TLC (TLM_MGR_CMD_TYPE_TG_FORWARD_AS_ST_TLM) を生成する
static TLM_MGR_ERR_CODE TLM_MGR_find_registered_cmd_pos_(BCT_Pos *found_cmd_pos, TLM_MGR_CmdElem **found_cmd_elem, const TLM_MGR_RegisterInfo *register_info, TLM_MGR_CMD_TYPE cmd_type, APID apid, TLM_CODE tlm_id, uint8_t dr_partition)
すでに登録されているコマンドのから,指定したコマンドを検索し,その BCT_Pos と TLM_MGR_CmdElem を取得する
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 送出一時停止
static TelemetryManager telemetry_manager_
static TLM_MGR_ERR_CODE TLM_MGR_get_next_register_cmd_pos_(BCT_Pos *next_cmd_pos, TLM_MGR_CmdElem **next_cmd_elem, const TLM_MGR_RegisterInfo *register_info)
次に TLM MGR に登録するコマンドの BCT_Pos と TLM_MGR_CmdElem を取得する
static RESULT TLM_MGR_check_same_cmd_(const TLM_MGR_CmdElem *cmd_elem, TLM_MGR_CMD_TYPE cmd_type, APID apid, TLM_CODE tlm_id, uint8_t dr_partition)
TLM_MGR_CmdElem が指定したものと等しいかチェックする
static RESULT TLM_MGR_regigster_bc_settings(uint8_t cmd_table_idx, bct_id_t bc_id, TLM_MGR_BC_ROLE bc_role)
BC の設定を登録する
#define TLM_MGR_BC_ROLE_AT_BC_4
const TelemetryManager *const telemetry_manager
static TLM_MGR_RegisterInfo * TLM_MGR_get_regitster_info_from_bc_role_(TLM_MGR_BC_ROLE bc_role)
TLM_MGR_BC_ROLE に応じた TLM_MGR_RegisterInfo を取得する
CCP_CmdRet Cmd_TLM_MGR_INIT_MASTER_AND_DEPLOY_BC(const CommonCmdPacket *packet)
master bc の初期化
static TLM_MGR_ERR_CODE TLM_MGR_form_nop_tlc_(CommonCmdPacket *packet, cycle_t ti)
TLM MGR に上書きして削除するための NOP TLC を生成する
#define TLM_MGR_BC_ROLE_AT_BC_0
static TLM_MGR_ERR_CODE TLM_MGR_register_(TLM_MGR_BC_ROLE role, TLM_MGR_CMD_TYPE cmd_type, APID apid, TLM_CODE tlm_id, uint8_t dr_partition)
テレメ生成などのコマンドを TLM MGR に登録する
#define TLM_MGR_BC_ROLE_AT_BC_2
#define TLM_MGR_BC_ROLE_AT_BC_3
CCP_CmdRet Cmd_TLM_MGR_DELETE_GENERATE_RT_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_CLEAR_HK_TLM(const CommonCmdPacket *packet)
HK テレメを初期化
static void TLM_MGR_update_cmd_elem_of_cmd_table_(TLM_MGR_CmdElem *cmd_elem, TLM_MGR_CMD_TYPE cmd_type, APID apid, TLM_CODE tlm_id, uint8_t dr_partition)
TLM_MGR_CmdElem を更新する
static RESULT TLM_MGR_init_2_(void)
初期化(分割 2/2)
static TLM_MGR_ERR_CODE TLM_MGR_get_last_registered_cmd_pos_(BCT_Pos *last_cmd_pos, TLM_MGR_CmdElem **last_cmd_elem, const TLM_MGR_RegisterInfo *register_info)
すでに登録されているコマンドのうち,末尾にあるコマンドの BCT_Pos と TLM_MGR_CmdElem を取得する
static CCP_CmdRet TLM_MGR_clear_cmds_based_on_role_(CMD_CODE cmd_code, TLM_MGR_BC_ROLE bc_role, TLM_MGR_RegisterInfo *register_info)
TLM_MGR_BC_ROLE に応じて TLM_MGR_CmdTable から 1 BC の 1 block から全 cmd を消す (NPO 埋めする)
static TLM_MGR_ERR_CODE TLM_MGR_form_tg_generate_st_tlm_(CommonCmdPacket *packet, cycle_t ti, TLM_CODE tlm_id, uint8_t dr_partition)
TLM MGR に登録する TLC (TLM_MGR_CMD_TYPE_TG_GENERATE_ST_TLM) を生成する
CCP_CmdRet Cmd_TLM_MGR_REGISTER_FORWARD_AS_RT_TLM(const CommonCmdPacket *packet)
#define TLM_MGR_BC_ROLE_AT_BC_1
static void TLM_MGR_load_nop_bc_(void)
NOP で埋められた BC の構築
#define TLM_MGR_BC_ROLE_AT_BC_5
static void TLM_MGR_clear_cmd_elem_of_cmd_table_(TLM_MGR_CmdElem *cmd_elem)
TLM_MGR_CmdElem をクリアする
CCP_CmdRet Cmd_TLM_MGR_REGISTER_FORWARD_AS_ST_TLM(const CommonCmdPacket *packet)
AppInfo TLM_MGR_create_app(void)
static void TLM_MGR_load_master_bc_(void)
BC 全体を展開していく master BC の構築
static CCP_CmdRet TLM_MGR_conv_err_code_to_ccp_cmd_ret_(TLM_MGR_ERR_CODE code)
TLM_MGR_ERR_CODE から CCP_CmdRet に変換する
static TLM_MGR_ERR_CODE TLM_MGR_form_tg_generate_rt_tlm_(CommonCmdPacket *packet, cycle_t ti, TLM_CODE tlm_id)
TLM MGR に登録する TLC (TLM_MGR_CMD_TYPE_TG_GENERATE_RT_TLM) を生成する
static void TLM_MGR_clear_bc_to_nop_(bct_id_t bc_id)
指定した BC を NOP x TLM_MGR_MAX_CMD_NUM_PER_BC で埋める
CCP_CmdRet Cmd_TLM_MGR_INIT(const CommonCmdPacket *packet)
初期化
#define TLM_MGR_BC_ROLE_AT_BC_6
#define TLM_MGR_BC_ROLE_AT_BC_9
static RESULT TLM_MGR_add_bc_settings_to_register_info_(uint8_t cmd_table_idx, TLM_MGR_RegisterInfo *register_info)
TLM_MGR_RegisterInfo に BC 情報を追加
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)
static TLM_MGR_ERR_CODE TLM_MGR_delete_(TLM_MGR_BC_ROLE role, TLM_MGR_CMD_TYPE cmd_type, APID apid, TLM_CODE tlm_id, uint8_t dr_partition)
テレメ生成などのコマンドを TLM MGR から削除する
CCP_CmdRet Cmd_TLM_MGR_DELETE_FORWARD_AS_RT_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_TLM_MGR_REGISTER_REPLAY_TLM(const CommonCmdPacket *packet)
userがテレメトリ詰まりをやTL溢れを防ぎつつ,またCDHなどがテレメトリを管理しやすくするためのApp
#define TLM_MGR_MAX_CMD_NUM_PER_BC
1 BC に何個のテレメ生成などのコマンドを登録できるか.基本的に 10 固定を想定
#define TLM_MGR_USE_BC_NUM
用いる BC の数.基本的に 10 固定を想定
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
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)
@ 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_INVALID_BC_ROLE
不正な TLM_MGR_BC_ROLE
Telemetry Manager のパラメタのオーバーライド用ヘッダー