Skip to content

Commit

Permalink
[pprzlink] allow to compile paparazzi with PPRZLINK v2
Browse files Browse the repository at this point in the history
To activate, build project with correct option:
 PPRZLINK_LIB_VERSION=2.0 make
(note that 'make clean' is usualy required before that)
  • Loading branch information
gautierhattenberger committed Jun 22, 2017
1 parent 28c3434 commit 889ed46
Show file tree
Hide file tree
Showing 6 changed files with 219 additions and 277 deletions.
13 changes: 9 additions & 4 deletions Makefile
Expand Up @@ -78,6 +78,11 @@ LOGALIZER=sw/logalizer

SUBDIRS = $(PPRZCENTER) $(MISC) $(LOGALIZER) sw/tools

#
# Communication protocol version
#
PPRZLINK_LIB_VERSION ?= 1.0

#
# xml files used as input for header generation
#
Expand All @@ -91,7 +96,7 @@ XSENS_XML = $(CONF)/xsens_MTi-G.xml
# generated header files
#
PPRZLINK_DIR=sw/ext/pprzlink
PPRZLINK_INSTALL=$(PAPARAZZI_HOME)/var/lib/ocaml
PPRZLINK_INSTALL=$(PAPARAZZI_HOME)/var/lib
MESSAGES_INSTALL=$(PAPARAZZI_HOME)/var
UBX_PROTOCOL_H=$(STATICINCLUDE)/ubx_protocol.h
MTK_PROTOCOL_H=$(STATICINCLUDE)/mtk_protocol.h
Expand Down Expand Up @@ -137,7 +142,7 @@ static: cockpit tmtc generators sim_static joystick static_h

libpprzlink:
$(MAKE) -C $(EXT) pprzlink.update
$(Q)Q=$(Q) DESTDIR=$(PPRZLINK_INSTALL) $(MAKE) -C $(PPRZLINK_DIR) libpprzlink-install
$(Q)Q=$(Q) DESTDIR=$(PPRZLINK_INSTALL) PPRZLINK_LIB_VERSION=${PPRZLINK_LIB_VERSION} $(MAKE) -C $(PPRZLINK_DIR) libpprzlink-install

libpprz: libpprzlink _save_build_version
$(MAKE) -C $(LIB)/ocaml
Expand Down Expand Up @@ -191,10 +196,10 @@ pprzlink_protocol :
$(Q)test -d $(STATICLIB) || mkdir -p $(STATICLIB)
ifeq ("$(wildcard $(CUSTOM_MESSAGES_XML))","")
@echo GENERATE $@ with default messages
$(Q)Q=$(Q) MESSAGES_INSTALL=$(MESSAGES_INSTALL) VALIDATE_XML=FALSE $(MAKE) -C $(PPRZLINK_DIR) pymessages
$(Q)Q=$(Q) MESSAGES_INSTALL=$(MESSAGES_INSTALL) VALIDATE_XML=FALSE PPRZLINK_LIB_VERSION=${PPRZLINK_LIB_VERSION} $(MAKE) -C $(PPRZLINK_DIR) pymessages
else
@echo GENERATE $@ with custome messages from $(CUSTOM_MESSAGES_XML)
$(Q)Q=$(Q) MESSAGES_XML=$(CUSTOM_MESSAGES_XML) MESSAGES_INSTALL=$(MESSAGES_INSTALL) $(MAKE) -C $(PPRZLINK_DIR) pymessages
$(Q)Q=$(Q) MESSAGES_XML=$(CUSTOM_MESSAGES_XML) MESSAGES_INSTALL=$(MESSAGES_INSTALL) PPRZLINK_LIB_VERSION=${PPRZLINK_LIB_VERSION} $(MAKE) -C $(PPRZLINK_DIR) pymessages
endif


Expand Down
160 changes: 100 additions & 60 deletions sw/airborne/subsystems/datalink/datalink.c
Expand Up @@ -66,81 +66,121 @@ void dl_parse_msg(struct link_device *dev, struct transport_tx *trans, uint8_t *
}
}
} else {
/* parse telemetry messages coming from ground station */
switch (msg_id) {
case DL_PING: {
pprz_msg_send_PONG(trans, dev, AC_ID);
}
break;

case DL_SETTING : {
if (DL_SETTING_ac_id(buf) != AC_ID) { break; }
uint8_t i = DL_SETTING_index(buf);
float var = DL_SETTING_value(buf);
DlSetting(i, var);
pprz_msg_send_DL_VALUE(trans, dev, AC_ID, &i, &var);
}
break;
#if PPRZLINK_DEFAULT_VER == 2
// Check that the message is really a datalink message
if (pprzlink_get_msg_class_id(buf) == DL_datalink_CLASS_ID) {
#endif
/* parse datalink messages coming from ground station */
switch (msg_id) {
case DL_PING: {
#if PPRZLINK_DEFAULT_VER == 2
// Reply to the sender of the message
struct pprzlink_msg msg;
msg.trans = trans;
msg.dev = dev;
msg.sender_id = AC_ID;
msg.receiver_id = sender_id;
msg.component_id = 0;
pprzlink_msg_send_PONG(&msg);
#else
pprz_msg_send_PONG(trans, dev, AC_ID);
#endif
}
break;

case DL_GET_SETTING : {
if (DL_GET_SETTING_ac_id(buf) != AC_ID) { break; }
uint8_t i = DL_GET_SETTING_index(buf);
float val = settings_get_value(i);
pprz_msg_send_DL_VALUE(trans, dev, AC_ID, &i, &val);
}
break;
case DL_SETTING : {
if (DL_SETTING_ac_id(buf) != AC_ID) { break; }
uint8_t i = DL_SETTING_index(buf);
float var = DL_SETTING_value(buf);
DlSetting(i, var);
#if PPRZLINK_DEFAULT_VER == 2
// Reply to the sender of the message
struct pprzlink_msg msg;
msg.trans = trans;
msg.dev = dev;
msg.sender_id = AC_ID;
msg.receiver_id = sender_id;
msg.component_id = 0;
pprzlink_msg_send_DL_VALUE(&msg, &i, &var);
#else
pprz_msg_send_DL_VALUE(trans, dev, AC_ID, &i, &var);
#endif
}
break;

#ifdef RADIO_CONTROL_TYPE_DATALINK
case DL_RC_3CH :
#ifdef RADIO_CONTROL_DATALINK_LED
LED_TOGGLE(RADIO_CONTROL_DATALINK_LED);
case DL_GET_SETTING : {
if (DL_GET_SETTING_ac_id(buf) != AC_ID) { break; }
uint8_t i = DL_GET_SETTING_index(buf);
float val = settings_get_value(i);
#if PPRZLINK_DEFAULT_VER == 2
// Reply to the sender of the message
struct pprzlink_msg msg;
msg.trans = trans;
msg.dev = dev;
msg.sender_id = AC_ID;
msg.receiver_id = sender_id;
msg.component_id = 0;
pprzlink_msg_send_DL_VALUE(&msg, &i, &val);
#else
pprz_msg_send_DL_VALUE(trans, dev, AC_ID, &i, &val);
#endif
parse_rc_3ch_datalink(
DL_RC_3CH_throttle_mode(buf),
DL_RC_3CH_roll(buf),
DL_RC_3CH_pitch(buf));
}
break;
case DL_RC_4CH :
if (DL_RC_4CH_ac_id(buf) == AC_ID) {

#ifdef RADIO_CONTROL_TYPE_DATALINK
case DL_RC_3CH :
#ifdef RADIO_CONTROL_DATALINK_LED
LED_TOGGLE(RADIO_CONTROL_DATALINK_LED);
#endif
parse_rc_4ch_datalink(DL_RC_4CH_mode(buf),
DL_RC_4CH_throttle(buf),
DL_RC_4CH_roll(buf),
DL_RC_4CH_pitch(buf),
DL_RC_4CH_yaw(buf));
}
break;
parse_rc_3ch_datalink(
DL_RC_3CH_throttle_mode(buf),
DL_RC_3CH_roll(buf),
DL_RC_3CH_pitch(buf));
break;
case DL_RC_4CH :
if (DL_RC_4CH_ac_id(buf) == AC_ID) {
#ifdef RADIO_CONTROL_DATALINK_LED
LED_TOGGLE(RADIO_CONTROL_DATALINK_LED);
#endif
parse_rc_4ch_datalink(DL_RC_4CH_mode(buf),
DL_RC_4CH_throttle(buf),
DL_RC_4CH_roll(buf),
DL_RC_4CH_pitch(buf),
DL_RC_4CH_yaw(buf));
}
break;
#endif // RADIO_CONTROL_TYPE_DATALINK

#if USE_GPS
case DL_GPS_INJECT : {
// Check if the GPS is for this AC
if (DL_GPS_INJECT_ac_id(buf) != AC_ID) { break; }

// GPS parse data
gps_inject_data(
DL_GPS_INJECT_packet_id(buf),
DL_GPS_INJECT_data_length(buf),
DL_GPS_INJECT_data(buf)
);
}
break;
case DL_GPS_INJECT : {
// Check if the GPS is for this AC
if (DL_GPS_INJECT_ac_id(buf) != AC_ID) { break; }

// GPS parse data
gps_inject_data(
DL_GPS_INJECT_packet_id(buf),
DL_GPS_INJECT_data_length(buf),
DL_GPS_INJECT_data(buf)
);
}
break;
#if USE_GPS_UBX_RTCM
case DL_RTCM_INJECT : {
// GPS parse data
gps_inject_data(DL_RTCM_INJECT_packet_id(buf),
DL_RTCM_INJECT_data_length(buf),
DL_RTCM_INJECT_data(buf));
}
break;
case DL_RTCM_INJECT : {
// GPS parse data
gps_inject_data(DL_RTCM_INJECT_packet_id(buf),
DL_RTCM_INJECT_data_length(buf),
DL_RTCM_INJECT_data(buf));
}
break;
#endif // USE_GPS_UBX_RTCM
#endif // USE_GPS

default:
break;
default:
break;
}
#if PPRZLINK_DEFAULT_VER == 2
}
#endif
}
/* Parse firmware specific datalink */
firmware_parse_msg(dev, trans, buf);
Expand Down
4 changes: 0 additions & 4 deletions sw/airborne/subsystems/datalink/datalink.h
Expand Up @@ -36,10 +36,6 @@
#include "std.h"
#include "pprzlink/dl_protocol.h"

/* Message id helpers */
#define SenderIdOfPprzMsg(x) (x[0])
#define IdOfPprzMsg(x) (x[1])

/** Datalink kinds */
#define PPRZ 1
#define XBEE 2
Expand Down
2 changes: 1 addition & 1 deletion sw/ext/pprzlink
Submodule pprzlink updated 67 files
+1 −0 .gitignore
+16 −27 Makefile
+0 −0 lib/common/C/print_utils.h
+123 −0 lib/common/ocaml/Makefile
+0 −0 lib/common/ocaml/compatPL.ml
+0 −0 lib/common/ocaml/compatPL.mli
+0 −0 lib/common/ocaml/convert.c
+0 −0 lib/common/ocaml/debugPL.ml
+0 −0 lib/common/ocaml/debugPL.mli
+0 −0 lib/common/ocaml/pprz_transport.ml
+0 −0 lib/common/ocaml/pprz_transport.mli
+0 −0 lib/common/ocaml/pprzlog_transport.ml
+0 −0 lib/common/ocaml/pprzlog_transport.mli
+0 −0 lib/common/ocaml/protocol.ml
+0 −0 lib/common/ocaml/protocol.mli
+0 −0 lib/common/ocaml/xbee_transport.ml
+0 −0 lib/common/ocaml/xbee_transport.mli
+33 −0 lib/v1.0/C/Makefile
+2 −90 lib/v1.0/ocaml/Makefile
+1 −0 lib/v1.0/ocaml/common
+34 −0 lib/v1.0/python/Makefile
+16 −7 lib/v1.0/python/pprzlink/ivy.py
+17 −3 lib/v1.0/python/pprzlink/message.py
+12 −1 lib/v1.0/python/pprzlink/messages_xml_map.py
+2 −1 lib/v1.0/python/pprzlink/udp.py
+33 −0 lib/v2.0/C/Makefile
+207 −0 lib/v2.0/C/ivy_transport.c
+59 −0 lib/v2.0/C/ivy_transport.h
+203 −0 lib/v2.0/C/pprz_transport.c
+87 −0 lib/v2.0/C/pprz_transport.h
+128 −0 lib/v2.0/C/pprzlog_transport.c
+57 −0 lib/v2.0/C/pprzlog_transport.h
+87 −0 lib/v2.0/C/short_transport.c
+50 −0 lib/v2.0/C/short_transport.h
+411 −0 lib/v2.0/C/xbee_transport.c
+73 −0 lib/v2.0/C/xbee_transport.h
+8 −0 lib/v2.0/ocaml/META
+23 −0 lib/v2.0/ocaml/Makefile
+12 −0 lib/v2.0/ocaml/_tags
+1 −0 lib/v2.0/ocaml/common
+7 −0 lib/v2.0/ocaml/lib-pprzlink.mllib
+1 −0 lib/v2.0/ocaml/libpprzlink_stub.clib
+36 −0 lib/v2.0/ocaml/myocamlbuild.ml
+806 −0 lib/v2.0/ocaml/pprzLink.ml
+188 −0 lib/v2.0/ocaml/pprzLink.mli
+33 −0 lib/v2.0/python/Makefile
+26 −0 lib/v2.0/python/README.md
+0 −0 lib/v2.0/python/pprzlink/__init__.py
+210 −0 lib/v2.0/python/pprzlink/ivy.py
+255 −0 lib/v2.0/python/pprzlink/message.py
+213 −0 lib/v2.0/python/pprzlink/messages_xml_map.py
+113 −0 lib/v2.0/python/pprzlink/pprz_transport.py
+122 −0 lib/v2.0/python/pprzlink/serial.py
+150 −0 lib/v2.0/python/pprzlink/udp.py
+1 −0 message_definitions/v1.0/messages.dtd
+4 −4 message_definitions/v1.0/messages.xml
+91 −0 message_definitions/v1.0/pprz_schema.xsd
+6 −0 tools/generator/C/include_v1.0/pprzlink_utils.h
+74 −0 tools/generator/C/include_v2.0/pprzlink_device.h
+112 −0 tools/generator/C/include_v2.0/pprzlink_message.h
+112 −0 tools/generator/C/include_v2.0/pprzlink_transport.h
+184 −0 tools/generator/C/include_v2.0/pprzlink_utils.h
+15 −6 tools/generator/gen_messages.py
+0 −0 tools/generator/gen_messages_v1_0_c.py
+267 −0 tools/generator/gen_messages_v2_0_c.py
+18 −0 tools/generator/pprz_parse.py
+1 −0 tools/generator/pprz_schema.xsd

0 comments on commit 889ed46

Please sign in to comment.