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)
119120PH_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
0 commit comments