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,107 @@
1
+ #
2
+ # TECS Generator
3
+ # Generator for TOPPERS Embedded Component System
4
+ #
5
+ # Copyright (C) 2008-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: HRPTaskPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ require_tecsgen_lib "HRPKernelObjectPlugin.rb"
40
+ require_tecsgen_lib "HRPKernelObjectManager.rb"
41
+ #== celltype プラグインの共通の親クラス
42
+ class HRPTaskPlugin < HRPKernelObjectPlugin
43
+ ##
44
+ # oyama: add to avoid Ruby exception in code generation phase.
45
+ def new_cell(cell)
46
+ region = cell.get_region
47
+ dbgPrint "HRPTaskCelltypePlugin new_cell=#{cell.get_name} region=#{region.get_name}\n"
48
+ domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
49
+ if domainOption == "OutOfDomain"
50
+ cdl_error("HRP9999 HRP task '$1' must belong to a domain", cell.get_name)
51
+ end
52
+ end
53
+
54
+ # # ATT_MODを生成済みかどうか # 2017.8.27
55
+ # @@generate_memory_module = false
56
+
57
+ #
58
+ # CRE_TSKの出力
59
+ # file:: FILE: 出力先ファイル
60
+ # cell :: Cell タスクセルインスタンス
61
+ # val :: Hash {attr => string}: カーネルオブジェクトの属性の解析結果
62
+ # tab :: string: タブ
63
+ #
64
+ def print_cfg_cre(file, cell, val, tab)
65
+ val[:id] = val[:id].gsub(/(^|[^\$])\$id\$/, "\\1#{@celltype.get_name}_#{cell.get_name}")
66
+ # $cbp$の代わり
67
+ cell_IDX = @celltype.get_name_array(cell)[7]
68
+ # CRE_TSKの生成
69
+ dbgPrint "assign task plugin\n"
70
+ domainOption = cell.get_region.get_domain_root.get_domain_type.get_option
71
+ # if cell.get_region.get_region_type == :DOMAIN
72
+ if domainOption != "OutOfDomain"
73
+ if val[:systemStackSize] == "0"
74
+ #
75
+ # システムスタックの定義を省略
76
+ #
77
+ file.print <<EOT
78
+ CRE_TSK(#{val[:id]}, { #{val[:attribute]}, #{cell_IDX}, tTask_start, #{val[:priority]}, #{val[:stackSize]}, NULL });
79
+ EOT
80
+ else
81
+ #
82
+ # システムスタックの定義を追加
83
+ #
84
+ file.print <<EOT
85
+ CRE_TSK(#{val[:id]}, { #{val[:attribute]}, #{cell_IDX}, tTask_start, #{val[:priority]}, #{val[:stackSize]}, NULL, #{val[:systemStackSize]}, NULL });
86
+ EOT
87
+ end
88
+ else
89
+ #
90
+ # 無所属のタスクは存在してはならないため,エラーとする
91
+ #
92
+ raise "task #{val[:id]} must belong to a domain."
93
+ end
94
+ end
95
+
96
+ #
97
+ # SAC_TSKの出力
98
+ # file:: FILE: 出力先ファイル
99
+ # val :: Hash {attr => string}: カーネルオブジェクトの属性の解析結果
100
+ # acv :: Hash {accessPatternx => string}: アクセス許可ベクタ
101
+ #
102
+ def print_cfg_sac(file, val, acv)
103
+ # pp "SAC_TSK"
104
+ # pp val
105
+ file.puts "SAC_TSK(#{val[:id]}, { #{acv[:accessPattern1]}, #{acv[:accessPattern2]}, #{acv[:accessPattern3]}, #{acv[:accessPattern4]} });"
106
+ end
107
+ end
@@ -0,0 +1,86 @@
1
+ #
2
+ # mruby => TECS bridge
3
+ #
4
+ # Copyright (C) 2008-2014 by TOPPERS Project
5
+ #
6
+ # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
7
+ # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
8
+ # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
9
+ # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
10
+ # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
11
+ # スコード中に含まれていること.
12
+ # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
13
+ # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
14
+ # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
15
+ # の無保証規定を掲載すること.
16
+ # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
17
+ # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
18
+ # と.
19
+ # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
20
+ # 作権表示,この利用条件および下記の無保証規定を掲載すること.
21
+ # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
22
+ # 報告すること.
23
+ # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
24
+ # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
25
+ # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
26
+ # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
27
+ # 免責すること.
28
+ #
29
+ # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
30
+ # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
31
+ # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
32
+ # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
33
+ # の責任を負わない.
34
+ #
35
+ # $Id: Mruby2CBridgePlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
36
+ #
37
+
38
+ class Mruby2CBridgePlugin < SignaturePlugin
39
+ @@signature_list = { }
40
+
41
+ def initialize(signature, option)
42
+ super
43
+
44
+ @celltype_name = :"t#{@signature.get_global_name}"
45
+ @class_name = :"T#{@signature.get_global_name}"
46
+
47
+ parse_plugin_arg
48
+ end
49
+
50
+ def gen_cdl_file(file)
51
+ if @@signature_list.length == 0
52
+ print_msg " Mruby2CBridgePlugin: [initialize function] 'void initializeBridge( mrb_state *mrb )' must be called from VM.\n"
53
+ c2tecs = "generate( C2TECSBridgePlugin, nMruby::sInitializeBridge, \"silent=true\" );\n"
54
+ end
55
+
56
+ if @@signature_list[@signature.get_global_name]
57
+ @@signature_list[@signature.get_global_name] << self
58
+ cdl_warning("MRCW001 signature '$1' duplicate. ignored current one", @signature.get_namespace_path)
59
+ return
60
+ end
61
+
62
+ @@signature_list[@signature.get_global_name] = [self]
63
+ print_msg " Mruby2CBridgePlugin: [object creattion] object = TECS::#{@class_name}.new( 'C#{@signature.get_global_name}' )\n"
64
+ print_msg " Mruby2CBridgePlugin: [function call] result = object.function( params ) # substitute 'function' and params \n"
65
+
66
+ cf = CFile.open("#{$gen}/Mruby2C_tsInitializerBridge.cdl", "w")
67
+ cf.print <<EOT
68
+ cell nC2TECS::tnMruby_sInitializeBridge C2TECS_tsInitializeBridge{
69
+ cCall = VM_TECSInitializer.eInitialize;
70
+ };
71
+ EOT
72
+ cf.close
73
+
74
+ file.print <<EOT
75
+ generate( MrubyBridgePlugin, #{@signature.get_namespace_path}, "silent=true" );
76
+ generate( TECS2CBridgePlugin, #{@signature.get_namespace_path}, "silent=true" );
77
+ #{c2tecs}
78
+ cell nMruby::t#{@signature.get_name} C#{@signature.get_name}{
79
+ cTECS = TECS2C_#{@signature.get_name}.eEnt;
80
+ };
81
+ cell nTECS2C::t#{@signature.get_name} TECS2C_#{@signature.get_name}{};
82
+
83
+ import( "Mruby2C_tsInitializerBridge.cdl" );
84
+ EOT
85
+ end
86
+ end
@@ -0,0 +1,264 @@
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: MrubyBridgeCellPlugin.rb 2952 2018-05-07 10:19:07Z okuma-top $
37
+ #++
38
+
39
+ #== celltype プラグインの共通の親クラス
40
+ class MrubyBridgeCellPlugin < CellPlugin
41
+ # プラグイン引数名 => Proc
42
+ MrubyBridgePluginArgProc = {
43
+ "ignoreUnsigned" => Proc.new {|obj, rhs| obj.set_ignoreUnsigned rhs },
44
+ "exclude_port" => Proc.new {|obj, rhs| obj.set_exclude_port rhs },
45
+ "exclude_port_func" => Proc.new {|obj, rhs| obj.set_exclude_port_func rhs },
46
+ "auto_exclude" => Proc.new {|obj, rhs| obj.set_auto_exclude rhs },
47
+ }
48
+ @@b_gen_post_code_by_dependent = false # true if gen_post_code is called by MrubyBridgeCelltypePlugin
49
+ @@cell_list = {} # gen_cdl_file'ed list to avoid duplicate generation
50
+ @@signature_list = {}
51
+
52
+ require_tecsgen_lib("MrubyBridgeSignaturePlugin.rb")
53
+
54
+ # @exclude_port::[ String(port_name) ] :
55
+ # @exclude_port_func::{ [ String(port_name) ] => [ String(func_name) ] } :
56
+ # @port_list::{ String(port_name) => String(include/exclude=func_name) } : all included port and opt_string
57
+
58
+ #=== CellPlugin# initialize
59
+ # cell:: Cell セル(インスタンス)
60
+ # このメソッドは、セルの構文解析が終わったところで呼び出される
61
+ # この段階では意味解析が終わっていない
62
+ def initialize(cell, option)
63
+ dbgPrint " #{self.class.name}: initialzie=#{cell.get_name} option=#{option}\n"
64
+ super
65
+ @cell = cell
66
+
67
+ # option
68
+ @b_ignoreUnsigned = false
69
+ @exclude_port = []
70
+ @exclude_port_func = {}
71
+ @b_auto_exclude = true # auto_exclude = true by default
72
+ MrubyBridgeSignaturePlugin.set_gen_post_code_by_dependent
73
+
74
+ @plugin_arg_str = CDLString.remove_dquote option
75
+ # @plugin_arg_str = option.gsub( /\A"(.*)/, '\1' ) # 前後の "" を取り除く
76
+ # @plugin_arg_str.sub!( /(.*)"\z/, '\1' )
77
+ @plugin_arg_list = {}
78
+ dbgPrint "#{self.class.name}: initialzie: #{cell.get_name}\n"
79
+ @plugin_arg_check_proc_tab = MrubyBridgePluginArgProc
80
+ parse_plugin_arg
81
+
82
+ @port_list = {} # set @port_list before return
83
+ ct = @cell.get_celltype
84
+ return if ct.nil? # error case
85
+
86
+ port_list = ct.get_port_list
87
+ if @exclude_port.length > 0
88
+ # この実装では、存在しない port を指定されてもチェックできない
89
+ # print "MRBBridgeCellPlugin: exclude list\n"
90
+ port_list.each{|port|
91
+ if !@exclude_port.include?(port.get_name.to_s)
92
+ # print "MRBBridgeCellPlugin: #{port.get_name} included\n"
93
+ @port_list[port] = ""
94
+ else
95
+ # print "MRBBridgeCellPlugin: #{port.get_name} excluded\n"
96
+ end
97
+ }
98
+ else
99
+ port_list.each{|port|
100
+ @port_list[port] = ""
101
+ }
102
+ end
103
+
104
+ if @exclude_port_func.length > 0
105
+ @port_list.each{|port, opt_str|
106
+ delim = ""
107
+ if @exclude_port_func.include?(port.get_name.to_s)
108
+ @exclude_port_func[port.get_name.to_s].each{|func_name|
109
+ opt_str += delim + "exclude=" + func_name
110
+ delim = ","
111
+ }
112
+ end
113
+ @port_list[port] = opt_str
114
+ }
115
+ end
116
+ end
117
+
118
+ def gen_cdl_file(file)
119
+ dbgPrint "#{self.class.name}: gen_cdl_file: #{@cell.get_name}\n"
120
+
121
+ file.print <<EOT
122
+ /* MrubyBridgeCellPlugin: generate for cell=#{@cell.get_name} */
123
+ EOT
124
+
125
+ if @@cell_list[@cell]
126
+ file.print <<EOT
127
+
128
+ /*
129
+ * generate for #{@cell.get_name} duplicate and ignored.
130
+ * This might comes from generate for celltype.
131
+ */
132
+ EOT
133
+ cdl_info("MrubyBridgeCellPlugin: generate duplicate for cell '$1'", @cell.get_name)
134
+ return
135
+ end
136
+ @@cell_list[@cell] = @cell
137
+
138
+ @port_list.each{|port, opt_str|
139
+ next if port.get_signature.nil?
140
+
141
+ case port.get_signature.get_context
142
+ when "task", "any"
143
+ else
144
+ next
145
+ end
146
+
147
+ if port.get_port_type == :ENTRY
148
+ print " MrubyBridgeCellPlugin: [cell.port] #{@cell.get_name}.#{port.get_name} => [mruby instance] TECS::T#{port.get_signature.get_name}.new( '#{@cell.get_name}#{port.get_name}Bridge' ) \n"
149
+ if @@signature_list[port.get_signature].nil?
150
+ opt_str = "ignoreUnsigned=#{@b_ignoreUnsigned}, auto_exclude=#{@b_auto_exclude}, " + opt_str
151
+ # p "opt_str=#{opt_str}"
152
+
153
+ file.print <<EOT
154
+
155
+ /* cell.port=#{@cell.get_name}.#{port.get_name} */
156
+ generate( MrubyBridgePlugin, #{port.get_signature.get_namespace_path}, "#{opt_str}" );
157
+ EOT
158
+ @@signature_list[port.get_signature] = true
159
+ end
160
+
161
+ # mikan option
162
+ nest = @cell.get_region.gen_region_str_pre file
163
+ nest_str = " " * nest
164
+
165
+ file.print <<EOT
166
+ #{nest_str}/* BridgeCell */
167
+ #{nest_str}cell nMruby::t#{port.get_signature.get_name} #{@cell.get_name}#{port.get_name}Bridge {
168
+ #{nest_str} cTECS = #{@cell.get_namespace_path}.#{port.get_name};
169
+ #{nest_str}};
170
+ EOT
171
+ @cell.get_region.gen_region_str_post file
172
+ end
173
+ }
174
+ end
175
+
176
+ #=== 後ろの CDL コードを生成
177
+ # プラグインの後ろの CDL コードを生成
178
+ # file:: File:
179
+ def self.gen_post_code(file)
180
+ dbgPrint "#{self.name}: gen_post_code\n"
181
+ if !@@b_gen_post_code_by_dependent
182
+ gen_post_code_body file
183
+ end
184
+ end
185
+
186
+ def self.set_gen_post_code_by_dependent # by MrubyBridgeCelltypePlugin
187
+ dbgPrint "#{self.name}: set_gen_post_code_by_dependent\n"
188
+ @@b_gen_post_code_by_dependent = true
189
+ MrubyBridgeSignaturePlugin.set_gen_post_code_by_dependent
190
+ end
191
+
192
+ def self.gen_post_code_body(file)
193
+ # 複数のプラグインの post_code が一つのファイルに含まれるため、以下のような見出しをつけること
194
+ # file.print "/* '#{self.class.name}' post code */\n"
195
+ dbgPrint "#{self.name}: gen_post_code_body\n"
196
+ MrubyBridgeSignaturePlugin.gen_post_code_body file
197
+ end
198
+
199
+ #=== プラグイン引数 ignoreUnsigned
200
+ def set_ignoreUnsigned(rhs)
201
+ if rhs == "true" || rhs.nil?
202
+ @b_ignoreUnsigned = true
203
+ end
204
+ end
205
+
206
+ #=== プラグイン引数 exclude_port
207
+ def set_exclude_port(rhs)
208
+ ports = rhs.split ","
209
+ ct = @cell.get_celltype
210
+ return if ct.nil? # error case
211
+ ports.each{|rhs_port|
212
+ obj = ct.find(rhs_port.to_sym)
213
+ if (!obj.instance_of? Port) || obj.get_port_type != :ENTRY
214
+ cdl_error("MRB9999 exclude_port '$1' not found or not entry in celltype '$2'", rhs_port, ct.get_name)
215
+ else
216
+ # print "MRBBridgeCellPlugin: exclude #{rhs_port}\n"
217
+ @exclude_port << rhs_port
218
+ end
219
+ }
220
+ end
221
+
222
+ #=== プラグイン引数 exclude_port_func
223
+ def set_exclude_port_func(rhs)
224
+ port_funcs = rhs.split ","
225
+ ct = @cell.get_celltype
226
+ return if ct.nil? # error case
227
+ port_funcs.each{|rhs_port_func|
228
+ port_func = rhs_port_func.split "."
229
+ if port_func.length != 2
230
+ cdl_error("MRB9999 exclude_port_func: '$1' not in 'port.func' form", rhs_port_func)
231
+ end
232
+ obj = ct.find(port_func[0].to_sym)
233
+ if (!obj.instance_of? Port) || obj.get_port_type != :ENTRY
234
+ cdl_error("MRB9999 exclude_port_func: port '$1' not found in celltype '$2'", rhs_port, ct.get_name)
235
+ else
236
+ signature = obj.get_signature
237
+ next if signature.nil? # error case
238
+ if signature.get_function_head port_func[1].to_sym
239
+ # print "MRBBridgeCellPlugin: #{port_func[0]}.#{port_func[1]} exclude\n"
240
+ if @exclude_port_func[port_func[0]]
241
+ @exclude_port_func[port_func[0]] << port_func[1]
242
+ else
243
+ @exclude_port_func[port_func[0]] = [port_func[1]]
244
+ end
245
+ else
246
+ cdl_error("MRB9999 exclude_port_func: func '$1' not found in port '$2' celltype $3",
247
+ port_func[1], port_func[0], ct.get_name)
248
+ end
249
+ end
250
+ }
251
+ end
252
+
253
+ #=== プラグイン引数 auto_exclude
254
+ def set_auto_exclude(rhs)
255
+ # print "MrubyBridgeCellPlugin: auto_exclude=#{rhs}\n"
256
+ if rhs == "false"
257
+ @b_auto_exclude = false
258
+ elsif rhs == "true"
259
+ @b_auto_exclude = true # auto_exclude = true by default
260
+ else
261
+ cdl_warning("MRB9999 auto_exclude: unknown rhs value ignored. specify true or false")
262
+ end
263
+ end
264
+ end