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.
- checksums.yaml +7 -0
- data/.gitignore +12 -0
- data/.rubocop.yml +125 -0
- data/.rubocop_todo.yml +188 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +6 -0
- data/LICENSE +46 -0
- data/LICENSE.ja +32 -0
- data/README.ja.md +200 -0
- data/README.md +35 -0
- data/Rakefile +27 -0
- data/bin/tecscde +64 -0
- data/glade/tecscde-cell-property.glade +205 -0
- data/glade/tecscde-celltype-property.glade +172 -0
- data/glade/tecscde-celltype.glade +414 -0
- data/glade/tecscde-export.glade +161 -0
- data/glade/test-cell-plugin.rb +51 -0
- data/glade/test-cell-property.rb +35 -0
- data/glade/test-export.rb +35 -0
- data/glade/test-palette.rb +26 -0
- data/lib/tcflow.rb +148 -0
- data/lib/tecscde.rb +65 -0
- data/lib/tecscde/NewCell.png +0 -0
- data/lib/tecscde/SelectArrow.png +0 -0
- data/lib/tecscde/attr_tree_view.rb +253 -0
- data/lib/tecscde/cell_plugin_dialog.glade +294 -0
- data/lib/tecscde/cell_plugin_dialog.rb +89 -0
- data/lib/tecscde/celltype_tree_view.rb +105 -0
- data/lib/tecscde/change_set_control.rb +35 -0
- data/lib/tecscde/change_set_control/change_set.rb +32 -0
- data/lib/tecscde/change_set_control/change_set_manager.rb +62 -0
- data/lib/tecscde/command.rb +35 -0
- data/lib/tecscde/control.rb +491 -0
- data/lib/tecscde/highlighted_objects.rb +180 -0
- data/lib/tecscde/logger.rb +74 -0
- data/lib/tecscde/main_view_and_model.rb +80 -0
- data/lib/tecscde/palette.glade +553 -0
- data/lib/tecscde/palette.rb +174 -0
- data/lib/tecscde/preferences.glade +117 -0
- data/lib/tecscde/preferences.rb +44 -0
- data/lib/tecscde/tecs_model.rb +1137 -0
- data/lib/tecscde/tecs_model/hbar.rb +68 -0
- data/lib/tecscde/tecs_model/tm_c_port.rb +122 -0
- data/lib/tecscde/tecs_model/tm_c_port_array.rb +98 -0
- data/lib/tecscde/tecs_model/tm_cell.rb +496 -0
- data/lib/tecscde/tecs_model/tm_e_port.rb +126 -0
- data/lib/tecscde/tecs_model/tm_e_port_array.rb +78 -0
- data/lib/tecscde/tecs_model/tm_join.rb +293 -0
- data/lib/tecscde/tecs_model/tm_join_bar.rb +146 -0
- data/lib/tecscde/tecs_model/tm_port.rb +238 -0
- data/lib/tecscde/tecs_model/tm_port_array.rb +246 -0
- data/lib/tecscde/tecs_model/tm_region.rb +107 -0
- data/lib/tecscde/tecs_model/tm_uneditable.rb +68 -0
- data/lib/tecscde/tecs_model/vbar.rb +68 -0
- data/lib/tecscde/templates/_cell_info.cde.erb +15 -0
- data/lib/tecscde/templates/_join_info.cde.erb +28 -0
- data/lib/tecscde/templates/main.cde.erb +49 -0
- data/lib/tecscde/tm_object.rb +91 -0
- data/lib/tecscde/version.rb +4 -0
- data/lib/tecscde/view.rb +58 -0
- data/lib/tecscde/view/cairo_matrix.rb +90 -0
- data/lib/tecscde/view/canvas.rb +59 -0
- data/lib/tecscde/view/constants.rb +114 -0
- data/lib/tecscde/view/main_view.rb +1245 -0
- data/lib/tecsflow.rb +475 -0
- data/lib/tecsflow/C_parser.tab.rb +2471 -0
- data/lib/tecsflow/C_parser.y.rb +1087 -0
- data/lib/tecsflow/classes.rb +421 -0
- data/lib/tecsgen.rb +581 -0
- data/lib/tecsgen/core/C_parser.tab.rb +2477 -0
- data/lib/tecsgen/core/C_parser.y +1032 -0
- data/lib/tecsgen/core/bnf-deb.tab.rb +5193 -0
- data/lib/tecsgen/core/bnf.tab.rb +5193 -0
- data/lib/tecsgen/core/bnf.y +2211 -0
- data/lib/tecsgen/core/componentobj.rb +7901 -0
- data/lib/tecsgen/core/ctypes.rb +226 -0
- data/lib/tecsgen/core/expression.rb +1031 -0
- data/lib/tecsgen/core/gen_xml.rb +374 -0
- data/lib/tecsgen/core/generate.rb +5206 -0
- data/lib/tecsgen/core/location.rb +116 -0
- data/lib/tecsgen/core/messages.rb +101 -0
- data/lib/tecsgen/core/optimize.rb +456 -0
- data/lib/tecsgen/core/plugin.rb +332 -0
- data/lib/tecsgen/core/pluginModule.rb +165 -0
- data/lib/tecsgen/core/syntaxobj.rb +1234 -0
- data/lib/tecsgen/core/tecs_lang.rb +306 -0
- data/lib/tecsgen/core/tecsgen.rb +453 -0
- data/lib/tecsgen/core/tecsinfo.rb +860 -0
- data/lib/tecsgen/core/tool_info.rb +258 -0
- data/lib/tecsgen/core/types.rb +1632 -0
- data/lib/tecsgen/core/unjoin_plugin.rb +218 -0
- data/lib/tecsgen/core/value.rb +650 -0
- data/lib/tecsgen/messages/messages_console_en_US.rb +1171 -0
- data/lib/tecsgen/messages/messages_console_ja_JP.rb +1171 -0
- data/lib/tecsgen/messages/messages_file_en_US.rb +334 -0
- data/lib/tecsgen/messages/messages_file_ja_JP.rb +163 -0
- data/lib/tecsgen/plugin/ATK1AlarmPlugin.rb +196 -0
- data/lib/tecsgen/plugin/ATK1DelayTaskPlugin.rb +106 -0
- data/lib/tecsgen/plugin/ATK1EventPlugin.rb +147 -0
- data/lib/tecsgen/plugin/ATK1ISRPlugin.rb +174 -0
- data/lib/tecsgen/plugin/ATK1KernelPlugin.rb +287 -0
- data/lib/tecsgen/plugin/ATK1ResourcePlugin.rb +124 -0
- data/lib/tecsgen/plugin/ATK1TaskPlugin.rb +220 -0
- data/lib/tecsgen/plugin/C2TECSBridgePlugin.rb +210 -0
- data/lib/tecsgen/plugin/CellPlugin.rb +61 -0
- data/lib/tecsgen/plugin/CelltypePlugin.rb +72 -0
- data/lib/tecsgen/plugin/CompositePlugin.rb +66 -0
- data/lib/tecsgen/plugin/DomainPlugin.rb +89 -0
- data/lib/tecsgen/plugin/HRP2AlarmHandlerPlugin.rb +76 -0
- data/lib/tecsgen/plugin/HRP2Cache.rb +1 -0
- data/lib/tecsgen/plugin/HRP2CyclicHandlerPlugin.rb +75 -0
- data/lib/tecsgen/plugin/HRP2DataqueuePlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2EventflagPlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2FixedSizeMemoryPoolPlugin.rb +68 -0
- data/lib/tecsgen/plugin/HRP2HandlerPlugin.rb +117 -0
- data/lib/tecsgen/plugin/HRP2KernelObjectPlugin.rb +372 -0
- data/lib/tecsgen/plugin/HRP2ObjectPlugin.rb +94 -0
- data/lib/tecsgen/plugin/HRP2Plugin.rb +140 -0
- data/lib/tecsgen/plugin/HRP2PostHook.rb +111 -0
- data/lib/tecsgen/plugin/HRP2PriorityDataqueuePlugin.rb +66 -0
- data/lib/tecsgen/plugin/HRP2RPCPlugin.rb +319 -0
- data/lib/tecsgen/plugin/HRP2SVCPlugin.rb +473 -0
- data/lib/tecsgen/plugin/HRP2SemaphorePlugin.rb +67 -0
- data/lib/tecsgen/plugin/HRP2TaskPlugin.rb +200 -0
- data/lib/tecsgen/plugin/HRPHandlerPlugin.rb +125 -0
- data/lib/tecsgen/plugin/HRPKernelObjectManager.rb +72 -0
- data/lib/tecsgen/plugin/HRPKernelObjectPlugin.rb +333 -0
- data/lib/tecsgen/plugin/HRPObjectPlugin.rb +93 -0
- data/lib/tecsgen/plugin/HRPPlugin.rb +356 -0
- data/lib/tecsgen/plugin/HRPRPCPlugin.rb +407 -0
- data/lib/tecsgen/plugin/HRPSVCPlugin.rb +859 -0
- data/lib/tecsgen/plugin/HRPTaskPlugin.rb +107 -0
- data/lib/tecsgen/plugin/Mruby2CBridgePlugin.rb +86 -0
- data/lib/tecsgen/plugin/MrubyBridgeCellPlugin.rb +264 -0
- data/lib/tecsgen/plugin/MrubyBridgeCelltypePlugin.rb +293 -0
- data/lib/tecsgen/plugin/MrubyBridgeCompositePlugin.rb +49 -0
- data/lib/tecsgen/plugin/MrubyBridgePlugin.rb +67 -0
- data/lib/tecsgen/plugin/MrubyBridgeSignaturePlugin.rb +1307 -0
- data/lib/tecsgen/plugin/MrubyInfoBridgePlugin.rb +14 -0
- data/lib/tecsgen/plugin/MrubyInfoBridgeSignaturePlugin.rb +994 -0
- data/lib/tecsgen/plugin/MultiPlugin.rb +57 -0
- data/lib/tecsgen/plugin/NotifierPlugin.rb +1217 -0
- data/lib/tecsgen/plugin/OpaqueMarshalerPlugin.rb +81 -0
- data/lib/tecsgen/plugin/OpaqueRPCPlugin.rb +323 -0
- data/lib/tecsgen/plugin/RPCPlugin.rb +266 -0
- data/lib/tecsgen/plugin/RepeatCellPlugin.rb +166 -0
- data/lib/tecsgen/plugin/RepeatJoinPlugin.rb +130 -0
- data/lib/tecsgen/plugin/SharedOpaqueRPCPlugin.rb +357 -0
- data/lib/tecsgen/plugin/SharedRPCPlugin.rb +329 -0
- data/lib/tecsgen/plugin/SignaturePlugin.rb +77 -0
- data/lib/tecsgen/plugin/TECS2CBridgePlugin.rb +178 -0
- data/lib/tecsgen/plugin/TECSInfoPlugin.rb +280 -0
- data/lib/tecsgen/plugin/ThroughPlugin.rb +333 -0
- data/lib/tecsgen/plugin/TracePlugin.rb +484 -0
- data/lib/tecsgen/plugin/lib/GenHRP2Marshaler.rb +761 -0
- data/lib/tecsgen/plugin/lib/GenOpaqueMarshaler.rb +1107 -0
- data/lib/tecsgen/plugin/lib/GenParamCopy.rb +365 -0
- data/lib/tecsgen/plugin/lib/GenTransparentMarshaler.rb +683 -0
- data/lib/tecsgen/plugin/lib/MrubyBridgeCelltypePluginModule.rb +283 -0
- data/lib/tecsgen/plugin/lib/MrubyBridgeSignaturePluginModule.rb +277 -0
- data/lib/tecsgen/version.rb +6 -0
- data/samples/FigureSamples/active/active.cde +104 -0
- data/samples/FigureSamples/active/active.cdl +20 -0
- data/samples/FigureSamples/active/active.pdf +0 -0
- data/samples/FigureSamples/active/active.png +0 -0
- data/samples/FigureSamples/active/gen/tmp_C_src.c +36 -0
- data/samples/FigureSamples/active/gen/tmp_cygwin_tecs.h +1908 -0
- data/samples/FigureSamples/active/gen/tmp_plugin_post_code.cdl +0 -0
- data/samples/FigureSamples/allocator/allocator-internal.png +0 -0
- data/samples/FigureSamples/allocator/allocator.cde +171 -0
- data/samples/FigureSamples/allocator/allocator.cdl +58 -0
- data/samples/FigureSamples/allocator/allocator.png +0 -0
- data/samples/FigureSamples/basic/Makefile +87 -0
- data/samples/FigureSamples/basic/SimpleSample-trace.cdl +50 -0
- data/samples/FigureSamples/basic/SimpleSample.cde +91 -0
- data/samples/FigureSamples/basic/SimpleSample.cdl +47 -0
- data/samples/FigureSamples/basic/basic.cde +93 -0
- data/samples/FigureSamples/basic/basic.cdl +46 -0
- data/samples/FigureSamples/basic/basic.png +0 -0
- data/samples/FigureSamples/callback/callback.cde +130 -0
- data/samples/FigureSamples/callback/callback.cdl +29 -0
- data/samples/FigureSamples/callback/callback.png +0 -0
- data/samples/FigureSamples/carray/carray.cde +144 -0
- data/samples/FigureSamples/carray/carray.cdl +38 -0
- data/samples/FigureSamples/carray/carray.png +0 -0
- data/samples/FigureSamples/cearray/cearray.cde +314 -0
- data/samples/FigureSamples/cearray/cearray.cdl +60 -0
- data/samples/FigureSamples/cearray/cearray.png +0 -0
- data/samples/FigureSamples/composite/composite-internal.png +0 -0
- data/samples/FigureSamples/composite/composite.cde +216 -0
- data/samples/FigureSamples/composite/composite.cdl +95 -0
- data/samples/FigureSamples/composite/composite.png +0 -0
- data/samples/FigureSamples/earray/earray.cde +142 -0
- data/samples/FigureSamples/earray/earray.cdl +38 -0
- data/samples/FigureSamples/earray/earray.png +0 -0
- data/samples/FigureSamples/join/Makefile +87 -0
- data/samples/FigureSamples/join/join.cde +132 -0
- data/samples/FigureSamples/join/join.cdl +40 -0
- data/samples/FigureSamples/join/join.png +0 -0
- data/samples/FigureSamples/relay/Makefile +99 -0
- data/samples/FigureSamples/relay/relay-internal.png +0 -0
- data/samples/FigureSamples/relay/relay.cde +284 -0
- data/samples/FigureSamples/relay/relay.cdl +52 -0
- data/samples/FigureSamples/relay/relay.png +0 -0
- data/samples/FigureSamples/rpc/Makefile +123 -0
- data/samples/FigureSamples/rpc/rpc-expand.png +0 -0
- data/samples/FigureSamples/rpc/rpc.cde +245 -0
- data/samples/FigureSamples/rpc/rpc.png +0 -0
- data/samples/FigureSamples/rpc/rpc_sample.cdl +53 -0
- data/samples/SimpleSample/Makefile +25 -0
- data/samples/SimpleSample/SimpleSample/Makefile +86 -0
- data/samples/SimpleSample/SimpleSample/Makefile-trace +91 -0
- data/samples/SimpleSample/SimpleSample/README.txt +106 -0
- data/samples/SimpleSample/SimpleSample/SimpleSample-trace.cdl +50 -0
- data/samples/SimpleSample/SimpleSample/SimpleSample.cdl +45 -0
- data/samples/SimpleSample/SimpleSample/src/tSample.c +77 -0
- data/samples/SimpleSample/SimpleSample/src/tSimple.c +48 -0
- data/samples/SimpleSample/SimpleSample/src/tecs-types.h +27 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile +51 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/Makefile-trace +91 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/README.txt +106 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample-trace.cdl +80 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/SimpleSample.cdl +77 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSample/Makefile +112 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/rSimple/Makefile +109 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSample.c +80 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tSimple.c +47 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tTaskMain.c +66 -0
- data/samples/SimpleSample/SimpleSampleOpaqueRPC/src/tecs-types.h +27 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile +125 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/Makefile-trace +130 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample-trace.cdl +54 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/SimpleSample.cdl +53 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSample.c +80 -0
- data/samples/SimpleSample/SimpleSampleTransparentRPC/src/tSimple.c +54 -0
- data/tecscde.gemspec +41 -0
- 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
|