Skip to content

Commit 03cbf57

Browse files
Merge pull request #417 from arkedge/add_el_on_ph_tlm
テレメのパケット配送での EL 発行の追加
2 parents 3d07567 + 4c8148f commit 03cbf57

File tree

2 files changed

+43
-7
lines changed

2 files changed

+43
-7
lines changed

system/event_manager/event_logger.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,6 +220,7 @@ typedef enum
220220
EL_CORE_GROUP_CDIS_EXEC_ERR_CODE,
221221
EL_CORE_GROUP_PH_ANALYZE_CCP, //!< PH_analyze_cmd_packet での CCP 配送エラー
222222
EL_CORE_GROUP_PH_USER_ANALYZE_CCP, //!< PH_user_analyze_cmd での CCP 配送エラー
223+
EL_CORE_GROUP_PH_ANALYZE_CTP, //!< PH_analyze_tlm_packet での CTP 配送エラー
223224
// TODO: ComponentDriverSuper
224225
#ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
225226
EL_CORE_GROUP_EL_DROP_CLOG1, //!< EL CLogs で古いエラーを上書きするとき (group, err_level を保存)

tlm_cmd/packet_handler.c

Lines changed: 42 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -263,28 +263,56 @@ static PH_ACK PH_add_block_cmd_(const CommonCmdPacket* packet)
263263
PH_ACK PH_analyze_tlm_packet(const CommonTlmPacket* packet)
264264
{
265265
ctp_dest_flags_t flags;
266+
PH_ACK ack = PH_ACK_UNKNOWN;
267+
PH_ACK last_err_ack = PH_ACK_SUCCESS;
268+
266269
if (!CTP_is_valid_packet(packet)) return PH_ACK_INVALID_PACKET;
267270

268271
flags = CTP_get_dest_flags(packet);
269272

270273
// FIXME: flag の match は関数化したい
271274

272275
// High Priority Realtime Telemetry
273-
if (flags & CTP_DEST_FLAG_HP_TLM) PH_add_rt_tlm_(packet); // hp_tlm のフラグが立っていても,RT_TLMとして処理する方針にした
276+
if (flags & CTP_DEST_FLAG_HP_TLM)
277+
{
278+
ack = PH_add_rt_tlm_(packet); // hp_tlm のフラグが立っていても,RT_TLM として処理する方針にした
279+
if (ack != PH_ACK_SUCCESS) last_err_ack = ack;
280+
}
274281

275282
// Realtime Telemetry
276-
if (flags & CTP_DEST_FLAG_RT_TLM) PH_add_rt_tlm_(packet);
283+
if (flags & CTP_DEST_FLAG_RT_TLM)
284+
{
285+
ack = PH_add_rt_tlm_(packet);
286+
if (ack != PH_ACK_SUCCESS) last_err_ack = ack;
287+
}
277288

278289
#ifdef DR_ENABLE
279290
// Stored Telemetry
280-
if (flags & CTP_DEST_FLAG_ST_TLM) PH_add_st_tlm_(packet);
291+
if (flags & CTP_DEST_FLAG_ST_TLM)
292+
{
293+
ack = PH_add_st_tlm_(packet);
294+
if (ack != PH_ACK_SUCCESS) last_err_ack = ack;
295+
}
281296

282297
// Replay Telemetry
283-
if (flags & CTP_DEST_FLAG_RP_TLM) PH_add_rp_tlm_(packet);
298+
if (flags & CTP_DEST_FLAG_RP_TLM)
299+
{
300+
ack = PH_add_rp_tlm_(packet);
301+
if (ack != PH_ACK_SUCCESS) last_err_ack = ack;
302+
}
284303
#endif
285304

286-
// [TODO] 要検討:各Queue毎の登録エラー判定は未実装
287-
return PH_ACK_SUCCESS;
305+
if (ack == PH_ACK_UNKNOWN)
306+
{
307+
// どの CTP_DEST_FLAG にもヒットしなかった場合
308+
last_err_ack = PH_ACK_UNKNOWN;
309+
EL_record_event((EL_GROUP)EL_CORE_GROUP_PH_ANALYZE_CTP,
310+
(uint32_t)( ((0X000000ff & (uint32_t)flags) << 16) | ( 0x0000ffff & (uint32_t)last_err_ack) ),
311+
EL_ERROR_LEVEL_LOW,
312+
CTP_get_id(packet));
313+
}
314+
315+
return last_err_ack;
288316
}
289317

290318

@@ -378,7 +406,14 @@ static PH_ACK PH_add_tlm_to_pl(const CommonTlmPacket* packet, PacketList* pl, CT
378406
PL_Node* tail;
379407
PL_ACK ack = PL_push_back(pl, packet);
380408

381-
if (ack != PL_SUCCESS) return PH_ACK_PL_LIST_FULL;
409+
if (ack != PL_SUCCESS)
410+
{
411+
EL_record_event((EL_GROUP)EL_CORE_GROUP_PH_ANALYZE_CTP,
412+
(uint32_t)( ((0X000000ff & (uint32_t)dest_flag) << 16) | ( 0x0000ffff & (uint32_t)PH_ACK_PL_LIST_FULL) ),
413+
EL_ERROR_LEVEL_HIGH, // packet が失われるので HIGH
414+
CTP_get_id(packet));
415+
return PH_ACK_PL_LIST_FULL;
416+
}
382417

383418
// 複数の配送先に配送されるパケットの分岐は終わっているため, dest flag を配送先のもののみにする.
384419
// こうすることで, GS SW 側でのデータベース格納の処理がシンプルになる.

0 commit comments

Comments
 (0)