source: ssp_qb_r5f100le_cs/trunk/syssvc/logtask.c@ 95

Last change on this file since 95 was 95, checked in by nmir-saito, 9 years ago

ファイルの mime-type 変更

  • Property svn:mime-type set to text/plain; charset=shift_jis
File size: 4.4 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 * Copyright (C) 2010-2012 by Meika Sugimoto
10 * Copyright (C) 2015 by Naoki Saito
11 * Nagoya Municipal Industrial Research Institute, JAPAN
12 *
13 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
15 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
17 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
18 * スコード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
20 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
21 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
22 * の無保証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
25 * と.
26 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
27 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
28 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
29 * 報告すること.
30 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
31 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
32 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
33 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
34 * 免責すること.
35 *
36 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
37 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
38 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
39 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
40 * の責任を負わない.
41 *
42 * @(#) $Id: logtask.c 1111 2008-06-12 08:42:26Z ertl-hiro $
43 */
44
45/*
46 * システムログタスク
47 */
48
49#include <kernel.h>
50#include <t_syslog.h>
51#include <log_output.h>
52#include "syssvc/serial.h"
53#include "syssvc/syslog.h"
54#include "logtask.h"
55
56/*
57 * システムログタスクの出力先のポートID
58 */
59static ID logtask_portid;
60
61/*
62 * シリアルインタフェースへの1文字出力
63 */
64static void
65logtask_putc(char c)
66{
67 serial_wri_dat(logtask_portid, &c, 1);
68}
69
70/*
71 * ログタスクの初期化処理
72 */
73
74void logtask_initialize(ID log_portid)
75{
76 logtask_portid = log_portid;
77 serial_opn_por(logtask_portid);
78 syslog_msk_log(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_EMERG));
79 syslog_1(LOG_NOTICE, "System logging task is started on port %d.",
80 logtask_portid);
81}
82/*
83 * システムログタスクの本体
84 */
85void
86logtask_main(intptr_t exinf)
87{
88 SYSLOG syslog;
89 static uint_t lost = 0;
90 ER_UINT rercd;
91
92 while ((rercd = syslog_rea_log(&syslog)) >= 0) {
93 lost += (uint_t) rercd;
94 if (syslog.logtype >= LOG_TYPE_COMMENT) {
95 if (lost > 0U) {
96 syslog_lostmsg(lost, logtask_putc);
97 lost = 0U;
98 }
99 syslog_print(&syslog, logtask_putc);
100 logtask_putc('\n');
101 }
102 }
103 if (lost > 0U) {
104 syslog_lostmsg(lost, logtask_putc);
105 }
106}
107
108void cychdr_act_logtsk(intptr_t exinf)
109{
110 iact_tsk((ID)exinf);
111}
112
113/*
114 * システムログタスクの終了処理
115 */
116void
117logtask_terminate(intptr_t exinf)
118{
119 char c;
120 SYSLOG syslog;
121 bool_t msgflg = false;
122 ER_UINT rercd;
123
124 /*
125 * シリアルインタフェースドライバの送信バッファに蓄積されたデータ
126 * を,低レベル出力機能を用いて出力する.
127 */
128 while (serial_get_chr(logtask_portid, &c)) {
129 target_fput_log(c);
130 }
131
132 /*
133 * ログバッファに記録されたログ情報を,低レベル出力機能を用いて出
134 * 力する.
135 */
136 while ((rercd = syslog_rea_log(&syslog)) >= 0) {
137 if (!msgflg) {
138 /*
139 * ログバッファに残ったログ情報であることを示す文字列を出
140 * 力する.
141 */
142 syslog_printf("-- buffered messages --\n", NULL, target_fput_log);
143 msgflg = true;
144 }
145 if (rercd > 0) {
146 syslog_lostmsg((uint_t) rercd, target_fput_log);
147 }
148 if (syslog.logtype >= LOG_TYPE_COMMENT) {
149 syslog_print(&syslog, target_fput_log);
150 target_fput_log('\n');
151 }
152 }
153}
Note: See TracBrowser for help on using the repository browser.