18 #include "../System/TimeManager/time_manager.h"
19 #include "../Library/endian.h"
20 #include "../System/WatchdogTimer/watchdog_timer.h"
100 if ((
unsigned char*)cmd_data == (
const unsigned char*)value)
return;
261 for (cmd = 0; cmd < length; ++cmd)
352 uint8_t tmp_length, length_a, length_b;
363 tmp_length = (uint8_t)((length_a >= length_b) ? length_a : length_b);
365 for (i = 0; i < tmp_length; ++i)
376 memcpy(&tmp_bct_cmddata, cmd_a,
sizeof(
BCT_CmdData));
475 uint16_t dst_block, src_block;
500 uint16_t max_cmd_param_len = min_cmd_param_len +
sizeof(new_cmd_param);
501 uint16_t cmd_param_len;
506 cmd_param_len = real_param_len - min_cmd_param_len;
527 for (ti = 11 - (
cycle_t)num_nop; ti < 11; ++ti)
void BC_load_defaults(void)
各ブロックコマンドIDに中身の初期値をロードしていく
BCT_ACK BCE_clear_block(const bct_id_t block)
指定された block の BCE を初期化
const BlockCommandExecutor *const block_command_executor
uint8_t BCE_is_active(const bct_id_t block)
BCT の length の getter
void BCE_load_default_func_pointer(void)
BCE_Params にデフォルトの関数ポインタを入れる
static void BCT_load_default_func_pointer_(void)
BCT_Func にデフォルトの関数ポインタを入れる
BCT_ACK BCT_copy_bct(const bct_id_t dst_block, const bct_id_t src_block)
BCT の中身を 他の BCT に COPY する
const uint8_t * BCT_get_param_head(const bct_id_t block, const uint8_t cmd)
BCT 内の Cmd の param_head の getter
BCT_ACK BCT_overwrite_cmd(const BCT_Pos *pos, const CommonCmdPacket *packet)
既に登録されている BC の Cmd の中身を外部から上書きする
CCP_CmdRet Cmd_BCT_FILL_NOP(const CommonCmdPacket *packet)
BCT_ACK BCT_clear_block(const bct_id_t block)
指定された block の BCT を初期化する
cycle_t BCT_get_ti(const bct_id_t block, const uint8_t cmd)
BCT 内の Cmd の TI の getter
void BCT_restore_pos(void)
pos を pos_stored から復旧
BCT_ACK BCT_make_pos(BCT_Pos *pos, const bct_id_t block, const uint8_t cmd)
BCT_Pos* を引数から作る
CCP_CmdRet Cmd_BCT_OVERWRITE_CMD(const CommonCmdPacket *packet)
static uint8_t BC_get_bc_length_default_(const bct_id_t block)
CCP_CmdRet Cmd_BCT_SET_BLOCK_POSITION(const CommonCmdPacket *packet)
static void BC_set_bc_cmd_data_default_(const BCT_Pos *pos, const BCT_CmdData *value)
static void BCT_set_bc_cmd_data_(const BCT_Pos *pos, const BCT_CmdData *value)
BCT_ACK BCT_load_cmd(const BCT_Pos *pos, CommonCmdPacket *packet)
保存データを CCP にコピーする.
void BCT_initialize(void)
BCT の初期化関数
const BCT_CmdData * BCT_get_bc_cmd_data(const BCT_Pos *pos)
BCT_CmdData の const pointer getter
static void BCT_set_bc_length_(const bct_id_t block, uint8_t length)
static void BCT_clear_pos_(void)
pos, pos_stored を initialize
const BlockCommandTable *const block_command_table
CCP_CmdRet Cmd_BCT_CLEAR_BLOCK(const CommonCmdPacket *packet)
CMD_CODE BCT_get_id(const bct_id_t block, const uint8_t cmd)
BCT 内の Cmd の CMD_CODE の getter
static BCT_ACK BCT_save_cmd_(const BCT_Pos *pos, const CommonCmdPacket *packet)
pos の指す場所に packet の内容を保存 (TCP_PRM_HDR_LEN の長さも考慮)
static BCT_CmdData * BCT_get_bc_cmd_data_(const BCT_Pos *pos)
void BCT_store_pos(void)
pos を pos_stored に保存
static void BC_set_bc_length_default_(const bct_id_t block, uint8_t length)
CCP_CmdRet BCT_convert_bct_ack_to_ccp_cmd_ret(BCT_ACK ack)
返り値用 enum 変換用関数
static BCT_CmdData * BC_get_bc_cmd_data_default_(const BCT_Pos *pos)
BCT_ACK BCT_swap_contents(const bct_id_t block_a, const bct_id_t block_b)
BCT の block の指す中身を入れ替える
BCT_ACK BCT_swap_address(const bct_id_t block_a, const bct_id_t block_b)
BCT の block の指すポインタ & func を入れ替える
CCP_CmdRet Cmd_BCT_COPY_BCT(const CommonCmdPacket *packet)
static BCT_ACK BCT_set_position_(const BCT_Pos *pos)
uint8_t BCT_get_bc_length(const bct_id_t block)
BCT の length の getter
BCT_ACK BCT_check_position(const BCT_Pos *pos)
BCT_Pos* の validate
static BlockCommandTable block_command_table_
BCT_ACK BCT_register_cmd(const CommonCmdPacket *packet)
Cmd を block_command_table->pos に登録する
#define SIZE_OF_BCT_ID_T
bct_id_t の型サイズ.メモリインパクトがそれなりにあるので,可変に
#define BCT_CMD_MAX_LENGTH
#define BCT_MAX_BLOCKS
BCのIDの最大数
BCT_ACK
BCT 関係の関数のエラーステータス
#define BCT_MAX_CMD_NUM
1つのBCに最大何個のコマンドを挿入できるか
void BCUS_load_user_settings(BlockCommandTable *block_command_table, BlockCommandExecutor *block_command_executor)
BCT, BCE に関してのメモリ確保や getter, setter を user settings として上書きする
int BCUS_bc_should_clear(const bct_id_t block)
その block をクリアすべきかどうか判別する
CCSDS で規定される Space Packet の コマンド版の実装
#define CSP_SND_HDR_LEN
Secondary Header 長
uint16_t CA_get_cmd_param_min_len(CMD_CODE cmd_code)
最小コマンドパラメタ長を取得する
@ Cmd_CODE_BCT_OVERWRITE_CMD
uint16_t CCP_get_packet_len(const CommonCmdPacket *packet)
パケット長を取得
@ CCP_EXEC_UNKNOWN
内部処理用.使わない.
@ CCP_EXEC_ILLEGAL_LENGTH
コマンド実行時のコマンド引数長エラー
@ CCP_EXEC_ILLEGAL_PARAMETER
コマンド実行時のパラメタエラー
@ CCP_EXEC_CMD_NOT_DEFINED
CA_execute_cmd で用いる
@ CCP_EXEC_ILLEGAL_CONTEXT
コマンド実行時のその他のエラー
CMD_CODE CCP_get_id(const CommonCmdPacket *packet)
CMD ID を取得
uint16_t CCP_get_param_len(const CommonCmdPacket *packet)
CMD パラメタ長を取得
const uint8_t * CCP_get_param_head(const CommonCmdPacket *packet)
先頭のパラメタのポインタを取得
cycle_t CCP_get_ti(const CommonCmdPacket *packet)
TI を取得
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_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 を作成(エラーコード不使用版)
uint16_t CCP_get_raw_param_from_packet(const CommonCmdPacket *packet, void *dest, uint16_t max_copy_len)
CCP packet から,RAW コマンド引数を取得する
#define CCP_get_param_from_packet(packet, n, type)
CCP packet から,n番目のコマンド引数を取得する
void * ENDIAN_memcpy(void *dest, const void *src, size_t size)
エンディアンを考慮した memcpy
C2A 全体を流れる Common Packet の配送を制御する
CCSDS で規定される Space Packet の実装
#define SP_PRM_HDR_LEN
Packet Primary Header 長
void(* set_bc_length_)(const bct_id_t block, uint8_t length)
length の setter
void(* set_bc_cmd_data_)(const BCT_Pos *pos, const BCT_CmdData *value)
cmd_data の setter
uint8_t(* get_bc_length_)(const bct_id_t block)
length の getter
BCT_CmdData *(* get_bc_cmd_data_)(const BCT_Pos *pos)
cmd_data の getter
uint8_t cmd
そのブロック内でどのコマンドを指すか
BCT の本体. 実際に BC の cmd が確保されている
uint8_t length
cmds に保存されているコマンド数
BCT_CmdData cmds[BCT_MAX_CMD_NUM]
各 cmd が保存される配列
BCT_Table * blocks[BCT_MAX_BLOCKS]
BCTの各BC.好きな場所で確保できる様にポインタにしている
BCT_Func func[BCT_MAX_BLOCKS]
BCT関係の関数
uint8_t packet[CSP_MAX_LEN]
void WDT_clear_wdt(void)
WDTのクリア