Skip to content

Commit 02055d7

Browse files
Merge pull request #415 from arkedge/add_el_on_ph_cmd
コマンドのパケット配送での EL 発行の追加
2 parents 0c33743 + 82b16f0 commit 02055d7

File tree

3 files changed

+73
-12
lines changed

3 files changed

+73
-12
lines changed

system/event_manager/event_logger.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,8 @@ typedef enum
218218
EL_CORE_GROUP_CDIS_INTERNAL_ERR,
219219
EL_CORE_GROUP_CDIS_EXEC_ERR_STS,
220220
EL_CORE_GROUP_CDIS_EXEC_ERR_CODE,
221+
EL_CORE_GROUP_PH_ANALYZE_CCP, //!< PH_analyze_cmd_packet での CCP 配送エラー
222+
EL_CORE_GROUP_PH_USER_ANALYZE_CCP, //!< PH_user_analyze_cmd での CCP 配送エラー
221223
// TODO: ComponentDriverSuper
222224
#ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
223225
EL_CORE_GROUP_EL_DROP_CLOG1, //!< EL CLogs で古いエラーを上書きするとき (group, err_level を保存)

tlm_cmd/packet_handler.c

Lines changed: 70 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include <string.h>
1010

1111
#include "../system/time_manager/time_manager.h"
12+
#include "../system/event_manager/event_logger.h"
1213
#include "command_analyze.h"
1314
#include "block_command_table.h"
1415
#include <src_user/tlm_cmd/user_packet_handler.h>
@@ -119,6 +120,8 @@ PH_ACK PH_analyze_packet(const CommonTlmCmdPacket* packet)
119120
PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket* packet)
120121
{
121122
PH_ACK ack;
123+
uint32_t el_local;
124+
122125
if (!CCP_is_valid_packet(packet)) return PH_ACK_INVALID_PACKET;
123126

124127
// ユーザー定義部
@@ -127,6 +130,20 @@ PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket* packet)
127130
ack = PH_user_analyze_cmd(packet);
128131
if (ack != PH_ACK_UNKNOWN)
129132
{
133+
if (ack == PH_ACK_FORWARDED)
134+
{
135+
// sub OBC キューへ無事に転送
136+
return ack;
137+
}
138+
139+
// 転送失敗
140+
el_local = ( ((0X000000ff & (uint32_t)CCP_get_dest_type(packet)) << 24)
141+
| ((0x000000ff & (uint32_t)CCP_get_exec_type(packet)) << 16)
142+
| ( 0x0000ffff & (uint32_t)ack) );
143+
EL_record_event((EL_GROUP)EL_CORE_GROUP_PH_USER_ANALYZE_CCP,
144+
el_local,
145+
EL_ERROR_LEVEL_HIGH,
146+
CCP_get_id(packet));
130147
return ack;
131148
}
132149

@@ -141,37 +158,80 @@ PH_ACK PH_analyze_cmd_packet(const CommonCmdPacket* packet)
141158
switch (CCP_get_exec_type(packet))
142159
{
143160
case CCP_EXEC_TYPE_GS:
144-
return PH_add_gs_cmd_(packet);
161+
ack = PH_add_gs_cmd_(packet);
162+
break;
145163

146164
case CCP_EXEC_TYPE_TL_FROM_GS:
147-
return PH_add_tl_cmd_(TLCD_ID_FROM_GS, packet, TMGR_get_master_total_cycle());
165+
ack = PH_add_tl_cmd_(TLCD_ID_FROM_GS, packet, TMGR_get_master_total_cycle());
166+
break;
148167

149168
case CCP_EXEC_TYPE_BC:
150-
return PH_add_block_cmd_(packet);
169+
ack = PH_add_block_cmd_(packet);
170+
break;
151171

152172
case CCP_EXEC_TYPE_RT:
153-
return PH_add_rt_cmd_(packet);
173+
ack = PH_add_rt_cmd_(packet);
174+
break;
154175

155176
case CCP_EXEC_TYPE_UTL:
156-
return PH_add_utl_cmd_(TLCD_ID_FROM_GS, packet);
177+
ack = PH_add_utl_cmd_(TLCD_ID_FROM_GS, packet);
178+
break;
157179

158180
case CCP_EXEC_TYPE_TL_DEPLOY_BC:
159-
return PH_add_tl_cmd_(TLCD_ID_DEPLOY_BC, packet, TMGR_get_master_total_cycle());
181+
ack = PH_add_tl_cmd_(TLCD_ID_DEPLOY_BC, packet, TMGR_get_master_total_cycle());
182+
break;
160183

161184
case CCP_EXEC_TYPE_TL_DEPLOY_TLM:
162-
return PH_add_tl_cmd_(TLCD_ID_DEPLOY_TLM, packet, TMGR_get_master_total_cycle());
185+
ack = PH_add_tl_cmd_(TLCD_ID_DEPLOY_TLM, packet, TMGR_get_master_total_cycle());
186+
break;
163187

164188
#ifdef TLCD_ENABLE_MISSION_TL
165189
case CCP_EXEC_TYPE_TL_FOR_MISSION:
166-
return PH_add_tl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet, TMGR_get_master_total_cycle());
190+
ack = PH_add_tl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet, TMGR_get_master_total_cycle());
191+
break;
167192

168193
case CCP_EXEC_TYPE_UTL_FOR_MISSION:
169-
return PH_add_utl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet);
194+
ack = PH_add_utl_cmd_(TLCD_ID_FROM_GS_FOR_MISSION, packet);
195+
break;
170196
#endif
171197

172198
default:
173-
return PH_ACK_UNKNOWN;
199+
ack = PH_ACK_UNKNOWN;
200+
break;
201+
}
202+
203+
switch (ack)
204+
{
205+
case PH_ACK_SUCCESS:
206+
case PH_ACK_FORWARDED:
207+
case PH_ACK_TLC_SUCCESS:
208+
case PH_ACK_BC_SUCCESS:
209+
// 成功ケース
210+
return ack;
211+
default:
212+
break;
174213
}
214+
215+
// ここまで来たら以下のどれか
216+
// 全てにおいてパケットが失われているので, EL_ERROR_LEVEL_HIGH として対応
217+
// PH_ACK_PL_LIST_FULL // キューに空きがなく,パケットが失われるので HIGH
218+
// PH_ACK_PACKET_NOT_FOUND // これがくることはないはず
219+
// PH_ACK_INVALID_PACKET // これがくることはないはず
220+
// PH_ACK_TLC_PAST_TIME // 設定時刻が不正でパケットが失われるので HIGH
221+
// PH_ACK_TLC_ALREADY_EXISTS // 設定時刻が不正でパケットが失われるので HIGH
222+
// PH_ACK_BC_INVALID_BLOCK_NO // BC ID が不正でパケットが失われるので HIGH
223+
// PH_ACK_BC_ISORATED_CMD // BC Cmd pos が不正でパケットが失われるので HIGH
224+
// PH_ACK_BC_CMD_TOO_LONG // BC Cmd param 長 が不正でパケットが失われるので HIGH
225+
// PH_ACK_UNKNOWN // これがくることはないはず
226+
el_local = ( ((0X000000ff & (uint32_t)CCP_get_dest_type(packet)) << 24) // ここでの CCP_DEST_TYPE は CCP_DEST_TYPE_TO_ME のはず
227+
| ((0x000000ff & (uint32_t)CCP_get_exec_type(packet)) << 16)
228+
| ( 0x0000ffff & (uint32_t)ack) );
229+
EL_record_event((EL_GROUP)EL_CORE_GROUP_PH_ANALYZE_CCP,
230+
el_local,
231+
EL_ERROR_LEVEL_HIGH,
232+
CCP_get_id(packet));
233+
234+
return ack;
175235
}
176236

177237

tlm_cmd/packet_list.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -337,8 +337,7 @@ PL_ACK PL_insert_tl_cmd(PacketList* pl, const CommonCmdPacket* packet, cycle_t n
337337
}
338338
else if (curr_ti > planed) // 挿入場所発見
339339
{
340-
PL_insert_after(pl, prev, &ccp);
341-
return PL_SUCCESS;
340+
return PL_insert_after(pl, prev, &ccp);
342341
}
343342
else // 既登録コマンドと時刻指定が等しい
344343
{

0 commit comments

Comments
 (0)