diff --git a/Makefile b/Makefile index 12eb37ef772..d7b6df41588 100644 --- a/Makefile +++ b/Makefile @@ -124,7 +124,6 @@ misc: multimon: cd $(MULTIMON); $(MAKE) -#static_h: $(MESSAGES_H) $(MESSAGES2_H) $(UBX_PROTOCOL_H) $(MTK_PROTOCOL_H) $(XSENS_PROTOCOL_H) $(DL_PROTOCOL_H) $(DL_PROTOCOL2_H) static_h: $(MESSAGES_XML) $(UBX_PROTOCOL_H) $(MTK_PROTOCOL_H) $(XSENS_PROTOCOL_H) usb_lib: @@ -134,20 +133,6 @@ $(MESSAGES_XML) : $(MESSAGES_XML_CONF) tools @echo BUILD $@ $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_messages_xml.out $(MESSAGES_XML_CONF) $(MESSAGES_FILES) $@ $(STATICINCLUDE) -#$(MESSAGES_H) : $(MESSAGES_XML) $(CONF_XML) tools -# $(Q)test -d $(STATICINCLUDE) || mkdir -p $(STATICINCLUDE) -# @echo BUILD $@ -# $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_messages.out $< telemetry > /tmp/msg.h -# $(Q)mv /tmp/msg.h $@ -# $(Q)chmod a+r $@ - -#$(MESSAGES2_H) : $(MESSAGES_XML) $(CONF_XML) tools -# $(Q)test -d $(STATICINCLUDE) || mkdir -p $(STATICINCLUDE) -# @echo BUILD $@ -# $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_messages2.out $< telemetry > /tmp/msg2.h -# $(Q)mv /tmp/msg2.h $@ -# $(Q)chmod a+r $@ - $(UBX_PROTOCOL_H) : $(UBX_XML) tools @echo BUILD $@ $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_ubx.out $< > /tmp/ubx.h @@ -163,15 +148,6 @@ $(XSENS_PROTOCOL_H) : $(XSENS_XML) tools $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_xsens.out $< > /tmp/xsens.h $(Q)mv /tmp/xsens.h $@ -#$(DL_PROTOCOL_H) : $(MESSAGES_XML) tools -# @echo BUILD $@ -# $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_messages.out $< datalink > /tmp/dl.h -# $(Q)mv /tmp/dl.h $@ - -#$(DL_PROTOCOL2_H) : $(MESSAGES_XML) tools -# @echo BUILD $@ -# $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_messages2.out $< datalink > /tmp/dl2.h -# $(Q)mv /tmp/dl2.h $@ include Makefile.ac @@ -241,12 +217,10 @@ fast_deb: clean: $(Q)rm -fr dox build-stamp configure-stamp conf/%gconf.xml debian/files debian/paparazzi-base debian/paparazzi-bin -# $(Q)rm -f $(MESSAGES_H) $(MESSAGES2_H) $(UBX_PROTOCOL_H) $(MTK_PROTOCOL_H) $(DL_PROTOCOL_H) $(Q)find . -mindepth 2 -name Makefile -exec sh -c 'echo "Cleaning {}"; $(MAKE) -C `dirname {}` $@' \; $(Q)find . -name '*~' -exec rm -f {} \; $(Q)rm -f paparazzi sw/simulator/launchsitl $(Q)rm -f $(STATICINCLUDE)/* - $(Q)rm -f $(MESSAGES_XML_CONF) cleanspaces: find ./sw/airborne -name '*.[ch]' -exec sed -i {} -e 's/[ \t]*$$//' \; @@ -263,6 +237,7 @@ dist_clean_irreversible: clean rm -rf conf/maps_data conf/maps.xml rm -rf conf/conf.xml conf/controlpanel.xml rm -rf var + rm -f $(MESSAGES_XML_CONF) ab_clean: find sw/airborne -name '*~' -exec rm -f {} \; @@ -284,16 +259,11 @@ sw/simulator/launchsitl: cat src/$(@F) | sed s#OCAMLRUN#$(OCAMLRUN)# | sed s#OCAML#$(OCAML)# > $@ chmod a+x $@ - - - - gen_messages_macros: $(MACROS_TARGET) -#$(MACROS_TARGET) : $(MESSAGES_XML) $(CONF_XML) tools -$(MACROS_TARGET) : +$(MACROS_TARGET) : $(MESSAGES_XML_CONF) tools @echo BUILD $@ - $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_messages.out $(MESSAGES_XML) $(MACROS_CLASS) $(MACROS_ALIGN) > /tmp/msg.h + $(Q)PAPARAZZI_SRC=$(PAPARAZZI_SRC) PAPARAZZI_HOME=$(PAPARAZZI_HOME) $(TOOLS)/gen_messages.out $(MESSAGES_XML) $(MACROS_CLASS) $(MACROS_CLASS_ID) $(MACROS_ALIGN) > /tmp/msg.h $(Q)mv /tmp/msg.h $@ $(Q)chmod a+r $@ diff --git a/sw/airborne/firmwares/fixedwing/datalink.c b/sw/airborne/firmwares/fixedwing/datalink.c index 553bb828df2..c8dd6d777d7 100644 --- a/sw/airborne/firmwares/fixedwing/datalink.c +++ b/sw/airborne/firmwares/fixedwing/datalink.c @@ -66,8 +66,9 @@ #define MOfCm(_x) (((float)(_x))/100.) -#define SenderIdOfMsg(x) (x[0]) -#define IdOfMsg(x) (x[1]) +#define SenderIdOfMsg(x) (x[1]) +#define IdOfClass(x) (x[2]) +#define IdOfMsg(x) (x[3]) void dl_parse_msg(void) { datalink_time = 0; diff --git a/sw/airborne/firmwares/rotorcraft/datalink.c b/sw/airborne/firmwares/rotorcraft/datalink.c index 931663c4274..e910b45317e 100644 --- a/sw/airborne/firmwares/rotorcraft/datalink.c +++ b/sw/airborne/firmwares/rotorcraft/datalink.c @@ -43,7 +43,7 @@ #include "math/pprz_geodetic_int.h" #include "subsystems/ins.h" -#define IdOfMsg(x) (x[1]) +#define IdOfMsg(x) (x[3]) void dl_parse_msg(void) { diff --git a/sw/airborne/subsystems/datalink/pprz_transport.c b/sw/airborne/subsystems/datalink/pprz_transport.c index 6c234a47dec..ca2f2f9c9fa 100644 --- a/sw/airborne/subsystems/datalink/pprz_transport.c +++ b/sw/airborne/subsystems/datalink/pprz_transport.c @@ -26,6 +26,6 @@ #include "subsystems/datalink/pprz_transport.h" #include "mcu_periph/uart.h" -uint8_t ck_a, ck_b; +uint8_t ck_a, ck_b, down_packet_seq; struct pprz_transport pprz_tp; diff --git a/sw/airborne/subsystems/datalink/transport.h b/sw/airborne/subsystems/datalink/transport.h index 09d42ab980f..441443354ea 100644 --- a/sw/airborne/subsystems/datalink/transport.h +++ b/sw/airborne/subsystems/datalink/transport.h @@ -45,6 +45,8 @@ struct transport { volatile bool_t msg_received; // overrun and error flags uint8_t ovrn, error; + // packet sequence + uint8_t packet_seq; }; /** Transport link macros diff --git a/sw/airborne/subsystems/datalink/xbee.c b/sw/airborne/subsystems/datalink/xbee.c index 9d1c2aedf56..a1e13259959 100644 --- a/sw/airborne/subsystems/datalink/xbee.c +++ b/sw/airborne/subsystems/datalink/xbee.c @@ -32,6 +32,7 @@ uint8_t xbee_cs; uint8_t xbee_rssi; +uint8_t down_packet_seq; struct xbee_transport xbee_tp; diff --git a/sw/lib/ocaml/convert.c b/sw/lib/ocaml/convert.c index 450d764aa46..6496d580aa0 100644 --- a/sw/lib/ocaml/convert.c +++ b/sw/lib/ocaml/convert.c @@ -82,6 +82,13 @@ c_sprint_int32(value s, value index, value x) { return Val_unit; } +value +c_sprint_int64(value s, value index, value x) { + int64_t *p = (int64_t*) (String_val(s) + Int_val(index)); + *p = (int64_t)Int64_val(x); + return Val_unit; +} + value c_int16_of_indexed_bytes(value s, value index) { @@ -105,3 +112,11 @@ c_int32_of_indexed_bytes(value s, value index) return copy_int32(*x); } + +value +c_int64_of_indexed_bytes(value s, value index) +{ + int64_t *x = (int64_t*)(String_val(s) + Int_val(index)); + + return copy_int64(*x); +} diff --git a/sw/tools/gen_messages_xml.ml b/sw/tools/gen_messages_xml.ml index 18b1d57255b..807bbecf3ce 100644 --- a/sw/tools/gen_messages_xml.ml +++ b/sw/tools/gen_messages_xml.ml @@ -231,19 +231,19 @@ module MakeCalls = struct let make_target = "gen_messages_macros" let make_options = "" - let make = fun class_name check_alignment -> + let make = fun class_name class_id check_alignment -> let file = Env.paparazzi_home // "Makefile" in let macros_target = var_include_path // ("messages_"^(String.lowercase class_name)^".h") in - let c = sprintf "make -f %s MACROS_TARGET=%s MACROS_CLASS=%s MACROS_ALIGN=%u %s %s" file macros_target class_name check_alignment make_options make_target in + let c = sprintf "make -f %s MACROS_TARGET=%s MACROS_CLASS=%s MACROS_CLASS_ID=%s MACROS_ALIGN=%u %s %s" file macros_target class_name class_id check_alignment make_options make_target in let returned_code = Sys.command c in if returned_code <> 0 then failwith (sprintf "Make command error (Error code: %d)" returned_code) let generate_macros = fun classes -> List.map (fun clas -> match (clas.g_type) with - | "datalink" -> prerr_endline ("\t Datalink Class -> Generate macros ("^clas.g_name^") [Check Alignment]"); make clas.g_name 1 - | "uplink" -> prerr_endline ("\t Uplink Class -> Generate macros ("^clas.g_name^") [Check Alignment]"); make clas.g_name 1 - | "downlink" -> prerr_endline ("\t Downlink Class -> Generate macros ("^clas.g_name^")"); make clas.g_name 0 + | "datalink" -> prerr_endline ("\t Datalink Class -> Generate macros ("^clas.g_name^") [Check Alignment]"); make clas.g_name clas.g_id 1 + | "uplink" -> prerr_endline ("\t Uplink Class -> Generate macros ("^clas.g_name^") [Check Alignment]"); make clas.g_name clas.g_id 1 + | "downlink" -> prerr_endline ("\t Downlink Class -> Generate macros ("^clas.g_name^")"); make clas.g_name clas.g_id 0 | "ground" -> prerr_endline ("\t Ground Class -> Do nothing ("^clas.g_name^")") | "airborne" -> prerr_endline ("\t Airborne Class -> Generate macros ("^clas.g_name^") ¡¡¡FIXME!!!") | t -> failwith (sprintf "Invalid class type in generated file: %s" t)