[388] | 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 | import_C( "tecs_rpc.h" );
|
---|
| 40 |
|
---|
| 41 | // Straight Order TDR
|
---|
| 42 | const uint32_t TDR_SOP_MAGIC1 = (0x672A); // Client to Server
|
---|
| 43 | const uint32_t TDR_SOP_MAGIC2 = (0x561E); // Server to Client
|
---|
| 44 | const uint32_t TDR_EOP_MAGIC1 = (0x5A3C); // 返信を待つ (同期呼出し)
|
---|
| 45 | const uint32_t TDR_EOP_MAGIC2 = (0x6D5E); // 返信を待たない(非同期呼出しまたはリターン)
|
---|
| 46 |
|
---|
| 47 | // Straight Order TDR for SharedChannel
|
---|
| 48 | const uint32_t TDR_SHSOP_MAGIC1 = (0x98D5); // Client to Server
|
---|
| 49 | const uint32_t TDR_SHSOP_MAGIC2 = (0xA9E1); // Server to Client
|
---|
| 50 | const uint32_t TDR_SHEOP_MAGIC1 = (0xB5C3); // 返信を待つ (同期呼出し)
|
---|
| 51 | const uint32_t TDR_SHEOP_MAGIC2 = (0x92A1); // 返信を待たない(非同期呼出しまたはリターン)
|
---|
| 52 |
|
---|
| 53 | /*
|
---|
| 54 | * TDR: TECS Data Representation layer
|
---|
| 55 | */
|
---|
| 56 | [deviate] /* get_intptr が逸脱になる */
|
---|
| 57 | signature sTDR { /* TECS Data Representation */
|
---|
| 58 |
|
---|
| 59 | /* 制御関数 */
|
---|
| 60 |
|
---|
| 61 | /* チャンネルのリセット */
|
---|
| 62 | ER reset( void ); /* 通信チャンネルのリセット */
|
---|
| 63 | /* 途中でエラーが発生し、送信または受信を続行できなかったときはリセットする */
|
---|
| 64 | /* 一方がリセットをかけると、他方は RESET エラーを返す */
|
---|
| 65 | /* 確認できないときは、このチャネルは放棄するしかない */
|
---|
| 66 |
|
---|
| 67 | /* マジックコードの送受信 */
|
---|
| 68 | ER sendSOP( [in]bool_t b_client ); /* StartOfPacket magic を送信 */
|
---|
| 69 | ER receiveSOP( [in]bool_t b_client ); /* StartOfPacket magic を受信 */
|
---|
| 70 | /* b_client: クライアント側なら true, サーバー側なら false */
|
---|
| 71 |
|
---|
| 72 | ER sendEOP( [in]bool_t b_continue ); /* EndOfPacket magic を送信(パケットの掃きだしも行う) */
|
---|
| 73 | ER receiveEOP( [in]bool_t b_continue );/* EndOfPacket magic を受信 */
|
---|
| 74 | /* b_continue: 同期呼び出しのクライアント側なら true,
|
---|
| 75 | 非同期呼び出しのクライアント側またはサーバー側なら false */
|
---|
| 76 |
|
---|
| 77 | /* データ送受信関数 */
|
---|
| 78 |
|
---|
| 79 | /* 整数型 (推奨) */
|
---|
| 80 | ER putInt8( [in]int8_t in );
|
---|
| 81 | ER putInt16( [in]int16_t in );
|
---|
| 82 | ER putInt32( [in]int32_t in );
|
---|
| 83 | ER putInt64( [in]int64_t in );
|
---|
| 84 | ER putInt128( [in]int128_t in );
|
---|
| 85 |
|
---|
| 86 | ER getInt8( [out]int8_t *out );
|
---|
| 87 | ER getInt16( [out]int16_t *out );
|
---|
| 88 | ER getInt32( [out]int32_t *out );
|
---|
| 89 | ER getInt64( [out]int64_t *out );
|
---|
| 90 | ER getInt128( [out]int128_t *out );
|
---|
| 91 |
|
---|
| 92 | /* 無符号整数型 (推奨) */
|
---|
| 93 | ER putUInt8( [in]uint8_t in );
|
---|
| 94 | ER putUInt16( [in]uint16_t in );
|
---|
| 95 | ER putUInt32( [in]uint32_t in );
|
---|
| 96 | ER putUInt64( [in]uint64_t in );
|
---|
| 97 | ER putUInt128( [in]uint128_t in );
|
---|
| 98 |
|
---|
| 99 | ER getUInt8( [out]uint8_t *out );
|
---|
| 100 | ER getUInt16( [out]uint16_t *out );
|
---|
| 101 | ER getUInt32( [out]uint32_t *out );
|
---|
| 102 | ER getUInt64( [out]uint64_t *out );
|
---|
| 103 | ER getUInt128( [out]uint128_t *out );
|
---|
| 104 |
|
---|
| 105 | /* 文字型(推奨、8bit) */
|
---|
| 106 | ER putChar( [in]char_t in );
|
---|
| 107 | ER getChar( [out]char_t *out );
|
---|
| 108 |
|
---|
| 109 | /* Bool 型 */
|
---|
| 110 | ER putBool( [in]bool_t in );
|
---|
| 111 | ER getBool( [out]bool_t *out );
|
---|
| 112 |
|
---|
| 113 | /* 浮動小数型 */
|
---|
| 114 | ER putFloat32( [in]float32_t in );
|
---|
| 115 | ER putDouble64( [in]double64_t in );
|
---|
| 116 | ER getFloat32( [out]float32_t *out );
|
---|
| 117 | ER getDouble64( [out]double64_t *out );
|
---|
| 118 |
|
---|
| 119 |
|
---|
| 120 | /* 非推奨の型(有符号) */
|
---|
| 121 | ER putSChar( [in]schar_t in );
|
---|
| 122 | ER putShort( [in]short_t in );
|
---|
| 123 | ER putInt( [in]int_t in );
|
---|
| 124 | ER putLong( [in]long_t in );
|
---|
| 125 |
|
---|
| 126 | ER getSChar( [out]schar_t *out );
|
---|
| 127 | ER getShort( [out]short_t *out );
|
---|
| 128 | ER getInt( [out]int_t *out );
|
---|
| 129 | ER getLong( [out]long_t *out );
|
---|
| 130 |
|
---|
| 131 |
|
---|
| 132 | /* 非推奨の型(無符号) */
|
---|
| 133 | ER putUChar( [in]uchar_t in );
|
---|
| 134 | ER putUShort( [in]ushort_t in );
|
---|
| 135 | ER putUInt( [in]uint_t in );
|
---|
| 136 | ER putULong( [in]ulong_t in );
|
---|
| 137 |
|
---|
| 138 | ER getUChar( [out]unsigned char *out );
|
---|
| 139 | ER getUShort( [out]ushort_t *out );
|
---|
| 140 | ER getUInt( [out]uint_t *out );
|
---|
| 141 | ER getULong( [out]ulong_t *out );
|
---|
| 142 |
|
---|
| 143 | ER putIntptr( [in]const intptr_t ptr );
|
---|
| 144 | ER getIntptr( [out]intptr_t *ptr );
|
---|
| 145 | };
|
---|
| 146 |
|
---|
| 147 | // Straight Byte Order TECS Data Representation (Data are always sent in native endian)
|
---|
| 148 | celltype tTDR {
|
---|
| 149 | call sChannel cChannel;
|
---|
| 150 | [inline]
|
---|
| 151 | entry sTDR eTDR;
|
---|
| 152 |
|
---|
| 153 | var {
|
---|
| 154 | TMO tmo = C_EXP( "TMO_FEVR" );
|
---|
| 155 | };
|
---|
| 156 | require tSysLog.eSysLog;
|
---|
| 157 | };
|
---|
| 158 |
|
---|
| 159 | // Network Byte Order (Big-endian) TECS Data Representation (Data are always sent in big-endian)
|
---|
| 160 | celltype tNBOTDR {
|
---|
| 161 | call sChannel cChannel;
|
---|
| 162 | [inline]
|
---|
| 163 | entry sTDR eTDR;
|
---|
| 164 |
|
---|
| 165 | var {
|
---|
| 166 | TMO tmo = C_EXP( "TMO_FEVR" );
|
---|
| 167 | };
|
---|
| 168 | require tSysLog.eSysLog;
|
---|
| 169 | };
|
---|