Skip to content

Commit

Permalink
update CDIS_init
Browse files Browse the repository at this point in the history
  • Loading branch information
meltingrabbit committed Jul 20, 2023
1 parent 21cd1d3 commit caa41a6
Show file tree
Hide file tree
Showing 9 changed files with 68 additions and 56 deletions.
3 changes: 1 addition & 2 deletions Applications/gs_command_dispatcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,7 @@ AppInfo GSCD_create_app(void)

static RESULT GSCD_init_(void)
{
gs_command_dispatcher_ = CDIS_init(&PH_gs_cmd_list);
return RESULT_OK;
return CDIS_init(&gs_command_dispatcher_, &PH_gs_cmd_list);
}

static RESULT GSCD_dispatch_(void)
Expand Down
3 changes: 1 addition & 2 deletions Applications/realtime_command_dispatcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,7 @@ AppInfo RTCD_create_app(void)

static RESULT RTCD_init_(void)
{
realtime_command_dispatcher_ = CDIS_init(&PH_rt_cmd_list);
return RESULT_OK;
return CDIS_init(&realtime_command_dispatcher_, &PH_rt_cmd_list);
}

static RESULT RTCD_dispatch_(void)
Expand Down
13 changes: 5 additions & 8 deletions Applications/timeline_command_dispatcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ AppInfo TLCD_gs_create_app(void)

static RESULT TLCD_gs_init_(void)
{
timeline_command_dispatcher_.dispatcher[TLCD_ID_FROM_GS] = CDIS_init(&(PH_tl_cmd_list[TLCD_ID_FROM_GS]));
RESULT ret = CDIS_init(&timeline_command_dispatcher_.dispatcher[TLCD_ID_FROM_GS], &(PH_tl_cmd_list[TLCD_ID_FROM_GS]));

// タイムラインコマンドのテレメトリ変数初期設定
// すべてのタイムラインで共用なので TLCD_gs で代表して初期化
Expand All @@ -56,7 +56,7 @@ static RESULT TLCD_gs_init_(void)

memset(&TLCD_null_packet_, 0, sizeof(TLCD_null_packet_));
TLCD_update_tl_list_for_tlm(TLCD_ID_FROM_GS);
return RESULT_OK;
return ret;
}

static RESULT TLCD_gs_dispatch_(void)
Expand All @@ -72,8 +72,7 @@ AppInfo TLCD_bc_create_app(void)

static RESULT TLCD_bc_init_(void)
{
timeline_command_dispatcher_.dispatcher[TLCD_ID_DEPLOY_BC] = CDIS_init(&(PH_tl_cmd_list[TLCD_ID_DEPLOY_BC]));
return RESULT_OK;
return CDIS_init(&timeline_command_dispatcher_.dispatcher[TLCD_ID_DEPLOY_BC], &(PH_tl_cmd_list[TLCD_ID_DEPLOY_BC]));
}

static RESULT TLCD_bc_dispatch_(void)
Expand All @@ -89,8 +88,7 @@ AppInfo TLCD_tlm_create_app(void)

static RESULT TLCD_tlm_init_(void)
{
timeline_command_dispatcher_.dispatcher[TLCD_ID_DEPLOY_TLM] = CDIS_init(&(PH_tl_cmd_list[TLCD_ID_DEPLOY_TLM]));
return RESULT_OK;
return CDIS_init(&timeline_command_dispatcher_.dispatcher[TLCD_ID_DEPLOY_TLM], &(PH_tl_cmd_list[TLCD_ID_DEPLOY_TLM]));
}

static RESULT TLCD_tlm_dispatch_(void)
Expand All @@ -107,8 +105,7 @@ AppInfo TLCD_mis_create_app(void)

static RESULT TLCD_mis_init_(void)
{
timeline_command_dispatcher_.dispatcher[TLCD_ID_FROM_GS_FOR_MISSION] = CDIS_init(&(PH_tl_cmd_list[TLCD_ID_FROM_GS_FOR_MISSION]));
return RESULT_OK;
return CDIS_init(&timeline_command_dispatcher_.dispatcher[TLCD_ID_FROM_GS_FOR_MISSION], &(PH_tl_cmd_list[TLCD_ID_FROM_GS_FOR_MISSION]));
}

static RESULT TLCD_mis_dispatch_(void)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,8 +85,7 @@ AppInfo DI_AOBC_cmd_dispatcher(void)

static RESULT DI_AOBC_cmd_dispatcher_init_(void)
{
DI_AOBC_cdis_ = CDIS_init(&PH_aobc_cmd_list);
return RESULT_OK;
return CDIS_init(&DI_AOBC_cdis_, &PH_aobc_cmd_list);
}


Expand Down
2 changes: 1 addition & 1 deletion System/TaskManager/task_dispatcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ void TDSP_initialize(void)
PL_initialize_with_ccp(task_stock_, packet_stock_, TDSP_TASK_MAX, &TDSP_task_list_);

// タスクリストを初期化し、INITIALモードのブロックコマンドを展開する
task_dispatcher_.tskd = CDIS_init(&TDSP_task_list_);
CDIS_init(&task_dispatcher_.tskd, &TDSP_task_list_);
task_dispatcher_.task_list_id = MM_get_tasklist_id_of_mode(MD_MODEID_START_UP);
TDSP_deploy_block_as_task_list_();
task_dispatcher_.activated_at = 0;
Expand Down
53 changes: 33 additions & 20 deletions TlmCmd/command_dispatcher.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ typedef enum
{
CDIS_EL_LOCAL_ID_NULL_PARAM, //!< NULL 引数
CDIS_EL_LOCAL_ID_INVALID_PL, //!< 不正な PL
CDIS_EL_LOCAL_ID_CDIS_MGR_ERR, //!< CDIS MGR キャパオーバー
CDIS_EL_LOCAL_ID_UNKNOWN
} CDIS_EL_LOCAL_ID;

Expand All @@ -33,34 +34,32 @@ typedef enum
static void CDIS_clear_exec_info_(CDIS_ExecInfo* exec_info);


CommandDispatcher CDIS_init(PacketList* pl)
RESULT CDIS_init(CommandDispatcher* cdis, PacketList* pl);
{
CommandDispatcher cdis;
static uint8_t is_first_call = 1;
static uint8_t init_counter_ = 0;
static uint8_t is_first_call_ = 1;
static uint8_t cdis_overflow_counter_ = 0;
RESULT ret;

if (is_first_call)
if (is_first_call_)
{
CDIS_MGR_initialize();
}
is_first_call = 0;
is_first_call_ = 0;

// FIXME: カウンタやめる. mgr に登録されるものは再利用に
cdis.idx = init_counter_;
init_counter_++;
// 初期化
memset(cdis, 0x00, sizeof(CommandDispatcher));

// コマンド実行情報を初期化
CDIS_clear_exec_info_(&cdis.prev);
CDIS_clear_exec_info_(&cdis.prev_err);
CDIS_clear_exec_info_(&cdis->prev);
CDIS_clear_exec_info_(&cdis->prev_err);

// 実行エラーカウンタを0に初期化
cdis.error_counter = 0;
// 実行エラーカウンタを初期化
CDIS_clear_error_status(cdis);

// 実行中断フラグを無効に設定
cdis.lockout = 0;

cdis->lockout = 0;
// 異常時実行中断フラグを無効に設定
cdis.stop_on_error = 0;
cdis->stop_on_error = 0;

// 処理対象とするPacketListをクリアして登録
if (pl == NULL)
Expand All @@ -70,7 +69,7 @@ CommandDispatcher CDIS_init(PacketList* pl)
CDIS_EL_LOCAL_ID_NULL_PARAM,
EL_ERROR_LEVEL_HIGH,
0);
return cdis;
return RESULT_ERR;
}
if (PL_get_packet_type(pl) != PL_PACKET_TYPE_CCP)
{
Expand All @@ -79,12 +78,26 @@ CommandDispatcher CDIS_init(PacketList* pl)
CDIS_EL_LOCAL_ID_INVALID_PL,
EL_ERROR_LEVEL_HIGH,
(uint32_t)pl);
return cdis;
return RESULT_ERR;
}
PL_clear_list(pl);
cdis.pl = pl;
cdis->pl = pl;

ret = CDIS_MGR_register_cdis(cdis, &cdis->idx);
if (ret != RESULT_OK)
{
// CDIS MGR のキャパオーバー
EL_record_event((EL_GROUP)EL_CORE_GROUP_CDIS_INTERNAL_ERR,
CDIS_EL_LOCAL_ID_CDIS_MGR_ERR,
EL_ERROR_LEVEL_LOW,
(uint32_t)cdis);
cdis_overflow_counter_++;
// 仕方がないのでユニークな idx を割り振る(同一 CDIS でも初期化のたびに異なる idx になってしまう)
cdis->idx = cdis_overflow_counter_ + CDIS_MGR_MAX_NUM_OF_CDIS;
return RESULT_ERR;
}

return cdis;
return RESULT_OK;
}


Expand Down
11 changes: 7 additions & 4 deletions TlmCmd/command_dispatcher.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include "common_cmd_packet.h"
#include "packet_list.h"
#include "../System/TimeManager/obc_time.h"
#include "../Library/result.h"
#include <src_user/TlmCmd/command_definitions.h>

/**
Expand Down Expand Up @@ -39,12 +40,14 @@ typedef struct


/**
* @brief CDIS の初期化と取得
* @brief CDIS の初期化
* @note 各種 CommandDispatcher App (Realtime Command Dispatcher とか) でこれを呼び,使う
* @param[in] pl: この CDIS と紐付けるコマンドキューの PacketList
* @return 初期化された CommandDispatcher
* @param[out] cdis: 初期化する CDIS
* @param[in] pl: この CDIS と紐付けるコマンドキューの PacketList
* @retval RESULT_OK: 正常終了
* @retval RESULT_ERR: 不正入力 or CDIS の初期化はしたが, CDIS_MGR への登録に失敗した(キャパオーバー)
*/
CommandDispatcher CDIS_init(PacketList* pl);
RESULT CDIS_init(CommandDispatcher* cdis, PacketList* pl);

/**
* @brief CDIS に登録されているコマンドキューからコマンドを実行
Expand Down
18 changes: 15 additions & 3 deletions TlmCmd/command_dispatcher_manager.c
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,17 @@
#include <string.h>
#include "./common_cmd_packet_util.h"

// FIXME: きちんとテストする
/**
* @brief cdis を cdis mgr に登録されているか探し,見つかった場合は idx を返す
* @note CDIS_init から呼ばれることを想定
* @param[in] cdis: 探す cdis のポインタ
* @param[out] cdis: 見つかった idx
* @retval RESULT_OK: 見つかった(登録されている)
* @retval RESULT_ERR: 見つからず(登録されていない)
*/
static CDIS_MGR_find_cdis_(const CommandDispatcher* cdis, uint8_t* idx);

static CommandDispatcherManager command_dispatcher_manager_;
const CommandDispatcherManager* const command_dispatcher_manager = &command_dispatcher_manager_;

Expand All @@ -25,9 +36,9 @@ static void CDIS_MGR_initialize(void)
}


RESULT CDIS_MGR_register_cdis(const CommandDispatcher* cdis)
RESULT CDIS_MGR_register_cdis(const CommandDispatcher* cdis, uint8_t* idx)
{
if (CDIS_MGR_find_cdis_(cdis) == RESULT_OK)
if (CDIS_MGR_find_cdis_(cdis, idx) == RESULT_OK)
{
return RESULT_OK;
}
Expand All @@ -37,14 +48,15 @@ RESULT CDIS_MGR_register_cdis(const CommandDispatcher* cdis)
return RESULT_ERR;
}

*idx = command_dispatcher_manager_.num_of_cdis;
command_dispatcher_manager_.cdises[command_dispatcher_manager_.num_of_cdis] = cdis;
command_dispatcher_manager_.num_of_cdis++;

return RESULT_OK;
}


RESULT CDIS_MGR_find_cdis(const CommandDispatcher* cdis, uint8_t* idx)
static CDIS_MGR_find_cdis_(const CommandDispatcher* cdis, uint8_t* idx)
{
uint8_t i;
for (i = 0; i < command_dispatcher_manager_.num_of_cdis; ++i)
Expand Down
18 changes: 4 additions & 14 deletions TlmCmd/command_dispatcher_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,26 +38,16 @@ extern const CommandDispatcherManager* const command_dispatcher_manager;
*/
void CDIS_MGR_initialize(void);

// FIXME: きちんとテストする
/**
* @brief cdis を cdis mgr に登録されているか探し,見つかった場合は idx を返す
* @note CDIS_init から呼ばれることを想定
* @param[in] cdis: 探す cdis のポインタ
* @param[out] cdis: 見つかった idx
* @retval RESULT_OK: 見つかった(登録されている)
* @retval RESULT_ERR: 見つからず(登録されていない)
*/
RESULT CDIS_MGR_find_cdis(const CommandDispatcher* cdis, uint8_t* idx);

/**
* @brief cdis を cdis mgr に登録する
* @brief cdis を cdis mgr に登録すし,登録した idx を返す
* @note CDIS_init から呼ばれることを想定
* @note 同じアプリ内でも CDIS_init は複数回呼ばれる可能性があるので,重複登録はケアされる
* @param cdis: 登録する cdis のポインタ
* @param[in] cdis: 登録する cdis のポインタ
* @param[out] cdis: 登録した idx
* @retval RESULT_OK: 登録に成功 or すでに登録されている
* @retval RESULT_ERR: 登録に失敗(サイズオーバー)
*/
RESULT CDIS_MGR_register_cdis(const CommandDispatcher* cdis);
RESULT CDIS_MGR_register_cdis(const CommandDispatcher* cdis, uint8_t* idx);

CCP_CmdRet Cmd_CDIS_MGR_SET_IDX_FOR_TLM(const CommonCmdPacket* packet);

Expand Down

0 comments on commit caa41a6

Please sign in to comment.