tecscde 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.rubocop.yml +125 -0
  4. data/.rubocop_todo.yml +188 -0
  5. data/CHANGELOG.md +3 -0
  6. data/Gemfile +6 -0
  7. data/LICENSE +46 -0
  8. data/LICENSE.ja +32 -0
  9. data/README.ja.md +200 -0
  10. data/README.md +35 -0
  11. data/Rakefile +27 -0
  12. data/bin/tecscde +64 -0
  13. data/glade/tecscde-cell-property.glade +205 -0
  14. data/glade/tecscde-celltype-property.glade +172 -0
  15. data/glade/tecscde-celltype.glade +414 -0
  16. data/glade/tecscde-export.glade +161 -0
  17. data/glade/test-cell-plugin.rb +51 -0
  18. data/glade/test-cell-property.rb +35 -0
  19. data/glade/test-export.rb +35 -0
  20. data/glade/test-palette.rb +26 -0
  21. data/lib/tcflow.rb +148 -0
  22. data/lib/tecscde.rb +65 -0
  23. data/lib/tecscde/NewCell.png +0 -0
  24. data/lib/tecscde/SelectArrow.png +0 -0
  25. data/lib/tecscde/attr_tree_view.rb +253 -0
  26. data/lib/tecscde/cell_plugin_dialog.glade +294 -0
  27. data/lib/tecscde/cell_plugin_dialog.rb +89 -0
  28. data/lib/tecscde/celltype_tree_view.rb +105 -0
  29. data/lib/tecscde/change_set_control.rb +35 -0
  30. data/lib/tecscde/change_set_control/change_set.rb +32 -0
  31. data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
  32. data/lib/tecscde/command.rb +35 -0
  33. data/lib/tecscde/control.rb +491 -0
  34. data/lib/tecscde/highlighted_objects.rb +180 -0
  35. data/lib/tecscde/logger.rb +74 -0
  36. data/lib/tecscde/main_view_and_model.rb +80 -0
  37. data/lib/tecscde/palette.glade +553 -0
  38. data/lib/tecscde/palette.rb +174 -0
  39. data/lib/tecscde/preferences.glade +117 -0
  40. data/lib/tecscde/preferences.rb +44 -0
  41. data/lib/tecscde/tecs_model.rb +1137 -0
  42. data/lib/tecscde/tecs_model/hbar.rb +68 -0
  43. data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
  44. data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
  45. data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
  46. data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
  47. data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
  48. data/lib/tecscde/tecs_model/tm_join.rb +293 -0
  49. data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
  50. data/lib/tecscde/tecs_model/tm_port.rb +238 -0
  51. data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
  52. data/lib/tecscde/tecs_model/tm_region.rb +107 -0
  53. data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
  54. data/lib/tecscde/tecs_model/vbar.rb +68 -0
  55. data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
  56. data/lib/tecscde/templates/_join_info.cde.erb +28 -0
  57. data/lib/tecscde/templates/main.cde.erb +49 -0
  58. data/lib/tecscde/tm_object.rb +91 -0
  59. data/lib/tecscde/version.rb +4 -0
  60. data/lib/tecscde/view.rb +58 -0
  61. data/lib/tecscde/view/cairo_matrix.rb +90 -0
  62. data/lib/tecscde/view/canvas.rb +59 -0
  63. data/lib/tecscde/view/constants.rb +114 -0
  64. data/lib/tecscde/view/main_view.rb +1245 -0
  65. data/lib/tecsflow.rb +475 -0
  66. data/lib/tecsflow/C_parser.tab.rb +2471 -0
  67. data/lib/tecsflow/C_parser.y.rb +1087 -0
  68. data/lib/tecsflow/classes.rb +421 -0
  69. data/lib/tecsgen.rb +581 -0
  70. data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
  71. data/lib/tecsgen/core/C_parser.y +1032 -0
  72. data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
  73. data/lib/tecsgen/core/bnf.tab.rb +5193 -0
  74. data/lib/tecsgen/core/bnf.y +2211 -0
  75. data/lib/tecsgen/core/componentobj.rb +7901 -0
  76. data/lib/tecsgen/core/ctypes.rb +226 -0
  77. data/lib/tecsgen/core/expression.rb +1031 -0
  78. data/lib/tecsgen/core/gen_xml.rb +374 -0
  79. data/lib/tecsgen/core/generate.rb +5206 -0
  80. data/lib/tecsgen/core/location.rb +116 -0
  81. data/lib/tecsgen/core/messages.rb +101 -0
  82. data/lib/tecsgen/core/optimize.rb +456 -0
  83. data/lib/tecsgen/core/plugin.rb +332 -0
  84. data/lib/tecsgen/core/pluginModule.rb +165 -0
  85. data/lib/tecsgen/core/syntaxobj.rb +1234 -0
  86. data/lib/tecsgen/core/tecs_lang.rb +306 -0
  87. data/lib/tecsgen/core/tecsgen.rb +453 -0
  88. data/lib/tecsgen/core/tecsinfo.rb +860 -0
  89. data/lib/tecsgen/core/tool_info.rb +258 -0
  90. data/lib/tecsgen/core/types.rb +1632 -0
  91. data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
  92. data/lib/tecsgen/core/value.rb +650 -0
  93. data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
  94. data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
  95. data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
  96. data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
  97. data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
  98. data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
  99. data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
  100. data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
  101. data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
  102. data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
  103. data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
  104. data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
  105. data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
  106. data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
  107. data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
  108. data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
  109. data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
  110. data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
  111. data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
  112. data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
  113. data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
  114. data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
  115. data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
  116. data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
  117. data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
  118. data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
  119. data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
  120. data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
  121. data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
  122. data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
  123. data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
  124. data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
  125. data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
  126. data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
  127. data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
  128. data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
  129. data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
  130. data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
  131. data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
  132. data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
  133. data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
  134. data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
  135. data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
  136. data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
  137. data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
  138. data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
  139. data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
  140. data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
  141. data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
  142. data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
  143. data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
  144. data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
  145. data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
  146. data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
  147. data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
  148. data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
  149. data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
  150. data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
  151. data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
  152. data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
  153. data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
  154. data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
  155. data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
  156. data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
  157. data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
  158. data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
  159. data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
  160. data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
  161. data/lib/tecsgen/version.rb +6 -0
  162. data/samples/FigureSamples/active/active.cde +104 -0
  163. data/samples/FigureSamples/active/active.cdl +20 -0
  164. data/samples/FigureSamples/active/active.pdf +0 -0
  165. data/samples/FigureSamples/active/active.png +0 -0
  166. data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
  167. data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
  168. data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
  169. data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
  170. data/samples/FigureSamples/allocator/allocator.cde +171 -0
  171. data/samples/FigureSamples/allocator/allocator.cdl +58 -0
  172. data/samples/FigureSamples/allocator/allocator.png +0 -0
  173. data/samples/FigureSamples/basic/Makefile +87 -0
  174. data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
  175. data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
  176. data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
  177. data/samples/FigureSamples/basic/basic.cde +93 -0
  178. data/samples/FigureSamples/basic/basic.cdl +46 -0
  179. data/samples/FigureSamples/basic/basic.png +0 -0
  180. data/samples/FigureSamples/callback/callback.cde +130 -0
  181. data/samples/FigureSamples/callback/callback.cdl +29 -0
  182. data/samples/FigureSamples/callback/callback.png +0 -0
  183. data/samples/FigureSamples/carray/carray.cde +144 -0
  184. data/samples/FigureSamples/carray/carray.cdl +38 -0
  185. data/samples/FigureSamples/carray/carray.png +0 -0
  186. data/samples/FigureSamples/cearray/cearray.cde +314 -0
  187. data/samples/FigureSamples/cearray/cearray.cdl +60 -0
  188. data/samples/FigureSamples/cearray/cearray.png +0 -0
  189. data/samples/FigureSamples/composite/composite-internal.png +0 -0
  190. data/samples/FigureSamples/composite/composite.cde +216 -0
  191. data/samples/FigureSamples/composite/composite.cdl +95 -0
  192. data/samples/FigureSamples/composite/composite.png +0 -0
  193. data/samples/FigureSamples/earray/earray.cde +142 -0
  194. data/samples/FigureSamples/earray/earray.cdl +38 -0
  195. data/samples/FigureSamples/earray/earray.png +0 -0
  196. data/samples/FigureSamples/join/Makefile +87 -0
  197. data/samples/FigureSamples/join/join.cde +132 -0
  198. data/samples/FigureSamples/join/join.cdl +40 -0
  199. data/samples/FigureSamples/join/join.png +0 -0
  200. data/samples/FigureSamples/relay/Makefile +99 -0
  201. data/samples/FigureSamples/relay/relay-internal.png +0 -0
  202. data/samples/FigureSamples/relay/relay.cde +284 -0
  203. data/samples/FigureSamples/relay/relay.cdl +52 -0
  204. data/samples/FigureSamples/relay/relay.png +0 -0
  205. data/samples/FigureSamples/rpc/Makefile +123 -0
  206. data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
  207. data/samples/FigureSamples/rpc/rpc.cde +245 -0
  208. data/samples/FigureSamples/rpc/rpc.png +0 -0
  209. data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
  210. data/samples/SimpleSample/Makefile +25 -0
  211. data/samples/SimpleSample/SimpleSample/Makefile +86 -0
  212. data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
  213. data/samples/SimpleSample/SimpleSample/README.txt +106 -0
  214. data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
  215. data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
  216. data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
  217. data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
  218. data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
  219. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
  220. data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
  221. data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
  222. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
  223. data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
  224. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
  225. data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
  226. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
  227. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
  228. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
  229. data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
  230. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
  231. data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
  232. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
  233. data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
  234. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
  235. data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
  236. data/tecscde.gemspec +41 -0
  237. metadata +353 -0
@@ -0,0 +1,94 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2017 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: HRP2ObjectPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ # require "HRP2KernelObjectPlugin"
40
+ require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
41
+
42
+
43
+ class HRP2ObjectPlugin < HRP2KernelObjectPlugin
44
+ # @@ep = [:eSignalSemaphore, :eWaitSemaphore, :eManageSemaphore, :eReferSemaphore ]
45
+ @@api = {
46
+ "SEMAPHORE" => ["SEM", :id, :attribute, :count, :max],
47
+ "EVENTFLAG" => ["FLG", :id, :attribute, :flagPattern],
48
+ "DATAQUEUE" => ["DTQ", :id, :attribute, :count, :dtqmb],
49
+ "PRIORITY_DATAQUEUE" => ["PDQ", :id, :attribute, :count, :maxDataPriority, :pdqmb],
50
+ "FIXED_SIZE_MEMORYPOOL" => ["MPF", :id, :attribute, :blockCount, :blockSize, :mpf, :mpfmb],
51
+ "KERNEL" => ["SYS"],
52
+ "MESSAGE_BUFFER" => ["MBF", :id, :attribute, :maxSize, :bufferSize, :mbfmb],
53
+ }
54
+
55
+ #=== HRP2SemaphorePlugin#print_cfg_cre
56
+ # CRE_SEMの出力
57
+ # file:: FILE: 出力先ファイル
58
+ # val :: string: カーネルオブジェクトの属性の解析結果
59
+ # tab :: string: インデント用のtab
60
+ def print_cfg_cre(file, cell, val, tab)
61
+ if @@api.has_key?(@plugin_arg_str) == false
62
+ raise "#{@plugin_arg_str} is unknown"
63
+ elsif @plugin_arg_str != "KERNEL"
64
+ arg_list = []
65
+ @@api[@plugin_arg_str].slice(2..-1).each {|attr|
66
+ arg_list << val[attr].to_s
67
+ }
68
+ file.print tab
69
+ file.puts "CRE_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{arg_list.join(", ")} });"
70
+ end
71
+ end
72
+
73
+ #=== HRP2SemaphorePlugin#print_cfg_sac
74
+ # SAC_SEMの出力
75
+ # file:: FILE: 出力先ファイル
76
+ # val :: string: カーネルオブジェクトの属性の解析結果
77
+ # acv :: string: アクセスベクタ
78
+ def print_cfg_sac(file, val, acv)
79
+ if @@api.has_key?(@plugin_arg_str) == false
80
+ raise "#{@plugin_arg_str} is unknown"
81
+ elsif @plugin_arg_str != "KERNEL"
82
+ file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}(#{val[:id]}, { #{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3] }});"
83
+ else
84
+ file.puts "SAC_#{@@api[@plugin_arg_str].at(0)}({ #{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]} });"
85
+ end
86
+ end
87
+
88
+ =begin
89
+ #tSemaphoreの受け口リスト
90
+ def get_entry_ports_name_list()
91
+ @@ep
92
+ end
93
+ =end
94
+ end
@@ -0,0 +1,140 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2018 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: HRP2Plugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ #
40
+ # 各メソッドの役割りは、DomainPlugin.rb を参照のこと
41
+ # HRP2カーネル用ドメインプラグイン
42
+ class HRP2Plugin < DomainPlugin
43
+ def initialize(region, name, option)
44
+ super
45
+ print "HRP2Plugin: initialize: region=#{region.get_name}, domainName=#{name}, option=#{option}\n"
46
+ @region = region
47
+ @name = name
48
+
49
+ case option
50
+ when "trusted", "nontrusted", "OutOfDomain"
51
+ # OK
52
+ @option = option
53
+ else
54
+ cdl_error("HRPPlugin: '$1' is unacceptable domain kind, specify 'trusted' or 'nontrusted'", option)
55
+ @option = "trusted" # とりあえず trusted を設定しておく
56
+ end
57
+ end
58
+
59
+ def add_through_plugin(join, current_region, next_region, through_type)
60
+ # join.get_owner:Cell 左辺のセル
61
+ # join.get_definition:Port 呼び口
62
+ # join.get_subscript:Integer or nil 呼び口配列の添数 (Join::@subscript の説明参照)
63
+ # join.get_cell:Cell 右辺のセル
64
+ # join.get_port_name:Symbol 受け口
65
+ # get_rhs_subscript:Integer or nil 受け口配列の添数 (Join::@rhs_subscript の説明参照)
66
+ # return []
67
+ print "HRP2Plugin: add_through_plugin: #{current_region.get_name}=>#{next_region.get_name}, #{join.get_owner.get_name}.#{join.get_definition.get_name}=>#{join.get_cell.get_name}.#{join.get_port_name}, #{through_type}\n"
68
+
69
+ puts "=====Join Check Start====="
70
+ puts "caller: #{join.get_owner.get_name}, callee: #{join.get_cell.get_name}"
71
+ puts "=====Join Check param====="
72
+ current_domain = current_region.get_domain_root.get_domain_type
73
+ next_domain = next_region.get_domain_root.get_domain_type
74
+ puts current_domain.get_option.to_s
75
+ if !next_domain.nil?
76
+ puts next_domain.get_option.to_s
77
+ else
78
+ puts "next domain is nil!"
79
+ end
80
+
81
+ if HRP2KernelObjectPlugin.include_celltype?(join.get_cell.get_celltype)
82
+ # 結合先がカーネルオブジェクトセル
83
+ # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
84
+ # 何もしないthrough
85
+ puts "***** #{join.get_cell.get_celltype.get_name} is kernel object"
86
+ return []
87
+ # return [ :HRP2SVCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
88
+ # elsif @end_region.is_root?
89
+ # elsif next_region.get_option == OutOfDomain
90
+ # elsif next_domain.nil?
91
+ elsif next_domain.get_option.to_s == "OutOfDomain"
92
+ # # 結合先が無所属
93
+ # # 何もしないthrough
94
+ # # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
95
+ puts "***** nil"
96
+ return []
97
+ # return [ :HRP2SVCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true" ]
98
+ # elsif @start_region.get_param != :KERNEL_DOMAIN && @end_region.get_param == :KERNEL_DOMAIN
99
+ elsif current_domain.get_option.to_s != "trusted" && next_domain.get_option.to_s == "trusted"
100
+ # ユーザドメインからカーネルドメインへの結合
101
+ # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
102
+ puts "***** svc"
103
+ return [:HRP2SVCPlugin, ""]
104
+ elsif current_domain != next_domain
105
+ # ユーザドメインから別のユーザドメインへの結合
106
+ # @plugin_body = HRP2RPCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
107
+ puts "***** rpc"
108
+ return [:HRP2RPCPlugin, "channelCelltype=tMessagebufferChannel,noClientSemaphore=true"]
109
+ else
110
+ # その他
111
+ # 何もしないthrough
112
+ # @plugin_body = HRP2SVCPlugin.new(cell_name, plugin_arg, next_cell, next_cell_port_name, signature, celltype, caller_cell)
113
+ print "warning: at HRP2 Join Check"
114
+ return nil
115
+ end
116
+
117
+ puts "=====Join Check End====="
118
+ end
119
+
120
+ #== ドメイン種別を返す
121
+ # return::Symbol :kernel, :user, :OutOfDomain
122
+ def get_kind
123
+ case @option
124
+ when "trusted"
125
+ return :kernel
126
+ when "nontrusted"
127
+ return :user
128
+ when "OutOfDomain"
129
+ return :OutOfDomain
130
+ end
131
+ end
132
+
133
+ def joinable?(current_region, next_region, through_type)
134
+ print "HRP2Plugin: joinable? from #{current_region.get_name} to #{next_region.get_name} (#{through_type})\n"
135
+ return true
136
+ end
137
+
138
+ def self.gen_post_code(file)
139
+ end
140
+ end
@@ -0,0 +1,111 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2017 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: HRP2PostHook.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ # require "HRP2KernelObjectPlugin"
40
+ require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
41
+
42
+ class HRP2PostHook
43
+ # @celltype:: Celltype
44
+ def initialize(celltype)
45
+ puts "new post hook #{celltype.get_name}"
46
+ @celltype = celltype
47
+ end
48
+
49
+ def generate
50
+ # カーネルオブジェクトのセルタイプはメモリ保護しない
51
+ #=begin
52
+ # TODO: テストのために無効化
53
+ if HRP2KernelObjectPlugin.include_celltype?(@celltype)
54
+ puts "nothing is generated for kernel object component"
55
+ return
56
+ end
57
+ #=end
58
+
59
+ rlist = @celltype.get_region_list
60
+ if @celltype.is_singleton?
61
+ # singletonの場合
62
+ puts "<singleton>"
63
+
64
+ if rlist.length == 0
65
+ file = AppFile.open("#{$gen}/tecsgen.cfg")
66
+ else
67
+ file = AppFile.open("#{$gen}/tecsgen_#{rlist[0].get_param}.cfg")
68
+ end
69
+ # セル管理ブロックとスケルトンのメモリ保護
70
+ file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
71
+ if !@celltype.is_all_entry_inline?
72
+ # セルタイプコードのメモリ保護
73
+ file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
74
+ end
75
+
76
+ file.close
77
+
78
+ else
79
+ # singletonでない場合
80
+ puts "<non-singleton>"
81
+
82
+ # スケルトンとセルタイプコードの保護
83
+ if (rlist.length == 1) &&
84
+ (@celltype.get_n_cell_gen == @celltype.get_n_cell_gen_r(rlist[0]))
85
+ # 所属する保護ドメインが1つの場合
86
+ puts "<private celltype>"
87
+ file = AppFile.open("#{$gen}/tecsgen_#{rlist[0].get_param}.cfg")
88
+ else
89
+ # 無所属 or 所属する保護ドメインが複数の場合
90
+ puts "<shared celltype>"
91
+ file = AppFile.open("#{$gen}/tecsgen.cfg")
92
+ end
93
+
94
+ # スケルトンのメモリ保護
95
+ file.print "ATT_MOD(\"#{@celltype.get_global_name}_tecsgen.o\");\n"
96
+ if !@celltype.is_all_entry_inline?
97
+ # セルタイプコードのメモリ保護
98
+ file.print "ATT_MOD(\"#{@celltype.get_global_name}.o\");\n"
99
+ end
100
+ file.close
101
+
102
+ # セル管理ブロックの保護
103
+ rlist.each {|reg|
104
+ file = AppFile.open("#{$gen}/tecsgen_#{reg.get_param}.cfg")
105
+ file.print "ATT_MOD(\"#{@celltype.get_global_name}_#{reg.get_name}_tecsgen.o\");\n"
106
+ file.close
107
+ }
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,66 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2012 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: HRP2PriorityDataqueuePlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ require_tecsgen_lib "HRP2KernelObjectPlugin.rb"
40
+
41
+ class HRP2PriorityDataqueuePlugin < HRP2KernelObjectPlugin
42
+ @@ep = [:eSendPriorityDataqueue, :eReceivePriorityDataqueue, :eManagePriorityDataqueue, :eReferPriorityDataqueue]
43
+ #=== HRP2PriorityDataqueuePlugin#print_cfg_cre
44
+ # CRE_PDQの出力
45
+ # file:: FILE: 出力先ファイル
46
+ # val :: string: カーネルオブジェクトの属性の解析結果
47
+ # tab :: string: インデント用のtab
48
+ def print_cfg_cre(file, cell, val, tab)
49
+ file.print tab
50
+ file.puts "CRE_PDQ(#{val[:id]}, {#{val[:attribute]}, #{val[:count]}, #{val[:maxDataPriority]}, #{val[:pdqmb]}});"
51
+ end
52
+
53
+ #=== HRP2PriorityDataqueuePlugin#print_cfg_sac
54
+ # SAC_PDQの出力
55
+ # file:: FILE: 出力先ファイル
56
+ # val :: string: カーネルオブジェクトの属性の解析結果
57
+ # acv :: string: アクセスベクタ
58
+ def print_cfg_sac(file, val, acv)
59
+ file.puts "SAC_PDQ(#{val[:id]}, {#{acv[0]}, #{acv[1]}, #{acv[2]}, #{acv[3]}});"
60
+ end
61
+
62
+ # tPriorityDataqueueの受け口リスト
63
+ def get_entry_ports_name_list
64
+ @@ep
65
+ end
66
+ end
@@ -0,0 +1,319 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-2014 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: HRP2RPCPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ require_tecsgen_lib "lib/GenHRP2Marshaler.rb"
40
+
41
+ # require_tecsgen_lib "GenParamCopy.rb"
42
+
43
+ #= Transparent RPC プラグイン
44
+ # Transparent RPC チャンネルを生成する
45
+ # プラグイン引数は以下の RPCPluginArgProc を参照
46
+
47
+ # mikan through plugin: namespace が考慮されていない
48
+ # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
49
+ # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
50
+
51
+ # 以下を仮定(制限事項)
52
+ # 呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
53
+ # 有符号、無符号でサイズが同じ
54
+
55
+ #
56
+ # RPCを用いたドメイン間通信の
57
+ # throughプラグイン
58
+ # HRP2ドメインプラグインによって挿入される
59
+ #
60
+ class HRP2RPCPlugin < ThroughPlugin
61
+ include GenTransparentMarshaler
62
+ # include GenParamCopy
63
+
64
+ # RPCPlugin 専用のオプション
65
+ TransparentRPCPluginArgProc = RPCPluginArgProc.dup # 複製を作って元を変更しないようにする
66
+ TransparentRPCPluginArgProc["noClientSemaphore"] = Proc.new {|obj, rhs| obj.set_noClientSemaphore rhs }
67
+ TransparentRPCPluginArgProc["semaphoreCelltype"] = Proc.new {|obj, rhs| obj.set_semaphoreCelltype rhs }
68
+
69
+ #=== RPCPlugin の initialize
70
+ # 説明は ThroughPlugin (plugin.rb) を参照
71
+ def initialize(cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell)
72
+ super
73
+ @b_noClientSemaphore = false
74
+ @semaphoreCelltype = "tSemaphore"
75
+ initialize_transparent_marshaler cell_name
76
+
77
+ # オプション:GenTransparentMarshaler 参照
78
+ @plugin_arg_check_proc_tab = TransparentRPCPluginArgProc
79
+ parse_plugin_arg
80
+
81
+ @rpc_channel_celltype_name = "tRPCPlugin_#{@TDRCelltype}_#{@channelCelltype}_#{@signature.get_name}"
82
+ @rpc_channel_celltype_file_name = "#{$gen}/#{@rpc_channel_celltype_name}.cdl"
83
+
84
+ if @signature.need_PPAllocator?
85
+ if @PPAllocatorSize.nil?
86
+ cdl_error("PPAllocatorSize must be speicified for oneway [in] array")
87
+ # @PPAllocatorSize = 0 # 仮に 0 としておく (cdl の構文エラーを避けるため)
88
+ end
89
+ end
90
+
91
+ # @signature.each_param{ |func_decl, param_decl|
92
+ # if func_decl.get_type.is_oneway? then
93
+ # if ( param_decl.get_size || param_decl.get_count ) && param_decl.get_string then
94
+ # cdl_error( "array of string not supported for oneway function in Transparent RPC" ) # mikan 文字列の配列
95
+ # elsif param_decl.get_string == -1 then
96
+ # cdl_error( "length unspecified string is not permited for oneway function in Transparent RPC" ) # mikan 長さ未指定文字列
97
+ # end
98
+ # end
99
+ # }
100
+ end
101
+
102
+ #=== plugin の宣言コード (celltype の定義) 生成
103
+ def gen_plugin_decl_code(file)
104
+ ct_name = "#{@ct_name}_#{@channelCelltype}"
105
+
106
+ # このセルタイプ(同じシグニチャ)は既に生成されているか?
107
+ if @@generated_celltype[ct_name].nil?
108
+ @@generated_celltype[ct_name] = [self]
109
+ else
110
+ @@generated_celltype[ct_name] << self
111
+ return
112
+ end
113
+
114
+ gen_marshaler_celltype
115
+
116
+ if @PPAllocatorSize
117
+ alloc_cell = " cell tPPAllocator PPAllocator {\n heapSize = #{@PPAllocatorSize};\n };\n"
118
+ alloc_call_port_join = " cPPAllocator = PPAllocator.ePPAllocator;\n"
119
+ else
120
+ alloc_cell = ""
121
+ alloc_call_port_join = ""
122
+ end
123
+
124
+ if @b_noClientSemaphore == false
125
+ semaphore1 = <<EOT
126
+ // Semaphore for Multi-task use ("specify noClientSemaphore" option to delete this)
127
+ cell #{@semaphoreCelltype} Semaphore {
128
+ count = 1;
129
+ attribute = C_EXP( "TA_NULL" );
130
+ };
131
+ EOT
132
+ semaphore2 = " cLockChannel = Semaphore.eSemaphore;\n"
133
+ else
134
+ semaphore1 = ""
135
+ semaphore2 = ""
136
+ end
137
+
138
+ f = CFile.open(@rpc_channel_celltype_file_name, "w")
139
+ # 同じ内容を二度書く可能性あり (AppFile は不可)
140
+
141
+ f.print <<EOT
142
+ import( "#{@marshaler_celltype_file_name}" );
143
+
144
+ composite #{@rpc_channel_celltype_name}Client {
145
+ /* Interface */
146
+ entry #{@signature.get_name} eThroughEntry;
147
+ //call sTDR cTDR;
148
+ call sEventflag cEventflag;
149
+ call sSemaphore cSemaphore;
150
+ call sMessageBuffer cMessageBuffer;
151
+
152
+ /* Implementation */
153
+ #{semaphore1}
154
+ cell #{@marshaler_celltype_name} #{@signature.get_name}_marshaler{
155
+ //cTDR => composite.cTDR;
156
+ cEventflag => composite.cEventflag;
157
+ cSemaphore => composite.cSemaphore;
158
+ cMessageBuffer => composite.cMessageBuffer;
159
+ #{semaphore2} };
160
+ composite.eThroughEntry => #{@signature.get_name}_marshaler.eClientEntry;
161
+ };
162
+
163
+ [active]
164
+ composite #{@rpc_channel_celltype_name}Server {
165
+ /* Interface */
166
+ attr {
167
+ PRI taskPriority;
168
+ };
169
+ call #{@signature.get_name} #{@call_port_name};
170
+ //call sTDR cTDR;
171
+ call sEventflag cEventflag;
172
+ call sSemaphore cSemaphore;
173
+ call sMessageBuffer cMessageBuffer;
174
+
175
+ /* Implementation */
176
+ #{alloc_cell} cell #{@unmarshaler_celltype_name} #{@signature.get_name}_unmarshaler{
177
+ //cTDR => composite.cTDR;
178
+ cEventflag => composite.cEventflag;
179
+ cSemaphore => composite.cSemaphore;
180
+ cMessageBuffer => composite.cMessageBuffer;
181
+ cServerCall => composite.#{@call_port_name};
182
+ #{alloc_call_port_join} };
183
+ cell tRPCDedicatedTaskMain RPCTaskMain{
184
+ cMain = #{@signature.get_name}_unmarshaler.eUnmarshalAndCallFunction;
185
+ };
186
+ cell tTask Task {
187
+ cBody = RPCTaskMain.eMain;
188
+ priority = taskPriority;
189
+ taskAttribute = C_EXP( "TA_ACT" ); /* mikan : marshaler starts at the beginning */
190
+ //stackSize = 4096;
191
+ userStackSize = 4096;
192
+ };
193
+ };
194
+ EOT
195
+ # mikan stackSize option & 最新 tecs_package 対応
196
+
197
+ f.close
198
+ end
199
+
200
+ #=== through cell コードを生成
201
+ #
202
+ #
203
+ def gen_through_cell_code(file)
204
+ gen_plugin_decl_code(file)
205
+
206
+ # セルを探す
207
+ # path =["::",@next_cell.get_name]
208
+ # cell = Namespace.find( path )
209
+ cell = Namespace.find(@next_cell.get_namespace_path)
210
+
211
+ file.print <<EOT
212
+ import( "#{@rpc_channel_celltype_file_name}" );
213
+ EOT
214
+
215
+ # nest = @end_region.gen_region_str_pre file
216
+ indent_str = ""
217
+
218
+ file.print <<EOT
219
+ #{indent_str}// one way channel cell
220
+ #{indent_str}cell #{@channelCelltype} #{@channelCellName} {
221
+ #{indent_str}};
222
+
223
+ #{indent_str}// RPC channel cell
224
+ EOT
225
+
226
+ nest = @start_region.gen_region_str_pre file
227
+ indent_str = " " * nest
228
+
229
+ # #473 が解決された場合、composite リレーアロケータに変更すべき
230
+ # アロケータの指定があるか?
231
+ if cell.get_allocator_list.length > 0
232
+
233
+ dbgPrint "make allocator\n"
234
+ file.print "#{indent_str}[allocator("
235
+
236
+ delim = ""
237
+ cell.get_allocator_list.each do |type, eport, subsc, func, buf, alloc|
238
+
239
+ file.print delim
240
+ delim = ",\n#{indent_str} " # 最終行には出さない
241
+
242
+ if subsc # 配列添数
243
+ subsc_str = '[#{subsc}]'
244
+ else
245
+ subsc_str = ""
246
+ end
247
+
248
+ eport = "eThroughEntry" # RPCの受け口名に変更
249
+ file.print "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
250
+ end
251
+
252
+ file.puts ")]"
253
+ end
254
+
255
+ file.print <<EOT
256
+ #{indent_str}cell #{@rpc_channel_celltype_name}Client #{@cell_name} {
257
+ #{indent_str} //cTDR = #{@channelCellName}.eTDR;
258
+ #{indent_str} cEventflag = #{@channelCellName}.eEventflag;
259
+ #{indent_str} cSemaphore = #{@channelCellName}.eSemaphore;
260
+ #{indent_str} cMessageBuffer = #{@channelCellName}.eMessageBuffer;
261
+ #{indent_str}};
262
+ EOT
263
+
264
+ @start_region.gen_region_str_post file
265
+
266
+ nest = @end_region.gen_region_str_pre file
267
+ indent_str = " " * nest
268
+ nest_str = " " * nest
269
+ if @next_cell_port_subscript
270
+ subscript = "[" + @next_cell_port_subscript.to_s + "]"
271
+ else
272
+ subscript = ""
273
+ end
274
+
275
+ file.print <<EOT
276
+ #{indent_str}cell #{@rpc_channel_celltype_name}Server #{@cell_name}Body {
277
+ #{indent_str} #{@call_port_name} = #{@next_cell.get_namespace_path.get_path_str}.#{@next_cell_port_name}#{subscript};
278
+ //#{indent_str} #{@call_port_name} = #{@next_cell.get_name}.#{@next_cell_port_name};
279
+ #{indent_str} //cTDR = #{@channelCellName}.eTDR;
280
+ #{indent_str} cEventflag = #{@channelCellName}.eEventflag;
281
+ #{indent_str} cSemaphore = #{@channelCellName}.eSemaphore;
282
+ #{indent_str} cMessageBuffer = #{@channelCellName}.eMessageBuffer;
283
+ #{indent_str} taskPriority = #{@task_priority};
284
+ #{indent_str}};
285
+ EOT
286
+
287
+ @end_region.gen_region_str_post file
288
+ end
289
+
290
+ #=== プラグイン引数 noClientSemaphore のチェック
291
+ def set_noClientSemaphore(rhs)
292
+ rhs = rhs.to_sym
293
+ if rhs == :true
294
+ @b_noClientSemaphore = true
295
+ elsif rhs == :false
296
+ @b_noClientSemaphore = false
297
+ else
298
+ cdl_error("RPCPlugin: specify true or false for noClientSemaphore")
299
+ end
300
+ end
301
+
302
+ #=== プラグイン引数 semaphoreCelltype のチェック
303
+ def set_semaphoreCelltype(rhs)
304
+ @semaphoreCelltype = rhs.to_sym
305
+ nsp = NamespacePath.analyze(@semaphoreCelltype.to_s)
306
+ obj = Namespace.find(nsp)
307
+ if !obj.instance_of?(Celltype) && !obj.instance_of?(CompositeCelltype)
308
+ cdl_error("RPCPlugin: semaphoreCelltype '#{rhs}' not celltype or not defined")
309
+ end
310
+ end
311
+
312
+ #=== NamespacePath を得る
313
+ # 生成するセルの namespace path を生成する
314
+ def get_cell_namespace_path
315
+ # nsp = @region.get_namespace.get_namespace_path
316
+ nsp = @start_region.get_namespace_path
317
+ return nsp.append(@cell_name)
318
+ end
319
+ end