-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
6521bc2
commit 21cd1d3
Showing
7 changed files
with
167 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
Examples/mobc/src/src_user/Settings/TlmCmd/command_dispatcher_manager_params.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
/** | ||
* @file | ||
* @brief Command Dispatcher Manager のパラメタのオーバーライド用ヘッダー | ||
*/ | ||
#ifndef COMMAND_DISPATCHER_MANAGER_PARAMS_H_ | ||
#define COMMAND_DISPATCHER_MANAGER_PARAMS_H_ | ||
|
||
#undef CDIS_MGR_MAX_NUM_OF_CDIS | ||
|
||
#define CDIS_MGR_MAX_NUM_OF_CDIS (8) // core + AOBC | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,74 @@ | ||
#pragma section REPRO | ||
/** | ||
* @file | ||
* @brief Command Dispatcher Manager | ||
* @note 様々な CDIS を一括管理する | ||
* @note 例えば,様々な CDIS のテレメトリをいちいち作るのはめんどくさい(とくに MOBC にある sub OBC 用の CDIS)ため,それを一括で提供する | ||
*/ | ||
#include "command_dispatcher_manager.h" | ||
#include <stddef.h> | ||
#include <string.h> | ||
#include "./common_cmd_packet_util.h" | ||
|
||
static CommandDispatcherManager command_dispatcher_manager_; | ||
const CommandDispatcherManager* const command_dispatcher_manager = &command_dispatcher_manager_; | ||
|
||
|
||
static void CDIS_MGR_initialize(void) | ||
{ | ||
uint8_t idx; | ||
memset(&command_dispatcher_manager_, 0x00, sizeof(command_dispatcher_manager_)); | ||
for (idx = 0; idx < CDIS_MGR_MAX_NUM_OF_CDIS; ++idx) | ||
{ | ||
command_dispatcher_manager_.cdises[idx] = NULL; | ||
} | ||
} | ||
|
||
|
||
RESULT CDIS_MGR_register_cdis(const CommandDispatcher* cdis) | ||
{ | ||
if (CDIS_MGR_find_cdis_(cdis) == RESULT_OK) | ||
{ | ||
return RESULT_OK; | ||
} | ||
|
||
if (command_dispatcher_manager_.num_of_cdis >= CDIS_MGR_MAX_NUM_OF_CDIS) | ||
{ | ||
return RESULT_ERR; | ||
} | ||
|
||
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) | ||
{ | ||
uint8_t i; | ||
for (i = 0; i < command_dispatcher_manager_.num_of_cdis; ++i) | ||
{ | ||
if (command_dispatcher_manager_.cdises[i] == cdis) | ||
{ | ||
*idx = i; | ||
return RESULT_OK; | ||
} | ||
} | ||
return RESULT_ERR; | ||
} | ||
|
||
|
||
CCP_CmdRet Cmd_CDIS_MGR_SET_IDX_FOR_TLM(const CommonCmdPacket* packet) | ||
{ | ||
uint8_t idx_for_tlm = CCP_get_param_from_packet(packet, 0, uint8_t); | ||
if (idx_for_tlm >= command_dispatcher_manager_.num_of_cdis) | ||
{ | ||
CCP_make_cmd_ret(CCP_EXEC_ILLEGAL_PARAMETER, idx_for_tlm); | ||
} | ||
|
||
command_dispatcher_manager_.idx_for_tlm = idx_for_tlm; | ||
return CCP_make_cmd_ret_without_err_code(CCP_EXEC_SUCCESS); | ||
} | ||
|
||
#pragma section |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
/** | ||
* @file | ||
* @brief Command Dispatcher Manager | ||
* @note 様々な CDIS を一括管理する | ||
* @note 例えば,様々な CDIS のテレメトリをいちいち作るのはめんどくさい(とくに MOBC にある sub OBC 用の CDIS)ため,それを一括で提供する | ||
*/ | ||
#ifndef COMMAND_DISPATCHER_MANAGER_H_ | ||
#define COMMAND_DISPATCHER_MANAGER_H_ | ||
|
||
#include "./common_cmd_packet.h" | ||
#include "./command_dispatcher.h" | ||
#include "../Library/result.h" | ||
|
||
#define CDIS_MGR_MAX_NUM_OF_CDIS (7) /*!< 保持する CDIS の最大数 | ||
RT, TL * 4, GS, TDSP */ | ||
|
||
// CDIS_MGR_MAX_NUM_OF_CDIS の user オーバーライド | ||
#include <src_user/Settings/TlmCmd/command_dispatcher_manager_params.h> | ||
|
||
/** | ||
* @struct CommandDispatcherManager | ||
* @brief CommandDispatcherManager の AppInfo 構造体 | ||
*/ | ||
typedef struct | ||
{ | ||
const CommandDispatcher* cdises[CDIS_MGR_MAX_NUM_OF_CDIS]; | ||
uint8_t num_of_cdis; | ||
uint8_t idx_for_tlm; | ||
} CommandDispatcherManager; | ||
|
||
extern const CommandDispatcherManager* const command_dispatcher_manager; | ||
|
||
|
||
/** | ||
* @brief Command Dispatcher Manager の初期化 | ||
* @param void | ||
* @return void | ||
*/ | ||
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 に登録する | ||
* @note CDIS_init から呼ばれることを想定 | ||
* @note 同じアプリ内でも CDIS_init は複数回呼ばれる可能性があるので,重複登録はケアされる | ||
* @param cdis: 登録する cdis のポインタ | ||
* @retval RESULT_OK: 登録に成功 or すでに登録されている | ||
* @retval RESULT_ERR: 登録に失敗(サイズオーバー) | ||
*/ | ||
RESULT CDIS_MGR_register_cdis(const CommandDispatcher* cdis); | ||
|
||
CCP_CmdRet Cmd_CDIS_MGR_SET_IDX_FOR_TLM(const CommonCmdPacket* packet); | ||
|
||
#endif |