13 #include "../TimeManager/time_manager.h"
14 #include "../WatchdogTimer/watchdog_timer.h"
16 #include "../../TlmCmd/common_cmd_packet_util.h"
19 #ifdef EL_IS_ENABLE_CLOG
54 #ifdef EL_IS_ENABLE_TLOG
90 #ifdef EL_IS_ENABLE_CLOG
157 #ifdef EL_IS_ENABLE_TLOG
159 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
163 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
169 #ifdef EL_IS_ENABLE_CLOG
172 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
178 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
194 #ifdef EL_IS_ENABLE_TLOG
197 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
203 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
217 #ifdef EL_IS_ENABLE_CLOG
221 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
229 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
257 event.err_level = err_level;
259 #ifdef EL_IS_ENABLE_EVENT_NOTE
272 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
295 #ifdef EL_IS_ENABLE_TLOG
299 #ifdef EL_IS_ENABLE_CLOG
304 #ifdef EL_IS_ENABLE_TLOG
305 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
318 #ifdef EL_IS_ENABLE_TLOG
323 const uint16_t wp = p_tlog->
log_wp;
331 p_tlog->
events[wp] = *event;
348 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
364 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
386 if (wp == (capacity / 2) && (capacity % 2 ) == 0)
397 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
444 #ifdef EL_IS_ENABLE_CLOG
457 p_newest_clog_log->
count++;
460 p_newest_clog_log->
event = *event;
482 for (i = 0; i < capacity; ++i)
497 for (i = 0; i < capacity; ++i)
546 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
562 (uint32_t)drop_clog_log->
count);
596 uint32_t group_idx = (uint32_t)group / 8;
597 uint32_t group_subidx = 7 - (uint32_t)group % 8;
605 mask = (uint8_t)(0x01 << group_subidx);
606 info = (uint8_t)(info | mask);
616 uint32_t group_idx = (uint32_t)group / 8;
617 uint32_t group_subidx = 7 - (uint32_t)group % 8;
625 mask = (uint8_t)(0x01 << group_subidx);
626 mask = (uint8_t)(~mask);
627 info = (uint8_t)(info & mask);
637 uint32_t group_idx = (uint32_t)group / 8;
638 uint32_t group_subidx = 7 - (uint32_t)group % 8;
647 mask = (uint8_t)(0x01 << group_subidx);
648 ret = (uint8_t)(info & mask);
650 if (ret == 0)
return 0;
667 #ifdef EL_IS_ENABLE_TLOG
714 if (err_level < 0)
return 0;
743 idx = (uint16_t)((p_tlog->
log_wp - 1 - n + capacity) % capacity);
746 return &p_tlog->
events[idx];
763 #ifdef EL_IS_ENABLE_TLOG
767 #ifdef EL_IS_ENABLE_CLOG
785 #ifdef EL_IS_ENABLE_TLOG
789 #ifdef EL_IS_ENABLE_CLOG
805 #ifdef EL_IS_ENABLE_TLOG
820 #ifdef EL_IS_ENABLE_CLOG
863 #ifdef EL_IS_ENABLE_TLOG
874 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
882 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
902 #ifdef EL_IS_ENABLE_CLOG
913 #ifdef EL_IS_ENABLE_MIDDLE_ERROR_LEVEL
921 #ifdef EL_IS_ENABLE_EL_ERROR_LEVEL
1002 #ifdef EL_IS_ENABLE_TLOG
@ CCP_EXEC_ILLEGAL_PARAMETER
コマンド実行時のパラメタエラー
@ CCP_EXEC_ILLEGAL_CONTEXT
コマンド実行時のその他のエラー
CCP_CmdRet CCP_make_cmd_ret_without_err_code(CCP_EXEC_STS exec_sts)
コマンド返り値である CCP_CmdRet を作成(エラーコード不使用版)
#define CCP_get_param_from_packet(packet, n, type)
CCP packet から,n番目のコマンド引数を取得する
void EH_match_event_counter_to_el(void)
イベントカウンタを EL のそれに合わせる
EL_ACK EL_enable_logging(EL_GROUP group)
event_logger の EL_Event.group の有効化
CCP_CmdRet Cmd_EL_CLEAR_STATISTICS(const CommonCmdPacket *packet)
static EL_Event EL_init_event_(EL_GROUP group, uint32_t local, EL_ERROR_LEVEL err_level, uint32_t note)
イベント (EL_Event) を初期化
CCP_CmdRet Cmd_EL_RECORD_EVENT(const CommonCmdPacket *packet)
static EL_Event EL_tlog_event_table_high_[EL_TLOG_LOG_SIZE_MAX_HIGH]
static uint16_t EL_clog_log_order_table_eh_[EL_CLOG_LOG_SIZE_MAX_EH]
static uint16_t EL_clog_log_order_table_el_[EL_CLOG_LOG_SIZE_MAX_EL]
static EL_CLogElement EL_clog_log_table_el_[EL_CLOG_LOG_SIZE_MAX_EL]
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)
static EL_CLogElement EL_clog_log_table_high_[EL_CLOG_LOG_SIZE_MAX_HIGH]
CCP_CmdRet Cmd_EL_INIT(const CommonCmdPacket *packet)
static EventLogger event_logger_
CCP_CmdRet Cmd_EL_TLOG_SET_PAGE_FOR_TLM(const CommonCmdPacket *packet)
static uint16_t EL_clog_log_order_table_middle_[EL_CLOG_LOG_SIZE_MAX_MIDDLE]
static EL_CLogElement EL_clog_log_table_low_[EL_CLOG_LOG_SIZE_MAX_LOW]
int EL_is_logging_enable(EL_GROUP group)
event_logger の EL_Event.group が有効か?
CCP_CmdRet Cmd_EL_DISABLE_TLOG_OVERWRITE(const CommonCmdPacket *packet)
static uint16_t EL_clog_log_order_table_low_[EL_CLOG_LOG_SIZE_MAX_LOW]
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)
static void EL_move_to_front_in_clog_(const EL_Event *event)
該当イベントの CLog を,イベントテーブルの先頭に出す
static void EL_create_clog_on_front_(const EL_Event *event)
イベントテーブル先頭に該当イベントの CLog をつくる
CCP_CmdRet Cmd_EL_CLEAR_TLOG(const CommonCmdPacket *packet)
static void EL_clear_tlog_(EL_ERROR_LEVEL err_level)
TLogテーブルをクリア
static void EL_record_event_to_clog_(const EL_Event *event)
イベント (EL_Event) を CLog に記録
CCP_CmdRet Cmd_EL_ENABLE_TLOG_OVERWRITE(const CommonCmdPacket *packet)
static void EL_clear_clog_(EL_ERROR_LEVEL err_level)
CLogテーブルをクリア
static EL_CLogElement EL_clog_log_table_middle_[EL_CLOG_LOG_SIZE_MAX_MIDDLE]
static uint16_t EL_clog_log_order_table_high_[EL_CLOG_LOG_SIZE_MAX_HIGH]
static void EL_clear_statistics_(void)
統計情報をクリア
const EL_Event * EL_get_the_nth_tlog_from_the_latest(EL_ERROR_LEVEL err_level, uint16_t n)
TLog のイベントテーブルの最新からn番目のイベントを取得
static EL_ACK EL_record_event_(EL_GROUP group, uint32_t local, EL_ERROR_LEVEL err_level, uint32_t note)
イベント (EL_Event) を記録
static EL_Event EL_tlog_event_table_middle_[EL_TLOG_LOG_SIZE_MAX_MIDDLE]
static EL_ACK EL_record_event_to_tlog_(const EL_Event *event)
イベント (EL_Event) を TLog に記録
static EL_CLOG_LOG_ACK EL_search_clog_(const EL_Event *event, uint16_t *log_idx, uint16_t *order_idx)
該当イベントの CLog を検索し取得する
EL_ACK EL_disable_tlog_overwrite(EL_ERROR_LEVEL err_level)
TLog のイベントテーブルの上書きを無効化
static void EL_clear_all_tlog_(void)
TLogテーブルをすべてクリア
void EL_enable_all_logging(void)
event_logger の全 EL_Event.group の有効化
@ EL_CLOG_LOG_ACK_NOT_FOUND
指定ログが見つからず
static EL_Event EL_tlog_event_table_el_[EL_TLOG_LOG_SIZE_MAX_EL]
void EL_disable_all_logging(void)
event_logger の全 EL_Event.group の無効化
static void EL_clear_latest_event_(void)
最新ログをクリア
EL_ACK EL_enable_tlog_overwrite(EL_ERROR_LEVEL err_level)
TLog のイベントテーブルの上書きを有効化
void EL_enable_tlog_overwrite_all(void)
TLog のイベントテーブルの上書きをすべて有効化
static EL_Event EL_tlog_event_table_eh_[EL_TLOG_LOG_SIZE_MAX_EH]
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)
CCP_CmdRet Cmd_EL_ENABLE_TLOG_OVERWRITE_ALL(const CommonCmdPacket *packet)
CCP_CmdRet Cmd_EL_INIT_LOGGING_SETTINGS(const CommonCmdPacket *packet)
static void EL_check_tlog_wp_(EL_ERROR_LEVEL err_level)
TLog の wp をチェックし, event を生成する
const EventLogger *const event_logger
static EL_Event EL_tlog_event_table_low_[EL_TLOG_LOG_SIZE_MAX_LOW]
void EL_disable_tlog_overwrite_all(void)
TLog のイベントテーブルの上書きをすべて無効化
static void EL_clear_all_clog_(void)
CLogテーブルをすべてクリア
int EL_is_tlog_overwrite_enable(EL_ERROR_LEVEL err_level)
TLog のイベントテーブルの上書きが有効か?
static EL_CLogElement EL_clog_log_table_eh_[EL_CLOG_LOG_SIZE_MAX_EH]
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)
#define EL_CLOG_TLM_PAGE_MAX_MIDDLE
CLogで保存するログのページ数 (EL_ERROR_LEVEL_MIDDLE)
#define EL_CLOG_TLM_PAGE_MAX_HIGH
CLogで保存するログのページ数 (EL_ERROR_LEVEL_HIGH)
#define EL_TLOG_LOG_SIZE_MAX_EH
TLogにて保存するログ数 (EL_ERROR_LEVEL_EH) 小さめでOK. EH_MAX_RULE_NUM_OF_EL_ID_DUPLICATES x 多段EHの最大段数ぐらいあれば
#define EL_CLOG_LOG_SIZE_MAX_EH
CLogにて保存するログ数 (EL_ERROR_LEVEL_EH) これは EH では使われないので小さくて良い
#define EL_CLOG_LOG_SIZE_MAX_HIGH
#define EL_TLOG_LOG_SIZE_MAX_LOW
#define EL_TLOG_TLM_PAGE_MAX_HIGH
TLogで保存するログのページ数 (EL_ERROR_LEVEL_HIGH)
#define EL_TLOG_TLM_PAGE_SIZE
TLogにて,テレメ1ページにおろせるlog数
@ EL_CORE_GROUP_EVENT_LOGGER
EL
@ EL_CORE_GROUP_EL_DROP_CLOG2
EL CLogs で古いエラーを上書きするとき (local, count を保存)
@ EL_CORE_GROUP_EL_DROP_CLOG1
EL CLogs で古いエラーを上書きするとき (group, err_level を保存)
@ EL_CORE_GROUP_NULL
初期値 or NULL.これは 0 であることを要求 (clear で memset 0x00 をするなら)
#define EL_TLOG_LOG_SIZE_MAX_MIDDLE
#define EL_CLOG_TLM_PAGE_SIZE
CLogにて,テレメ1ページにおろせるlog数
#define EL_CLOG_TLM_PAGE_MAX_LOW
CLogで保存するログのページ数 (EL_ERROR_LEVEL_LOW)
EL_ACK
event_logger の汎用返り値
@ EL_ACK_DISABLE_LOGGING
ロギングが無効により,棄却
@ EL_ACK_ILLEGAL_GROUP
不正な EL_Event.group
@ EL_ACK_ILLEGAL_ERROR_LEVEL
不正な EL_Event.err_level
@ EL_ACK_TLOG_FULL
TLogの追記が不能のため,TLog記録ができず
#define EL_TLOG_TLM_PAGE_MAX_LOW
TLogで保存するログのページ数 (EL_ERROR_LEVEL_LOW)
#define EL_CLOG_LOG_SIZE_MAX_MIDDLE
#define EL_TLOG_LOG_SIZE_MAX_EL
TLogにて保存するログ数 (EL_ERROR_LEVEL_EL)
#define EL_CLOG_LOG_SIZE_MAX_LOW
#define EL_TLOG_LOG_SIZE_MAX_HIGH
#define EL_TLOG_TLM_PAGE_MAX_MIDDLE
TLogで保存するログのページ数 (EL_ERROR_LEVEL_MIDDLE)
#define EL_CLOG_LOG_SIZE_MAX_EL
CLogにて保存するログ数 (EL_ERROR_LEVEL_EL)
EL_ERROR_LEVEL
event_logger の エラーレベル
@ 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_TLOG_LOW_FULL
TLog のテーブルが埋まった.wpは最初に戻り,古いものから上書きしていく (LOW)
@ EL_EVENT_LOCAL_TLOG_HIGH_FULL
TLog のテーブルが埋まった.wpは最初に戻り,古いものから上書きしていく (HIGH)
EL_GROUP
event_logger の Event Group の user 定義部分
void EL_load_default_settings(void)
ObcTime OBCT_diff(const ObcTime *before, const ObcTime *after)
ObcTime の引き算を行う
累積ログ (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_counters[EL_ERROR_LEVEL_MAX]
エラーレベルごとの記録数
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
記録するイベントテーブル(サイズ可変のためポインタ)
struct EL_TlmInfo::@13 tlog
struct EL_TlmInfo::@14 clog
uint8_t page_no
tlm で下ろすログページ
EL_ERROR_LEVEL err_level
tlm で下ろす情報のエラーレベル
EL_EventStatistics statistics
統計情報
EL_TlmInfo tlm_info
tlmのための情報
uint8_t is_logging_enable[EL_GROUP_MAX/8+1]
有効かフラグ.メモリ削減のため, bit 単位で保存
EL_TimeSeriesLog tlogs[EL_ERROR_LEVEL_MAX]
EL_CumulativeLog clogs[EL_ERROR_LEVEL_MAX]
ObcTime TMGR_get_master_clock(void)
現在の master_clock_ を取得する