C2A_Core
event_handler.h
[詳解]
1 
96 #ifndef EVENT_HANDLER_H_
97 #define EVENT_HANDLER_H_
98 
99 #include "event_logger.h"
100 
101 #ifdef EL_IS_ENABLE_TLOG
102 
103 #include <stddef.h>
104 #include "../TimeManager/obc_time.h"
105 #include "../../TlmCmd/block_command_table.h"
107 
108 #define EH_RULE_TLM_PAGE_SIZE (20)
109 #define EH_RULE_TLM_PAGE_MAX (8)
110 
111 #define EH_LOG_TLM_PAGE_SIZE (64)
112 #define EH_LOG_TLM_PAGE_MAX (2)
113 
114 #define EH_MAX_RULE_NUM_OF_EL_ID_DUPLICATES (4)
115 #define EH_MAX_RESPONSE_NUM_DEFAULT (8)
116 #define EH_MAX_CHECK_EVENT_NUM_DEFAULT (64)
118 #define EH_MAX_MULTI_LEVEL_NUM_DEFAULT (4)
119 
120 // 以下のファイルにて,次のパラメタを上書き設定できる
121 // EH_RULE_TLM_PAGE_SIZE
122 // EH_RULE_TLM_PAGE_MAX
123 // EH_LOG_TLM_PAGE_SIZE
124 // EH_LOG_TLM_PAGE_MAX
125 // EH_MAX_RULE_NUM_OF_EL_ID_DUPLICATES
126 // EH_MAX_RESPONSE_NUM_DEFAULT
127 // EH_MAX_CHECK_EVENT_NUM_DEFAULT
128 // EH_MAX_MULTI_LEVEL_NUM_DEFAULT
130 
131 #define EH_RULE_MAX (EH_RULE_ID)(EH_RULE_TLM_PAGE_SIZE * EH_RULE_TLM_PAGE_MAX)
136 #define EH_LOG_MAX (EH_LOG_TLM_PAGE_SIZE * EH_LOG_TLM_PAGE_MAX)
137 
143 typedef enum
144 {
160 
167 typedef enum
168 {
173 
179 typedef enum
180 {
186 
191 typedef struct
192 {
193  struct
194  {
196  uint32_t local;
199  } event;
201  struct
202  {
204  uint16_t count_threshold;
206  uint32_t time_threshold_ms;
208  } condition;
210  uint8_t is_active;
212 
217 typedef struct
218 {
220  uint16_t counter;
222 } EH_Rule;
223 
228 typedef struct
229 {
232 } EH_RuleTable;
233 
240 typedef struct
241 {
243  uint32_t local;
244  uint8_t duplicate_id;
247 
252 typedef struct
253 {
256  CCP_EXEC_STS deploy_cmd_ack; // FIXME: 将来的に,最後に BC 展開したときのエラー情報が取得できるようになったら,それにする
257 } EH_Log;
258 
263 typedef struct
264 {
266  uint32_t respond_counter;
267  uint16_t log_wp;
268 } EH_LogTable;
269 
275 typedef struct
276 {
277  uint32_t counter_total;
278  uint32_t counters[EL_ERROR_LEVEL_MAX];
280 
285 typedef struct
286 {
295 
300 typedef struct
301 {
303 } EH_ExecInfo;
304 
309 typedef struct
310 {
315 
320 typedef struct
321 {
322  struct
323  {
324  uint8_t page_no;
326  } rule;
327  struct
328  {
329  uint8_t page_no;
330  } rule_sorted_index;
331  struct
332  {
333  uint8_t page_no;
334  } log;
335 } EH_TlmInfo;
336 
341 typedef struct
342 {
351 } EventHandler;
352 
353 extern const EventHandler* const event_handler;
354 
355 
361 void EH_initialize(void);
362 
371 void EH_execute(void);
372 
381 
391 
401 
412 
423 
432 
440 
449 
458 
468 
477 
487 
497 
505 
513 EH_CHECK_RULE_ACK EH_set_rule_counter(EH_RULE_ID id, uint16_t counter);
514 
522 
532 void EH_clear_rule_counter_by_event(EL_GROUP group, uint32_t local, EL_ERROR_LEVEL err_level);
533 
541 
548 const EH_Log* EH_get_the_nth_log_from_the_latest(uint16_t n);
549 
550 
551 CCP_CmdRet Cmd_EH_INIT(const CommonCmdPacket* packet);
552 
554 
556 
558 
560 
562 
564 
566 
568 
570 
572 
574 
576 
578 
580 
582 
584 
586 
588 
590 
592 
594 
596 
598 
603 
604 // by_event_group 関数
606 
608 
610 
612 
614 
616 
617 #endif // EL_IS_ENABLE_TLOG
618 
619 #endif
uint16_t bct_id_t
CCP_EXEC_STS
コマンド実行結果コード
EH_REGISTER_ACK EH_register_rule(EH_RULE_ID id, const EH_RuleSettings *settings)
ルールの登録
#define EH_LOG_MAX
最大何個の EH 対応ログを保持できるか
const EventHandler *const event_handler
CCP_CmdRet Cmd_EH_SET_REGISTER_RULE_EVENT_PARAM(const CommonCmdPacket *packet)
EH_CHECK_RULE_ACK EH_init_rule_for_multi_level(EH_RULE_ID id)
ルールの初期化 (multi-level)
const EH_Log * EH_get_the_nth_log_from_the_latest(uint16_t n)
EH_LogTable の最新からn番目の対応ログを取得
CCP_CmdRet Cmd_EH_SET_RULE_COUNTER(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_INIT_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_CLEAR_LOG(const CommonCmdPacket *packet)
EH_CHECK_RULE_ACK
EH_Rule 登録状況確認用
@ EH_CHECK_RULE_ACK_INVALID_RULE_ID
EH_RULE_ID が不正
@ EH_CHECK_RULE_ACK_OK
正常 or ルール登録済み
@ EH_CHECK_RULE_ACK_UNREGISTERED
ルールが未登録
void EH_activate_rule_by_event_group(EL_GROUP group)
EH_RuleSettings.event.group 指定による一括でのルールの有効化
CCP_CmdRet Cmd_EH_SET_REGISTER_RULE_CONDITION_PARAM(const CommonCmdPacket *packet)
void EH_init_rule_by_event_group(EL_GROUP group)
EH_RuleSettings.event.group 指定による一括でのルールの初期化
EH_CHECK_RULE_ACK EH_init_rule(EH_RULE_ID id)
ルールの初期化
CCP_CmdRet Cmd_EH_SET_MAX_MULTI_LEVEL_NUM(const CommonCmdPacket *packet)
void EH_initialize(void)
event_handler の初期化
void EH_clear_rule_counter_by_event(EL_GROUP group, uint32_t local, EL_ERROR_LEVEL err_level)
EH_Rule の counter を EL_Event 指定で 0 クリア
CCP_CmdRet Cmd_EH_INIT_RULE(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_LOAD_DEFAULT_RULE(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_MATCH_EVENT_COUNTER_TO_EL(const CommonCmdPacket *packet)
新しい EL_Event 発生を検出するためのカウンタを強制的に EL のカウンタに合わせる
CCP_CmdRet Cmd_EH_INIT_RULE_BY_EVENT_GROUP(const CommonCmdPacket *packet)
void EH_match_event_counter_to_el(void)
イベントカウンタを EL のそれに合わせる
CCP_CmdRet Cmd_EH_INACTIVATE_RULE_FOR_MULTI_LEVEL(const CommonCmdPacket *packet)
void EH_execute(void)
event_handler の実行
void EH_activate_rule_by_event_group_for_multi_level(EL_GROUP group)
EH_RuleSettings.event.group 指定による一括でのルールの有効化 (multi-level)
CCP_CmdRet Cmd_EH_ACTIVATE_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL(const CommonCmdPacket *packet)
EH_CHECK_RULE_ACK EH_clear_rule_counter(EH_RULE_ID id)
EH_Rule の counter を 0 クリア
CCP_CmdRet Cmd_EH_CLEAR_RULE_COUNTER(const CommonCmdPacket *packet)
EH_CHECK_RULE_ACK EH_set_rule_counter(EH_RULE_ID id, uint16_t counter)
EH_Rule の counter をセット
EH_REGISTER_ACK
EH_register_rule の返り値
@ EH_REGISTER_ACK_ILLEGAL_MULTI_LEVEL
多段 EH 対応での不正な設定
@ EH_REGISTER_ACK_ILLEGAL_RULE_ID
不正な EH_RULE_ID
@ EH_REGISTER_ACK_ILLEGAL_MATCH_FLAG
不正な should_match_err_level
@ EH_REGISTER_ACK_ILLEGAL_GROUP
不正な EL_Event.group
@ EH_REGISTER_ACK_ERR_RULE_OVERWRITE
すでに同じ ID にルールが登録されているため棄却
@ EH_REGISTER_ACK_ILLEGAL_ERROR_LEVEL
不正な EL_Event.err_level
@ EH_REGISTER_ACK_UNKNOWN_ERR
不明なエラー
@ EH_REGISTER_ACK_ERR_FULL
これ以上登録できない
@ EH_REGISTER_ACK_ERR_DUPLICATE_FULL
これ以上, EL_Event の重複した EH_Rule を登録できない
@ EH_REGISTER_ACK_ILLEGAL_CONDITION_TYPE
不正な EH_RESPONSE_CONDITION_TYPE
@ EH_REGISTER_ACK_OK
正常に登録完了
@ EH_REGISTER_ACK_ILLEGAL_BCT_ID
不正な deploy_bct_id
@ EH_REGISTER_ACK_ILLEGAL_COUNT_THRESHOLD
不正な condition.count_threshold
@ EH_REGISTER_ACK_ILLEGAL_ACTIVE_FLAG
不正な is_active
CCP_CmdRet Cmd_EH_SET_PAGE_OF_RULE_SORTED_IDX_FOR_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_INACTIVATE_RULE_BY_EVENT_GROUP(const CommonCmdPacket *packet)
uint8_t EH_get_rule_is_active(EH_RULE_ID id)
ルールが有効かどうか取得する
CCP_CmdRet Cmd_EH_INIT_RULE_FOR_MULTI_LEVEL(const CommonCmdPacket *packet)
EH_CHECK_RULE_ACK EH_activate_rule(EH_RULE_ID id)
ルールの有効化
void EH_inactivate_rule_by_event_group_for_multi_level(EL_GROUP group)
EH_RuleSettings.event.group 指定による一括でのルールの無効化 (multi-level)
CCP_CmdRet Cmd_EH_SET_MAX_CHECK_EVENT_NUM(const CommonCmdPacket *packet)
void EH_init_rule_by_event_group_for_multi_level(EL_GROUP group)
EH_RuleSettings.event.group 指定による一括でのルールの初期化 (multi-level)
CCP_CmdRet Cmd_EH_SET_MAX_RESPONSE_NUM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_CLEAR_RULE_COUNTER_BY_EVENT(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_DELETE_RULE(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_INACTIVATE_RULE_BY_EVENT_GROUP_FOR_MULTI_LEVEL(const CommonCmdPacket *packet)
EH_CHECK_RULE_ACK EH_activate_rule_for_multi_level(EH_RULE_ID id)
ルールの有効化 (multi-level)
CCP_CmdRet Cmd_EH_ACTIVATE_RULE_FOR_MULTI_LEVEL(const CommonCmdPacket *packet)
void EH_inactivate_rule_by_event_group(EL_GROUP group)
EH_RuleSettings.event.group 指定による一括でのルールの無効化
CCP_CmdRet Cmd_EH_INACTIVATE_RULE(const CommonCmdPacket *packet)
#define EH_RULE_MAX
CCP_CmdRet Cmd_EH_ACTIVATE_RULE_BY_EVENT_GROUP(const CommonCmdPacket *packet)
EH_RESPONSE_CONDITION_TYPE
EL_Event 登録に対して,どのように EH 対応させるかの種類
@ EH_RESPONSE_CONDITION_CONTINUOUS
Event 登録後 N 秒以内に再び同じ Event 登録が発生することが M 回連続で発生した場合に EH 対応
@ EH_RESPONSE_CONDITION_TYPE_MAX
@ EH_RESPONSE_CONDITION_CUMULATIVE
Event が M 回登録した場合に EH 対応
@ EH_RESPONSE_CONDITION_SINGLE
Event 登録に対して即座に EH 対応
EH_CHECK_RULE_ACK EH_inactivate_rule(EH_RULE_ID id)
ルールの無効化
CCP_CmdRet Cmd_EH_REGISTER_RULE(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_ACTIVATE_RULE(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_INIT(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_SET_PAGE_OF_LOG_TABLE_FOR_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_SET_TARGET_ID_OF_RULE_TABLE_FOR_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_SET_PAGE_OF_RULE_TABLE_FOR_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EH_CLEAR_ALL_RULE(const CommonCmdPacket *packet)
EH_CHECK_RULE_ACK EH_inactivate_rule_for_multi_level(EH_RULE_ID id)
ルールの無効化 (multi-level)
event_handler の各種設定 各パラメタ類の詳細は event_handler.h を参照すること
EH の Rule 共通ヘッダ
EH_RULE_ID
EH_Rule の ID
アノマリやエラーなどの各種イベントを記録する
EL_ERROR_LEVEL
event_logger の エラーレベル
Definition: event_logger.h:261
@ EL_ERROR_LEVEL_MAX
Definition: event_logger.h:272
EL_GROUP
event_logger の Event Group の user 定義部分
uint32_t cycle_t
Definition: obc_time.h:10
コマンド返り値
Space Packet (コマンド用)
EL イベントカウンタ. EL のイベント記録情報と照らし合わせて,対応すべきイベントを探索するために使う
uint32_t counter_total
前回 EH_execute 実行時の EL でのイベント記録数
EH 実行時情報
uint8_t current_multi_level
現在処理してる多段 EH 対応レベル
EH 実行時設定
uint8_t max_multi_level_num
uint8_t max_response_num
uint16_t max_check_event_num
EH 対応のログ
CCP_EXEC_STS deploy_cmd_ack
cycle_t respond_time_in_master_cycle
EH_RULE_ID rule_id
EH 対応のログテーブル
uint16_t log_wp
uint32_t respond_counter
コマンド経由で EH_Rule を登録するときに使う内部状態変数
EH_RuleSettings settings
登録する EH_RuleSettings
EH_REGISTER_ACK register_ack
EH_register_rule の返り値
EH_RULE_ID rule_id
登録先 EH_RULE_ID
EL_Event に対して対応する EH_Rule
EH_RuleSettings settings
設定値
ObcTime last_event_time
最後に発生した EL_Event の時刻
uint16_t counter
EH 対応までのカウンタ
EH_register_rule の引数.Rule登録に必要な情報
EL_GROUP group
引っ掛ける EL_Event.group
uint32_t time_threshold_ms
uint8_t should_match_err_level
EL_Event の一致に,エラーレベル一致を含めるか?
uint8_t is_active
対応が有効か? 対応後,自動的に無効になる
EH_RESPONSE_CONDITION_TYPE type
EH 対応の条件種類
bct_id_t deploy_bct_id
EH 対応に展開する BCT id
uint16_t count_threshold
uint32_t local
引っ掛ける EL_Event.local
EL_ERROR_LEVEL err_level
EL_GROUP group
EH_Rule.event.group
uint8_t duplicate_id
同じ {group. local} の rule がある場合の,重複ID
uint32_t local
EH_Rule.event.local
EH_RULE_ID rule_id
EventHandler.rules の idx
EH_Rule のテーブル
uint16_t registered_rule_num
登録済み rule 数
tlmのページネーションの情報保持
uint8_t page_no
EH_RULE_ID target_rule_id
EventHandler のInfo構造体
EH_ExecSettings exec_settings
実行時設定
EH_ElEventCounter el_event_counter
EH_ElEventCounter
EH_RegisterFromCmd reg_from_cmd
コマンド経由で EH_Rule を登録するときに使う内部状態変数
EH_RuleTable rule_table
EH_Rule のテーブル
EH_LogTable log_table
EH 対応ログテーブル
EH_ExecInfo exec_info
実行時情報
EH_TlmInfo tlm_info
tlmのための情報
OBCの時刻情報を保持する構造体
Definition: obc_time.h:18