diff --git a/Makefile.ac b/Makefile.ac index 2be3d0086f..3d792d225a 100644 --- a/Makefile.ac +++ b/Makefile.ac @@ -45,6 +45,7 @@ FLIGHT_PLAN_XML=$(ACINCLUDE)/flight_plan.xml SETTINGS_H=$(ACINCLUDE)/settings.h SETTINGS_XMLS=$(patsubst %,$(CONF)/%,$(SETTINGS)) SETTINGS_XML=$(ACINCLUDE)/settings.xml +SETTINGS_MODULES=$(ACINCLUDE)/settings_modules.xml MAKEFILE_AC=$(ACINCLUDE)/Makefile.ac SETTINGS_FILE=$(SETTINGS:settings%=%) #TUNING_FILE=$(subst ,_,$(SETTINGS:settings/%.xml=%)).h @@ -67,7 +68,7 @@ init: demo: $(SUPERVISION) -all_ac_h: $(AIRFRAME_H) $(SETTINGS_H) $(TUNING_H) $(MAKEFILE_AC) $(PERIODIC_H) $(MODULES_H) +all_ac_h: $(AIRFRAME_H) $(MODULES_H) $(SETTINGS_H) $(TUNING_H) $(MAKEFILE_AC) $(PERIODIC_H) radio_ac_h : $(RADIO_H) $(CONF_RADIO_CONTROL_PPM_H) @@ -116,9 +117,9 @@ $(FLIGHT_PLAN_XML) : $(CONF)/$(FLIGHT_PLAN) $(CONF_XML) $(TOOLS)/gen_flight_plan $(Q)$(TOOLS)/gen_flight_plan.out -dump $< > $@ $(Q)chmod a+r $@ -$(SETTINGS_H) : $(SETTINGS_XMLS) $(CONF_XML) $(TOOLS)/gen_settings.out +$(SETTINGS_H) : $(SETTINGS_XMLS) $(CONF_XML) $(SETTINGS_MODULES) $(TOOLS)/gen_settings.out @echo BUILD $@ - $(Q)$(TOOLS)/gen_settings.out $(SETTINGS_XML) $(SETTINGS_XMLS) > $@ + $(Q)$(TOOLS)/gen_settings.out $(SETTINGS_XML) $(SETTINGS_XMLS) $(SETTINGS_MODULES) > $@ $(Q)chmod a+r $@ $(Q)cp $(SETTINGS_XMLS) $(AIRCRAFT_CONF_DIR)/settings @@ -130,7 +131,7 @@ $(TUNING_H) : $(SETTINGS_XMLS) $(CONF_XML) $(TOOLS)/gen_tuning.out $(MODULES_H) : $(CONF)/$(AIRFRAME_XML) $(TOOLS)/gen_modules.out $(CONF)/modules/*.xml @echo BUILD $@ - $(Q)$(TOOLS)/gen_modules.out $(MODULES_DIR) $(MODULES_C) $< > $@ + $(Q)$(TOOLS)/gen_modules.out $(MODULES_DIR) $(MODULES_C) $(SETTINGS_MODULES) $< > $@ $(Q)chmod a+r $@ diff --git a/sw/tools/gen_modules.ml b/sw/tools/gen_modules.ml index 2a9da237e8..183cdc3600 100644 --- a/sw/tools/gen_modules.ml +++ b/sw/tools/gen_modules.ml @@ -58,6 +58,10 @@ let get_status_name = fun f n -> let func = (Xml.attrib f "fun") in n^"_"^String.sub func 0 (try String.index func '(' with _ -> (String.length func))^"_status" +let get_status_shortname = fun f -> + let func = (Xml.attrib f "fun") in + String.sub func 0 (try String.index func '(' with _ -> (String.length func)) + let is_status_lock = fun p -> let mode = ExtXml.attrib_or_default p "autorun" "LOCK" in mode = "LOCK" @@ -247,13 +251,39 @@ let check_dependencies = fun modules names -> with _ -> () ) modules +let write_settings = fun xml_file out_set modules -> + fprintf out_set "\n" xml_file; + fprintf out_set "\n\n"; + fprintf out_set "\n"; + fprintf out_set " \n"; + let setting_exist = ref false in + List.iter (fun m -> + let module_name = ExtXml.attrib m "name" in + List.iter (fun i -> + match Xml.tag i with + "periodic" -> + if not (is_status_lock i) then begin + if (not !setting_exist) then begin + fprintf out_set " \n"; + setting_exist := true; + end; + fprintf out_set " \n" + (get_status_name i module_name) (get_status_shortname i) + end + | _ -> ()) + (Xml.children m)) + modules; + if !setting_exist then fprintf out_set " \n"; + fprintf out_set " \n"; + fprintf out_set "\n" + let h_name = "MODULES_H" let () = - if Array.length Sys.argv <> 4 then + if Array.length Sys.argv <> 5 then failwith (Printf.sprintf "Usage: %s conf_modules_dir out_c_file out_settings_file xml_file" Sys.argv.(0)); - let xml_file = Sys.argv.(3) - (*and out_set = open_out Sys.argv.(3)*) + let xml_file = Sys.argv.(4) + and out_set = open_out Sys.argv.(3) and out_c = open_out Sys.argv.(2) and modules_dir = Sys.argv.(1) in try @@ -281,6 +311,8 @@ let () = fprintf out_c "\n#endif // USE_MODULES\n"; finish h_name; close_out out_c; + write_settings xml_file out_set modules_list; + close_out out_set; with Xml.Error e -> fprintf stderr "%s: XML error:%s\n" xml_file (Xml.error e); exit 1 | Dtd.Prove_error e -> fprintf stderr "%s: DTD error:%s\n%!" xml_file (Dtd.prove_error e); exit 1 diff --git a/sw/tools/gen_settings.ml b/sw/tools/gen_settings.ml index 39451c4e5e..69f528cce6 100644 --- a/sw/tools/gen_settings.ml +++ b/sw/tools/gen_settings.ml @@ -66,6 +66,7 @@ let print_dl_settings = fun settings -> lprintf "\n"; StringSet.iter (fun m -> lprintf "#include \"%s.h\"\n" m) !modules; + lprintf "#include \"modules.h\"\n"; lprintf "\n"; (** Macro to call to set one variable *) @@ -186,8 +187,8 @@ let join_xml_files = fun xml_files -> let _ = - if Array.length Sys.argv < 3 then - failwith (Printf.sprintf "Usage: %s output_xml_file input_xml_file(s)" Sys.argv.(0)); + if Array.length Sys.argv < 4 then + failwith (Printf.sprintf "Usage: %s output_xml_file input_xml_file(s) input_xml_modules" Sys.argv.(0)); let h_name = "SETTINGS_H" and xml_files = ref [] in for i = 2 to Array.length Sys.argv - 1 do