8 #include "../Library/endian.h"
117 if (param == NULL && len != 0)
142 if (param == NULL && len != 0)
170 if (param == NULL && len != 0)
192 if (param == NULL && len != 0)
211 const uint8_t* param;
248 if (packet == NULL)
return;
297 if (head <= ti && ti <= tail)
303 for (i = 0; i < active_nodes; ++i)
307 if (current == NULL)
break;
313 else if (current_ti == ti)
322 current = current->
next;
385 #ifdef TLCD_ENABLE_MISSION_TL
386 case TLCD_ID_FROM_GS_FOR_MISSION:
387 return CCP_EXEC_TYPE_TL_FOR_MISSION;
401 uint8_t param_size = 1;
421 uint8_t param_size = 2;
441 uint8_t param_size = 4;
461 uint8_t param_size = 8;
489 if (copy_len < 0)
return 0;
490 if (max_copy_len != 0 && copy_len > max_copy_len)
492 copy_len = max_copy_len;
496 return (uint16_t)copy_len;
520 return (len < 0) ? 0 : (uint16_t)len;
531 for (i = 0; i < n; ++i)
APID
Application Process ID
#define SIZE_OF_BCT_ID_T
bct_id_t の型サイズ.メモリインパクトがそれなりにあるので,可変に
#define BCT_MAX_BLOCKS
BCのIDの最大数
uint8_t CA_get_cmd_param_num(CMD_CODE cmd_code)
コマンドパラメタ数を取得する
uint8_t CA_get_cmd_param_size(CMD_CODE cmd_code, uint8_t n)
コマンドパラメタサイズを取得する
int CA_has_raw_param(CMD_CODE cmd_code)
RAW パラメタを持っているか?
uint16_t CA_get_cmd_param_min_len(CMD_CODE cmd_code)
最小コマンドパラメタ長を取得する
CA_ACK CA_ckeck_cmd_param_len(CMD_CODE cmd_code, uint16_t param_len)
コマンドパラメタ長をチェックする
#define CA_MAX_CMDS
コマンドテーブルサイズ.すなわち登録できる最大コマンド数
@ Cmd_CODE_TLCD_DEPLOY_BLOCK
@ Cmd_CODE_AM_EXECUTE_APP
void CCP_set_param(CommonCmdPacket *packet, const uint8_t *param, uint16_t len)
パラメタを設定
uint16_t CCP_get_max_param_len(void)
CMD パラメタ長の最大値を取得
void CCP_set_apid(CommonCmdPacket *packet, APID apid)
APID を設定
void CCP_set_ti(CommonCmdPacket *packet, cycle_t ti)
TI を設定
void CCP_set_common_hdr(CommonCmdPacket *packet)
共通部分の Header を構築
@ CCP_EXEC_PACKET_FMT_ERR
packet handler, ccp util で用いる
CMD_CODE CCP_get_id(const CommonCmdPacket *packet)
CMD ID を取得
void CCP_set_dest_type(CommonCmdPacket *packet, CCP_DEST_TYPE type)
DEST_TYPE を設定
uint16_t CCP_get_param_len(const CommonCmdPacket *packet)
CMD パラメタ長を取得
void CCP_set_exec_type(CommonCmdPacket *packet, CCP_EXEC_TYPE type)
EXEC_TYPE を設定
const uint8_t * CCP_get_param_head(const CommonCmdPacket *packet)
先頭のパラメタのポインタを取得
cycle_t CCP_get_ti(const CommonCmdPacket *packet)
TI を取得
void CCP_set_id(CommonCmdPacket *packet, CMD_CODE id)
CMD ID を設定
@ CCP_EXEC_TYPE_TL_DEPLOY_BC
@ CCP_EXEC_TYPE_RT
RT : Realtime Command
@ CCP_EXEC_TYPE_TL_DEPLOY_TLM
@ CCP_EXEC_TYPE_TL_FROM_GS
TL : Timeline Command
uint64_t * CCP_get_8byte_param_from_packet(const CommonCmdPacket *packet, uint8_t n)
CCP packet から,サイズが 8 byte のコマンド引数を取得する
void CCP_form_nop_rtc_(CommonCmdPacket *packet)
NOP cmd の RTC CCP を作る
static CommonCmdPacket CCP_util_packet_
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_UTIL_ACK CCP_prepare_int64_param_for_packet(int64_t param)
Param Generator で int64_t のパラメタを登録
CCP_UTIL_ACK CCP_prepare_uint32_param_for_packet(uint32_t param)
Param Generator で uint32_t のパラメタを登録
CCP_UTIL_ACK CCP_prepare_int8_param_for_packet(int8_t param)
Param Generator で int8_t のパラメタを登録
CCP_UTIL_ACK CCP_prepare_uint8_param_for_packet(uint8_t param)
Param Generator で uint8_t のパラメタを登録
CCP_UTIL_ACK CCP_prepare_int16_param_for_packet(int16_t param)
Param Generator で int16_t のパラメタを登録
static void CCP_form_rtc_(CommonCmdPacket *packet, CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
RealTime Command を生成する. CCP_form_* の実体.
CCP_UTIL_ACK CCP_prepare_uint64_param_for_packet(uint64_t param)
Param Generator で uint64_t のパラメタを登録
uint16_t * CCP_get_2byte_param_from_packet(const CommonCmdPacket *packet, uint8_t n)
CCP packet から,サイズが 2 byte のコマンド引数を取得する
CCP_UTIL_ACK CCP_prepare_int32_param_for_packet(int32_t param)
Param Generator で int32_t のパラメタを登録
CCP_UTIL_ACK CCP_form_tlc_to_other_obc(CommonCmdPacket *packet, cycle_t ti, APID apid, CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
他の OBC のコマンドを TL として生成
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 を生成し,即時実行する
void CCP_form_app_cmd(CommonCmdPacket *packet, cycle_t ti, AR_APP_ID id)
App 実行 TL コマンドを生成
CCP_UTIL_ACK CCP_prepare_uint16_param_for_packet(uint16_t param)
Param Generator で uint16_t のパラメタを登録
static CCP_ParamGenerator CCP_param_generator_
uint32_t * CCP_get_4byte_param_from_packet(const CommonCmdPacket *packet, uint8_t n)
CCP packet から,サイズが 4 byte のコマンド引数を取得する
PH_ACK CCP_register_tlc_asap(cycle_t ti, TLCD_ID tlcd_id, CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
Timeline command を登録 (ASAP 版)
PH_ACK CCP_register_tlc(cycle_t ti, TLCD_ID tlcd_id, 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_UTIL_ACK CCP_prepare_bct_id_param_for_packet(bct_id_t param)
Param Generator で bct_id_t のパラメタを登録
CCP_EXEC_TYPE CCP_get_exec_type_from_tlcd_id(TLCD_ID tlcd_id)
TLCD ID から CCP_EXEC_TYPE を取得する
CCP_CmdRet CCP_make_cmd_ret_without_err_code(CCP_EXEC_STS exec_sts)
コマンド返り値である CCP_CmdRet を作成(エラーコード不使用版)
CCP_UTIL_ACK CCP_prepare_double_param_for_packet(double param)
Param Generator で double のパラメタを登録
static CCP_UTIL_ACK CCP_raise_err_at_param_generator_(void)
Param Generator でエラーを発生した際に呼ぶエラー保存関数
void CCP_init_param_for_packet(CMD_CODE cmd_id)
Param Generator を初期化
uint8_t * CCP_get_1byte_param_from_packet(const CommonCmdPacket *packet, uint8_t n)
CCP packet から,サイズが 1 byte のコマンド引数を取得する
CCP_UTIL_ACK CCP_prepare_float_param_for_packet(float param)
Param Generator で float のパラメタを登録
CCP_CmdRet CCP_form_and_exec_rtc_to_other_obc(APID apid, CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
他の OBC のコマンドを RT として生成し,即時実行する
uint16_t CCP_get_raw_param_from_packet(const CommonCmdPacket *packet, void *dest, uint16_t max_copy_len)
CCP packet から,RAW コマンド引数を取得する
CCP_UTIL_ACK CCP_form_block_deploy_cmd(CommonCmdPacket *packet, TLCD_ID tl_no, bct_id_t block_no)
BC展開 Realtime command を生成
static CCP_UTIL_ACK CCP_calc_param_offset_(CMD_CODE cmd_id, uint8_t n, uint16_t *offset)
CCP パラメタ開始位置に対する n 番目の引数の offset を計算する
const uint8_t * CCP_get_raw_param_head(const CommonCmdPacket *packet)
CCP packet から,RAW コマンド引数の先頭ポインタを取得する
CCP_UTIL_ACK CCP_get_prepared_param_for_packet(const uint8_t **param_head, uint16_t *len)
Param Generator から完成した param を取得する
void CCP_convert_rtc_to_tlc(CommonCmdPacket *packet, cycle_t ti)
Realtime Command から Timeline Command へ変換
CCP_UTIL_ACK CCP_form_rtc_to_other_obc(CommonCmdPacket *packet, APID apid, CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
他の OBC のコマンドを RT として生成
CCP_UTIL_ACK CCP_prepare_raw_param_for_packet(const uint8_t *param, uint16_t len)
Param Generator で raw パラメタを登録
PH_ACK CCP_register_rtc(CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
Realtime command を登録
static CCP_UTIL_ACK CCP_prepare_param_for_packet_(void *param, uint8_t byte)
Param Generator で n byte のパラメタを登録
CCP_UTIL_ACK CCP_form_rtc(CommonCmdPacket *packet, CMD_CODE cmd_id, const uint8_t *param, uint16_t len)
Realtime command を生成
uint16_t CCP_get_raw_param_len(const CommonCmdPacket *packet)
CCP packet から,RAW コマンド引数の長さを返す
CCP_UTIL_ACK
CCP Utility の汎用返り値
@ CCP_UTIL_ACK_PARAM_ERR
パラメタエラー
void * ENDIAN_memcpy(void *dest, const void *src, size_t size)
エンディアンを考慮した memcpy
const PacketList * PH_get_packet_list_from_exec_type(CCP_EXEC_TYPE type)
CCP_EXEC_TYPE から PacketList を取得する
PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket *packet)
CCP を解析する
CCP_CmdRet PH_dispatch_command(const CommonCmdPacket *packet)
CCP をコマンドとして解釈して実行,ないしは別機器へ配送する
@ PH_ACK_INVALID_PACKET
無効な Packet
@ PH_ACK_PL_LIST_FULL
PL が一杯だった
const PL_Node * PL_get_tail(const PacketList *pl)
PacketList の active な末端 Node を取得
const PL_Node * PL_get_head(const PacketList *pl)
PacketList の active な先頭 Node を取得
uint16_t PL_count_active_nodes(const PacketList *pl)
PacketList で有効な(実行待ち) Node 数を返す
int PL_is_full(const PacketList *pl)
PacketList が満杯かどうか
int PL_is_empty(const PacketList *pl)
PacketList が空かどうか
uint32_t err_code
各 Cmd ユニークなエラーコード.各 App で定義する enum などを入れることを想定.
CCP_EXEC_STS exec_sts
CCP_EXEC_STS.Cmd の統一的なエラーコード
uint8_t err_flag
エラーが発生したか
uint8_t param_idx
今どこまでの param を作ったか
CommonCmdPacket packet
作成する CCP の param を保存するためのバッファ
CMD_CODE cmd_id
どのコマンドの param か
void * packet
片方向リストに格納される packet. どのような型でも良いように, void.(基本的には CTCP, CTP, CCP を想定)
struct PL_Node * next
次の Node (片方向リスト)
TLCD_ID
TimeLineを選ぶときに統一的に使うコード