source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/syssvc/tSysLog.c@ 352

Last change on this file since 352 was 352, checked in by coas-nagasima, 6 years ago

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
File size: 6.3 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2016 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16 * スコード中に含まれていること.
17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
20 * の無保証規定を掲載すること.
21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
23 * と.
24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
25 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
27 * 報告すること.
28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
32 * 免責すること.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
38 * の責任を負わない.
39 *
40 * $Id$
41 */
42
43/*
44 * システムログ機能
45 */
46
47#include <sil.h>
48#include "tSysLog_tecsgen.h"
49#undef TOPPERS_OMIT_SYSLOG
50#include <t_syslog.h>
51#include <log_output.h>
52#include "target_syssvc.h"
53
54/*
55 * トレースログマクロのデフォルト定義
56 *
57 * システムログに出力されたログ情報をトレースログにも記録できるように,
58 * eSyslog_writeの入口にトレースログマクロを置く.
59 */
60#ifndef LOG_TSYSLOG_ESYSLOG_WRITE_ENTER
61#define LOG_TSYSLOG_ESYSLOG_WRITE_ENTER(priority, p_syslog)
62#endif /* LOG_TSYSLOG_ESYSLOG_WRITE_ENTER */
63
64/*
65 * ログ時刻の取り出し
66 *
67 * デフォルトでは,ログ時刻として,高分解能タイマのカウント値を用いて
68 * いる.ターゲット依存で変更する場合には,SYSLOG_GET_LOGTIMに,ログ時
69 * 刻を取り出すマクロを定義する.
70 */
71#ifndef SYSLOG_GET_LOGTIM
72#define target_hrt_get_current _kernel_target_hrt_get_current
73#include "target_timer.h"
74#define SYSLOG_GET_LOGTIM(p_logtim) \
75 (*(p_logtim) = _kernel_target_hrt_get_current())
76#endif /* SYSLOG_GET_LOGTIM */
77
78/*
79 * 低レベル出力の呼出し関数
80 */
81static void
82low_putchar(char c)
83{
84 cPutLog_putChar(c);
85}
86
87/*
88 * ログ情報の出力(受け口関数)
89 *
90 * CPUロック状態や実行コンテキストによらず動作できるように実装してある.
91 */
92ER
93eSysLog_write(uint_t priority, const SYSLOG *p_syslog)
94{
95 SIL_PRE_LOC;
96
97 LOG_TSYSLOG_ESYSLOG_WRITE_ENTER(priority, p_syslog);
98 SIL_LOC_INT();
99
100 /*
101 * ログ時刻の設定
102 */
103 SYSLOG_GET_LOGTIM(&(((SYSLOG *) p_syslog)->logtim));
104
105 /*
106 * ログバッファに記録
107 */
108 if ((VAR_logMask & LOG_MASK(priority)) != 0U) {
109 VAR_logBuffer[VAR_tail] = *p_syslog;
110 VAR_tail++;
111 if (VAR_tail >= ATTR_logBufferSize) {
112 VAR_tail = 0U;
113 }
114 if (VAR_count < ATTR_logBufferSize) {
115 VAR_count++;
116 }
117 else {
118 VAR_head = VAR_tail;
119 VAR_lost++;
120 }
121 }
122
123 /*
124 * 低レベル出力
125 */
126 if ((VAR_lowMask & LOG_MASK(priority)) != 0U) {
127 syslog_print(p_syslog, low_putchar);
128 low_putchar('\n');
129 }
130
131 SIL_UNL_INT();
132 return(E_OK);
133}
134
135/*
136 * ログバッファからの読出し(受け口関数)
137 *
138 * CPUロック状態や実行コンテキストによらず動作できるように実装してある.
139 */
140ER_UINT
141eSysLog_read(SYSLOG *p_syslog)
142{
143 ER_UINT ercd;
144 SIL_PRE_LOC;
145
146 SIL_LOC_INT();
147
148 /*
149 * ログバッファからの取出し
150 */
151 if (VAR_count > 0U) {
152 *p_syslog = VAR_logBuffer[VAR_head];
153 VAR_count--;
154 VAR_head++;
155 if (VAR_head >= ATTR_logBufferSize) {
156 VAR_head = 0U;
157 }
158 ercd = (ER_UINT) VAR_lost;
159 VAR_lost = 0U;
160 }
161 else {
162 ercd = E_OBJ;
163 }
164
165 SIL_UNL_INT();
166 return(ercd);
167}
168
169/*
170 * 出力すべきログ情報の重要度の設定(受け口関数)
171 */
172ER
173eSysLog_mask(uint_t logMask, uint_t lowMask)
174{
175 SIL_PRE_LOC;
176
177 SIL_LOC_INT();
178 VAR_logMask = logMask;
179 VAR_lowMask = lowMask;
180 SIL_UNL_INT();
181 return(E_OK);
182}
183
184/*
185 * ログバッファの状態参照(受け口関数)
186 */
187ER_UINT
188eSysLog_refer(T_SYSLOG_RLOG *pk_rlog)
189{
190 SIL_PRE_LOC;
191
192 SIL_LOC_INT();
193 pk_rlog->count = VAR_count;
194 pk_rlog->lost = VAR_lost;
195 pk_rlog->logmask = VAR_logMask;
196 pk_rlog->lowmask = VAR_lowMask;
197 SIL_UNL_INT();
198 return(E_OK);
199}
200
201/*
202 * 低レベル出力によるすべてのログ情報の出力(受け口関数)
203 */
204ER
205eSysLog_flush(void)
206{
207 SYSLOG logbuf;
208 ER_UINT rercd;
209 SIL_PRE_LOC;
210
211 SIL_LOC_INT();
212
213 while ((rercd = eSysLog_read(&logbuf)) >= 0) {
214 if (rercd > 0) {
215 syslog_lostmsg((uint_t) rercd, low_putchar);
216 }
217 if (logbuf.logtype >= LOG_TYPE_COMMENT) {
218 syslog_print(&logbuf, low_putchar);
219 low_putchar('\n');
220 }
221 }
222
223 SIL_UNL_INT();
224 return(E_OK);
225}
Note: See TracBrowser for help on using the repository browser.