@@ -263,28 +263,56 @@ static PH_ACK PH_add_block_cmd_(const CommonCmdPacket* packet)
263263PH_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