Class: NotifierPlugin
- Inherits:
-
CelltypePlugin
- Object
- Node
- Plugin
- CelltypePlugin
- NotifierPlugin
- Defined in:
- lib/tecsgen/plugin/NotifierPlugin.rb
Defined Under Namespace
Classes: ActivateTaskHandlerType, AdapterGenerator, BaseHandlerType, BaseTaskHandlerType, DataqueueHandlerType, Handler, HandlerAttribute, IncrementVariableHandlerType, NullHandlerType, SendErrorCodeToDataqueueHandlerType, SendToDataqueueHandlerType, SetEventflagHandlerType, SetVariableHandlerType, SetVariableToErrorCodeHandlerType, SignalSemaphoreHandlerType, UserHandlerType, WakeUpTaskHandlerType
Constant Summary collapse
- EVENT_HANDLER =
通常のハンドラ
Handler.new("ciNotificationHandler")
- ERROR_HANDLER =
エラーハンドラ (通常のハンドラが失敗した場合に呼び出される)
Handler.new("ciErrorNotificationHandler")
- HANDLERS =
[ EVENT_HANDLER, ERROR_HANDLER ]
- SETVAR_ADDR_ATTR =
—— 通知の属性の定義 ——-
ハンドラタイプに合致しない属性が指定された場合に エラーを出力できるよう、全ての属性をここで列挙する。
HandlerAttribute.new("setVariableAddress")
- SETVAR_VALUE_ATTR =
HandlerAttribute.new("setVariableValue")
- INCVAR_ADDR_ATTR =
HandlerAttribute.new("incrementedVariableAddress")
- SNDDTQ_VALUE_ATTR =
HandlerAttribute.new("dataqueueSentValue")
- SETFLG_FLAG_ATTR =
HandlerAttribute.new("flagPattern")
- ATTRS =
[ SETVAR_ADDR_ATTR, SETVAR_VALUE_ATTR, INCVAR_ADDR_ATTR, SNDDTQ_VALUE_ATTR, SETFLG_FLAG_ATTR ]
- HANDLER_TYPES =
[ ActivateTaskHandlerType.new, WakeUpTaskHandlerType.new, SetVariableHandlerType.new, SetVariableToErrorCodeHandlerType.new, IncrementVariableHandlerType.new, SignalSemaphoreHandlerType.new, SetEventflagHandlerType.new, SendToDataqueueHandlerType.new, SendErrorCodeToDataqueueHandlerType.new, UserHandlerType.new, NullHandlerType.new ]
Constants inherited from Plugin
Instance Method Summary collapse
- #gen_factory(file) ⇒ Object
- #gen_sac(file, cell, indent) ⇒ Object
-
#initialize(celltype, option) ⇒ NotifierPlugin
constructor
- @celltype
- Celltype @option
-
String :オプション文字列.
- #set_factory(template_string) ⇒ Object
- #set_factory_output_file(output_file) ⇒ Object
Methods inherited from CelltypePlugin
Methods inherited from Plugin
#cdl_error, #check_plugin_arg, #gen_cdl_file, #gen_ep_func?, #gen_postamble, #gen_preamble, #new_cell, #parse_plugin_arg, #print_msg, #set_locale, #set_silent
Methods inherited from Node
#cdl_error, #cdl_error2, #cdl_error3, #cdl_info, #cdl_info2, #cdl_warning, #cdl_warning2, #get_locale, #locale_str, #set_locale
Constructor Details
#initialize(celltype, option) ⇒ NotifierPlugin
- @celltype
-
Celltype
- @option
-
String :オプション文字列
927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 |
# File 'lib/tecsgen/plugin/NotifierPlugin.rb', line 927 def initialize(celltype, option) super @plugin_arg_check_proc_tab = NotifierPluginArgProc @plugin_arg_str = option @plugin_arg_str = option.gsub(/\A"(.*)/, '\1') # 前後の "" を取り除く @plugin_arg_str.sub!(/(.*)"\z/, '\1') @factory = nil @output_file = nil parse_plugin_arg unless @factory cdl_error("NTF1003 celltype $1: option factory is not specified", celltype.get_name) end unless @output_file cdl_error("NTF1003 celltype $1: option output_file is not specified", celltype.get_name) end end |
Instance Method Details
#gen_factory(file) ⇒ Object
962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 |
# File 'lib/tecsgen/plugin/NotifierPlugin.rb', line 962 def gen_factory(file) # puts "===== begin #{@celltype.get_name.to_s} plugin =====" kernelCfg = AppFile.open("#{$gen}/#{@output_file}") kernelCfg.print "\n/* Generated by #{self.class.name} */\n" kernelCfg.print "\#include \"tTimeEventHandler.h\"\n" # アダプタ関数を生成する準備 @adpt_gen = AdapterGenerator.new("tTimeEventHandler", @celltype.get_global_name) # 属性置換が行えることを検証する。 # ここで行うのは、factoryで指定された属性名が # 存在することを確認し、しなければエラーを出力することのみである。 # セルごとの処理の最中にエラーを出力することも可能ではあるが、 # そうするとセルタイプ側の問題であるのにもかかわらず、セルごとに # エラーが表示されてしまう。 # {{attribute_name}} -> attribute_value @factory.scan(/\{\{([a-zA-Z0-9_]*?)\}\}/) {|match| name = $1.to_sym # {{_handler_params_}} はハンドラに関する指定。プラグイン内で値が生成される next if name == :_handler_params_ subst_attr = @celltype.find(name) unless subst_attr cdl_error("NTF1007 celltype $1: additional_param: attribute $2 does not exist.", @celltype.get_name, name) end } @celltype.get_cell_list.each {|cell| gen_factory_for_cell kernelCfg, cell } # アダプタ関数の生成を完了させる @adpt_gen.finish kernelCfg.close # puts "===== end #{@celltype.get_name.to_s} plugin =====" end |
#gen_sac(file, cell, indent) ⇒ Object
1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 |
# File 'lib/tecsgen/plugin/NotifierPlugin.rb', line 1197 def gen_sac(file, cell, indent) domain_root = cell.get_region.get_domain_root if domain_root.get_domain_type id = (cell.get_attr_initializer :id).to_s name_array = cell.get_celltype.get_name_array(cell) case cell.get_celltype.get_name when :tCyclicNotifier obj_type = "CYC" when :tAlarmNotifier obj_type = "ALM" else raise "NotifierPlugin: unknown celltype #{cell.get_celltype.get_name}" end id = cell.get_celltype.subst_name(id, name_array) # p obj_type # p HRPPlugin.get_sac_str cell file.print indent, "SAC_#{obj_type}( #{id}, #{HRPPlugin.get_sac_str cell} );\n" end end |
#set_factory(template_string) ⇒ Object
946 947 948 949 950 951 952 |
# File 'lib/tecsgen/plugin/NotifierPlugin.rb', line 946 def set_factory(template_string) unless @factory.nil? cdl_error("NTF1003 celltype $1: option factory was specified more than once", celltype.get_name) end @factory = template_string end |
#set_factory_output_file(output_file) ⇒ Object
954 955 956 957 958 959 960 |
# File 'lib/tecsgen/plugin/NotifierPlugin.rb', line 954 def set_factory_output_file(output_file) unless @output_file.nil? cdl_error("NTF1003 celltype $1: option output_file was specified more than once", celltype.get_name) end @output_file = output_file end |