36 #ifndef EVENT_LOGGER_H_
37 #define EVENT_LOGGER_H_
45 #include "../../TlmCmd/common_cmd_packet.h"
46 #include "../TimeManager/obc_time.h"
51 #define EL_TLOG_TLM_PAGE_SIZE (28)
52 #define EL_TLOG_TLM_PAGE_MAX_HIGH (4)
53 #define EL_TLOG_TLM_PAGE_MAX_MIDDLE (4)
54 #define EL_TLOG_TLM_PAGE_MAX_LOW (4)
55 #define EL_CLOG_TLM_PAGE_SIZE (18)
56 #define EL_CLOG_TLM_PAGE_MAX_HIGH (4)
57 #define EL_CLOG_TLM_PAGE_MAX_MIDDLE (4)
58 #define EL_CLOG_TLM_PAGE_MAX_LOW (4)
60 #define EL_TLOG_LOG_SIZE_MAX_EL (16)
61 #define EL_CLOG_LOG_SIZE_MAX_EL (8)
62 #define EL_TLOG_LOG_SIZE_MAX_EH (16)
63 #define EL_CLOG_LOG_SIZE_MAX_EH (8)
65 #define EL_IS_ENABLE_TLOG
66 #define EL_IS_ENABLE_CLOG
68 #define EL_IS_ENABLE_EVENT_NOTE
69 #define EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
70 #define EL_IS_ENABLE_EL_ERROR_LEVEL
74 #define SIZE_OF_EL_CLOG_COUNTER_T (2)
87 #define EL_LOG_MINIMUM_REQUIRED (2)
88 #define EL_LOG_MINIMUM_REQUIRED_EL_LOG (4)
90 #ifdef EL_IS_ENABLE_TLOG
92 #if EL_TLOG_TLM_PAGE_SIZE < EL_LOG_MINIMUM_REQUIRED
93 #error EL_TLOG_TLM_PAGE_SIZE must be >= EL_LOG_MINIMUM_REQUIRED
96 #define EL_TLOG_LOG_SIZE_MAX_HIGH (EL_TLOG_TLM_PAGE_SIZE * EL_TLOG_TLM_PAGE_MAX_HIGH)
97 #if EL_TLOG_TLM_PAGE_MAX_HIGH <= 0
98 #error EL_TLOG_TLM_PAGE_MAX_HIGH must be a positive number
100 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
101 #define EL_TLOG_LOG_SIZE_MAX_MIDDLE (EL_TLOG_TLM_PAGE_SIZE * EL_TLOG_TLM_PAGE_MAX_MIDDLE)
102 #if EL_TLOG_TLM_PAGE_MAX_MIDDLE <= 0
103 #error EL_TLOG_TLM_PAGE_MAX_MIDDLE must be a positive number
106 #undef EL_TLOG_TLM_PAGE_MAX_MIDDLE
108 #define EL_TLOG_LOG_SIZE_MAX_LOW (EL_TLOG_TLM_PAGE_SIZE * EL_TLOG_TLM_PAGE_MAX_LOW)
109 #if EL_TLOG_TLM_PAGE_MAX_LOW <= 0
110 #error EL_TLOG_TLM_PAGE_MAX_LOW must be a positive number
113 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
114 #if EL_TLOG_LOG_SIZE_MAX_EL < EL_LOG_MINIMUM_REQUIRED_EL_LOG
115 #error EL_TLOG_LOG_SIZE_MAX_EL is too small
118 #undef EL_TLOG_LOG_SIZE_MAX_EL
126 #if EL_TLOG_LOG_SIZE_MAX_EH <= 0
127 #error EL_TLOG_LOG_SIZE_MAX_EH must be a positive number
132 #undef EL_TLOG_TLM_PAGE_SIZE
133 #undef EL_TLOG_TLM_PAGE_MAX_HIGH
134 #undef EL_TLOG_TLM_PAGE_MAX_MIDDLE
135 #undef EL_TLOG_TLM_PAGE_MAX_LOW
136 #undef EL_TLOG_LOG_SIZE_MAX_EL
137 #undef EL_TLOG_LOG_SIZE_MAX_EH
142 #ifdef EL_IS_ENABLE_CLOG
144 #if EL_CLOG_TLM_PAGE_SIZE < EL_LOG_MINIMUM_REQUIRED
145 #error EL_CLOG_TLM_PAGE_SIZE must be >= EL_LOG_MINIMUM_REQUIRED
148 #define EL_CLOG_LOG_SIZE_MAX_HIGH (EL_CLOG_TLM_PAGE_SIZE * EL_CLOG_TLM_PAGE_MAX_HIGH)
149 #if EL_CLOG_TLM_PAGE_MAX_HIGH <= 0
150 #error EL_CLOG_TLM_PAGE_MAX_HIGH must be a positive number
152 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
153 #define EL_CLOG_LOG_SIZE_MAX_MIDDLE (EL_CLOG_TLM_PAGE_SIZE * EL_CLOG_TLM_PAGE_MAX_MIDDLE)
154 #if EL_CLOG_TLM_PAGE_MAX_MIDDLE <= 0
155 #error EL_CLOG_TLM_PAGE_MAX_MIDDLE must be a positive number
158 #undef EL_CLOG_TLM_PAGE_MAX_MIDDLE
160 #define EL_CLOG_LOG_SIZE_MAX_LOW (EL_CLOG_TLM_PAGE_SIZE * EL_CLOG_TLM_PAGE_MAX_LOW)
161 #if EL_CLOG_TLM_PAGE_MAX_LOW <= 0
162 #error EL_CLOG_TLM_PAGE_MAX_LOW must be a positive number
165 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
166 #if EL_CLOG_LOG_SIZE_MAX_EL < EL_LOG_MINIMUM_REQUIRED_EL_LOG
167 #error EL_CLOG_LOG_SIZE_MAX_EL is too small
170 #undef EL_CLOG_LOG_SIZE_MAX_EL
173 #if EL_CLOG_LOG_SIZE_MAX_EH <= 0
174 #error EL_CLOG_LOG_SIZE_MAX_EH must be a positive number
177 #if SIZE_OF_EL_CLOG_COUNTER_T == 1
179 #elif SIZE_OF_EL_CLOG_COUNTER_T == 2
181 #elif SIZE_OF_EL_CLOG_COUNTER_T == 4
184 #error Illegal value for SIZE_OF_EL_CLOG_COUNTER_T
189 #undef EL_CLOG_TLM_PAGE_SIZE
190 #undef EL_CLOG_TLM_PAGE_MAX_HIGH
191 #undef EL_CLOG_TLM_PAGE_MAX_MIDDLE
192 #undef EL_CLOG_TLM_PAGE_MAX_LOW
193 #undef EL_CLOG_LOG_SIZE_MAX_EL
194 #undef EL_CLOG_LOG_SIZE_MAX_EH
222 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
230 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
239 #ifdef EL_IS_ENABLE_TLOG
242 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
263 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
267 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
304 #ifdef EL_IS_ENABLE_EVENT_NOTE
323 #ifdef EL_IS_ENABLE_TLOG
339 #ifdef EL_IS_ENABLE_CLOG
368 #ifdef EL_IS_ENABLE_TLOG
375 #ifdef EL_IS_ENABLE_CLOG
387 #ifdef EL_IS_ENABLE_TLOG
390 #ifdef EL_IS_ENABLE_CLOG
462 #ifdef EL_IS_ENABLE_TLOG
523 #ifdef EL_IS_ENABLE_TLOG
527 #ifdef EL_IS_ENABLE_CLOG
533 #ifdef EL_IS_ENABLE_TLOG
537 #ifdef EL_IS_ENABLE_CLOG
551 #ifdef EL_IS_ENABLE_TLOG
EL_ACK EL_enable_logging(EL_GROUP group)
event_logger の EL_Event.group の有効化
CCP_CmdRet Cmd_EL_CLEAR_STATISTICS(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_RECORD_EVENT(const CommonCmdPacket *packet)
EL_ACK EL_record_event(EL_GROUP group, uint32_t local, EL_ERROR_LEVEL err_level, uint32_t note)
イベント (EL_Event) を記録
CCP_CmdRet Cmd_EL_DISABLE_TLOG_OVERWRITE_ALL(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_INIT(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_TLOG_SET_PAGE_FOR_TLM(const CommonCmdPacket *packet)
int EL_is_logging_enable(EL_GROUP group)
event_logger の EL_Event.group が有効か?
CCP_CmdRet Cmd_EL_DISABLE_TLOG_OVERWRITE(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_CLEAR_CLOG(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_DISABLE_LOGGING(const CommonCmdPacket *packet)
void EL_initialize(void)
event_logger の初期化
CCP_CmdRet Cmd_EL_ENABLE_LOGGING(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_CLEAR_TLOG(const CommonCmdPacket *packet)
EL_CORE_GROUP
event_logger の Event Group の C2A core 使用分
@ EL_CORE_GROUP_EVENT_LOGGER
EL
@ EL_CORE_GROUP_EH_RESPOND_WITH_HIGHER_LEVEL_RULE
EH_Rule でマッチしたが,そのルールで対応せずに,上位のルールで対応させた(詳細は event_handler.h 参照)
@ EL_CORE_GROUP_CDIS_INTERNAL_ERR
@ EL_CORE_GROUP_COMMAND_ANALYZE
@ EL_CORE_GROUP_EL_DROP_CLOG2
EL CLogs で古いエラーを上書きするとき (local, count を保存)
@ EL_CORE_GROUP_EH_MATCH_RULE
EH_Rule でマッチした(詳細は event_handler.h 参照)
@ EL_CORE_GROUP_CDIS_EXEC_ERR_STS
@ EL_CORE_GROUP_EL_DROP_CLOG1
EL CLogs で古いエラーを上書きするとき (group, err_level を保存)
@ EL_CORE_GROUP_CDIS_EXEC_ERR_CODE
@ EL_CORE_GROUP_TLCD_PAST_TIME
@ EL_CORE_GROUP_APP_MANAGER
@ EL_CORE_GROUP_MODE_MANAGER
@ EL_CORE_GROUP_TASK_DISPATCHER
@ EL_CORE_GROUP_NULL
初期値 or NULL.これは 0 であることを要求 (clear で memset 0x00 をするなら)
@ EL_CORE_GROUP_TLCD_DEPLOY_BLOCK
@ EL_CORE_GROUP_EVENT_HANDLER
EH (詳細は event_handler.h 参照)
CCP_CmdRet Cmd_EL_ENABLE_TLOG_OVERWRITE(const CommonCmdPacket *packet)
const EL_Event * EL_get_the_nth_tlog_from_the_latest(EL_ERROR_LEVEL err_level, uint16_t n)
TLog のイベントテーブルの最新からn番目のイベントを取得
EL_ACK
event_logger の汎用返り値
@ EL_ACK_DISABLE_LOGGING
ロギングが無効により,棄却
@ EL_ACK_ILLEGAL_GROUP
不正な EL_Event.group
@ EL_ACK_OTHER_ERR
その他のエラー
@ EL_ACK_ILLEGAL_ERROR_LEVEL
不正な EL_Event.err_level
@ EL_ACK_TLOG_FULL
TLogの追記が不能のため,TLog記録ができず
EL_ACK EL_disable_tlog_overwrite(EL_ERROR_LEVEL err_level)
TLog のイベントテーブルの上書きを無効化
void EL_enable_all_logging(void)
event_logger の全 EL_Event.group の有効化
void EL_disable_all_logging(void)
event_logger の全 EL_Event.group の無効化
EL_ACK EL_enable_tlog_overwrite(EL_ERROR_LEVEL err_level)
TLog のイベントテーブルの上書きを有効化
void EL_enable_tlog_overwrite_all(void)
TLog のイベントテーブルの上書きをすべて有効化
EL_ACK EL_disable_logging(EL_GROUP group)
event_logger の EL_Event.group の無効化
CCP_CmdRet Cmd_EL_DISABLE_LOGGING_ALL(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_ENABLE_LOGGING_ALL(const CommonCmdPacket *packet)
uint16_t el_clog_counter_t
EL_ERROR_LEVEL
event_logger の エラーレベル
CCP_CmdRet Cmd_EL_ENABLE_TLOG_OVERWRITE_ALL(const CommonCmdPacket *packet)
EL_EVENT_LOCAL
EL_CORE_GROUP_EVENT_LOGGER の local id
@ EL_EVENT_LOCAL_TLOG_MIDDLE_HALF_FULL
TLog のテーブルの半分が埋まった (MIDDLE)
@ EL_EVENT_LOCAL_TLOG_MIDDLE_FULL
TLog のテーブルが埋まった.wpは最初に戻り,古いものから上書きしていく (MIDDLE)
@ EL_EVENT_LOCAL_TLOG_HIGH_HALF_FULL
TLog のテーブルの半分が埋まった (HIGH)
@ EL_EVENT_LOCAL_TLOG_LOW_HALF_FULL
TLog のテーブルの半分が埋まった (LOW)
@ EL_EVENT_LOCAL_UNKNOWN_ERR
不明のエラー
@ EL_EVENT_LOCAL_TLOG_LOW_FULL
TLog のテーブルが埋まった.wpは最初に戻り,古いものから上書きしていく (LOW)
@ EL_EVENT_LOCAL_TLOG_HIGH_FULL
TLog のテーブルが埋まった.wpは最初に戻り,古いものから上書きしていく (HIGH)
CCP_CmdRet Cmd_EL_INIT_LOGGING_SETTINGS(const CommonCmdPacket *packet)
const EventLogger *const event_logger
void EL_disable_tlog_overwrite_all(void)
TLog のイベントテーブルの上書きをすべて無効化
int EL_is_tlog_overwrite_enable(EL_ERROR_LEVEL err_level)
TLog のイベントテーブルの上書きが有効か?
CCP_CmdRet Cmd_EL_CLEAR_LOG_ALL(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_CLOG_SET_PAGE_FOR_TLM(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_CLEAR_LOG_BY_ERR_LEVEL(const CommonCmdPacket *packet)
event_logger の イベント識別IDを定義
EL_GROUP
event_logger の Event Group の user 定義部分
event_logger の各種設定 各パラメタ類の詳細は event_logger.h を参照すること
累積ログ (CLog) の1要素 note group, local が同じイベントを同一とみなす
ObcTime delta_record_time
直近2つのイベント発生時刻の差
el_clog_counter_t count
累積カウンタ
EL_Event event
記録するイベントと,最後に記録されたイベント情報
uint16_t * log_orders
logs を時系列順に並び替える sort_key(サイズ可変のためポインタ)
uint16_t log_capacity
イベントテーブルのキャパシティ(サイズ)
EL_CLogElement * logs
累積カウンタを保持するイベントテーブル.[log_order[0]] が最新.(サイズ可変のためポインタ)
EL_GROUP group
イベントを特定する group id
EL_ERROR_LEVEL err_level
エラーレベル
uint32_t record_counter_total
イベント記録数
uint16_t log_wp
イベントテーブルの write pointer.次回書き込み場所
uint8_t is_enable_overwrite
TLogの上書きを許可するか?(デフォルトでは許可)
uint8_t is_table_overflow
上書きが無効の場合,溢れて追記できなかったか?
uint16_t log_capacity
イベントテーブルのキャパシティ(サイズ)
EL_Event * events
記録するイベントテーブル(サイズ可変のためポインタ)
uint8_t page_no
tlm で下ろすログページ
EL_ERROR_LEVEL err_level
tlm で下ろす情報のエラーレベル
EL_EventStatistics statistics
統計情報
EL_TlmInfo tlm_info
tlmのための情報