t_syslog.h

説明を見る。
00001 /*
00002  *  TOPPERS/JSP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Just Standard Profile Kernel
00005  * 
00006  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
00007  *                              Toyohashi Univ. of Technology, JAPAN
00008  *  Copyright (C) 2004 by Embedded and Real-Time Systems Laboratory
00009  *              Graduate School of Information Science, Nagoya Univ., JAPAN
00010  * 
00011  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
00012  *  によって公表されている GNU General Public License の Version 2 に記
00013  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
00014  *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
00015  *  利用と呼ぶ)することを無償で許諾する.
00016  *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
00017  *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
00018  *      スコード中に含まれていること.
00019  *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
00020  *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
00021  *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
00022  *      の無保証規定を掲載すること.
00023  *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
00024  *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
00025  *      と.
00026  *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
00027  *        作権表示,この利用条件および下記の無保証規定を掲載すること.
00028  *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
00029  *        報告すること.
00030  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
00031  *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
00032  * 
00033  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00034  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00035  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00036  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00037  * 
00038  *  @(#) $Id: t_syslog.h,v 1.4 2004/01/05 05:15:01 hiro Exp $
00039  */
00040 
00041 /*
00042  *      システムログ機能
00043  *
00044  *  システムログサービスは,システムのログ情報を出力するためのサービス
00045  *  である.カーネルからのログ情報の出力にも用いるため,内部で待ち状態
00046  *  にはいることはない.
00047  *
00048  *  ログ情報は,カーネル内のログバッファに書き込むか,低レベルの文字出
00049  *  力関数を用いて出力する.どちらを使うかは,拡張サービスコールで切り
00050  *  換えることができる.
00051  *
00052  *  ログバッファ領域がオーバフローした場合には,古いログ情報を消して上
00053  *  書きする.
00054  *
00055  *  アセンブリ言語のソースファイルやシステムコンフィギュレーションファ
00056  *  イルからこのファイルをインクルードする時は,_MACRO_ONLY を定義して
00057  *  おくことで,マクロ定義以外の記述を除くことができる.
00058  *
00059  *  このインクルードファイルは,kernel.h と sil.h でインクルードされる.
00060  *  他のファイルから直接インクルードされることはない.
00061  *
00062  *  このファイルをインクルードする前に,t_stddef.h と itron.h をインク
00063  *  ルードしておくことが必要である.
00064  */
00065 
00066 #ifndef _T_SYSLOG_H_
00067 #define _T_SYSLOG_H_
00068 
00069 /*
00070  *  ログ情報の種別の定義
00071  *
00072  *  LOG_TYPE_CYC,LOG_TYPE_ASSERT 以外は,デバッギングインタフェース仕
00073  *  様と合致している.
00074  */
00075 #define LOG_TYPE_INH            0x01u   /* 割込みハンドラ */
00076 #define LOG_TYPE_ISR            0x02u   /* 割込みサービスルーチン */
00077 #define LOG_TYPE_CYC            0x03u   /* 周期ハンドラ */
00078 #define LOG_TYPE_EXC            0x04u   /* CPU例外ハンドラ */
00079 #define LOG_TYPE_TEX            0x05u   /* タスク例外処理ルーチン */
00080 #define LOG_TYPE_TSKSTAT        0x06u   /* タスク状態変化 */
00081 #define LOG_TYPE_DSP            0x07u   /* ディスパッチャ */
00082 #define LOG_TYPE_SVC            0x08u   /* サービスコール */
00083 #define LOG_TYPE_COMMENT        0x09u   /* コメント */
00084 #define LOG_TYPE_ASSERT         0x0au   /* アサーションの失敗 */
00085 
00086 #define LOG_ENTER               0x00u   /* 入口/開始 */
00087 #define LOG_LEAVE               0x80u   /* 出口/終了 */
00088 
00089 /*
00090  *  ログ情報の重要度の定義
00091  */
00092 #define LOG_EMERG       0u              /* シャットダウンに値するエラー */
00093 #define LOG_ALERT       1u
00094 #define LOG_CRIT        2u
00095 #define LOG_ERROR       3u              /* システムエラー */
00096 #define LOG_WARNING     4u              /* 警告メッセージ */
00097 #define LOG_NOTICE      5u
00098 #define LOG_INFO        6u
00099 #define LOG_DEBUG       7u              /* デバッグ用メッセージ */
00100 
00101 #ifndef _MACRO_ONLY
00102 
00103 /*
00104  *  ログ情報のデータ構造
00105  */
00106 
00107 #define TMAX_LOGINFO    6
00108 
00109 typedef struct {
00110                 UINT    logtype;                /* ログ情報の種別 */
00111                 SYSTIM  logtim;                 /* ログ時刻 */
00112                 VP_INT  loginfo[TMAX_LOGINFO];  /* その他のログ情報 */
00113         } SYSLOG;
00114 
00115 /*
00116  *  ログ情報の重要度のビットマップを作るためのマクロ
00117  */
00118 #define LOG_MASK(prio)  (1u << (prio))
00119 #define LOG_UPTO(prio)  ((1u << ((prio) + 1)) - 1)
00120 
00121 #ifndef OMIT_SYSLOG
00122 
00123 /*
00124  *  ログ情報の出力
00125  */
00126 extern ER       vwri_log(UINT prio, SYSLOG *p_log) throw();
00127 
00128 /*
00129  *  ログバッファからのログ情報の読出し
00130  */
00131 extern ER_UINT  vrea_log(SYSLOG *p_log) throw();
00132 
00133 /* 
00134  *  出力すべきログ情報の重要度の設定
00135  */
00136 extern ER       vmsk_log(UINT logmask, UINT lowmask) throw();
00137 
00138 /*
00139  *  ログ情報を出力するためのライブラリ関数
00140  */
00141 
00142 Inline ER
00143 _syslog_0(UINT prio, UINT type)
00144 {
00145         SYSLOG  log;
00146 
00147         log.logtype = type;
00148         return(vwri_log(prio, &log));
00149 }
00150 
00151 Inline ER
00152 _syslog_1(UINT prio, UINT type, VP_INT arg1)
00153 {
00154         SYSLOG  log;
00155 
00156         log.logtype = type;
00157         log.loginfo[0] = arg1;
00158         return(vwri_log(prio, &log));
00159 }
00160 
00161 Inline ER
00162 _syslog_2(UINT prio, UINT type, VP_INT arg1, VP_INT arg2)
00163 {
00164         SYSLOG  log;
00165 
00166         log.logtype = type;
00167         log.loginfo[0] = arg1;
00168         log.loginfo[1] = arg2;
00169         return(vwri_log(prio, &log));
00170 }
00171 
00172 Inline ER
00173 _syslog_3(UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3)
00174 {
00175         SYSLOG  log;
00176 
00177         log.logtype = type;
00178         log.loginfo[0] = arg1;
00179         log.loginfo[1] = arg2;
00180         log.loginfo[2] = arg3;
00181         return(vwri_log(prio, &log));
00182 }
00183 
00184 Inline ER
00185 _syslog_4(UINT prio, UINT type, VP_INT arg1, VP_INT arg2,
00186                                 VP_INT arg3, VP_INT arg4)
00187 {
00188         SYSLOG  log;
00189 
00190         log.logtype = type;
00191         log.loginfo[0] = arg1;
00192         log.loginfo[1] = arg2;
00193         log.loginfo[2] = arg3;
00194         log.loginfo[3] = arg4;
00195         return(vwri_log(prio, &log));
00196 }
00197 
00198 Inline ER
00199 _syslog_5(UINT prio, UINT type, VP_INT arg1, VP_INT arg2,
00200                                 VP_INT arg3, VP_INT arg4, VP_INT arg5)
00201 {
00202         SYSLOG  log;
00203 
00204         log.logtype = type;
00205         log.loginfo[0] = arg1;
00206         log.loginfo[1] = arg2;
00207         log.loginfo[2] = arg3;
00208         log.loginfo[3] = arg4;
00209         log.loginfo[4] = arg5;
00210         return(vwri_log(prio, &log));
00211 }
00212 
00213 Inline ER
00214 _syslog_6(UINT prio, UINT type, VP_INT arg1, VP_INT arg2, VP_INT arg3,
00215                                 VP_INT arg4, VP_INT arg5, VP_INT arg6)
00216 {
00217         SYSLOG  log;
00218 
00219         log.logtype = type;
00220         log.loginfo[0] = arg1;
00221         log.loginfo[1] = arg2;
00222         log.loginfo[2] = arg3;
00223         log.loginfo[3] = arg4;
00224         log.loginfo[4] = arg5;
00225         log.loginfo[5] = arg6;
00226         return(vwri_log(prio, &log));
00227 }
00228 
00229 #else /* OMIT_SYSLOG */
00230 
00231 #define vwri_log(prio, p_log)           E_OK
00232 #define vrea_log(p_log)                 E_OK
00233 #define vmsk_log(logmask, lowmask)      E_OK
00234 
00235 #define _syslog_0(prio, type)                                           E_OK
00236 #define _syslog_1(prio, type, arg1)                                     E_OK
00237 #define _syslog_2(prio, type, arg1, arg2)                               E_OK
00238 #define _syslog_3(prio, type, arg1, arg2, arg3)                         E_OK
00239 #define _syslog_4(prio, type, arg1, arg2, arg3, arg4)                   E_OK
00240 #define _syslog_5(prio, type, arg1, arg2, arg3, arg4, arg5)             E_OK
00241 #define _syslog_6(prio, type, arg1, arg2, arg3, arg4, arg5, arg6)       E_OK
00242 
00243 #endif /* OMIT_SYSLOG */
00244 
00245 /*
00246  *  ログ情報(コメント)を出力するためのマクロ
00247  *
00248  *  format および後続の引数から作成したメッセージを,重大度 prio で
00249  *  ログ情報として出力するためのマクロ.arg1〜argn は VP_INT型にキャ
00250  *  ストするため,VP_INT型に型変換できる任意の型でよい.
00251  */
00252 
00253 #define syslog_0(prio, format) \
00254                 _syslog_1(prio, LOG_TYPE_COMMENT, (VP_INT) format)
00255 
00256 #define syslog_1(prio, format, arg1) \
00257                 _syslog_2(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
00258                                                         (VP_INT)(arg1))
00259 
00260 #define syslog_2(prio, format, arg1, arg2) \
00261                 _syslog_3(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
00262                                         (VP_INT)(arg1), (VP_INT)(arg2))
00263 
00264 #define syslog_3(prio, format, arg1, arg2, arg3) \
00265                 _syslog_4(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
00266                         (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3))
00267 
00268 #define syslog_4(prio, format, arg1, arg2, arg3, arg4) \
00269                 _syslog_5(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
00270                         (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
00271                                                         (VP_INT)(arg4))
00272 
00273 #define syslog_5(prio, format, arg1, arg2, arg3, arg4, arg5) \
00274                 _syslog_6(prio, LOG_TYPE_COMMENT, (VP_INT) format, \
00275                         (VP_INT)(arg1), (VP_INT)(arg2), (VP_INT)(arg3), \
00276                                         (VP_INT)(arg4), (VP_INT)(arg5))
00277 
00278 /*
00279  *  ログ情報(コメント)を出力するためのライブラリ関数(vasyslog.c)
00280  */
00281 extern ER       syslog(UINT prio, const char *format, ...) throw();
00282 
00283 /* 
00284  *  ログ情報のフォーマット出力(log_output.c)
00285  */
00286 extern void     syslog_printf(const char *format, VP_INT *args,
00287                                                 void (*putc)(char)) throw();
00288 extern void     syslog_print(SYSLOG *p_log, void (*putc)(char)) throw();
00289 extern void     syslog_output(void (*putc)(char)) throw();
00290 
00291 #endif /* _MACRO_ONLY */
00292 #endif /* _T_SYSLOG_H_ */
00293 

Copyright © 2006 by TAKAGI Nobuhisa.
Copyright © 2006 by Kijineko Inc..
このページは Mon Dec 18 17:18:39 2006 に Doxygen によって生成されました。
データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】