source: asp3_tinet_ecnl_rx/trunk/asp3_dcre/tecsgen/tecs/rpc/tRPCSharedTaskMainWithOpener.c@ 337

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

ASP3版ECNLを追加

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