source: EcnlProtoTool/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMainWithOpener.c@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 8.1 KB
Line 
1/*
2 * TECS Generator
3 * Generator for TOPPERS Embedded Component System
4 *
5 * Copyright (C) 2008-2013 by TOPPERS Project
6 *--
7 * 上記著作権者
8は,以下の(1)(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再é…
11å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
12 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14 * スコード中に含まれていること.
15 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16 * 用できる形で再é…
17å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
18å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
19 * 者
20マニュアルなど)に,上記の著作権表示,この利用条件および下記
21 * の無保証規定を掲載すること.
22 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
23 * 用できない形で再é…
24å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
25 * と.
26 * (a) 再é…
27å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
28マニュアルなど)に,上記の著
29 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
30 * (b) 再é…
31å¸ƒã®å½¢æ…
32‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
33 * 報告すること.
34 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
35 * 害からも,上記著作権者
36およびTOPPERSプロジェクトをå…
37è²¬ã™ã‚‹ã“と.
38 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
39 * 由に基づく請求からも,上記著作権者
40およびTOPPERSプロジェクトを
41 * å…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
47 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
48 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
49 * の責任を負わない.
50 *
51 * $Id: tRPCSharedTaskMainWithOpener.c 270 2017-02-09 04:03:47Z coas-nagasima $
52 */
53
54/*
55 * このファイルは tecsgen によりテンプレートとして自動生成されました
56 * このファイルを編集して使用することが意図されていますが
57 * tecsgen の再実行により上書きされてしまうため、通常
58 * gen/tRPCSharedTaskMainWithOpener_template.c => src/tRPCSharedTaskMainWithOpener.c
59 * のように名前, フォルダを変更してから修正します
60 */
61/* #[<PREAMBLE>]#
62 * #[<...>]# から #[</...>]# で囲まれたコメントは編集しないでください
63 * tecsmerge によるマージに使用されます
64 *
65 * 属性アクセスマクロ #_CAAM_#
66 * initialDelay RELTIM ATTR_initialDelay
67 * reopenDelay RELTIM ATTR_reopenDelay
68 * channelNo int16_t VAR_channelNo
69 *
70 * 呼び口関数 #_TCPF_#
71 * call port : cUnmarshalAndCallFunction signature: sTaskBody context: task
72 * void cUnmarshalAndCallFunction_main( subscript );
73 * call port : cServerSideTDR signature: sTDR context: task
74 * ER cServerSideTDR_reset( );
75 * ER cServerSideTDR_sendSOP( bool_t b_client );
76 * ER cServerSideTDR_receiveSOP( bool_t b_client );
77 * ER cServerSideTDR_sendEOP( bool_t b_continue );
78 * ER cServerSideTDR_receiveEOP( bool_t b_continue );
79 * ER cServerSideTDR_putInt8( int8_t in );
80 * ER cServerSideTDR_putInt16( int16_t in );
81 * ER cServerSideTDR_putInt32( int32_t in );
82 * ER cServerSideTDR_putInt64( int64_t in );
83 * ER cServerSideTDR_putInt128( int128_t in );
84 * ER cServerSideTDR_getInt8( int8_t* out );
85 * ER cServerSideTDR_getInt16( int16_t* out );
86 * ER cServerSideTDR_getInt32( int32_t* out );
87 * ER cServerSideTDR_getInt64( int64_t* out );
88 * ER cServerSideTDR_getInt128( int128_t* out );
89 * ER cServerSideTDR_putFloat32( float32_t in );
90 * ER cServerSideTDR_putDouble64( double64_t in );
91 * ER cServerSideTDR_getFloat32( float32_t* out );
92 * ER cServerSideTDR_getDouble64( double64_t* out );
93 * ER cServerSideTDR_putChar( char_t in );
94 * ER cServerSideTDR_putShort( short in );
95 * ER cServerSideTDR_putInt( int_t in );
96 * ER cServerSideTDR_putLong( long_t in );
97 * ER cServerSideTDR_getChar( char_t* out );
98 * ER cServerSideTDR_getShort( short* out );
99 * ER cServerSideTDR_getInt( int_t* out );
100 * ER cServerSideTDR_getLong( long_t* out );
101 * ER cServerSideTDR_putIntptr( const intptr_t ptr );
102 * ER cServerSideTDR_getIntptr( intptr_t* ptr );
103 * call port : cOpener signature: sServerChannelOpener context: task
104 * ER cOpener_open( );
105 * ER cOpener_close( );
106 * require port : signature: sSysLog context: task
107 * ER write( uint_t prio, const SYSLOG* p_syslog );
108 * ER_UINT read( SYSLOG* p_syslog );
109 * ER mask( uint_t logmask, uint_t lowmask );
110 * ER refer( T_SYSLOG_RLOG* pk_rlog );
111 * require port : signature: sKernel context: task
112 * ER delay( RELTIM delay_time );
113 * ER exitTask( );
114 * ER getTime( SYSTIM* p_system_time );
115 * ER getMicroTime( SYSUTM* p_system_micro_time );
116 * ER exitKernel( );
117 *
118 * #[</PREAMBLE>]# */
119
120/* プロトタイプ宣言や変数の定義をここに書きます */
121#include "tRPCSharedTaskMainWithOpener_tecsgen.h"
122
123#ifndef E_OK
124#define E_OK 0 /* success */
125#define E_ID (-18) /* illegal ID */
126#endif
127
128/* 受け口関数 #_TEPF_# */
129/* #[<ENTRY_PORT>]# eMain
130 * entry port: eMain
131 * signature: sTaskBody
132 * context: task
133 * #[</ENTRY_PORT>]# */
134
135/* #[<ENTRY_FUNC>]# eMain_main
136 * name: eMain_main
137 * global_name: tRPCSharedTaskMainWithOpener_eMain_main
138 * oneway: false
139 * #[</ENTRY_FUNC>]# */
140void
141eMain_main(CELLIDX idx)
142{
143 CELLCB *p_cellcb;
144 ER er;
145 if (VALID_IDX(idx)) {
146 p_cellcb = GET_CELLCB(idx);
147 }
148 else {
149 /* エラー処理コードをここに記述します */
150 }
151
152 /* ここに処理本体を記述します #_TEFB_# */
153 delay( ATTR_initialDelay );
154 /* ここに処理本体を記述します #_TEFB_# */
155 while(1){
156#ifdef RPC_DEBUG
157 syslog(LOG_INFO, "begin RPC unmarshaler task" );
158 syslog(LOG_INFO, "Opening RPC server channel" );
159#endif
160
161 er = cOpener_open();
162 syslog(LOG_INFO, "opened" );
163 while(1){
164 int16_t magic;
165
166 er = cServerSideTDR_getInt16( &magic );
167 if( er != E_OK ){
168 syslog( LOG_INFO, "err: getInt16 for SOP_MAGIC(%X)", er );
169 continue;
170 }
171 if( magic != RPC_CHANNEL_MAN_SOP_MAGIC ){
172 syslog( LOG_INFO, "illegal SOP magic(%X): retrying", (uint16_t)magic );
173 continue;
174 }
175 er = cServerSideTDR_getInt16( &VAR_channelNo );
176 if( er != E_OK ){
177 syslog( LOG_INFO, "err: getInt16 for channelNo(%X)", er );
178 continue;
179 }
180 if( VAR_channelNo < 0 || VAR_channelNo >= N_CP_cUnmarshalAndCallFunction(p_cellcb) ){
181 syslog( LOG_INFO, "illegal channel number(%X): retrying", (uint16_t)VAR_channelNo );
182 continue;
183 }
184 syslog( LOG_INFO, "Shared Channel: servicing channel No. %d", VAR_channelNo );
185
186 cUnmarshalAndCallFunction_main( VAR_channelNo );
187
188 er = cServerSideTDR_getInt16( &magic );
189 if( er != E_OK ){
190 syslog( LOG_INFO, "err: getInt16 for EOP_MAGIC(%X)", er );
191 continue;
192 }
193 if( magic != RPC_CHANNEL_MAN_EOP_MAGIC ){
194 syslog( LOG_INFO, "illegal EOP magic(%X): retrying", (uint16_t)magic );
195 continue;
196 }
197 }
198 er = cOpener_close();
199 delay( ATTR_reopenDelay );
200 }
201}
202
203/* #[<POSTAMBLE>]#
204 * これより下に非受け口関数を書きます
205 * #[</POSTAMBLE>]#*/
Note: See TracBrowser for help on using the repository browser.