Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

コマンドのパケット配送での EL 発行の追加 #415

Merged
merged 2 commits into from
Feb 25, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions system/event_manager/event_logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -218,6 +218,8 @@ typedef enum
EL_CORE_GROUP_CDIS_INTERNAL_ERR,
EL_CORE_GROUP_CDIS_EXEC_ERR_STS,
EL_CORE_GROUP_CDIS_EXEC_ERR_CODE,
EL_CORE_GROUP_PH_ANALYZE_CCP, //!< PH_analyze_cmd_packet での CCP 配送エラー
EL_CORE_GROUP_PH_USER_ANALYZE_CCP, //!< PH_user_analyze_cmd での CCP 配送エラー
// TODO: ComponentDriverSuper
#ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
EL_CORE_GROUP_EL_DROP_CLOG1, //!< EL CLogs で古いエラーを上書きするとき (group, err_level を保存)
Expand Down
80 changes: 70 additions & 10 deletions tlm_cmd/packet_handler.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#include <string.h>

#include "../system/time_manager/time_manager.h"
#include "../system/event_manager/event_logger.h"
#include "command_analyze.h"
#include "block_command_table.h"
#include <src_user/tlm_cmd/user_packet_handler.h>
Expand Down Expand Up @@ -119,6 +120,8 @@ PH_ACK PH_analyze_packet(const CommonTlmCmdPacket* packet)
PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket* packet)
{
PH_ACK ack;
uint32_t el_local;

if (!CCP_is_valid_packet(packet)) return PH_ACK_INVALID_PACKET;

// ユーザー定義部
Expand All @@ -127,6 +130,20 @@ PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket* packet)
ack = PH_user_analyze_cmd(packet);
if (ack != PH_ACK_UNKNOWN)
{
if (ack == PH_ACK_FORWARDED)
{
// sub OBC キューへ無事に転送
return ack;
}

// 転送失敗
el_local = ( ((0X000000ff & (uint32_t)CCP_get_dest_type(packet)) << 24)
| ((0x000000ff & (uint32_t)CCP_get_exec_type(packet)) << 16)
| ( 0x0000ffff & (uint32_t)ack) );
EL_record_event((EL_GROUP)EL_CORE_GROUP_PH_USER_ANALYZE_CCP,
el_local,
EL_ERROR_LEVEL_HIGH,
CCP_get_id(packet));
return ack;
}

Expand All @@ -141,37 +158,80 @@ PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket* packet)
switch (CCP_get_exec_type(packet))
{
case CCP_EXEC_TYPE_GS:
return PH_add_gs_cmd_(packet);
ack = PH_add_gs_cmd_(packet);
break;

case CCP_EXEC_TYPE_TL_FROM_GS:
return PH_add_tl_cmd_(TLCD_ID_FROM_GS, packet, TMGR_get_master_total_cycle());
ack = PH_add_tl_cmd_(TLCD_ID_FROM_GS, packet, TMGR_get_master_total_cycle());
break;

case CCP_EXEC_TYPE_BC:
return PH_add_block_cmd_(packet);
ack = PH_add_block_cmd_(packet);
break;

case CCP_EXEC_TYPE_RT:
return PH_add_rt_cmd_(packet);
ack = PH_add_rt_cmd_(packet);
break;

case CCP_EXEC_TYPE_UTL:
return PH_add_utl_cmd_(TLCD_ID_FROM_GS, packet);
ack = PH_add_utl_cmd_(TLCD_ID_FROM_GS, packet);
break;

case CCP_EXEC_TYPE_TL_DEPLOY_BC:
return PH_add_tl_cmd_(TLCD_ID_DEPLOY_BC, packet, TMGR_get_master_total_cycle());
ack = PH_add_tl_cmd_(TLCD_ID_DEPLOY_BC, packet, TMGR_get_master_total_cycle());
break;

case CCP_EXEC_TYPE_TL_DEPLOY_TLM:
return PH_add_tl_cmd_(TLCD_ID_DEPLOY_TLM, packet, TMGR_get_master_total_cycle());
ack = PH_add_tl_cmd_(TLCD_ID_DEPLOY_TLM, packet, TMGR_get_master_total_cycle());
break;

#ifdef TLCD_ENABLE_MISSION_TL
case CCP_EXEC_TYPE_TL_FOR_MISSION:
return PH_add_tl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet, TMGR_get_master_total_cycle());
ack = PH_add_tl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet, TMGR_get_master_total_cycle());
break;

case CCP_EXEC_TYPE_UTL_FOR_MISSION:
return PH_add_utl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet);
ack = PH_add_utl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet);
break;
#endif

default:
return PH_ACK_UNKNOWN;
ack = PH_ACK_UNKNOWN;
break;
}

switch (ack)
{
case PH_ACK_SUCCESS:
case PH_ACK_FORWARDED:
case PH_ACK_TLC_SUCCESS:
case PH_ACK_BC_SUCCESS:
// 成功ケース
return ack;
default:
break;
}

// ここまで来たら以下のどれか
// 全てにおいてパケットが失われているので, EL_ERROR_LEVEL_HIGH として対応
// PH_ACK_PL_LIST_FULL // キューに空きがなく,パケットが失われるので HIGH
// PH_ACK_PACKET_NOT_FOUND // これがくることはないはず
// PH_ACK_INVALID_PACKET // これがくることはないはず
// PH_ACK_TLC_PAST_TIME // 設定時刻が不正でパケットが失われるので HIGH
// PH_ACK_TLC_ALREADY_EXISTS // 設定時刻が不正でパケットが失われるので HIGH
// PH_ACK_BC_INVALID_BLOCK_NO // BC ID が不正でパケットが失われるので HIGH
// PH_ACK_BC_ISORATED_CMD // BC Cmd pos が不正でパケットが失われるので HIGH
// PH_ACK_BC_CMD_TOO_LONG // BC Cmd param 長 が不正でパケットが失われるので HIGH
// PH_ACK_UNKNOWN // これがくることはないはず
el_local = ( ((0X000000ff & (uint32_t)CCP_get_dest_type(packet)) << 24) // ここでの CCP_DEST_TYPE は CCP_DEST_TYPE_TO_ME のはず
| ((0x000000ff & (uint32_t)CCP_get_exec_type(packet)) << 16)
| ( 0x0000ffff & (uint32_t)ack) );
EL_record_event((EL_GROUP)EL_CORE_GROUP_PH_ANALYZE_CCP,
el_local,
EL_ERROR_LEVEL_HIGH,
CCP_get_id(packet));

return ack;
}


Expand Down
3 changes: 1 addition & 2 deletions tlm_cmd/packet_list.c
Original file line number Diff line number Diff line change
Expand Up @@ -337,8 +337,7 @@ PL_ACK PL_insert_tl_cmd(PacketList* pl, const CommonCmdPacket* packet, cycle_t n
}
else if (curr_ti > planed) // 挿入場所発見
{
PL_insert_after(pl, prev, &ccp);
return PL_SUCCESS;
return PL_insert_after(pl, prev, &ccp);
}
else // 既登録コマンドと時刻指定が等しい
{
Expand Down
Loading