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,329 @@
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: SharedRPCPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ require_tecsgen_lib "lib/GenTransparentMarshaler.rb"
40
+ require_tecsgen_lib "lib/GenParamCopy.rb"
41
+
42
+ #= SharedRPC プラグイン
43
+ # SharedRPC チャンネルを生成する
44
+ # プラグイン引数は GenTransparentMarshaler 参照
45
+
46
+ # mikan through plugin: namespace が考慮されていない
47
+ # これを利用する場合、以下のように toppers_jsp.cdl sChannel.cdl を指定する必要がある
48
+ # tecsgen toppers_jsp.cdl sChannel.cdl your_description.cdl
49
+
50
+ # 以下を仮定(制限事項)
51
+ # 呼び元、呼び先のエンディアン、char, short, int_t, long_t, intptr_t のサイズが同じ
52
+ # 有符号、無符号でサイズが同じ
53
+
54
+ class SharedRPCPlugin < ThroughPlugin
55
+ attr_reader :region
56
+ @@shared_channel_list = {}
57
+ include GenTransparentMarshaler
58
+ include GenParamCopy
59
+
60
+ #=== RPCPlugin の initialize
61
+ # 説明は ThroughPlugin (plugin.rb) を参照
62
+ def initialize(cell_name, plugin_arg, next_cell, next_cell_port_name, next_cell_port_subscript, signature, celltype, caller_cell)
63
+ # mikan プラグインオプション指定の不一致のチェック task_priority,
64
+
65
+ super
66
+ initialize_transparent_marshaler cell_name
67
+
68
+ # オプション:GenTransparentMarshaler 参照
69
+ @plugin_arg_check_proc_tab = RPCPluginArgProc
70
+ @channelCellName = "" # nil にしておく
71
+ parse_plugin_arg
72
+
73
+ @shared_channel_ct_name = :"tSharedRPCPlugin_#{@channelCelltype}"
74
+ @shared_channel_ct_file_name = "#{$gen}/#{@shared_channel_ct_name}.cdl"
75
+ @rpc_channel_celltype_name = :"tSharedRPCPlugin_#{@TDRCelltype}_#{@channelCelltype}_#{@signature.get_global_name}"
76
+ @rpc_channel_celltype_file_name = "#{$gen}/#{@rpc_channel_celltype_name}.cdl"
77
+
78
+ @shared_channel_cell = @channelCellName
79
+ if @shared_channel_cell == ""
80
+ cdl_error("SharedRPCPlugin: need channelCellName option")
81
+ end
82
+
83
+ if @@shared_channel_list[@shared_channel_cell].nil?
84
+ # 初出
85
+ @@shared_channel_list[@shared_channel_cell] = [self]
86
+ else
87
+ # 二番目以降
88
+ @@shared_channel_list[@shared_channel_cell] << self
89
+ end
90
+ @sub_channel_no = @@shared_channel_list[@shared_channel_cell].length - 1
91
+
92
+ if @region != @@shared_channel_list[@shared_channel_cell][0].region
93
+ # 初出とリージョン不一致 (初出は、自分自身とチェックされる。無駄だが小さいので放置)
94
+ cdl_error("SharedRPCPlugin: preferred region mismatch current: #{@region.get_name} previous: #{@@shared_channel_list[@shared_channel_cell][0].region.get_name}")
95
+ else
96
+ dbgPrint "SahredRPCPlugin: Region: #{@region.get_name}, #{@@shared_channel_list[@shared_channel_cell][0].region.get_name}\n"
97
+ end
98
+
99
+ if @signature.need_PPAllocator?
100
+ if @PPAllocatorSize.nil?
101
+ cdl_error("PPAllocatorSize must be speicified for oneway [in] array")
102
+ end
103
+ end
104
+ end
105
+
106
+ # def set_through_info( start_region, end_region, through_type )
107
+ # super
108
+ #
109
+ # end
110
+
111
+ def gen_plugin_decl_code(file)
112
+ # このセルタイプ(同じシグニチャ)は既に生成されているか?
113
+ if @@generated_celltype[@shared_channel_ct_name].nil?
114
+ @@generated_celltype[@shared_channel_ct_name] = [self]
115
+ else
116
+ @@generated_celltype[@shared_channel_ct_name] << self
117
+ end
118
+
119
+ if @@generated_celltype[@ct_name].nil?
120
+ @@generated_celltype[@ct_name] = [self]
121
+ else
122
+ @@generated_celltype[@ct_name] << self
123
+ end
124
+
125
+ gen_marshaler_celltype
126
+ # 同じ内容を二度書く可能性あり (AppFile は不可)
127
+
128
+ if @signature.need_PPAllocator?
129
+ alloc_call_port = " call sPPAllocator cPPAllocator;\n"
130
+ alloc_call_port_join = " cPPAllocator => composite.cPPAllocator;\n"
131
+ else
132
+ alloc_call_port = ""
133
+ alloc_call_port_join = ""
134
+ end
135
+
136
+ f = CFile.open(@rpc_channel_celltype_file_name, "w")
137
+ # 同じ内容を二度書く可能性あり (AppFile は不可)
138
+
139
+ f.print <<EOT
140
+ import( "#{@marshaler_celltype_file_name}" );
141
+
142
+ composite #{@rpc_channel_celltype_name} {
143
+ /* Interface */
144
+ call #{@signature.get_namespace_path} #{@call_port_name};
145
+ entry #{@signature.get_namespace_path} eThroughEntry;
146
+ call sTDR cTDR;
147
+ call sEventflag cEventflag;
148
+ entry sUnmarshalerMain eUnmarshalAndCallFunction;
149
+ #{alloc_call_port}
150
+ [optional]
151
+ call sSemaphore cLockChannel;
152
+
153
+ /* Implementation */
154
+ cell #{@marshaler_celltype_name} #{@signature.get_global_name}_marshaler{
155
+ cTDR => composite.cTDR;
156
+ cEventflag => composite.cEventflag;
157
+ cLockChannel => composite.cLockChannel;
158
+ };
159
+ cell #{@unmarshaler_celltype_name} #{@signature.get_global_name}_unmarshaler{
160
+ cTDR => composite.cTDR;
161
+ cEventflag => composite.cEventflag;
162
+ cServerCall => composite.#{@call_port_name};
163
+ #{alloc_call_port_join} };
164
+ composite.eThroughEntry => #{@signature.get_global_name}_marshaler.eClientEntry;
165
+ composite.eUnmarshalAndCallFunction => #{@signature.get_global_name}_unmarshaler.eUnmarshalAndCallFunction;
166
+ };
167
+ EOT
168
+ # mikan stackSize option & 最新 tecs_package 対応
169
+
170
+ f.close
171
+
172
+ f = CFile.open("#{$gen}/#{@shared_channel_ct_name}.cdl", "w")
173
+ # 同じ内容を二度書く可能性あり (AppFile は不可)
174
+
175
+ f.print <<EOT
176
+ [active]
177
+ composite #{@shared_channel_ct_name} {
178
+ /* Interface */
179
+ entry sSemaphore eSemaphore[];
180
+ call sUnmarshalerMain cUnmarshalAndCallFunction[];
181
+
182
+ entry sDataqueue eDataqueue;
183
+ entry sTDR eTDR;
184
+ entry sEventflag eEventflag;
185
+
186
+ attr {
187
+ PRI priority;
188
+ };
189
+
190
+ /* Implementation */
191
+ cell #{@channelCelltype} Channel{
192
+ };
193
+ cell tSemaphore Semaphore {count = 1; attribute = C_EXP("TA_NULL");};
194
+ cell tRPCSharedTaskMain RPCSharedTaskMain {
195
+ cUnmarshalAndCallFunction => composite.cUnmarshalAndCallFunction;
196
+ cServerSideTDR = Channel.eTDR;
197
+ };
198
+ cell tRPCSharedChannelMan RPCChannelMan {
199
+ cSemaphore = Semaphore.eSemaphore;
200
+ cClientSideTDR = Channel.eTDR;
201
+ };
202
+ cell tTask RPCSharedTask {
203
+ cBody = RPCSharedTaskMain.eMain;
204
+ taskAttribute = C_EXP("TA_ACT");
205
+ stackSize = 4096;
206
+ priority = composite.priority;
207
+ };
208
+ composite.eTDR => Channel.eTDR;
209
+ composite.eEventflag => Channel.eEventflag;
210
+ composite.eSemaphore => RPCChannelMan.eSemaphore;
211
+ composite.eDataqueue => Channel.eDataqueue;
212
+ };
213
+ EOT
214
+ f.close
215
+ end
216
+
217
+ #=== through cell コードを生成
218
+ #
219
+ #
220
+ def gen_through_cell_code(file)
221
+ gen_plugin_decl_code(file)
222
+
223
+ file.print <<EOT
224
+ import( "#{@rpc_channel_celltype_file_name}" );
225
+ import( "#{$gen}/#{@shared_channel_ct_name}.cdl" );
226
+ EOT
227
+
228
+ # nest = @next_cell.get_region.gen_region_str_pre file
229
+ nest = @region.gen_region_str_pre file
230
+ indent_str = " " * nest
231
+ if @next_cell_port_subscript
232
+ subscript = "[" + @next_cell_port_subscript.to_s + "]"
233
+ else
234
+ subscript = ""
235
+ end
236
+
237
+ # セルを探す
238
+ # path =["::",@next_cell.get_name]
239
+ # cell = Namespace.find( path )
240
+ cell = Namespace.find(@next_cell.get_namespace_path)
241
+
242
+ # PPAllocator が必要か?
243
+ if @signature.need_PPAllocator?
244
+ if @sub_channel_no == 0
245
+ file.print <<EOT
246
+ #{indent_str}cell tPPAllocator PPAllocator_#{@shared_channel_cell}{
247
+ #{indent_str} heapSize = #{@PPAllocatorSize};
248
+ #{indent_str}};
249
+ EOT
250
+ end
251
+
252
+ ppallocator_join = "#{indent_str} cPPAllocator = PPAllocator_#{@shared_channel_cell}.ePPAllocator;\n"
253
+ else
254
+ ppallocator_join = ""
255
+ end
256
+
257
+ # 共有される通信チャンネルの生成のプロトタイプ宣言
258
+ file.print <<EOT
259
+ #{indent_str}cell #{@shared_channel_ct_name} #{@shared_channel_cell};
260
+ EOT
261
+
262
+ # ここから各結合ごとのセルを生成
263
+
264
+ # アロケータの指定があるか?
265
+ if cell.get_allocator_list.length > 0
266
+
267
+ file.print "#{indent_str}[allocator("
268
+
269
+ delim = ""
270
+ cell.get_allocator_list.each do |type, eport, subsc, func, buf, alloc|
271
+
272
+ file.print delim
273
+ delim = ",\n#{indent_str} " # 最終行には出さない
274
+
275
+ if subsc # 配列添数
276
+ subsc_str = '[#{subsc}]'
277
+ else
278
+ subsc_str = ""
279
+ end
280
+
281
+ eport = "eThroughEntry" # RPCの受け口名に変更
282
+ file.print "#{eport}#{subsc_str}.#{func}.#{buf} = #{alloc}"
283
+ end
284
+
285
+ file.puts ")]"
286
+ end
287
+
288
+ # セル本体の生成
289
+ file.print <<EOT
290
+ #{indent_str}cell #{@rpc_channel_celltype_name} #{@cell_name} {
291
+ #{indent_str} #{@call_port_name} = #{@next_cell.get_name}.#{@next_cell_port_name}#{subscript};
292
+ #{indent_str} cTDR = #{@shared_channel_cell}.eTDR;
293
+ #{indent_str} cEventflag = #{@shared_channel_cell}.eEventflag;
294
+ #{indent_str} cLockChannel = #{@shared_channel_cell}.eSemaphore[#{@sub_channel_no}];
295
+ #{ppallocator_join}#{indent_str}};
296
+ EOT
297
+ @region.gen_region_str_post file
298
+ end
299
+
300
+ #=== 後ろのコードを生成
301
+ # プラグインの後ろのコードを生成
302
+ # file:: File:
303
+ def self.gen_post_code(file)
304
+ file.print "/* '#{self.name}' post code */\n"
305
+ @@shared_channel_list.each{|chan_name, plugin_obj|
306
+ plugin_obj[0].gen_post_code(file, plugin_obj)
307
+ }
308
+ end
309
+
310
+ #=== 後ろのコードを生成
311
+ # plugin_obj[0] が代表して出力する(インスタンス変数にアクセスしたいため)
312
+ def gen_post_code(file, plugin_obj)
313
+ chan_name = @shared_channel_cell
314
+
315
+ nest = @region.gen_region_str_pre file
316
+ indent_str = " " * nest
317
+
318
+ # 共有されている通信チャンネルの生成
319
+ # 各プラグインインスタンスでは @shared_channel_ct_name として記憶している
320
+ file.print "#{indent_str}cell tSharedRPCPlugin_#{@channelCelltype} #{chan_name} {\n"
321
+ plugin_obj.each{|po|
322
+ file.print <<EOT
323
+ #{indent_str} cUnmarshalAndCallFunction[] = #{@cell_name}.eUnmarshalAndCallFunction;
324
+ EOT
325
+ }
326
+ file.printf "#{indent_str} priority = #{@task_priority};\n#{indent_str}};\n"
327
+ @region.gen_region_str_post file
328
+ end
329
+ end
@@ -0,0 +1,77 @@
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: SignaturePlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ #== signature プラグインの共通の親クラス
40
+ class SignaturePlugin < Plugin
41
+ # @signature:: Signature プラグインの対象となるシグニチャ
42
+ # @option:: String '"', '"' で囲まれた文字列
43
+
44
+ # signature:: Signature シグニチャ(インスタンス)
45
+ def initialize(signature, option)
46
+ super()
47
+ @signature = signature
48
+ # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' ) # 前後の "" を取り除く
49
+ # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
50
+ @plugin_arg_str = CDLString.remove_dquote option
51
+ @plugin_arg_list = {}
52
+ end
53
+
54
+ #=== 後ろのコードを生成
55
+ # プラグインの後ろの CDL コードを生成
56
+ # file:: File:
57
+ def self.gen_post_code(file)
58
+ # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
59
+ # file.print "/* '#{self.class.name}' post code */\n"
60
+ end
61
+
62
+ #=== 受け口関数の本体(C言語)を生成する
63
+ # 通常であれば、ジェネレータは受け口関数のテンプレートを生成する
64
+ # プラグインの場合、変更する必要のないセルタイプコードを生成する
65
+ # file:: FILE 出力先ファイル
66
+ # b_singleton:: bool true if singleton
67
+ # ct_name:: Symbol
68
+ # global_ct_name:: string
69
+ # sig_name:: string
70
+ # ep_name:: string
71
+ # func_name:: string
72
+ # func_global_name:: string
73
+ # func_type:: class derived from Type
74
+ def gen_ep_func_body(file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params)
75
+ raise "gen_ep_func_body must be overridden by sub class"
76
+ end
77
+ end
@@ -0,0 +1,178 @@
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: TECS2CBridgePlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ #== TECS => C 呼び出しプラグイン
40
+ class TECS2CBridgePlugin < SignaturePlugin
41
+ # @signature:: Signature プラグインの対象となるシグニチャ
42
+ # @option:: String '"', '"' で囲まれた文字列
43
+
44
+ @@signature_list = { }
45
+
46
+ # signature:: Signature シグニチャ(インスタンス)
47
+ def initialize(signature, option)
48
+ super
49
+
50
+ @signature = signature
51
+ @header_name = "#{$gen}/#{@signature.get_global_name}.#{$h_suffix}"
52
+ @celltype_name = :"t#{@signature.get_global_name}"
53
+
54
+ parse_plugin_arg
55
+ end
56
+
57
+ def gen_cdl_file(file)
58
+ if @@signature_list[@signature.get_global_name]
59
+ @@signature_list[@signature.get_global_name] << self
60
+ cdl_warning("T2CW001 signature '$1' duplicate. ignored current one", @signature.get_namespace_path)
61
+ return
62
+ end
63
+ @@signature_list[@signature.get_global_name] = [self]
64
+
65
+ print_msg " TECS2CBridgePlugin: [celltype] TECS2C::#{@celltype_name}. Create cell then join to entry port 'eEntry' from the caller cell\n"
66
+ file.print <<EOT
67
+ namespace nTECS2C{
68
+ [singleton]
69
+ celltype #{@celltype_name} {
70
+ [inline]
71
+ entry #{@signature.get_namespace_path} eEnt;
72
+ };
73
+ };
74
+ EOT
75
+ end
76
+
77
+ #=== 後ろのコードを生成
78
+ # プラグインの後ろのコードを生成
79
+ # file:: File:
80
+ def self.gen_post_code(file)
81
+ # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
82
+ # file.print "/* '#{self.class.name}' post code */\n"
83
+ end
84
+
85
+ #=== 受け口関数の本体(C言語)を生成する
86
+ # 通常であれば、ジェネレータは受け口関数のテンプレートを生成する
87
+ # プラグインの場合、変更する必要のないセルタイプコードを生成する
88
+ # file:: FILE 出力先ファイル
89
+ # b_singleton:: bool true if singleton
90
+ # ct_name:: Symbol
91
+ # global_ct_name:: string
92
+ # sig_name:: string
93
+ # ep_name:: string
94
+ # func_name:: string
95
+ # func_global_name:: string
96
+ # func_type:: class derived from Type
97
+ def gen_ep_func_body(file, b_singleton, ct_name, global_ct_name, sig_name, ep_name, func_name, func_global_name, func_type, params)
98
+ ret_type = func_type.get_type
99
+ b_ret_void = ret_type.is_void?
100
+
101
+ if !b_ret_void
102
+ file.print(" #{ret_type.get_type_str} retval;\n")
103
+ end
104
+
105
+ if !b_singleton
106
+
107
+ file.print <<EOT
108
+ #{ct_name}_CB *p_cellcb;
109
+ if( VALID_IDX( idx ) ){
110
+ p_cellcb = #{global_ct_name}_GET_CELLCB(idx);
111
+ }else{
112
+ /* エラー処理コードをここに記述 */
113
+ }
114
+
115
+ EOT
116
+ end
117
+
118
+ # p "celltype_name, sig_name, func_name, func_global_name"
119
+ # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
120
+
121
+ if !b_ret_void
122
+ file.print(" retval = ")
123
+ else
124
+ file.print(" ")
125
+ end
126
+
127
+ file.print("#{func_name}(")
128
+
129
+ delim = ""
130
+ params.each{|param|
131
+ file.printf("#{delim} #{param.get_name}")
132
+ delim = ","
133
+ }
134
+
135
+ file.print(" );\n")
136
+
137
+ if !b_ret_void
138
+ file.print(" return retval;\n")
139
+ end
140
+ end
141
+
142
+ def gen_postamble(file, b_singleton, ct_name, global_name)
143
+ # generate header file here, NOT postamble
144
+ file2 = CFile.open(@header_name, "w")
145
+ file2.print <<EOT
146
+ /*
147
+ * This file was generated by TECS2CBridgePlugin and has prototype
148
+ * decalarations of functions in signature '#{@signature.get_namespace_path}'
149
+ */
150
+
151
+ #include "global_tecsgen.#{$h_suffix}"
152
+
153
+ EOT
154
+ @signature.get_function_head_array.each {|f|
155
+ decl = f.get_declarator
156
+ func_type = decl.get_type
157
+ params = func_type.get_paramlist.get_items
158
+ func_name = decl.get_name
159
+
160
+ ret_type = func_type.get_type
161
+
162
+ # p "celltype_name, sig_name, func_name, func_global_name"
163
+ # p "#{ct_name}, #{sig_name}, #{func_name}, #{func_global_name}"
164
+
165
+ file2.print("#{ret_type.get_type_str} #{func_name}(")
166
+
167
+ delim = ""
168
+ params.each{|param|
169
+ file2.printf("#{delim} #{param.get_name}")
170
+ delim = ","
171
+ }
172
+
173
+ file2.print(" )#{ret_type.get_type_str_post};\n")
174
+ }
175
+
176
+ file2.close
177
+ end
178
+ end